-
18-09-2019 - |
题
我试图闯入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的人。
任何建议?
解决方案
好了错误消失,如果你改变
muludq xmm0, xmm1
到
pmuludq xmm0, xmm1
你确定你不只是错过的p呢?
编辑:其实即时通讯相当肯定你做了,因为我从来没有听说过muludq的。事实上,我与mcow代替它(我知道不存在),并得到了同样的错误。
不隶属于 StackOverflow