uint8_t* dataPtr;
uint8x8x4_t dataVec;
__asm__ __volatile__("vldmia %1, %h0" : "=w"(dataVec) : "r"(dataPtr));
code assembleur en ligne Au-dessus ARM fonctionne très bien lorsqu'il est compilé avec Android NDK en utilisant GCC
pour armeabi-v7a
ABI toolchain. Cependant, je reçois l'erreur suivante du compilateur lorsque je passe à Clang
ARM Clang: ne peut pas allouer registre de sortie pour la contrainte 'w'
error: couldn't allocate output register for constraint 'w'
Selon LLVM docs, la contrainte « w » peut être utilisé pour enregistrer SIMD sur la cible ARM.
Ai-je raté quelque chose? Quelqu'un at-il rencontré ce problème? Est-ce un bug dans LLVM?
Merci
Sons comme vous ne l'avez pas dit gcc pour permettre SIMD extensions. En outre, vous pouvez envisager d'utiliser des builtins au lieu d'asm. –
@DavidWohlferd: Je passe le drapeau du compilateur LOCAL_CFLAGS + = -mfpu = neon. J'ai plus de code NEON intrinsèque et d'assemblage qui compile bien. C'est comme ça que je sais que l'optimisation NEON est activée. –