通过
bt
指令,我可以在一条指令中获取一个字节中第n位的值。将该操作转换为 SIMD 时,我目前将源字节、索引和 0x1
常量放入单独的寄存器中,并使用 vpsravd
后跟 andps
在每个通道中执行 (byte >> index) & 0x1
。有没有可以让我更快做到这一点的说明?
上下文示例:这是用于索引位集,即类似于(伪代码)
count = 0
for index in indices:
count += (bitset[index >> 3] >> (index & 7)) & 1