我试图让gcc
生成bzhi
instruction,BMI2的一部分,
没有使用内在函数,
为了创建一个可移植的代码。
鉴于bzhi
的结果,我预计该目标可以相对容易获得。
following SO answer提供了一个代码示例,简化如下:
unsigned bzhi32(unsigned value, int nbBits)
{
return value & ((1u << nbBits) - 1);
}
clang
使用它生成bzhi
指令没有问题,而到目前为止我还没有找到gcc
的任何类似结果:
https://godbolt.org/g/jYrh8F
我想知道这是否可行。
此功能为at least requested,但不确定是否已完成。
如果是,可能代码片段中只有一些微妙的问题,例如类型或属性,可以修复这些问题以使用gcc
成功完成此转换。
编辑:根据@chux的建议添加u
为常量。它略微改变了gcc
的结果,尽管它仍然是没有bzhi
的4指令函数。
答案 0 :(得分:2)
自2018年1月起,gcc中未实现此优化(有feature request)。您可以使用内在函数来获取指令:
#include <x86intrin.h>
unsigned bzhi32(unsigned value, int nbBits) {
return _bzhi_u32(value, nbBits);
}