2010-11-22 53 views
2

好吧,我一直在敲我的頭,最後一天,我確信這是一件簡單的事情。爲什麼這個代碼不起作用?我使用的Xcode 3.2.5和LLVM,當我嘗試編譯是這樣的:vreinterpret NEON Intrinsics問題

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

testSigned = vreinterpretq_s16_u16(testUnsigned); 

我得到的錯誤:「分配給來自不兼容的類型‘int16x8_t’‘詮釋’」我所有的其他工作的內在函數很好,但由於某種原因,我無法重新解釋矢量。有任何想法嗎?提前致謝。

回答

0

由於浩指出的,似乎與這個特定呼叫的錯誤。但是,由於它只是在引擎蓋下進行投射,所以您可以通過任何其他類型進行投射,而不會有任何運行時間損失。例如,我測試了一下,這個工程:

testSigned = vreinterpretq_s16_f32(vreinterpretq_f32_u16(testUnsigned)); 
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); 
+0

這樣的c風格轉換被編譯器禁止,唉。 – 2011-04-24 05:34:59