有没有更快的方法在一个128位xmm寄存器中存储两个x86 32位寄存器?
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
因此,如果EAX为0x12345678且EDX为0x87654321,则xmm0中的结果必须为0x8765432112345678。
由于
答案 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寄存器。哦,好吧。
编辑:我现在要闭嘴了。