2009-12-09 4 views
2

Я пытаюсь проникнуть в SSE2 и попытался следующие example program: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: ошибка синтаксиса встроенного ассемблера в 'opcode'; found 'xmm0'

Я попытался найти возможные причины, но большинство людей, которые разделяют мои проблемы, использовали Visual C++ 6.0, тогда как я использую Visual C++ 8.0.

Любые предложения?

+0

В будущем, пожалуйста, не забудьте поставить строку на ошибку! К счастью, это было довольно легко воссоздать из выреза и вставки ... – Goz

+0

Спасибо! Будем держать это в виду – Jacob

ответ

3

Ну ошибка исчезнет, ​​если вы меняете

muludq xmm0, xmm1 

в

pmuludq xmm0, xmm1 

Вы уверены, что вы не просто пропустите р там?

Редактировать: На самом деле я довольно определенно сделал, потому что я никогда не слышал о мулудке. На самом деле я заменил его mcow (которого я не знаю) и получил ту же ошибку.

+0

Вы совершенно правы - я думаю, автор этого учебника пропустил «p», хотя он не забыл в предыдущей инструкции, спасибо! – Jacob