Макрос компилятора для определения набора команд BMI2

Я искал в Интернете, чтобы найти правильное решение, но без особого успеха.
Поэтому я надеюсь, что один из вас что-то знает об этом: есть ли способ обнаружитьНаборы инструкций по обработке битов Intel 2«(BMI2) время компиляции? Я хочу сделать некоторые условные вещи, основываясь на доступности этого.

4

Решение

С помощью GCC вы можете проверить __BMI2__ макро. Этот макрос будет определен, если цель поддерживает BMI2 (например, -mbmi2,-march=haswell). Это макрос, который заголовки экземпляра (x86intrin.h, bmi2intrin.h) использует для проверки BMI2 во время компиляции.

Для проверки во время выполнения, __builtin_cpu_init() а также __builtin_cpu_supports("bmi2") может использоваться в современном GCC (протестировано в GCC 5.1, 4.9 и ниже не имеет).

3

Другие решения

Запустите встроенную функцию CPUID с EAX = 7, ECX = 0, затем проверьте бит 3 возвращенного регистра EBX (флаг BMI1). EBX бит 8 является флагом BMI2. Обратитесь к документации вашего компилятора, чтобы узнать, как вызвать CPUID и получить от него данные.

0

По вопросам рекламы [email protected]