【发布时间】:2017-09-20 08:55:05
【问题描述】:
是否有一种(快速)方法可以在 avx2 寄存器中执行 32 位 int 值的位反转? 例如
_mm256_set1_epi32(2732370386);
<do something here>
//binary: 10100010110111001010100111010010 => 1001011100101010011101101000101
//register contains 1268071237 which is decimal representation of 1001011100101010011101101000101
【问题讨论】:
-
您想要反转 AVX2 整数寄存器中单个 int32 的位,或者您想要反转 8 个此类整数中的每一个的位?
-
@JohnZwinck,这并不重要:一旦我知道如何做到这一点,我可以以任何我喜欢的方式随机播放寄存器中的 32 位值。
-
旧方法(反向字节,反向 4 组与
pshufb,或结果)推广到 AVX2,但我无法立即找到欺骗 -
您可以使用任何标准的位旋转技巧来反转字节,然后打乱字节(参见例如 Hacker's Delight 和 this list)。