3.18.1 AArch64 Параметры
Эти параметры определены для реализаций AArch64:
-mabi=nameГенерировать код для указанной модели данных. Допустимые значения — ‘ilp32’ для модели данных типа SysV, где int, long int и указатели имеют 32 бита, и ‘lp64’ для модели данных типа SysV, где int имеет 32 бита, а long int и указатели — 64 бита.
По умолчанию зависит от конкретной конфигурации целевой системы. Обратите внимание, что ABI LP64 и ILP32 несовместимы при линковке; необходимо скомпилировать всю программу с одним и тем же ABI и слинковать с совместимым набором библиотек.
-mbig-endianГенерировать код с big-endian. По умолчанию, когда GCC настроен для целевой системы ‘aarch64_be-*-*’.
-mgeneral-regs-onlyГенерировать код, использующий только регистры общего назначения. Это предотвратит использование компилятором регистров для чисел с плавающей точкой и расширений Advanced SIMD, но не наложит никаких ограничений на ассемблер.
-mlittle-endianГенерировать код с little-endian. По умолчанию, когда GCC настроен для целевой системы ‘aarch64-*-*’, но не для ‘aarch64_be-*-*’.
-mcmodel=tinyГенерировать код для крошечной модели кода. Программа и её статически определённые символы должны находиться в пределах 1 МБ друг от друга. Программы могут быть статически или динамически слинкованы.
-mcmodel=smallГенерировать код для малой модели кода. Программа и её статически определённые символы должны находиться в пределах 4 ГБ друг от друга. Программы могут быть статически или динамически слинкованы. Это модель кода по умолчанию.
-mcmodel=largeГенерировать код для большой модели кода. Это не делает предположений об адресах и размерах секций. Программы могут быть только статически слинкованы.
-mstrict-alignИзбегать генерации обращений к памяти, которые могут быть не выровнены на границе естественного объекта, как описано в спецификации архитектуры.
-momit-leaf-frame-pointer-mno-omit-leaf-frame-pointerИгнорировать или сохранять указатель на кадр в функциях без вложенных вызовов. Предыдущее поведение по умолчанию.
-mtls-dialect=descИспользовать дескрипторы TLS в качестве механизма локального хранилища потоков для динамических обращений к переменным TLS. Это значение по умолчанию.
-mtls-dialect=traditionalИспользовать традиционный TLS в качестве механизма локального хранилища потоков для динамических обращений к переменным TLS.
-mtls-size=sizeУказать размер непосредственных смещений TLS в битах. Допустимые значения — 12, 24, 32, 48. Этот параметр требует binutils 2.26 или новее.
-mfix-cortex-a53-835769-mno-fix-cortex-a53-835769Включить или выключить обходной путь для ошибки ARM Cortex-A53 с номером 835769. Это включает вставку инструкции NOP между инструкциями памяти и инструкциями 64-битного умножения-сложения целых чисел.
-mfix-cortex-a53-843419-mno-fix-cortex-a53-843419Включить или выключить обходной путь для ошибки ARM Cortex-A53 с номером 843419. Этот обходной путь ошибки выполняется на этапе линковки, и он только передаёт соответствующий флаг линковщику.
-mlow-precision-recip-sqrt-mno-low-precision-recip-sqrtВключить или выключить приближённое вычисление обратной величины квадратного корня. Этот параметр действует только при использовании -ffast-math или -funsafe-math-optimizations. Включение этого параметра уменьшает точность результатов обратной величины квадратного корня до примерно 16 бит для одинарной точности и до 32 бит для двойной точности.
-mlow-precision-sqrt-mno-low-precision-sqrtВключить или выключить приближённое вычисление квадратного корня. Этот параметр действует только при использовании -ffast-math или -funsafe-math-optimizations. Включение этого параметра уменьшает точность результатов квадратного корня до примерно 16 бит для одинарной точности и до 32 бит для двойной точности. Если включено, подразумевает -mlow-precision-recip-sqrt.
-mlow-precision-div-mno-low-precision-divВключить или выключить приближённое вычисление деления. Этот параметр действует только при использовании -ffast-math или -funsafe-math-optimizations. Включение этого параметра уменьшает точность результатов деления до примерно 16 бит для одинарной точности и до 32 бит для двойной точности.
-march=nameУказать имя целевой архитектуры и, необязательно, один или несколько модификаторов функций. Этот параметр имеет вид -march=arch{+[no]feature}*.
Допустимые значения для arch — ‘armv8-a’, ‘armv8.1-a’, ‘armv8.2-a’, ‘armv8.3-a’ или native.
Значение ‘armv8.3-a’ подразумевает ‘armv8.2-a’ и включает поддержку компилятора для расширений архитектуры ARMv8.3-A.
Значение ‘armv8.2-a’ подразумевает ‘armv8.1-a’ и включает поддержку компилятора для расширений архитектуры ARMv8.2-A.
Значение ‘armv8.1-a’ подразумевает ‘armv8-a’ и включает поддержку компилятора для расширения архитектуры ARMv8.1-A. В частности, это включает функции ‘+crc’ и ‘+lse’.
Значение ‘native’ доступно в системах AArch64 GNU/Linux и заставляет компилятор выбрать архитектуру хост-системы. Этот параметр не действует, если компилятор не может распознать архитектуру хост-системы.
Допустимые значения для feature перечислены в подраздёле по -march и -mcpu Модификаторам функций. В случае конфликтующих модификаторов функций используется самый правый модификатор.
GCC использует name для определения типа инструкций, которые можно выдать при генерации кода ассемблера. Если указан -march без -mtune или -mcpu, код оптимизирован для работы на широком диапазоне целевых процессоров, реализующих целевую архитектуру.
-mtune=nameУказать имя целевого процессора, для которого GCC должен настроить производительность кода. Допустимые значения для этого параметра: ‘generic’, ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a57’, ‘cortex-a72’, ‘cortex-a73’, ‘exynos-m1’, ‘falkor’, ‘qdf24xx’, ‘xgene1’, ‘vulcan’, ‘thunderx’, ‘thunderxt88’, ‘thunderxt88p1’, ‘thunderxt81’, ‘thunderxt83’, ‘thunderx2t99’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’, ‘native’.
Значения ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’ указывают, что GCC должен настраивать производительность для системы big.LITTLE.
Кроме того, в системах AArch64 GNU/Linux значение ‘native’ настраивает производительность для хост-системы. Этот параметр не действует, если компилятор не может распознать процессор хост-системы.
Если ни -mtune=, ни -mcpu=, ни -march= не указаны, код оптимизирован для работы на широком диапазоне целевых процессоров.
Этот параметр не может быть дополнен модификаторами функций.
-mcpu=nameУказать имя целевого процессора, необязательно с добавленными одним или несколькими модификаторами функций. Этот параметр имеет вид -mcpu=cpu{+[no]feature}*, где допустимые значения для cpu такие же, как и для -mtune. Допустимые значения для feature описаны в подраздёле по -march и -mcpu Модификаторам функций. В случае конфликтующих модификаторов функций используется самый правый модификатор.
GCC использует name для определения типа инструкций, которые можно выдать при генерации кода ассемблера (как если бы использовался -march) и для определения целевого процессора, для которого нужно оптимизировать производительность (как если бы использовался -mtune). Если этот параметр используется совместно с -march или -mtune, эти параметры имеют приоритет над соответствующей частью этого параметра.
-moverride=stringПереопределить решения по настройке, принятые бэкэндом в ответ на переключатель -mtune=. Синтаксис, семантика и принятые значения для string в этом параметре не гарантируются как постоянные в разных выпусках.
Этот параметр предназначен только для использования при разработке GCC.
-mpc-relative-literal-loadsВключить загрузки литералов, относительных к PC. С этим параметром доступ к литеральным пулам осуществляется с помощью одной инструкции, а они выводятся после каждой функции. Это ограничивает максимальный размер функций до 1 МБ. Включено по умолчанию для -mcmodel=tiny.
-msign-return-address=scopeВыбрать область действия функции, к которой будет применяться подписание возвращаемого адреса. Допустимые значения — ‘none’, которое отключает подписание возвращаемого адреса, ‘non-leaf’, которое включает подписание указателя для функций, которые не являются функциями без вложенных вызовов, и ‘all’, которое включает подписание указателя для всех функций. Значение по умолчанию — ‘none’.
3.18.1.1 -march и -mcpu Модификаторы функций
Модификаторы функций, используемые с -march и -mcpu, могут быть любыми из следующих и их обратными значениями nofeature:
- ‘crc’
Включить расширение CRC. По умолчанию включено для -march=armv8.1-a.
- ‘crypto’
Включить расширение Crypto. Также включает инструкции Advanced SIMD и с плавающей точкой.
- ‘fp’
Включить инструкции с плавающей точкой. По умолчанию включено для всех возможных значений опций -march и -mcpu.
- ‘simd’
Включить инструкции Advanced SIMD. Также включает инструкции с плавающей точкой. По умолчанию включено для всех возможных значений опций -march и -mcpu.
- ‘lse’
Включить инструкции Large System Extension. По умолчанию включено для -march=armv8.1-a.
- ‘fp16’
-
Включить расширение FP16. Также включает инструкции с плавающей точкой.
Функция crypto подразумевает simd, которая, в свою очередь, подразумевает fp. И наоборот, nofp подразумевает nosimd, а это подразумевает nocrypto.
Далее: Параметры Adapteva Epiphany, Вверх: Параметры подмодели [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/AArch64-Options.html