0
Ich studiere SIMD (SSE) Programmierung in Linux x64 .. Ich möchte ein Array kurzen Typ zu den anderen kurzen Array-Typ var zuweisen. Aber ausgeführtes Ergebnis ist falsch hier ist meine Quelle. was ist das Problem?gcc inline simd Montagefehler: kurze Art movdqu Anweisung
#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;
}
Ergebnis ist:
sArrayB : -13600, -24676, 32767
Während mit asm experimentieren interessant ist, mit intrinsics (wie Paul suggeriert) ist mit ziemlicher Sicherheit der bessere Weg. Aber wenn du asm verwenden musst, ändere dein '" x "' in '" m "'. –
@DavidWohlverld: Und '" = g "' zu '" = x "', während du schon dabei bist. – EOF