繁体   English   中英

用gcc生成BZHI指令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM