Spec-Zone.ru › GCC 15

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

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

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

Spec-Zone.ru

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