请记住 SSE1orps https://www.felixcloutier.com/x86/orps首先。 (实际上MMX por mm, mm/mem https://www.felixcloutier.com/x86/por甚至早于 SSE1。)
具有相同的操作码和新的前缀SSE2 orpd https://www.felixcloutier.com/x86/orpd我想,指令对于硬件解码器逻辑来说是有意义的,就像movapd
vs. movaps
。像这样的几个指令之间是多余的ps
and pd
版本,但有些不是,例如addps
vs. addpd
or unpcklps
vs. unpcklpd
是不同的洗牌。
SSE2也引入的原因66 0F EB /r por xmm,xmm/mem https://www.felixcloutier.com/x86/por至少部分是为了与 MMX 保持一致0F EB /r por mm, mm/mem
,同样的操作码带有新的强制前缀。就像paddb mm, mm
vs. paddb xmm, xmm
.
而且还考虑了 vec-integer 与 FP 不同的旁路转发域的可能性。不同的微架构对于如何实际解码和运行这些不同的指令有不同的行为。有些运行所有 XMMor
指令以相同的方式进行,从而为 FP 和 simd-integer 域之间的转发产生额外的延迟。
实际上,没有任何 CPU 对于 FP-float 和 FP-double 具有不同的转发域,所以是的,movapd
and orpd
实际上,这些都是你永远不应该使用的无用的空间浪费。使用较小的orps
编码代替。
(或者使用 VEX 编码也没关系;vorps
and vorpd
大小相同:2 字节前缀 + 操作码 + modrm ...)
por
vs. orps
有关使用时旁路延迟的更多信息por
FP 数学指令之间,例如addps
, or orps
SIMD-整数 insns 之间,例如paddb
, see
- 混合 SSE 整数/浮点 SIMD 指令时,性能是否会受到影响 https://stackoverflow.com/questions/4996384/do-i-get-a-performance-penalty-when-mixing-sse-integer-float-simd-instructions/4998071#4998071
- 逻辑 SSE 内在函数之间有什么区别? https://stackoverflow.com/questions/2804902/whats-the-difference-between-logical-sse-intrinsics/31233017#31233017
- AVX 指令 vxorpd 和 vpxor 之间的区别 https://stackoverflow.com/questions/26942952/difference-between-the-avx-instructions-vxorpd-and-vpxor
- 混合使用 pxor 和 xorps 会影响性能吗? https://stackoverflow.com/questions/39811577/does-using-mix-of-pxor-and-xorps-affect-performance
- 有没有什么情况下使用MOVDQU和MOVUPD比MOVUPS更好? https://stackoverflow.com/questions/40854819/is-there-any-situation-where-using-movdqu-and-movupd-is-better-than-movups
-
在混合上下文中选择 SSE 指令执行域 https://stackoverflow.com/questions/28660698/choosing-sse-instruction-execution-domains-in-mixed-contexts- Skylake 之前的整数版本具有更好的吞吐量。
如果有人想知道,标题的另一种解释的答案是:FP 值上的按位布尔值主要用于设置、清除或切换符号位。或者做一些事情cmpps/pd
面具喜欢混合。