2009-12-09 22 views
2

Je suis en train de percer dans SSE2 et essayé ce qui suit example program:SSE2 d'erreur du compilateur

#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; 
} 

et recevez les avertissements et les erreurs suivantes:

garde C4405: 'xmm0': identificateur est mot réservé

erreur C2400: erreur de syntaxe de l'assembleur en ligne dans 'opcode'; 'xmm0'

J'ai essayé de rechercher des causes possibles, mais la plupart des gens qui partagent mes problèmes utilisaient Visual C++ 6.0, alors que j'utilise Visual C++ 8.0.

Des suggestions?

+0

À l'avenir, n'oubliez pas de mettre la ligne où l'erreur se produit! Heureusement, il était assez facile de recréer à partir d'un copier-coller ... – Goz

+0

Merci! Gardera cela à l'esprit – Jacob

Répondre

3

Eh bien, l'erreur disparaît si vous changez

muludq xmm0, xmm1 

à

pmuludq xmm0, xmm1 

Êtes-vous sûr que vous n'avez pas seulement manquer un p là?

Edit: En fait, je suis assez précis parce que je n'ai jamais entendu parler de muludq. En fait, je l'ai remplacé par mcow (que je sais n'existe pas) et j'ai eu la même erreur.

+0

Vous avez complètement raison - je suppose que l'auteur de ce tutoriel a raté le 'p' bien qu'il n'ait pas oublié dans une instruction précédente, merci! – Jacob