Spec-Zone.ru › GCC 14

3.19.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

Генерировать код для модели tiny (очень маленькой). Программа и её статически определённые символы должны находиться в пределах 1 МБ друг от друга. Программы могут быть статически или динамически слинкованы.

-mcmodel=small

Генерировать код для модели small (маленькой). Программа и её статически определённые символы должны находиться в пределах 4 ГБ друг от друга. Программы могут быть статически или динамически слинкованы. Это модель кода по умолчанию.

-mcmodel=large

Генерировать код для модели large (большой). Это не предполагает никаких допущений относительно адресов и размеров секций. Программы могут быть только статически слинкованы. Параметр -mcmodel=large несовместим с -mabi=ilp32, -fpic и -fPIC.

-mtp=name

Указать системный регистр, используемый в качестве указателя потока. Допустимые значения — ‘tpidr_el0’, ‘tpidrro_el0’, ‘tpidr_el1’, ‘tpidr_el2’, ‘tpidr_el3’. Для обратной совместимости также принимаются алиасы ‘el0’, ‘el1’, ‘el2’, ‘el3’. Значение по умолчанию — ‘tpidr_el0’. Рекомендуется компилировать весь код, предназначенный для совместной работы, с одинаковым значением этого параметра, чтобы избежать доступа к разным указателям потока с разных уровней исключений.

-mstrict-align
-mno-strict-align

Исключить или разрешить генерацию обращений к памяти, которые могут не быть выровнены на границе естественного объекта, как описано в спецификации архитектуры.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer

Исключить или сохранить указатель фрейма в функциях без вложенности. Первое поведение является значением по умолчанию.

-mstack-protector-guard=guard
-mstack-protector-guard-reg=reg
-mstack-protector-guard-offset=offset

Генерировать код защиты стека с использованием канонической переменной (canary) в guard. Поддерживаемые места — ‘global’ для глобальной канонической переменной или ‘sysreg’ для канонической переменной в соответствующем системном регистре.

В последнем случае параметры -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой системный регистр использовать в качестве базового регистра для чтения канонической переменной и какой смещение от этого базового регистра. По умолчанию регистр и смещение не заданы, так как это предназначено исключительно для использования в ядре Linux.

-mtls-dialect=desc

Использовать описатели TLS (Thread-Local Storage) в качестве механизма хранения данных TLS для динамического доступа к переменным TLS. Это значение по умолчанию.

-mtls-dialect=traditional

Использовать традиционный TLS в качестве механизма хранения данных 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 бит для двойной точности.

-mtrack-speculation
-mno-track-speculation

Включить или отключить генерацию дополнительного кода для отслеживания условных переходов, выполняемых с помощью спекулятивного выполнения. Состояние отслеживания может затем использоваться компилятором при расширении вызовов __builtin_speculation_safe_copy для генерации более эффективного кода.

-moutline-atomics
-mno-outline-atomics

Включить или отключить вызовы вспомогательных функций вне основной области для реализации атомарных операций. Эти вспомогательные функции во время выполнения определяют, могут ли использоваться инструкции LSE из ARMv8.1-A; если нет, они будут использовать инструкции load/store-exclusive, которые присутствуют в базовой ISA ARMv8.0.

Этот параметр применим только при компиляции для базового набора инструкций ARMv8.0. При использовании более поздней ревизии, например, -march=armv8.1-a или -march=armv8-a+lse, инструкции ARMv8.1-Atomics будут использоваться напрямую. То же самое относится к использованию -mcpu=, если выбранный процессор поддерживает функцию ‘lse’. Этот параметр включен по умолчанию.

-march=name

Укажите имя целевой архитектуры и, необязательно, один или несколько модификаторов функций. Этот параметр имеет вид -march=arch{+[no]feature}*.

В таблице ниже приведены допустимые значения для arch и функции, которые они включают по умолчанию:

arch значение Архитектура Включает по умолчанию
‘armv8-a’ Armv8-A ‘+fp’, ‘+simd’
‘armv8.1-a’ Armv8.1-A ‘armv8-a’, ‘+crc’, ‘+lse’, ‘+rdma’
‘armv8.2-a’ Armv8.2-A ‘armv8.1-a’
‘armv8.3-a’ Armv8.3-A ‘armv8.2-a’, ‘+pauth’
‘armv8.4-a’ Armv8.4-A ‘armv8.3-a’, ‘+flagm’, ‘+fp16fml’, ‘+dotprod’
‘armv8.5-a’ Armv8.5-A ‘armv8.4-a’, ‘+sb’, ‘+ssbs’, ‘+predres’
‘armv8.6-a’ Armv8.6-A ‘armv8.5-a’, ‘+bf16’, ‘+i8mm’
‘armv8.7-a’ Armv8.7-A ‘armv8.6-a’, ‘+ls64’
‘armv8.8-a’ Armv8.8-a ‘armv8.7-a’, ‘+mops’
‘armv8.9-a’ Armv8.9-a ‘armv8.8-a’
‘armv9-a’ Armv9-A ‘armv8.5-a’, ‘+sve’, ‘+sve2’
‘armv9.1-a’ Armv9.1-A ‘armv9-a’, ‘+bf16’, ‘+i8mm’
‘armv9.2-a’ Armv9.2-A ‘armv9.1-a’, ‘+ls64’
‘armv9.3-a’ Armv9.3-A ‘armv9.2-a’, ‘+mops’
‘armv9.4-a’ Armv9.4-A ‘armv9.3-a’
‘armv8-r’ Armv8-R ‘armv8-r’

