将两个x86 32位寄存器存储到128位xmm寄存器中

时间:2010-02-09 19:04:58

标签: assembly x86 simd sse

有没有更快的方法在一个128位xmm寄存器中存储两个x86 32位寄存器?

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

因此,如果EAX为0x12345678且EDX为0x87654321,则xmm0中的结果必须为0x8765432112345678。

由于

2 个答案:

答案 0 :(得分:15)

使用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

答案 1 :(得分:1)

我对MMX知之甚少,但也许你想要PACKSSDW指令。

  

PACKSSDW指令取两者   源操作数和。中的双字   这两个双字   目标操作数并转换它们   通过饱和来签署四个单词。   指令打包这四个单词   在一起并将结果存储在   目的地MMX注册。

(来自http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html

编辑:我刚才意识到那些是SSE寄存器。哦,好吧。

编辑:我现在要闭嘴了。