Ошибка компилятора SSE2
-
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
Вы уверены, что не пропустили там ни строчки?
Редактировать:На самом деле я вполне уверен, что вы это сделали, потому что я никогда не слышал о мулуде.На самом деле я заменил его на mcow (которого, как я ЗНАЮ, не существует) и получил ту же ошибку.