SSE2 Compilerfehler
-
18-09-2019 - |
Frage
Ich versuche, in SSE2 zu brechen und versuchte, das folgende Beispielprogramm :
#include "stdafx.h"
#include <emmintrin.h>
int main(int argc, char* argv[])
{
__declspec(align(16)) long mul; // multiply variable
__declspec(align(16)) int t1[100000]; // temporary variable
__declspec(align(16)) int t2[100000]; // temporary variable
__m128i mul1, mul2;
for (int j = 0; j < 100000; j++)
{
t1[j] = j;
t2[j] = j+1;
} // set temporary variables to random values
_asm
{
mov eax, 0
label: movdqa xmm0, xmmword ptr [t1+eax]
movdqa xmm1, xmmword ptr [t2+eax]
pmuludq xmm0, xmm1
movdqa mul1, xmm0
movdqa xmm0, xmmword ptr [t1+eax]
pshufd xmm0, xmm0, 05fh
pshufd xmm1, xmm1, 05fh
muludq xmm0, xmm1
movdqa mul2, xmm0
add eax, 16
cmp eax, 100000
jnge label
}
return 0;
}
Und erhalten Sie die folgenden Warnungen und Fehler:
Warnung C4405: 'xmm0': Bezeichner reserviertes Wort
Fehler C2400: Inline-Assembler Syntaxfehler in 'opcode'; gefunden 'xmm0'
Ich habe versucht, nach möglichen Ursachen suchen, aber die meisten der Menschen, die meine Probleme verwendet Visual C ++ 6.0 zu teilen, während ich von Visual C ++ verwenden 8.0.
Irgendwelche Vorschläge?
Lösung
Nun, der Fehler geht weg, wenn Sie ändern
muludq xmm0, xmm1
pmuludq xmm0, xmm1
Sind Sie sicher, dass Sie nicht nur ein p verpassen da?
Edit: In der Tat im ziemlich definitive Sie tat, weil ich noch nie muludq gehört habe. In der Tat ersetzt ich es mit mcow (was ich weiß, ist nicht vorhanden) und bekam den gleichen Fehler.