Каковы мои доступные варианты март / мтюна? - PullRequest
0 голосов
/ 05 ноября 2018

Есть ли способ получить gcc для вывода доступных опций -march = arch? Я получаю ошибки сборки (пробовал -march=x86_64), и я не знаю, какие у меня есть варианты.

Компилятор, который я использую, является проприетарной оболочкой для gcc, которая не похожа на -march=skylake. Флаги должны быть одинаковыми, поэтому я предполагаю, что любые параметры, которые я отправлю gcc для архитектур дампа, будут одинаковыми для этой оболочки.

Мне удалось вызвать ошибку gcc с фиктивным параметром, и он выкинул список, но теперь я не вижу этого, когда прохожу через оболочку.

Как мне заставить gcc сказать мне, что он поддерживает?

1 Ответ

0 голосов
/ 05 ноября 2018

Использование gcc --target-help

-march=CPU[,+EXTENSION...]
                      generate code for CPU and EXTENSION, CPU is one of:
                       generic32, generic64, i386, i486, i586, i686,
                       pentium, pentiumpro, pentiumii, pentiumiii, pentium4,
                       prescott, nocona, core, core2, corei7, l1om, k1om,
                       iamcu, k6, k6_2, athlon, opteron, k8, amdfam10,
                       bdver1, bdver2, bdver3, bdver4, znver1, znver2,
                       btver1, btver2
...

Часто это не общая архитектура, такая как x86 или x86-64, а конкретные микроархитектуры. Но есть x86-64 (не x86_64) для универсального процессора x86 с 64-битными расширениями. Полный список для каждой архитектуры можно найти в GCC's -march manual . Для x86:

  • -march=cpu-type

    Создание инструкций для типа машины cpu-type. В отличие от -mtune=cpu-type, который просто настраивает сгенерированный код для указанного cpu-type, -march=cpu-type позволяет GCC генерировать код, который может вообще не работать на процессорах, отличных от указанного. Задание -march=cpu-type подразумевает -mtune=cpu-type.

...

https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#index-march-13


В то время как базовая версия -march равна -march=x86-64, опция базовой линии / настройки по умолчанию равна -mtune=generic. Это делается, чтобы нигде не быть ужасным, избегая ошибок производительности даже за счет дополнительных инструкций или размера кода.


-march=native выберет правильные настройки арки и настройки для машины, на которой работает компилятор, или tune=generic, если компилятор не распознает конкретную модель процессора, на котором он работает.

(например, старый gcc на Skylake, по-прежнему будет включать -mavx2 -mpopcnt -mbmi2 и т. Д., Но будет устанавливать -mtune=generic вместо чего-то более подходящего.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...