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

标签 assembly x86 simd sse

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

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

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

谢谢

最佳答案

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

关于assembly - 将两个x86 32位寄存器存储到128位xmm寄存器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231694/

相关文章:

c - 为什么使用返回值时将0移入堆栈?

x86 - AVX2 矢量化 256 位查找表(32 个无符号字符)

c++ - 将编译器从 x86 汇编移植到 LLVM

assembly - x86 汇编中寄存器上使用的入栈/出栈指令的功能是什么?

assembly - 在程序集 x86 中对齐

c++ - 英特尔 SIMD : why is inplace multiplication so slow?

algorithm - 按组件排序多值 (SIMD) 数组

testing - TEST ECX, 3 未测试 ECX 指向的值

assembly - 在GDB(实模式,依附于QEMU)中,在特定条件下的特定点stepo和nexti似乎打破了断点机制

c - 如何理解这个用于 PowerPC stwbrx 的 GNU C 内联汇编宏