質問

1つの128ビットXMMレジスタに2つのX86 32ビットレジスタを保存するより速い方法はありますか?

  movd  xmm0, edx
  movd  xmm1, eax
  pshufd xmm0, xmm0, $1
  por   xmm0, xmm1 

したがって、EAXが0x12345678で、EDXが0x87654321の場合、XMM0の結果は0x8765432112345678でなければなりません。

ありがとう

役に立ちましたか?

解決

SSE 4.1で使用できます movd xmm0, eax / pinsrd xmm0, edx, 1 そして、2つの指示でそれを行います。

古いCPUの場合、2 xを使用できます movd その後 punpckldq 合計3つの指示について:

movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1

他のヒント

MMXについてはあまり知りませんが、おそらくPacksSDWの命令が必要です。

PacksSDW命令は、ソースオペランドに2つの二重の単語を取り、宛先オペランドの2つのダブルワードを撮影し、飽和してこれらを4つの署名された単語に変換します。命令はこれらの4つの単語を一緒に詰め込み、結果を宛先MMXレジスタに保存します。

(から http://webster.cs.ucr.edu/aoa/windows/html/themmxinstructionseta2.html)

編集:私はそれらがSSEレジスタであることに気付きました。しかたがない。

編集:今から黙ってしまいます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top