我正在尝试闯入SSE2并尝试了以下example program :
#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;
}
并收到以下警告和错误:
warning C4405: 'xmm0' : identifier is reserved word
error C2400: inline assembler syntax error in 'opcode'; found 'xmm0'
我尝试寻找可能的原因,但大多数分享我的问题的人都使用 Visual C++ 6.0,而我使用 Visual C++ 8.0。
有什么建议吗?
最佳答案
如果你进行更改,错误就会消失
muludq xmm0, xmm1
至
pmuludq xmm0, xmm1
你确定你没有漏掉一个p吗?
编辑:事实上,我很确定你这么做了,因为我从未听说过 muludq。事实上,我用 mcow 替换了它(我知道它不存在)并得到了相同的错误。
关于c++ - SSE2编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1874882/