Значение ‘native’ доступно в родной AArch64 GNU/Linux и заставляет компилятор выбрать архитектуру хост-системы. Этот параметр не оказывает никакого влияния, если компилятор не может распознать архитектуру хост-системы.

Допустимые значения для feature перечислены в подраздле «Модификаторы функций -march и -mcpu». В случае конфликтующих модификаторов функций используется модификатор справа.

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’, ‘cortex-a76ae’, ‘cortex-a77’, ‘cortex-a65’, ‘cortex-a65ae’, ‘cortex-a34’, ‘cortex-a78’, ‘cortex-a78ae’, ‘cortex-a78c’, ‘ares’, ‘exynos-m1’, ‘emag’, ‘falkor’, ‘neoverse-512tvb’, ‘neoverse-e1’, ‘neoverse-n1’, ‘neoverse-n2’, ‘neoverse-v1’, ‘neoverse-v2’, ‘grace’, ‘qdf24xx’, ‘saphira’, ‘phecda’, ‘xgene1’, ‘vulcan’, ‘octeontx’, ‘octeontx81’, ‘octeontx83’, ‘octeontx2’, ‘octeontx2t98’, ‘octeontx2t96’ ‘octeontx2t93’, ‘octeontx2f95’, ‘octeontx2f95n’, ‘octeontx2f95mm’, ‘a64fx’, ‘thunderx’, ‘thunderxt88’, ‘thunderxt88p1’, ‘thunderxt81’, ‘tsv110’, ‘thunderxt83’, ‘thunderx2t99’, ‘thunderx3t110’, ‘zeus’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’, ‘cortex-a75.cortex-a55’, ‘cortex-a76.cortex-a55’, ‘cortex-r82’, ‘cortex-x1’, ‘cortex-x1c’, ‘cortex-x2’, ‘cortex-x3’, ‘cortex-x4’, ‘cortex-a510’, ‘cortex-a520’, ‘cortex-a710’, ‘cortex-a715’, ‘cortex-a720’, ‘ampere1’, ‘ampere1a’, ‘ampere1b’, ‘cobalt-100’ и ‘native’.

Значения ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’, ‘cortex-a75.cortex-a55’, ‘cortex-a76.cortex-a55’ указывают, что GCC должен настраивать параметры для системы big.LITTLE.

Значение ‘neoverse-512tvb’ указывает, что GCC должен настраивать параметры для ядер Neoverse, которые (а) реализуют SVE и (б) имеют полную пропускную способность вектора 512 бит в цикл. Другими словами, параметр сообщает GCC настроить параметры для ядер Neoverse, которые могут выполнять 4 арифметических инструкции Advanced SIMD по 128 бит за цикл и которые могут выполнять эквивалентное количество арифметических инструкций SVE за цикл (2 для SVE 256 бит, 4 для SVE 128 бит). Это более общий случай, чем настройка для конкретного ядра, например Neoverse V1, но более специфичный, чем стандартная настройка, описанная ниже.

Кроме того, в системах AArch64 GNU/Linux значение ‘native’ настраивает производительность для хост-системы. Этот параметр не оказывает никакого влияния, если компилятор не может распознать процессор хост-системы.

Если ни -mtune=, ни -mcpu=, ни -march= не указаны, код настраивается для обеспечения высокой производительности на широком спектре целевых процессоров.

Этот параметр не может быть дополнен модификаторами функций.

-mcpu=name

Укажите имя целевого процессора, необязательно дополненное одним или несколькими модификаторами функций. Этот параметр имеет вид -mcpu=cpu{+[no]feature}*, где допустимые значения для cpu такие же, как доступны для -mtune. Допустимые значения для feature описаны в подраздле «Модификаторы функций -march и -mcpu». В случае конфликтующих модификаторов функций используется модификатор справа.

GCC использует name, чтобы определить, какие инструкции можно генерировать при создании кода ассемблера (как с помощью -march) и чтобы определить целевой процессор, для которого нужно настраивать параметры производительности (как с помощью -mtune). Если этот параметр используется вместе с -march или -mtune, эти параметры имеют приоритет над соответствующей частью этого параметра.

