Spec-Zone.ru › GCC 7

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API