38

我正在查看英特尔数据表:英特尔® 64 和 IA-32 架构软件开发人员手册 ,但我找不到两者之间的区别

  • MOVDQA:移动对齐的双四字
  • MOVAPS:移动对齐打包单精度

在英特尔数据表中,我可以找到两条指令:

该指令可用于从 128 位内存位置加载 XMM 寄存器,将 XMM 寄存器的内容存储到 128 位内存位置,或在两个 XMM 寄存器之间移动数据。

唯一的区别是:

要将双四字移入或移出未对齐的内存位置,请使用 MOVDQU 指令。

要将压缩的单精度浮点值移入或移出未对齐的内存位置,请使用 MOVUPS 指令。

但是我找不到两个不同指令的原因?

那么任何人都可以解释其中的区别吗?

4

1 回答 1

52

在功能上,它们是相同的。

某些(但不是全部)微架构上,由于“域交叉惩罚”而存在时间差异。出于这个原因,movdqa当数据与整数 SSE 指令一起使用时,通常应该在movaps数据与浮点指令一起使用时使用。有关此主题的更多信息,请参阅英特尔优化手册或 Agner Fog 出色的微架构指南。请注意,这些延迟通常与寄存器-寄存器移动有关,而不是与加载或存储有关。

于 2011-07-13T11:54:47.323 回答