编译器宏以检测BMI2指令集

pla*_*cel 4 c++ x86 intel instruction-set bmi

我在网上搜索以找到合适的解决方案,但没有成功。因此,我希望你们中的一些人对此有所了解:是否有任何方法可以检测“ Intel Bit Manipulation Instruction Sets 2 ”(BMI2)的编译时间?我想根据其可用性做出一些有条件的事情。

ece*_*ulm 5

使用GCC,您可以检查__BMI2__宏。如果目标支持BMI2(例如)-mbmi2,则将定义此宏-march=haswell。这是该禀的标题(宏x86intrin.hbmi2intrin.h),用来在编译时检查BMI2。

用于运行时检查,__builtin_cpu_init()并且__builtin_cpu_supports("bmi2")可以在现代GCC中使用(在GCC 5.1、4.9及更低版本中进行了测试)。