vreinterpret NEON Внутренняя проблема - PullRequest
2 голосов
/ 22 ноября 2010

Хорошо, я бился головой в течение последнего дня, и я уверен, что это что-то простое, так что здесь. Почему этот код не работает? Я использую Xcode 3.2.5 и LLVM, и когда я пытаюсь скомпилировать что-то вроде этого:

uint16x8_t          testUnsigned = {1,2,3,4,5,6,7,8};
int16x8_t           testSigned;

testSigned = vreinterpretq_s16_u16(testUnsigned);

Я получаю сообщение об ошибке: «Назначение int16x8_t из несовместимого типа int» все мои другие встроенные функции работают нормально, но по какой-то причине я не могу интерпретировать вектор. Есть идеи? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2011

Как указывает Хироши, этот конкретный вызов, похоже, содержит ошибку. Тем не менее, так как это просто кастинг под капотом, вы можете использовать любой другой тип без каких-либо штрафов за время выполнения. Например, я проверил, и это работает:

testSigned = vreinterpretq_s16_f32(vreinterpretq_f32_u16(testUnsigned));
0 голосов
/ 10 декабря 2010

/ Разработчик / Платформы / iPhoneOS.platform / Разработчик / usr / llvm-gcc-4.2 / lib / gcc / arm-apple-darwin10 / 4.2.1 / include / arm_neon_gcc.h: 6947

#define vreinterpretq_s16_u16(__a) \
  (int16x8_t)__builtin_neon_vreinterpretv8hiv8hi ((int16x8_t) __a)

Кажется, что тип аргумента - это подписанное int.Это пахнет как ошибка.Я не уверен, но вы должны попробовать

testSigned = vreinterpretq_s16_u16((int16x8_t)testUnsigned);
...