2011-06-20 8 views
2

私はこのコードのスニペットを持っている:DelphiはすべてのMMX/SSE命令をサポートしていますか?

@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. 

は、私はこのエラーを取得する:

[Pascal Error] SDIMAIN.pas(718): E2003 Undeclared identifier: 'PUNPCKDQ'

私が何か間違ったことをやっている、またはデルファイ2007は、MMX/SSE命令のフルセットをサポートしていませんか?

+3

Delphiで認識されないニーモニックの場合は、 'DB'コマンドを使用して生の命令バイトを挿入できます。 –

+0

私はそのような指示をサポートしているデルファイを知らなかった。サポートはいつ追加されましたか? –

+0

@David:彼らはすでにD7にいたと確信しています。 – Giel

答えて

3

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

しかし、Intel® 64 and IA-32 Architectures Software Developer’s Manual(特にボリューム2Aと2Bは関連性があります)を検索した場合、その名前では命令が見つかりません。「PUNPCKDQ」命令に不満をお持ちください。つまり、あなたの間違いであり、デルファイのこの指示に対する支持の欠如ではありません。

+0

ええ、今、私はこの物を磨くためにMMXガイドを読んでいましたが、間違ったキーワードでいっぱいです。とてもうるさい。 – Johan

4

速いGoogleでは、PUNPCKDQではなくPUNPCKLDQに関する情報を提供しています。

D2007はPUNPCKLDQ
を受け入れ、より良い、それはまた、あなたが汎用レジスタにロードするためにあなたを可能にする低DWORDに上位ダブルワードを転送することができますされ、PUNPCKHDQをサポートしています。

+0

私の前のコメントを気にしないで、この命令は2つの**低**注文のdwordを入れ、それらをスクラブルします。私は高次のdwordsをスクランブルして、その「隠れた」高dwordを得る必要があります。 PUNPCKHDQが答えです。 – Johan

+1

Johan、本当に、DelphiがPUNPCKDQをサポートしていない理由は、PUNPCKHDQまたはPUNPCKLDQを代わりに使用する必要があるということです。それらはオペランドに異なる効果を持つ3つの異なる命令です。私はこれがどのようにあなたが尋ねた質問に答えるかは分かりません。 –

+0

@Rob、よく** **質問に答えました。「PUNPCKHDQ」のコードはきれいに働きました。たぶん私は間違った指示を見て、その場合はお詫びします。私は人々がPUNPCKHDQ/... L ..を使うべきだと言っているわけではありません。 – Johan

関連する問題