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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top