BLSI 指令 - 隔离最低设置位

BLSI instruction - Isolate lowest set bit

位操作集包含BLSI-这条指令Extracts the lowest set bit from the source operand and set the corresponding bit in the destination register

您能否举例说明 the lowest set bit(操作数的二进制表示中的最后一位?)所指的内容、所执行的操作是什么以及在何种上下文中或针对哪种应用程序使用操作 ?

设置的最低位是最低有效 1 位。例如101011010110000那么0000右边第一个1位是最低设置位,_blsi_u32(0b101011010110000)returns0b10000

操作在上面link中也有描述:

temp ← (-SRC) bitwiseAND (SRC);
SF ← temp[OperandSize -1];
ZF ← (temp = 0);
IF SRC = 0
    CF ← 0;
ELSE
    CF ← 1;
FI
DEST ← temp;

(-SRC) bitwiseAND (SRC) 清除除最低有效 1 位以外的所有位。有关其工作原理的更多信息,请阅读

  • Why is "i & (i ^ (i - 1))" equivalent to "i & (-i)"
  • how to understand i & -i in python? bit manipulation in python
  • meaning of (number) & (-number)

它通常用于遍历设置位,例如 count the number of set bits(虽然不是最有效的方法),或 pack/deposit 位:

  • Standard C++11 code equivalent to the PEXT Haswell instruction (and likely to be optimized by compiler)

也用于Fenwick tree. See sample C++ implementation