5

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.

4

2 回答 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 回答