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