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 ГБ друг от друга. Указатели — 64 бита. Программы могут быть статически или динамически связаны. Эта модель не полностью реализована и в основном обрабатывается как ‘small’.
-mcmodel=small-
Генерировать код для малой модели кода. Программа и её статически определённые символы должны находиться на расстоянии в пределах 4 ГБ друг от друга. Указатели — 64 бита. Программы могут быть статически или динамически связаны. Это модель кода по умолчанию.
-mcmodel=large-
Генерировать код для большой модели кода. Она не делает предположений об адресах и размерах разделов. Указатели — 64 бита. Программы могут быть только статически связаны.
-mstrict-align-
Не предполагать, что ссылки на невыровненную память обрабатываются системой.
-momit-leaf-frame-pointer-mno-omit-leaf-frame-pointer-
Исключать или сохранять указатель на фрейм в листе функций. Первое поведение является значением по умолчанию.
-mtls-dialect=desc-
Использовать описатели TLS в качестве механизма хранения TLS для динамического доступа к переменным TLS. Это значение по умолчанию.
-mtls-dialect=traditional-
Использовать традиционную TLS в качестве механизма хранения TLS для динамического доступа к переменным TLS.
-mtls-size=size-
Указать размер непосредственного смещения TLS в битах. Допустимые значения — 12, 24, 32, 48. Этот параметр зависит от binutils версии выше 2.25.
-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 включает приближение обратного квадратного корня, что в свою очередь зависит от целевого процессора.
-march=name-
Укажите имя целевой архитектуры и, необязательно, один или несколько модификаторов функций. Этот параметр имеет вид -march=arch{+[no]feature}*.
Допустимые значения для arch — ‘armv8-a’, ‘armv8.1-a’ или native.
Значение ‘armv8.1-a’ подразумевает ‘armv8-a’ и включает поддержку компилятора для расширения архитектуры ARMv8.1. В частности, оно включает функции ‘+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’, ‘exynos-m1’, ‘qdf24xx’, ‘thunderx’, ‘xgene1’.
Кроме того, этот параметр может указывать, что GCC должен настроить производительность кода для системы big.LITTLE. Допустимые значения для этого параметра: ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’.
Кроме того, в родных AArch64 GNU/Linux системах доступно значение ‘native’. Этот параметр заставляет компилятор выбрать архитектуру и настроить производительность кода для процессора хост-системы. Этот параметр не имеет эффекта, если компилятор не может распознать архитектуру хост-системы.
Если ни -mtune=, ни -mcpu=, ни -march= не указаны, код настраивается на высокую производительность на различных целевых процессорах.
Этот параметр не может иметь модификаторы функций.
-mcpu=name-
Укажите имя целевого процессора, необязательно с постфиксом одним или несколькими модификаторами функций. Этот параметр имеет вид -mcpu=cpu{+[no]feature}*, где допустимые значения для cpu такие же, как и для -mtune. Допустимые значения для feature документированы в подраздле “Модификаторы функций -march и -mcpu”. В случае конфликтующих модификаторов функций используется последний.
Кроме того, в родных AArch64 GNU/Linux системах доступно значение ‘native’. Этот параметр заставляет компилятор настроить производительность кода для процессора хост-системы. Этот параметр не имеет эффекта, если компилятор не может распознать архитектуру хост-системы.
GCC использует name, чтобы определить тип инструкций, которые можно выдать при генерации кода ассемблера (как если бы был -march) и для определения целевого процессора, для которого настроить производительность (как если бы был -mtune). Когда этот параметр используется совместно с -march или -mtune, эти параметры имеют приоритет над соответствующей частью этого параметра.
-moverride=string-
Переопределяет решения по настройке, принятые задним концом в ответ на переключатель -mtune=. Синтаксис, семантика и допустимые значения для string в этом параметре не гарантируются как согласующиеся между выпусками.
Этот параметр предназначен только для разработчиков GCC.
-mpc-relative-literal-loads-
Включить загрузки литералов, относительных к PC. Если этот параметр используется, предполагается, что пулы литералов имеют диапазон до 1 МБ, и используется соответствующая последовательность инструкций. Этот параметр не имеет влияния, когда используется с -mcmodel=tiny.
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. Это включено по умолчанию для -march=armv8.1-a.
То есть, crypto подразумевает simd, которое подразумевает fp. И наоборот, nofp (или эквивалентно -mgeneral-regs-only) подразумевает nosimd, которое подразумевает nocrypto.
Далее: Параметры Adapteva Epiphany, Наверх: Параметры подмоделей [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/AArch64-Options.html