如何让Rust编译器无需平台特定代码即可生成BZHI指令?
如何让Rust编译器自动生成
bzhi内在函数? Rust编译器搭配LLVM有时表现得相当智能。我曾用表达式x = x & (x - 1)来清除最低有效置位,编译器能自动识别该表达式,并将其转换为blsr内在函数,带来明显的性能提升——全程无需编写任何平台特定代码,也不用显式调用这个内在函数。
我希望编译器对bzhi内在函数也能实现类似的自动优化:该指令可从指定位索引位置开始清零高位(属于x86位操作指令集的BMI2部分)。实现此功能的标准表达式是src & (1 << inx) - 1,但遗憾的是,Rust 1.66.1在使用编译选项-C opt-level=3 -C target-cpu=native时,并未识别出这个表达式与bzhi的等价性,反而生成了5条指令,而原本只需要1条bzhi指令即可完成操作。虽然编译器本身支持bzhi内在函数,但就是无法关联到这个标准表达式上。
请问,如何在不使用平台特定代码的前提下,促使Rust编译器生成bzhi内在函数?
内容的提问来源于stack exchange,提问作者user1002430
相关产品推荐
相关产品推荐

