2010-11-22 32 views
2

さて、私は最後の日に頭を叩いていました。このコードはなぜ機能しないのですか?私はXcodeの3.2.5とLLVMを使用していると私はこのような何かコンパイルしようとすると:vreinterpret NEON組み込み関数の問題

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

testSigned = vreinterpretq_s16_u16(testUnsigned); 

を私はエラーを取得する:すべての私の他の組み込み関数が動作し、「互換性のない型から 『int16x8_t』 『INT』に割り当て」何かの理由で私はベクトルを再解釈できません。何か案は?前もって感謝します。

答えて

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) 

これは、引数の型がsigned intであるようです。それはバグのようなにおいがする。 私はわからないんだけど、ヒロシが指摘するように、あなたが

testSigned = vreinterpretq_s16_u16((int16x8_t)testUnsigned); 
+0

このようなCスタイルのキャストは、コンパイラによって禁止されています。 –