assembly - 如何在 XMM 寄存器之间移动 128 位值?

标签 assembly simd sse

汇编中看似微不足道的问题:我想将整个 XMM0 寄存器复制到 XMM3。我试过了

movdq xmm3, xmm0

但 MOVDQ 不能用于在两个 XMM 寄存器之间移动值。我该怎么办?

最佳答案

它是 movapdmovapsmovdqa

movaps xmm3, xmm0

它们都做同样的事情,但有一个问题:

  • movapdmovaps 在浮点域中运行。
  • movdqa 在整数域中运行

根据您的数据类型使用适当的类型以避免域更改停顿。

此外,没有理由使用movapd。始终使用 movaps 来代替,因为 movapd 需要额外的字节进行编码。

关于assembly - 如何在 XMM 寄存器之间移动 128 位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671438/

相关文章:

c++ - 在 sse vector m128 中找到最大 float

c++ - gcc vector 扩展中的未对齐加载/存储

c - 使用英特尔 SSE SIMD 内部函数

x86 - x86 SIMD 内在函数的头文件

c++ - 我可以更改 CPU 模式以读取内存吗?

c - ASM 中舍入函数的最后一段

C 将值而不是地址传递给汇编函数 (x64)

optimization - 使用AVX2指令选择性地对列表元素进行异或

c - 如何将一个 8 字节长整数的每个字节相加?

c - 试图对一个函数进行逆向工程