如何让 Rust 编译器发出 BZHI 指令而不诉诸特定于平台的代码?

5 assembly x86-64 llvm rust bmi

Rust 编译器和 LLVM 有时非常聪明。我曾经x = x & (x - 1)清除最低有效设置位。它识别了这个表达式并将其转换为blsr内在函数,并给我带来了很大的加速。而且我不必使用任何特定于平台的代码或显式调用内在函数。

我想让它对bzhi内在函数做同样的事情,它将从位索引位置开始的高位归零。执行此操作的规范表达式是,src & (1 << inx) - 1但不幸的是 Rust 无法识别它,而是发出五个指令,而不是一条指令。它知道指令,但不识别等效项。

我如何鼓励 Rust 编译器发出bzhi内在函数而不显式转到特定于平台的代码?

铁锈1.66.1,-C opt-level=3 -C target-cpu=native