Поддержка AMD xop check

У меня следующая проблема:
У меня есть несколько тестов, связанных с проверкой xop с использованием некоторых Bulldozer (xop) инструкции.
И я должен запускать эти тесты только на Bulldozer процессоры.
Как я могу проверить, что мой процессор поддерживает xop инструкция во время компиляции?

Язык: C, Os: Linux;

3 ответа

Вы можете написать программу, которая проверяет CPUID и использовать вывод этой программы при компиляции:
gcc $(cpuid_test) my_prog.c

где cpuid_test возвращает '-march=bdver1' или же -DXOP_SUPPORT=1

Вы не можете тестировать во время компиляции, но вы можете скомпилировать для AMD Bulldozer, используя:

$ gcc -march = bdver1 -mtune = bdver1...

Смотрите: http://gcc.gnu.org/gcc-4.6/changes.html

Если ваша сборочная машина является вашей целевой машиной, посмотрите на /proc/cpuinfo,

Если источник скомпилирован с -march=bdver1 (который включает поддержку XOP среди прочего), макрос препроцессора __XOP__ будет определено до 1.

Вы можете проверить во время компиляции для XOP с

#ifdef __XOP__
     ...XOP code path here...
#else
     ...non XOP code here...
#endif 
Другие вопросы по тегам