GJ.*_*GJ. 28 x86 assembly sse mov
我正在寻找英特尔数据表:英特尔®64和IA-32架构软件开发人员手册 ,我找不到它们之间的区别
在英特尔数据表中,我可以找到两个指令:
该指令可用于从128位存储器位置加载XMM寄存器,将XMM寄存器的内容存储到128位存储器位置,或在两个XMM寄存器之间移动数据.
唯一的区别是:
要将双四字移入或移出未对齐的存储单元,请使用MOVDQU指令.
和
要将打包的单精度浮点值移入或移出未对齐的内存位置,请使用MOVUPS指令.
但是我找不到两个不同指令的原因?
那么有人可以解释这个区别吗?
Ste*_*non 43
在功能上,它们是相同的.
在一些(但不是全部)微架构上,由于"域穿越惩罚"存在时序差异.因此,movdqa当数据与整数SSE指令一起使用时,以及movaps当数据与浮点指令一起使用时,通常应该使用.有关此主题的更多信息,请参阅Intel优化手册或Agner Fog优秀的微体系结构指南.请注意,这些延迟通常与寄存器寄存器移动而不是加载或存储相关联.