我正在查找英特尔数据表:英特尔® 64 和 IA-32 架构
软件开发人员手册我找不到两者之间的区别
-
MOVDQA:移动对齐的双四字
-
MOVAPS:移动对齐压缩单精度
在英特尔数据表中我可以找到这两条指令:
该指令可用于从 128 位加载 XMM 寄存器
内存位置,将 XMM 寄存器的内容存储到
128 位内存位置,或在两个 XMM 寄存器之间移动数据。
唯一的区别是:
要将双四字移入或移出未对齐的内存位置,请使用
MOVDQU 指令。
and
将打包单精度浮点值移入或移出
未对齐的内存位置,请使用 MOVUPS 指令。
但我找不到两个不同指令的原因?
那么有人可以解释其中的区别吗?
在功能上,它们是相同的。
On some(但不是全部)微架构,由于“域交叉惩罚”而存在时间差异。因此,通常应该使用movdqa
当数据与整数 SSE 指令一起使用时,以及movaps
当数据与浮点指令一起使用时。有关此主题的更多信息,请参阅英特尔优化手册或 Agner Fog 的优秀微架构指南。请注意,这些延迟通常与寄存器-寄存器移动相关,而不是与加载或存储相关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)