Errore del compilatore SSE2
-
18-09-2019 - |
Domanda
Sto cercando di entrare in SSE2 e ho provato quanto segue programma di esempio:
#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;
}
E ricevi i seguenti avvisi ed errori:
avviso C4405:'xmm0':l'identificatore è una parola riservata
errore C2400:errore di sintassi dell'assembler inline in 'opcode';trovato 'xmm0'
Ho provato a cercare le possibili cause, ma la maggior parte delle persone che condividono i miei problemi utilizzavano Visual C++ 6.0, mentre io utilizzo Visual C++ 8.0.
Eventuali suggerimenti?
Soluzione
Bene, l'errore scompare se cambi
muludq xmm0, xmm1
A
pmuludq xmm0, xmm1
Sei sicuro di non aver perso solo una p lì?
Modificare:In effetti sono abbastanza sicuro che tu l'abbia fatto perché non ho mai sentito parlare di muludq.Infatti l'ho sostituito con mcow (che SO non esiste) e ho ricevuto lo stesso errore.