Pergunta

Eu estou tentando invadir SSE2 e tentou o seguinte exemplo de programa :

#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 obter os seguintes avisos e erros:

aviso C4405: 'XMM0': identificador é palavra reservada

Erro C2400: inline assembler erro de sintaxe em 'opcode'; encontrado 'XMM0'

Eu tentei procurar por possíveis causas, mas a maioria das pessoas que compartilham minhas questões usadas Visual C ++ 6.0, enquanto eu uso o Visual C ++ 8.0.

Todas as sugestões?

Foi útil?

Solução

Bem, o erro desaparece se alterar

muludq xmm0, xmm1

para

pmuludq xmm0, xmm1

Você tem certeza que não apenas perder um p lá?

Edit: Na verdade im muito definitiva que você fez, porque eu nunca ouvi falar de muludq. Na verdade eu substituí-lo com mcow (que eu sei que não existe) e tenho o mesmo erro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top