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’, что создаёт код не зависящий от длины вектора.
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