我正在寻找英特尔数据表:英特尔®64和IA-32架构软件开发人员手册 ,我找不到它们之间的区别
在英特尔数据表中,我可以找到两个指令:
该指令可用于从128位存储器位置加载XMM寄存器,将XMM寄存器的内容存储到128位存储器位置,或在两个XMM寄存器之间移动数据.
唯一的区别是:
要将双四字移入或移出未对齐的存储单元,请使用MOVDQU指令.
和
要将打包的单精度浮点值移入或移出未对齐的内存位置,请使用MOVUPS指令.
但是我找不到两个不同指令的原因?
那么有人可以解释这个区别吗?
不同类型的逻辑SSE内在函数之间有什么区别吗?例如,如果我们采用OR运算,有三个内在函数:_mm_or_ps,_mm_or_pd和_mm_or_si128所有这些都做同样的事情:计算其操作数的按位 OR.我的问题:
使用一个或另一个内在(使用适当的类型转换)之间是否有任何区别.在某些特定情况下,是否会有更长的执行等隐藏成本?
这些内在函数映射到三个不同的x86指令(por,orps,orpd).有没有人有任何想法为什么英特尔浪费宝贵的操作码空间的几个指令做同样的事情?
该orpd指令是“压缩双精度浮点值的按位逻辑或”。这与por(“按位逻辑或”)做的事情不完全一样吗?如果是这样,拥有它的意义何在?