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

发布于 2024-08-21 15:44:46 字数 272 浏览 3 评论 0原文

有没有更快的方法将两个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

混吃等死 2024-08-28 15:44:46

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

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 then punpckldq for a total of 3 instructions:

movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
錯遇了你 2024-08-28 15:44:46

我对 MMX 不太了解,但也许您需要 PACKSSDW 指令。

PACKSSDW 指令采用两个
源操作数中的双字和
中的两个双字
目标操作数并转换它们
通过饱和度到四个签名词。
指令打包了这四个字
在一起并将结果存储在
目标MMX寄存器。

(来自 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.

The PACKSSDW instruction takes the two
double words in the source operand and
the two double words in the
destination operand and converts these
to four signed words via saturation.
The instruction packs these four words
together and stores the result in the
destination MMX register.

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

Edit: I just realized that those were SSE registers. Oh well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文