![]() |
1
6
要加载所有1的寄存器,请使用
之后,你可以简单地减去
您还可以轻松地将其他常量加载到xmm寄存器中
阅读Agner Fog的优化指南, 13.4 Generating constants - Making constants for integer vectors in XMM registers |
![]() |
2
5
使用
PXOR很好,因为它是可交换的。使用AVX,您可以加载和不加载一个微型保险丝uop:
使用VPANDN不能这样做,因为可以是内存或寄存器的操作数是非反相操作数。(尽管没有AVX
或者没有AVX,如果你想破坏所有1常量而不是你正在反转的数据,
你可以坐一辆
使用
每次需要时重新创建常量,而不是从另一个寄存器复制
轻微地
在常春藤桥和后来,推土机家族和Ryzen的情况更糟。
但它在Intel P6系列(Core2/Nehalem)上略胜一筹:当读取问题组中过多的“冷”寄存器时,寄存器读取暂停可能是一个问题。(参见Agner Fog的微阵列pdf https://agner.org/optimize/ ). P6系列已经过时,但仍在一些旧机器中使用。如果您有一个在带有AVX的CPU上运行的AVX版本,您可能需要在代码的非AVX版本中调整它。(但哈斯韦尔/天湖“pentium”/“celeron”仍然是一个东西,他们没有AVX,所以没有AVX并不意味着旧CPU。) |
|
Anon. · 用汇编语言解释这一行? 6 年前 |
![]() |
wangt13 · 如何使用VMX暂停和恢复VM 6 年前 |
![]() |
Kay · Skylake和更新的环形巴士 6 年前 |
![]() |
Kadir · Intel芯片上的半精度浮点算法 6 年前 |
![]() |
Some_Dude · x86汇编牛顿平方根算法寄存器为1#IND 6 年前 |