0
J'étudie la programmation SIMD (SSE) sous Linux x64 .. Je veux assigner un type de tableau court à l'autre type de tableau court var. Mais le résultat est erroné voici ma source. quel est le problème?gcc inline simd erreur d'assemblage: type movdqu instruction courte
#include <stdio.h>
#include <emmintrin.h>
int main(int argc, char* argv[])
{
short sArrayA[8] = {1,2,3,4,5,6,7,8};
short sArrayB[8] = {0,0,0,0,0,0,0,0};
__asm__ __volatile__(
"movdqu %1, %%xmm0\n\t"
"movdqu %%xmm0, %0"
:"=g"(sArrayB)
:"x"(sArrayA)
:"%xmm0"
);
printf("sArrayB : %d, %d, %d\n", sArrayB[0], sArrayB[1], sArrayB[2]);
return 0;
}
résultat est:
sArrayB : -13600, -24676, 32767
En expérimentant avec asm est intéressant, en utilisant intrinsèques (comme Paul suggère) est presque certainement le meilleur moyen d'y aller. Mais si vous devez utiliser asm, changez votre '' x "' '" m "'. –
@DavidWohlferd: Et '' = g "' '' '' = x "', pendant que vous y êtes. – EOF