2010-11-22 19 views
2

Okay, ich habe meinen Kopf für den letzten Tag geschlagen und ich bin sicher, es ist etwas Einfaches, also hier geht. Warum funktioniert dieser Code nicht? Ich verwende Xcode 3.2.5 und LLVM und wenn ich versuche etwas zu kompilieren:vreinterpret NEON Intrinsics Problem

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

testSigned = vreinterpretq_s16_u16(testUnsigned); 

ich den Fehler: „Zuordnen zu‚int16x8_t‘von nicht kompatiblen Typ‚int‘“ alle meine anderen Spezifika arbeiten gut, aber aus irgendeinem Grund kann ich einen Vektor nicht neu interpretieren. Irgendwelche Ideen? Danke im Voraus.

Antwort

0

versuchen Wie Hiroshi weist darauf hin, scheint es ein Fehler mit diesem Aufruf zu sein. Da es jedoch nur unter die Haube gegossen wird, können Sie jeden anderen Typ verwenden, ohne Laufzeiteinbußen. Zum Beispiel habe ich getestet, und das funktioniert:

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) 

Das scheint der Typ des Arguments ist ein signed int. Es riecht wie ein Käfer. Ich bin nicht sicher, aber Sie sollten

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

Solche c-Style-Casts sind vom Compiler leider verboten. –