将两个x86 32位寄存器存储到128位xmm寄存器中
有没有更快的方法将两个 x86 32 位寄存器存储在一个 128 位 xmm 寄存器中?
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
因此,如果 EAX 为 0x12345678
并且 EDX 为 0x87654321
,则 xmm0 中的结果必须为 0x8765432112345678
。
Is there any faster method to store two x86 32 bit registers in one 128 bit xmm register?
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
So if EAX is 0x12345678
and EDX is 0x87654321
, the result in xmm0 must be 0x8765432112345678
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 SSE 4.1,您可以使用
movd xmm0, eax
/pinsrd xmm0, edx, 1
并在 2 条指令中完成。对于较旧的 CPU,您可以使用 2 x
movd
,然后使用punpckldq
总共 3 条指令:With SSE 4.1 you can use
movd xmm0, eax
/pinsrd xmm0, edx, 1
and do it in 2 instructions.For older CPUs you can use 2 x
movd
and thenpunpckldq
for a total of 3 instructions:我对 MMX 不太了解,但也许您需要 PACKSSDW 指令。
(来自 http://webster.cs.ucr.edu/AoA/ Windows/HTML/TheMMXInstructionSeta2.html)
编辑:我刚刚意识到那些是 SSE 寄存器。那好吧。
I don't know much about MMX, but perhaps you want the PACKSSDW instruction.
(from http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html)
Edit: I just realized that those were SSE registers. Oh well.