2

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' のインライン アセンブラー構文エラー。「xmm0」が見つかりました

考えられる原因を探してみましたが、問題を共有しているほとんどの人は Visual C++ 6.0 を使用していましたが、私は Visual C++ 8.0 を使用していました。

助言がありますか?

4

1 に答える 1

3

変更するとエラーは消えます

muludq xmm0, xmm1

pmuludq xmm0, xmm1

そこにapを逃しただけではありませんか?

編集:実際、私はmuludqについて聞いたことがないので、あなたがしたことはかなり明確です。実際、私はそれを mcow (存在しないことを知っています) に置き換え、同じエラーが発生しました。

于 2009-12-09T16:21:36.500 に答える