2つのX86 32ビットレジスタを128ビットXMMレジスタに保存する
質問
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レジスタであることに気付きました。しかたがない。
編集:今から黙ってしまいます。
所属していません StackOverflow