代码之家  ›  专栏  ›  技术社区  ›  Jacob

SSE2编译器错误

  •  2
  • Jacob  · 技术社区  · 15 年前

    我试图闯入SSE2并尝试以下方法 example program :

    #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,而我使用Visual C++ 8。

    有什么建议吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Goz    15 年前

    如果你改变,错误就会消失

    muludq xmm0, xmm1
    

    pmuludq xmm0, xmm1
    

    你确定你不只是错过了一个P吗?

    编辑:事实上,我非常肯定你做了,因为我从来没有听说过穆鲁德克。事实上,我用mcow(我知道不存在)替换了它,得到了相同的错误。