我注意到浮点存在 SSE 指令,这让我想知道。您可以对 fp/integer union 中的标量执行相同的操作。
我突然想到,如果对浮点数数组的各个分量进行按位或运算,则可以通过查看结果的符号位来快速确定它们中是否有任何一个为负数。
浮点值的按位运算还有哪些其他用途?
很多。例如,当您只需要对 AVX 这样的纯浮点指令集进行按位运算时,那么这些就变得非常方便。
另一个应用:制作常数。你可以在表13.10和13.11中看到很多例子Agner Fog 针对 x86 平台的优化指南 http://www.agner.org/optimize/optimizing_assembly.pdf。一些例子:
pcmpeqd xmm0, xmm0
psrld xmm0, 30 ; 3 (32-bit)
pcmpeqd xmm0, xmm0 ; -1
pcmpeqw xmm0, xmm0 ; 1.5f
pslld xmm0, 24
psrld xmm0, 2
pcmpeqw xmm0, xmm0 ; -2.0f
pslld xmm0, 30
您还可以使用它来检查浮点值是否为 2 的幂。
Harold 等其他一些应用程序说:取绝对值和负绝对值、复制符号、混合......我将在单个数据中演示以便于理解
// Absolute:
abs = x & ~(1U << 31);
// Muxing
v = (x & mask) | (y & ~mask); // v = mask ? x : y; with mask = 0 or -1
// Copy sign
y = (y & ~(1U << 31)) | (x & (1U << 31));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)