我对这两个指令有点困惑。首先,让我们丢弃扫描值为 0 且 undefined/bsr 或 bitsize/lzcnt 结果的特殊情况 - 这种差异很明显,不是我的问题的一部分。
让我们取二进制值0001 1111 1111 1111 1111 1111 1111 1111
根据英特尔的规范,结果为lzcnt
3
根据英特尔的规范,结果为bsr
28
lzcnt
计数,bsr
返回从位 0(即 lsb)的索引或距离。
如果 CPU 上没有可用的 BMI,这两条指令如何相同以及如何lzcnt
模拟?或者在 msbbsr
的情况下是位 0 ?bsr
英特尔规范中的两个“代码操作”也不同,一个从左侧计数或索引,另一个从右侧计数。
也许有人可以对此有所了解,我没有 CPU 没有BMI/lzcnt
指令来测试回退到是否bsr
具有相同的结果(因为扫描值 0 的特殊情况永远不会发生)。