I was searching on the web to find a proper solution, without much success. So I hope one of you know something about it: Is there any way to detect the "Intel Bit Manipulation Instruction Sets 2" (BMI2) compile time? I want to make some conditional thing based on the availability of it.
问问题
2023 次
2 回答
7
使用 GCC,您可以检查__BMI2__
宏。-mbmi2
如果目标支持 BMI2(例如, ),将定义此宏-march=haswell
。这是 instrinsic 的标头 ( x86intrin.h
, bmi2intrin.h
) 用于在编译时检查 BMI2 的宏。
用于运行时检查,__builtin_cpu_init()
并且__builtin_cpu_supports("bmi2")
可以在现代 GCC 中使用(在 GCC 5.1、4.9 和更低版本中测试没有它)。
于 2015-08-26T20:05:14.813 回答
1
运行 EAX=7、ECX=0 的 CPUID 内部函数,然后检查返回的 EBX 寄存器的第 3 位(BMI1 标志)。EBX 位 8 是 BMI2 标志。有关如何调用 CPUID 并从中取回数据的信息,请参阅编译器的文档。
于 2015-08-26T00:29:41.120 回答