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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top