Я пытаюсь перекрестно скомпилировать некоторый код с datatypes NEON с g ++ 4.9.1, но я продолжаю сбой компилятора. Не разрешен ли этот тип операции или это проблема с компилятором? Моя ОС Ubuntu 12.04, и я использую нарукавную GCC "GCC версии 4.9.1 (Ubuntu/Linaro 4.9.1-10ubuntu2)"Сбой компилятора с ARM NEON datatypes
Имя файла: crash.cpp
#include <arm_neon.h>
void crash(
const unsigned short * in,
unsigned short * out,
const int shift)
{
for(int x=0; x<200; x+=8) {
const uint16x8_t inValue = vld1q_u16(&in[x]);
const uint16x8_t normalizedValue = inValue >> shift;
vst1q_u16(&out[x], normalizedValue);
}
}
опции компиляции:
arm-linux-gnueabihf-g++-4.9 -mfpu=neon-vfpv4 -c crash.cpp -o crash.o
Выход:
crash.cpp: In function ‘void crash(const short unsigned int*, short unsigned int*, int)’:
crash.cpp:11:51: internal compiler error: in copy_to_mode_reg, at explow.c:654
const uint16x8_t normalizedValue = inValue >> shift;
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
Preprocessed source stored into /tmp/ccfz4aZr.out file, please attach this to your bugreport.
Этот код компилируется нормально, если я заменить "беззнаковое короткое" с "без знака Int", то «uint16x8_ t "с" uint32x4_t "и суффиксами" _u16 "с суффиксами" _u32 ".
Предоставляет ли GCC автоматические перегруженные операторы для встроенных типов? Я бы подумал, что вы должны делать все с явным intrisics ('vshl' в этом случае). – Notlikethat
Автоматический сдвиг работает с обычным ints, хотя он падает с 16-битным коротким ints. – Pete
Вы создали отчет об ошибке в GCC? – auselen