10

2 つの x86 32 ビット レジスタを 1 つの 128 ビット xmm レジスタに格納するより高速な方法はありますか?

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

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

4

2 に答える 2

16

SSE 4.1では、 movd xmm0, eax/pinsrd xmm0, edx, 1を使用して 2 つの命令で実行できます。

古い CPU の場合、2 xmovdを使用punpckldqして、合計 3 つの命令を使用できます。

movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
于 2010-02-09T19:31:08.877 に答える
1

MMX についてはよくわかりませんが、おそらく PACKSSDW 命令が必要でしょう。

PACKSSDW 命令は、ソース オペランドの 2 つのダブル ワードとデスティネーション オペランドの 2 つのダブル ワードを取得し、これらをサチュレーションによって 4 つの符号付きワードに変換します。命令は、これらの 4 つのワードをまとめてパックし、結果をデスティネーション MMX レジスタに格納します。

( http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.htmlから)

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

于 2010-02-09T19:21:51.247 に答える