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-
Генерировать код для большого порядка байтов. Это значение по умолчанию, когда GCC настроен для целевой системы ‘aarch64_be-*-*’.
-mgeneral-regs-only-
Генерировать код, использующий только регистры общего назначения. Это предотвратит использование компилятором регистров с плавающей точкой и расширенных SIMD-регистров, но не наложит никаких ограничений на ассемблер.
-mlittle-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 бит для двойной точности.
-moutline-atomics-mno-outline-atomics-
Включить или отключить вызовы вспомогательных функций вне тела функции для реализации атомарных операций. Эти вспомогательные функции во время выполнения определяют, можно ли использовать инструкции LSE из ARMv8.1-A; если нет, они используют инструкции загрузки/хранения с исключением, присутствующие в базовом наборе команд ARMv8.0 ISA.
Этот параметр применим только при компиляции для базового набора команд ARMv8.0. Если используется более поздняя версия, например, -march=armv8.1-a или -march=armv8-a+lse, инструкции ARMv8.1-Atomics будут использоваться непосредственно. То же самое относится к использованию -mcpu=, если выбранный процессор поддерживает функцию ‘lse’.
-march=name-
Указать имя целевой архитектуры и, необязательно, один или несколько модификаторов функций. Этот параметр имеет вид -march=arch{+[no]feature}*.
Допустимые значения для arch — ‘armv8-a’, ‘armv8.1-a’, ‘armv8.2-a’, ‘armv8.3-a’ или ‘armv8.4-a’ или native.
Значение ‘armv8.4-a’ подразумевает ‘armv8.3-a’ и включает поддержку компилятора для расширений архитектуры ARMv8.4-A.
Значение ‘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’ и ‘+rdma’.
Значение ‘native’ доступно на родном AArch64 GNU/Linux и заставляет компилятор выбрать архитектуру хост-системы. Этот параметр не имеет эффекта, если компилятор не может распознать архитектуру хост-системы.
Допустимые значения для feature перечислены в подразделах -march и -mcpu Feature Modifiers. В случае конфликтующих модификаторов функций используется самый правый модификатор.
GCC использует name для определения типа инструкций, которые он может выпустить при генерации ассемблерного кода. Если -march указан без -mtune или -mcpu, код оптимизирован для эффективной работы на различных процессорах, реализующих целевую архитектуру.
-mtune=name-
Указать имя целевого процессора, для которого GCC должен настраивать производительность кода. Допустимые значения для этого параметра: ‘generic’, ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a55’, ‘cortex-a57’, ‘cortex-a72’, ‘cortex-a73’, ‘cortex-a75’, ‘cortex-a76’, ‘ares’, ‘neoverse-n1’, ‘neoverse-n2’, ‘neoverse-v1’, ‘zeus’, ‘exynos-m1’, ‘falkor’, ‘qdf24xx’, ‘saphira’, ‘xgene1’, ‘vulcan’, ‘thunderx’, ‘thunderxt88’, ‘thunderxt88p1’, ‘thunderxt81’, ‘thunderxt83’, ‘thunderx2t99’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’, ‘cortex-a75.cortex-a55’, ‘native’.
Значения ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’, ‘cortex-a75.cortex-a55’ указывают, что GCC должен настраивать для системы big.LITTLE.
Кроме того, на родных AArch64 GNU/Linux системах значение ‘native’ настраивает производительность для хост-системы. Этот параметр не имеет эффекта, если компилятор не может распознать процессор хост-системы.
Если ни -mtune=, ни -mcpu=, ни -march= не указаны, код оптимизирован для эффективной работы на различных процессорах.
К этому параметру нельзя добавлять модификаторы функций.
-mcpu=name-
Указать имя целевого процессора, необязательно с добавленными одним или несколькими модификаторами функций. Этот параметр имеет вид -mcpu=cpu{+[no]feature}*, где допустимые значения для cpu такие же, как и для -mtune. Допустимые значения для feature описаны в разделе -march и -mcpu Feature Modifiers. Если указаны конфликтующие модификаторы функций, используется самый правый модификатор.
GCC использует name для определения типа инструкций, которые он может выпустить при генерации ассемблерного кода (как если бы был указан -march) и для определения целевого процессора, для которого настраивать производительность (как если бы был указан -mtune). Если этот параметр используется совместно с -march или -mtune, эти параметры имеют приоритет над соответствующей частью этого параметра.
-moverride=string-
Переопределить решения, принятые задним планом, в ответ на переключатель -mtune=. Синтаксис, семантика и допустимые значения для string в этом параметре не гарантированы для согласованности между выпусками.
Этот параметр предназначен только для разработки GCC.
-mverbose-cost-dump-
Включить подробную информацию о модели стоимости в файлах отладочных вывода. Этот параметр предназначен для отладки компилятора.
-mpc-relative-literal-loads-mno-pc-relative-literal-loads-
Включить или отключить загрузки литералов, относительных к регистру PC. С этим параметром к литеральным пулам обращаются с помощью одной инструкции, и они выводятся после каждой функции. Это ограничит максимальный размер функций до 1 МБ. Включено по умолчанию для -mcmodel=tiny.
-msign-return-address=scope
-
Выберите область действия функции, к которой будет применено подписание адреса возврата. Допустимые значения — ‘none’, которое отключает подписание адреса возврата, ‘non-leaf’, которое включает подписание указателей для функций, которые не являются листовыми, и ‘all’, которое включает подписание указателей для всех функций. Значение по умолчанию — ‘none’.
-msve-vector-bits=bits-
Укажите количество битов в регистре вектора SVE. Этот параметр действует только при включенном SVE.
GCC поддерживает два формата генерации кода SVE: вывод «независимый от длины вектора», который работает с любым размером регистра вектора, и вывод «специфичный для длины вектора», который позволяет GCC делать предположения о длине вектора, когда это полезно для оптимизации. Возможные значения ‘bits’ — ‘scalable’, ‘128’, ‘256’, ‘512’, ‘1024’ и ‘2048’. Указание ‘scalable’ выбирает вывод, независимый от длины вектора. В настоящее время ‘-msve-vector-bits=128’ также генерирует вывод, независимый от длины вектора. Все остальные значения генерируют код, специфичный для длины вектора. Поведение этих значений может измениться в будущих выпусках, и на использование значений, кроме ‘scalable’, для создания кода, совместимого с различными длинами векторов SVE, не следует полагаться.
Значение по умолчанию — ‘-msve-vector-bits=scalable’, что генерирует код, независимый от длины вектора.
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.
- ‘sve’
Включить инструкции расширения Scalable Vector. Это также включает инструкции Advanced SIMD и с плавающей точкой.
- ‘lse’
Включить инструкции расширения Large System. Они включены по умолчанию для -march=armv8.1-a.
- ‘rdma’
Включить инструкции Round Double Multiply Accumulate. Они включены по умолчанию для -march=armv8.1-a.
- ‘fp16’
Включить расширение FP16. Это также включает инструкции с плавающей точкой.
- ‘fp16fml’
-
Включить расширение FP16 fmla. Это также включает расширения FP16 и инструкции с плавающей точкой. Этот параметр включён по умолчанию для -march=armv8.4-a. Использование этого параметра с архитектурами до Armv8.2-A не поддерживается.
- ‘rcpc’
Включить расширение RcPc. Это не изменяет генерацию кода GCC, но передаётся в ассемблер, позволяя инструкциям из расширения RcPc использоваться в операциях inline asm.
- ‘dotprod’
Включить расширение Dot Product. Это также включает инструкции Advanced SIMD.
- ‘aes’
Включить расширение криптографии Armv8-a aes и pmull. Это также включает инструкции Advanced SIMD.
- ‘sha2’
Включить расширение криптографии Armv8-a sha2. Это также включает инструкции Advanced SIMD.
- ‘sha3’
Включить расширение криптографии sha512 и sha3. Это также включает инструкции Advanced SIMD. Использование этого параметра с архитектурами до Armv8.2-A не поддерживается.
- ‘sm4’
-
Включить расширение криптографии sm3 и sm4. Это также включает инструкции Advanced SIMD. Использование этого параметра с архитектурами до Armv8.2-A не поддерживается.
Функция crypto подразумевает aes, sha2 и simd, которая, в свою очередь, подразумевает fp. И наоборот, nofp подразумевает nosimd, а это подразумевает nocrypto, noaes и nosha2.
Далее: Параметры Adapteva Epiphany, Назад: Параметры субмоделей [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/AArch64-Options.html