2009-12-09 75 views
2

我試圖闖入SSE2和嘗試了以下example programSSE2編譯器錯誤

#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。

有什麼建議嗎?

+0

將來請記得把錯誤發生在線上!幸運的是,通過剪切和粘貼重新創建相當容易... – Goz 2009-12-09 16:24:40

+0

謝謝!請記住這一點 – Jacob 2009-12-09 16:50:15

回答

3

那麼錯誤消失,如果你改變

muludq xmm0, xmm1 

pmuludq xmm0, xmm1 

你確定你不只是錯過的p呢?

編輯:其實我很確定你做了,因爲我從來沒有聽說過muludq。事實上,我用mcow替換它(我知道它不存在)並得到了相同的錯誤。

+0

你完全正確 - 我猜這篇教程的作者錯過了'p',儘管他在前面的指令中沒有忘記,謝謝! – Jacob 2009-12-09 16:49:45