-mcpu=neoverse-512tvb отличается тем, что не относится к конкретному ядру, а относится ко всем ядрам Neoverse, которые (а) реализуют SVE и (б) имеют полную пропускную способность вектора 512 бит за цикл. Если не переопределено -march, -mcpu=neoverse-512tvb генерирует код, который может работать на ядре Neoverse V1, поскольку Neoverse V1 является первым ядром Neoverse с этими свойствами. Если не переопределено -mtune, -mcpu=neoverse-512tvb настраивает код так же, как и -mtune=neoverse-512tvb.

-moverride=string

Переопределите решения по настройке, принятые задним планом в ответ на переключатель -mtune=. Синтаксис, семантика и допустимые значения для строки в этом параметре не гарантируются как согласующиеся между версиями.

Этот параметр предназначен только для использования при разработке 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’. Этот параметр устарел в пользу параметра -mbranch-protection.

-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti

Выберите функции защиты ветвлений для использования. ‘none’ является значением по умолчанию и отключает все типы защиты ветвлений. ‘standard’ включает все типы функций защиты ветвлений. Если функция имеет дополнительные параметры настройки, то ‘standard’ устанавливает их на стандартный уровень. ‘pac-ret[+leaf]’ включает подписание адреса возврата на стандартном уровне: подписание функций, которые сохраняют адрес возврата в память (функции, не являющиеся листовыми, практически всегда это делают) с помощью ключа a. Дополнительный аргумент ‘leaf’ можно использовать для расширения подписания, включив листовые функции. Дополнительный аргумент ‘b-key’ можно использовать для подписания функций с ключом B вместо ключа A. ‘bti’ включает механизм идентификации цели ветвления.

-mharden-sls=opts

Включить укрепление компилятора против прямолинейной спекуляции (SLS). opts — это список опций, разделённых запятыми:

‘retbr’
‘blr’

Кроме того, ‘-mharden-sls=all’ включает все укрепления SLS, а ‘-mharden-sls=none’ отключает все укрепления SLS.

-mearly-ra=scope

Определите, когда включить ранний проход выделения регистров. Этот проход выполняется до планирования инструкций и пытается найти выделение без сохранения для кода с плавающей запятой и векторного кода. Он также пытается использовать инструкции с множественными регистрами с шагом, такие как чередующие LD1 и ST1 SME2.

Возможные значения scope:

all, которое выполняет проход для всех функций; strided, которое выполняет проход для функций, имеющих доступ к инструкциям с множественными регистрами с шагом; и none, которое отключает проход.

-mearly-ra=all является значением по умолчанию для -O2 и выше, и для -Os. -mearly-ra=none — значение по умолчанию в противном случае.

-mearly-ldp-fusion

Включить копирование прохода объединения пар загрузки/хранения AArch64, который выполняется до выделения регистров. Включено по умолчанию при ‘-O’ и выше.

-mlate-ldp-fusion

Включить копирование прохода объединения пар загрузки/хранения AArch64, который выполняется после выделения регистров. Включено по умолчанию при ‘-O’ и выше.

-msve-vector-bits=bits

Укажите количество битов в регистре SVE вектора. Этот параметр действует только при включенном SVE.

GCC поддерживает два варианта генерации кода SVE: «агитационное представление длинны вектора», которое работает с любым размером регистров вектора, и «специфическое представление длинны вектора», которое позволяет GCC делать предположения о длинне вектора, когда это полезно для оптимизации. Возможные значения ‘bits’: ‘scalable’, ‘128’, ‘256’, ‘512’, ‘1024’ и ‘2048’. Указание ‘scalable’ выбирает вывод не зависящий от длины вектора. В настоящее время ‘-msve-vector-bits=128’ также генерирует вывод не зависящий от длины вектора для целей большого порядка байтов. Все остальные значения генерируют код, специфичный для длины вектора. Поведение этих значений может измениться в будущих версиях, и на них не стоит полагаться для создания кода, который портативный между разными аппаратными реализациями SVE длины вектора, кроме ‘scalable’. Значение по умолчанию — ‘-msve-vector-bits=scalable’, что создаёт код не зависящий от длины вектора.

  • -march и -mcpu Модификаторы функций

3.19.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 Extension. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘lse’

Включить инструкции Large System Extension. Они включены по умолчанию для -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. Это позволяет использовать инструкции LDAPR для атомарных семантик load-acquire, и передает их в ассемблер, позволяя инструкциям из расширения RCpc использоваться в inline asm-выражениях.

‘dotprod’

Включить расширение Dot Product. Это также включает инструкции Advanced SIMD.

‘aes’

Включить расширение Armv8-a aes и pmull crypto. Это также включает инструкции Advanced SIMD.

‘sha2’

