【发布时间】:2015-07-24 05:32:16
【问题描述】:
这些说明有什么区别? MOVDQU 是未对齐的双四字移动,MOVUPD 是未对齐的两个 64 位浮点移动。我的意思是他们都只是在移动未对齐的 128 位数据。
MOVDQU 在第 948 页,MOVUPD 在 intel x64 手册的第 995 页。
【问题讨论】:
这些说明有什么区别? MOVDQU 是未对齐的双四字移动,MOVUPD 是未对齐的两个 64 位浮点移动。我的意思是他们都只是在移动未对齐的 128 位数据。
MOVDQU 在第 948 页,MOVUPD 在 intel x64 手册的第 995 页。
【问题讨论】:
Agner Fog 说:
指令
MOVDQA、MOVDQU、MOVAPS、MOVUPS、MOVAPD和MOVUPD与 [128 位] 寄存器操作数一起使用时都是相同的
然后他继续说(他在示例中使用对齐的版本,但我猜这同样适用于未对齐的变体):
在 Intel Core 2 和更早的 Intel 处理器上,一些浮点指令在 整数单位。这包括 XMM 移动指令、布尔值和一些 shuffle 和 打包说明。 这些指令与以下指令混合时会出现绕过延迟 使用浮点单位。在大多数其他处理器上,使用的执行单元在 根据指令名称,例如
MOVAPS XMM1,XMM2使用浮点单元,MOVDQA XMM1,XMM2使用整数单位。
读取或写入内存的指令使用单独的单元。从旁路延迟 在某些情况下,浮点单元的内存单元可能比整数单元长 处理器,但它不依赖于指令的类型。因此,没有区别 当前处理器上
MOVAPS XMM0,[MEM]和MOVDQA XMM0,[MEM]之间的延迟, 但不能排除未来处理器会有差异。
[Y]您可以使用
MOVAPS代替MOVAPD或MOVDQA将数据移入或移出 内存或寄存器之间。 某些处理器在使用时会出现旁路延迟MOVAPS用于将整数指令的结果移动到另一个寄存器,但不是当 将数据移入或移出内存。
【讨论】: