【问题标题】:MOVUPD vs. MOVDQU (x86/x64 assembly)MOVUPD 与 MOVDQU(x86/x64 程序集)
【发布时间】:2015-07-24 05:32:16
【问题描述】:

这些说明有什么区别? MOVDQU 是未对齐的双四字移动,MOVUPD 是未对齐的两个 64 位浮点移动。我的意思是他们都只是在移动未对齐的 128 位数据。

MOVDQU 在第 948 页,MOVUPD 在 intel x64 手册的第 995 页。

【问题讨论】:

    标签: assembly x86 64-bit


    【解决方案1】:

    Agner Fog 说:

    指令MOVDQAMOVDQUMOVAPSMOVUPSMOVAPDMOVUPD 与 [128 位] 寄存器操作数一起使用时都是相同的

    然后他继续说(他在示例中使用对齐的版本,但我猜这同样适用于未对齐的变体):

    在 Intel Core 2 和更早的 Intel 处理器上,一些浮点指令在 整数单位。这包括 XMM 移动指令、布尔值和一些 shuffle 和 打包说明。 这些指令与以下指令混合时会出现绕过延迟 使用浮点单位。在大多数其他处理器上,使用的执行单元在 根据指令名称,例如MOVAPS XMM1,XMM2 使用浮点单元, MOVDQA XMM1,XMM2 使用整数单位。


    读取或写入内存的指令使用单独的单元。从旁路延迟 在某些情况下,浮点单元的内存单元可能比整数单元长 处理器,但它不依赖于指令的类型。因此,没有区别 当前处理器上MOVAPS XMM0,[MEM]MOVDQA XMM0,[MEM] 之间的延迟, 但不能排除未来处理器会有差异。


    [Y]您可以使用MOVAPS 代替MOVAPDMOVDQA 将数据移入或移出 内存或寄存器之间。 某些处理器在使用时会出现旁路延迟 MOVAPS 用于将整数指令的结果移动到另一个寄存器,但不是当 将数据移入或移出内存

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      相关资源
      最近更新 更多