2

好的,我在最后一天一直在敲我的头,我确信这很简单,所以就这样吧。为什么这段代码不起作用?我正在使用 Xcode 3.2.5 和 LLVM,当我尝试编译这样的东西时:

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

testSigned = vreinterpretq_s16_u16(testUnsigned);

我收到错误消息:“从不兼容的类型'int'分配给'int16x8_t'”我所有其他内在函数都可以正常工作,但由于某种原因我无法重新解释向量。有任何想法吗?提前致谢。

4

2 回答 2

0

/Developer/Platforms/iPhoneOS.platform/Developer/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);
于 2010-12-10T14:13:55.143 回答
0

正如 Hiroshi 指出的那样,这个特定的调用似乎存在一个错误。但是,由于它只是在幕后进行转换,因此您可以通过任何其他类型进行,而不会受到任何运行时损失。例如,我测试过,这是有效的:

testSigned = vreinterpretq_s16_f32(vreinterpretq_f32_u16(testUnsigned));
于 2011-04-24T05:38:10.847 回答