3.20.1 Параметры AArch64
Эти параметры определены для реализаций AArch64:
-
-mabi=name -
Создавать код для указанной модели данных. Допустимые значения: ‘ilp32’ для модели данных, подобной SysV, в которой int, long int и указатели имеют размер 32 бита, и ‘lp64’ для модели данных, подобной SysV, в которой int имеет размер 32 бита, а long int и указатели — 64 бита.
Значение по умолчанию зависит от конкретной конфигурации целевой платформы. Обратите внимание, что ABI LP64 и ILP32 несовместимы при компоновке; необходимо компилировать всю программу с одним и тем же ABI и компоновывать её с совместимым набором библиотек.
Модель ‘ilp32’ устарела.
-
-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, присутствующие в базовой 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’, ‘+fcma’, ‘+jscvt’ ‘armv8.4-a’ Armv8.4-A ‘armv8.3-a’, ‘+flagm’, ‘+fp16fml’, ‘+dotprod’, ‘+rcpc2’ ‘armv8.5-a’ Armv8.5-A ‘armv8.4-a’, ‘+sb’, ‘+ssbs’, ‘+predres’, ‘+frintts’, ‘+flagm2’ ‘armv8.6-a’ Armv8.6-A ‘armv8.5-a’, ‘+bf16’, ‘+i8mm’ ‘armv8.7-a’ Armv8.7-A ‘armv8.6-a’, ‘+wfxt’, ‘+xs’ ‘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’, ‘+wfxt’, ‘+xs’ ‘armv9.3-a’ Armv9.3-A ‘armv9.2-a’, ‘+mops’ ‘armv9.4-a’ Armv9.4-A ‘armv9.3-a’, ‘+sve2p1’ ‘armv9.5-a’ Armv9.5-A ‘armv9.4-a’, ‘cpa’, ‘+faminmax’, ‘+lut’ ‘armv8-r’ Armv8-R ‘armv8-r’ Значение ‘native’ доступно в GNU/Linux на AArch64 и указывает компилятору выбрать архитектуру хост-системы. Этот параметр не действует, если компилятор не может определить архитектуру хост-системы. Если задано -march=native и не указан другой параметр -mcpu или -mtune, GCC также выберет ЦП хост-системы для настройки и определит поддерживаемые архитектурные функции. Иными словами, -march=native рассматривается как -mcpu=native.
Допустимые значения 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’, ‘oryon-1’, ‘neoverse-512tvb’, ‘neoverse-e1’, ‘neoverse-n1’, ‘neoverse-n2’, ‘neoverse-v1’, ‘neoverse-v2’, ‘grace’, ‘neoverse-v3’, ‘neoverse-v3ae’, ‘neoverse-n3’, ‘olympus’, ‘cortex-a725’, ‘cortex-x925’, ‘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-r82ae’, ‘cortex-x1’, ‘cortex-x1c’, ‘cortex-x2’, ‘cortex-x3’, ‘cortex-x4’, ‘cortex-a510’, ‘cortex-a520’, ‘cortex-a520ae’, ‘cortex-a710’, ‘cortex-a715’, ‘cortex-a720’, ‘cortex-a720ae’, ‘ampere1’, ‘ampere1a’, ‘ampere1b’, ‘cobalt-100’, ‘apple-m1’, ‘apple-m2’, ‘apple-m3’ и ‘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’, ‘apple-m1’, ‘apple-m2’, ‘apple-m3’, ‘gb10’ указывают GCC на необходимость настройки для системы big.LITTLE.
Значение ‘neoverse-512tvb’ указывает GCC на необходимость настройки для ядер Neoverse, которые (a) реализуют SVE и (b) имеют общую пропускную способность векторных операций 512 бит за такт. Иными словами, этот параметр указывает GCC настроить код для ядер Neoverse, способных выполнять за такт 4 арифметические инструкции Advanced SIMD по 128 бит и эквивалентное количество арифметических инструкций SVE за такт (2 для SVE шириной 256 бит, 4 для SVE шириной 128 бит). Это значение более универсально, чем настройка для конкретного ядра, например Neoverse V1, но конкретнее, чем описанная ниже настройка по умолчанию.
Кроме того, в системах GNU/Linux на AArch64 значение ‘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, которые (a) реализуют SVE и (b) имеют общую пропускную способность векторных операций 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-
Включить или отключить загрузку литералов относительно 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|gcs -
Выбрать используемые функции защиты переходов. Значение ‘none’ используется по умолчанию и отключает все виды защиты переходов. Значение ‘standard’ включает все виды защиты переходов. Если для функции доступны дополнительные параметры настройки, ‘standard’ задаёт стандартный уровень. Значение ‘pac-ret[+leaf]’ включает стандартный уровень подписи адреса возврата: подпись адресов возврата функций, сохраняющих адрес возврата в памяти (нелистовые функции практически всегда делают это), с использованием ключа a. Необязательный аргумент ‘leaf’ позволяет включить в подпись и листовые функции. Необязательный аргумент ‘b-key’ позволяет подписывать функции ключом B вместо ключа A. Значение ‘bti’ включает механизм идентификации целей переходов. Значение ‘gcs’ включает генерацию кода, совместимого с защищённым стеком управления.
-
-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’, который создаёт код, не зависящий от длины вектора.
-
-Wexperimental-fmv-target Выдавать предупреждение об использовании экспериментального механизма Function Multi Versioning. Спецификация расширения языка C для Arm, описывающая Function Multi Versioning, имеет статус бета-версии и может измениться. При использовании FMV следует учитывать вероятность изменения поведения и несовместимости в будущем.
3.20.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 для семантики атомарной загрузки с acquire и передаёт эту возможность ассемблеру, разрешая использовать инструкции расширения 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’
Включить расширения Armv8.5-a Memory Tagging. Использование этого параметра с архитектурами до 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.
- ‘sve2p1’
Включить инструкции SVE2.1. Это также включает инструкции 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 байт для ускорителей.
- ‘mops’
Включить инструкции для ускорения операций с памятью, таких как
memcpy,memmove,memset. По умолчанию этот параметр включён для -march=armv8.8-a- ‘flagm’
Включить расширение инструкций Flag Manipulation.
- ‘flagm2’
Включить инструкции преобразования флагов FlagM2.
- ‘pauth’
Включить расширение Pointer Authentication.
- ‘cssc’
Включить инструкции Common Short Sequence Compression.
- ‘sme’
Включить Scalable Matrix Extension. Поддерживается только при включённом SVE2.
- ‘sme-i16i64’
Включить расширение FEAT_SME_I16I64 для SME. Это также включает инструкции SME.
- ‘sme-f64f64’
Включить расширение FEAT_SME_F64F64 для SME. Это также включает инструкции SME.
- ‘sme2’
Включить Scalable Matrix Extension 2. Это также включает инструкции SME.
- ‘sme-b16b16’
Включить расширение FEAT_SME_B16B16 для SME. Это также включает инструкции SME2 и SVE_B16B16.
- ‘sme-f16f16’
Включить расширение FEAT_SME_F16F16 для SME. Это также включает инструкции SME2.
- ‘sme2p1’
Включить Scalable Matrix Extension версии 2.1. Это также включает инструкции SME2.
- ‘fcma’
Включить расширения SIMD для комплексных чисел.
- ‘jscvt’
Включить инструкцию преобразования JavaScript
fjcvtzs.- ‘frintts’
Включить инструкции округления чисел с плавающей точкой до целого значения.
- ‘wfxt’
Включить инструкции
wfetиwfit.- ‘xs’
Включить расширение атрибута памяти XS.
- ‘lse128’
Включить расширение атомарных 128-разрядных инструкций LSE128. Это также включает инструкции LSE.
- ‘d128’
Включить поддержку инструкций чтения и записи системных регистров шириной 128 бит. Это также включает расширение LSE128.
- ‘gcs’
Включить поддержку расширения Armv9.4-a Guarded Control Stack.
- ‘the’
Включить поддержку расширения Armv8.9-a/9.4-a для защиты трансляции.
- ‘rcpc2’
Включить расширение RCpc2.
- ‘rcpc3’
Включить расширение RCpc3 (Release Consistency).
- ‘fp8’
Включить расширение fp8 (8-разрядная плавающая точка).
- ‘fp8fma’
Включить расширение fp8 (8-разрядная плавающая точка) для умножения с накоплением.
- ‘ssve-fp8fma’
Включить расширение fp8 (8-разрядная плавающая точка) для умножения с накоплением в потоковом режиме.
- ‘fp8dot4’
Включить расширение fp8 (8-разрядная плавающая точка) для 4-компонентного скалярного произведения с одинарной точностью.
- ‘ssve-fp8dot4’
Включить расширение fp8 (8-разрядная плавающая точка) для 4-компонентного скалярного произведения с одинарной точностью в потоковом режиме.
- ‘fp8dot2’
Включить расширение fp8 (8-разрядная плавающая точка) для 2-компонентного скалярного произведения с половинной точностью.
- ‘ssve-fp8dot2’
Включить расширение fp8 (8-разрядная плавающая точка) для 2-компонентного скалярного произведения с половинной точностью в потоковом режиме.
- ‘faminmax’
Включить расширение Floating Point Absolute Maximum/Minimum.
- ‘lut’
Включить расширение Lookup Table.
- ‘cpa’
Включить инструкции Checked Pointer Arithmetic.
- ‘sve-b16b16’
-
Включить расширение SVE для вычислений с плавающей точкой brain без расширения разрядности (
bf16). Оно действует только при включённомsve2илиsme2.
Функция 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-15.3.0/gcc/AArch64-Options.html