[英]generate BZHI instruction with gcc
我试图让gcc
生成bzhi
指令 ,BMI2的一部分, 不使用内在函数,以便创建一个可移植的代码。
鉴于bzhi
的结果,我预计这个目标是相对容易获得的。 以下SO答案提供了一个代码示例,简化如下:
unsigned bzhi32(unsigned value, int nbBits)
{
return value & ((1u << nbBits) - 1);
}
clang
使用它生成bzhi
指令没有问题,而到目前为止我还没有找到任何类似的gcc
结果: https : //godbolt.org/g/jYrh8F
我想知道这是否可行。 至少要求此功能,但不确定它是否已完成。 如果是,可能在代码片段中只有一些微妙的问题,例如类型或属性,可以修复以使用gcc
成功完成此转换。
编辑 :按照@chux的建议添加u
作为常量。 它略微改变了gcc
的结果,尽管它仍然是一个没有bzhi
的4指令函数。
自2018年1月起,gcc中未实现此优化(有功能请求 )。 您可以使用内在函数获取指令:
#include <x86intrin.h>
unsigned bzhi32(unsigned value, int nbBits) {
return _bzhi_u32(value, nbBits);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.