Включить расширение Armv8-a sha2 crypto. Это также включает инструкции Advanced SIMD.

‘sha3’

Включить расширение sha512 и sha3 crypto. Это также включает инструкции Advanced SIMD. Использование этой опции с архитектурами, предшествующими Armv8.2-A, не поддерживается.

‘sm4’

Включить расширение sm3 и sm4 crypto. Это также включает инструкции Advanced SIMD. Использование этой опции с архитектурами, предшествующими Armv8.2-A, не поддерживается.

‘profile’

Включить расширение Statistical Profiling. Эта опция только для включения расширения на уровне ассемблера и не влияет на генерацию кода.

‘rng’

Включить инструкции Armv8.5-a Random Number. Эта опция только для включения расширения на уровне ассемблера и не влияет на генерацию кода.

‘memtag’

Включить расширения Memory Tagging Armv8.5-a. Использование этой опции с архитектурами, предшествующими Armv8.5-A, не поддерживается.

‘sb’

Включить инструкцию Armv8-a Speculation Barrier. Эта опция только для включения расширения на уровне ассемблера и не влияет на генерацию кода. Эта опция включена по умолчанию для -march=armv8.5-a.

‘ssbs’

Включить инструкцию Armv8-a Speculative Store Bypass Safe. Эта опция только для включения расширения на уровне ассемблера и не влияет на генерацию кода. Эта опция включена по умолчанию для -march=armv8.5-a.

‘predres’

Включить инструкции Armv8-a Execution and Data Prediction Restriction. Эта опция только для включения расширения на уровне ассемблера и не влияет на генерацию кода. Эта опция включена по умолчанию для -march=armv8.5-a.

‘sve2’

Включить Armv8-a Scalable Vector Extension 2. Это также включает инструкции SVE.

‘sve2-bitperm’

Включить инструкции SVE2 bitperm. Это также включает инструкции SVE2.

‘sve2-sm4’

Включить инструкции SVE2 sm4. Это также включает инструкции SVE2.

‘sve2-aes’

Включить инструкции SVE2 aes. Это также включает инструкции SVE2.

‘sve2-sha3’

Включить инструкции SVE2 sha3. Это также включает инструкции SVE2.

‘tme’

Включить расширение Transactional Memory.

‘i8mm’

Включить инструкции 8-битного целочисленного матричного умножения. Это также включает инструкции Advanced SIMD и с плавающей запятой. Эта опция включена по умолчанию для -march=armv8.6-a. Использование этой опции с архитектурами, предшествующими Armv8.2-A, не поддерживается.

‘f32mm’

Включить инструкции 32-битного матричного умножения с плавающей запятой. Это также включает инструкции SVE. Использование этой опции с архитектурами, предшествующими Armv8.2-A, не поддерживается.

‘f64mm’

Включить инструкции 64-битного матричного умножения с плавающей запятой. Это также включает инструкции SVE. Использование этой опции с архитектурами, предшествующими Armv8.2-A, не поддерживается.

‘bf16’

Включить инструкции с плавающей запятой brain half-precision. Это также включает инструкции Advanced SIMD и с плавающей запятой. Эта опция включена по умолчанию для -march=armv8.6-a. Использование этой опции с архитектурами, предшествующими Armv8.2-A, не поддерживается.

‘ls64’

Включить 64-байтовые атомарные инструкции загрузки и сохранения для ускорителей. Эта опция включена по умолчанию для -march=armv8.7-a.

‘mops’

Включить инструкции для ускорения операций с памятью, такие как memcpy, memmove, memset. Эта опция включена по умолчанию для -march=armv8.8-a

‘flagm’

Включить расширение Flag Manipulation instructions.

‘pauth’

Включить расширение Pointer Authentication.

‘cssc’

Включить инструкции Common Short Sequence Compression.

‘sme’

Включить Scalable Matrix Extension.

‘sme-i16i64’

Включить расширение FEAT_SME_I16I64 к SME.

‘sme-f64f64’

Включить расширение FEAT_SME_F64F64 к SME. +

‘sme2’

Включить Scalable Matrix Extension 2. Это также включает инструкции SME.

‘lse128’

Включить расширение LSE128 128-битных атомарных инструкций. Это также включает инструкции LSE.

‘d128’

Включить поддержку 128-битных инструкций чтения/записи системных регистров. Это также включает расширение LSE128.

‘gcs’

Включить поддержку расширения Armv9.4-a Guarded Control Stack.

‘the’

Включить поддержку расширения Armv8.9-a/9.4-a translation hardening.

‘rcpc3’

Включить расширение RCpc3 (Release Consistency).

Функция crypto подразумевает aes, sha2 и simd, которая подразумевает fp. Обратно, nofp подразумевает nosimd, которая подразумевает nocrypto, noaes и nosha2.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/AArch64-Options.html

Spec-Zone.ru

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