Я искал в Интернете, чтобы найти правильное решение, но без особого успеха.
Поэтому я надеюсь, что один из вас что-то знает об этом: есть ли способ обнаружитьНаборы инструкций по обработке битов Intel 2«(BMI2) время компиляции? Я хочу сделать некоторые условные вещи, основываясь на доступности этого.
С помощью GCC вы можете проверить __BMI2__
макро. Этот макрос будет определен, если цель поддерживает BMI2 (например, -mbmi2
,-march=haswell
). Это макрос, который заголовки экземпляра (x86intrin.h
, bmi2intrin.h
) использует для проверки BMI2 во время компиляции.
Для проверки во время выполнения, __builtin_cpu_init()
а также __builtin_cpu_supports("bmi2")
может использоваться в современном GCC (протестировано в GCC 5.1, 4.9 и ниже не имеет).
Запустите встроенную функцию CPUID с EAX = 7, ECX = 0, затем проверьте бит 3 возвращенного регистра EBX (флаг BMI1). EBX бит 8 является флагом BMI2. Обратитесь к документации вашего компилятора, чтобы узнать, как вызвать CPUID и получить от него данные.