2

我试图闯入 SSE2 并尝试了以下示例程序

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

并得到以下警告和错误:

警告 C4405:“xmm0”:标识符是保留字

错误 C2400:“操作码”中的内联汇编语法错误;找到'xmm0'

我尝试寻找可能的原因,但大多数分享我的问题的人使用 Visual C++ 6.0,而我使用 Visual C++ 8.0。

有什么建议么?

4

1 回答 1

3

如果你改变,错误就会消失

muludq xmm0, xmm1

pmuludq xmm0, xmm1

你确定你没有错过那里的 ap 吗?

编辑:事实上我很确定你做到了,因为我从来没有听说过 muludq。事实上,我用 mcow 替换了它(我知道它不存在)并得到了同样的错误。

于 2009-12-09T16:21:36.500 回答