2

私はこのコードスニペットを持っています:

@combinerows:
    mov esi,eax
    and edi,Row1Mask
    and ebx,Row2Mask
    or ebx,edi
    //NewQ:= (Row1 and Row1Mask) or (Row2 and Row2Mask);

  //Result:= NewQ xor q;
  PUNPCKDQ mm4,mm5   <-- I get an error here
  //mov eax,[eax].q
  movd eax,mm4

  //q:= NewQ;
  mov [esi].q,ebx
  xor eax,ebx  //Return difference.

次のエラーが表示されます。

[パスカル エラー] SDIMAIN.pas(718): E2003 宣言されていない識別子: 'PUNPCKDQ'

それとも、Delphi 2007 は MMX/SSE 命令の完全なセットをサポートしていませんか?

4

2 に答える 2

4

簡単なGoogleはPUNPCKLDQ、PUNPCKDQではなく情報を提供します。

D2007は、を受け入れPUNPCKLDQ
、さらに優れた方法でサポートしPUNPCKHDQます。これにより、高次のdwordを低のdwordに転送して、汎用レジスタにロードできます。

于 2011-06-20T21:51:12.323 に答える
3

Delphi 2007 は、MMX および SSE 命令セットをサポートしています。確かに、Delphi 2010 と XE は SSE4.2 命令セットまでサポートしています (ただし、今のところ AVX はサポートしていません)。

PUNPCKDQしかし、Delphi があなたの " " 命令について文句を言うのは正しいことです。インテル® 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル(特に第 2A 巻と第 2B 巻が該当します) を検索しても、その名前の命令は見つかりません。つまり、それはあなたの間違いであり、Delphi がこの命令をサポートしていないからではありません。

于 2011-06-21T08:48:01.553 に答える