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 -
Генерировать код с прямым порядком байтов. Это значение используется по умолчанию, если GCC настроен для цели ‘aarch64_be-*-*’.
-
-mgeneral-regs-only -
Генерировать код, использующий только регистры общего назначения. Это не позволит компилятору использовать регистры с плавающей точкой и Advanced SIMD, но не наложит никаких ограничений на ассемблер.
-
-mlittle-endian -
Генерировать код с обратным порядком байтов. Это значение используется по умолчанию, если GCC настроен для цели ‘aarch64-*-*’, но не для ‘aarch64_be-*-*’.
-
-mcmodel=tiny -
Генерировать код для крошечной модели кода. Программа и определенные статически символы должны находиться в пределах 1 МБ друг от друга. Программы могут компоновываться статически или динамически.
-
-mcmodel=small -
Генерировать код для малой модели кода. Программа и определенные статически символы должны находиться в пределах 4 ГБ друг от друга. Программы могут компоновываться статически или динамически. Это модель кода, используемая по умолчанию.
-
-mcmodel=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’ для глобального canary и ‘sysreg’ для canary в соответствующем системном регистре.
При выборе последнего варианта параметры -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset также задают системный регистр, который будет использоваться в качестве базового регистра для чтения canary, и смещение от этого базового регистра. Регистр и смещение по умолчанию не заданы, поскольку этот механизм предназначен исключительно для использования в ядре Linux.
-
-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. Для этого между инструкциями работы с памятью и инструкциями умножения с накоплением для 64-разрядных целых чисел вставляется инструкция NOP.
-
-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, имеющиеся в базовом наборе команд 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 и функции, включаемые ими по умолчанию:
Значение 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-n3’, ‘neoverse-v1’, ‘neoverse-v2’, ‘neoverse-v3’, ‘neoverse-v3ae’, ‘grace’, ‘qdf24xx’, ‘saphira’, ‘phecda’, ‘xgene1’, ‘vulcan’, ‘octeontx’, ‘octeontx81’, ‘octeontx83’, ‘octeontx2’, ‘octeontx2t98’, ‘octeontx2t96’ ‘octeontx2t93’, ‘octeontx2f95’, ‘octeontx2f95n’, ‘octeontx2f95mm’, ‘a64fx’, ‘fujitsu-monaka’, ‘thunderx’, ‘thunderxt88’, ‘thunderxt88p1’, ‘thunderxt81’, ‘tsv110’, ‘hip12’, ‘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-x925’, ‘cortex-a510’, ‘cortex-a520’, ‘cortex-a710’, ‘cortex-a715’, ‘cortex-a720’, ‘cortex-a725’, ‘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=. Синтаксис, семантика и допустимые значения string для этого параметра не гарантированно остаются неизменными в разных выпусках.
Этот параметр предназначен только для использования при разработке GCC.
-
-mverbose-cost-dump -
Включить подробный вывод модели стоимости в файлы отладочных дампов. Этот параметр предназначен для отладки компилятора.
-
-mpc-relative-literal-loads -mno-pc-relative-literal-loads-
Включить или отключить загрузку литералов с адресацией относительно счетчика команд. При использовании этого параметра к пулам литералов обращаются одной инструкцией, а сами пулы размещаются после каждой функции. Это ограничивает максимальный размер функций 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’ отключает ее.
-
-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’, который создает код, не зависящий от длины вектора.
3.19.1.1 Модификаторы возможностей -march и -mcpu
Модификаторами возможностей, используемыми с -march и -mcpu, могут быть любые из перечисленных ниже, а также их инверсии nofeature:
- ‘crc’
Включить расширение CRC. По умолчанию включено для -march=armv8.1-a.
- ‘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 для семантики атомарной загрузки с захватом и передаёт этот параметр ассемблеру, позволяя использовать инструкции расширения RCpc в операторах встроенного ассемблера.
- ‘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 не поддерживается.
- ‘profile’
Включить расширение Statistical Profiling. Этот параметр включает расширение только на уровне ассемблера и не влияет на генерацию кода.
- ‘rng’
Включить инструкции генерации случайных чисел Armv8.5-a. Этот параметр включает расширение только на уровне ассемблера и не влияет на генерацию кода.
- ‘memtag’
Включить расширения Memory Tagging Armv8.5-a. Использование этого параметра с архитектурами до Armv8.5-A не поддерживается.
- ‘sb’
Включить инструкцию Speculation Barrier Armv8-a. Этот параметр включает расширение только на уровне ассемблера и не влияет на генерацию кода. По умолчанию этот параметр включён для -march=armv8.5-a.
- ‘ssbs’
Включить инструкцию Speculative Store Bypass Safe Armv8-a. Этот параметр включает расширение только на уровне ассемблера и не влияет на генерацию кода. По умолчанию этот параметр включён для -march=armv8.5-a.
- ‘predres’
Включить инструкции Execution and Data Prediction Restriction Armv8-a. Этот параметр включает расширение только на уровне ассемблера и не влияет на генерацию кода. По умолчанию этот параметр включён для -march=armv8.5-a.
- ‘sve2’
Включить Scalable Vector Extension 2 для Armv8-a. Также включает инструкции 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. Также включает инструкции 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’
Включить расширение атомарных 128-битных инструкций LSE128. Также включает инструкции LSE.
- ‘d128’
Включить поддержку инструкций чтения и записи 128-битных системных регистров. Также включает расширение LSE128.
- ‘gcs’
Включить поддержку расширения Guarded Control Stack для Armv9.4-a.
- ‘the’
Включить поддержку расширения усиления защиты трансляции для Armv8.9-a/9.4-a.
- ‘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.4.0/gcc/AArch64-Options.html