我试图闯入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”
我尝试寻找可能的原因,但是大多数分享我的问题的人都使用VisualC++ 6.0,而我使用的是VisualVISUAL8.0。
有什么建议吗?
发布于 2009-12-09 16:21:36
如果你改变了,错误就消失了
muludq xmm0, xmm1至
pmuludq xmm0, xmm1你确定你没有错过一次吗?
编辑:事实上,我很确定你是这么做的,因为我从来没有听说过muludq。实际上,我将它替换为and (我知道它不存在),并得到了相同的错误。
https://stackoverflow.com/questions/1874882
复制相似问题