Question

Je suis en train de percer dans SSE2 et essayé le exemple programme :

#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 obtenir les avertissements et les erreurs suivantes:

  

C4405 d'avertissement: 'xmm0': identificateur est mot réservé

     

C2400 d'erreur: erreur de syntaxe ligne assembleur dans 'opcode'; trouvé 'xmm0'

J'ai essayé de chercher les causes possibles, mais la plupart des gens qui partagent mes questions utilisées Visual C ++ 6.0, alors que j'utilise Visual C ++ 8.0.

Toutes les suggestions?

Était-ce utile?

La solution

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 il?

Edit: En fait im pretty vous précis fait parce que je ne l'ai jamais entendu parler de muludq. En fait, je l'ai remplacé par mcow (que je ne SAIS existe pas) et a obtenu la même erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top