Spec-Zone.ru › GCC 14

3.19.1 Параметры AArch64

Для реализаций AArch64 определены следующие параметры:

-mabi=name

Генерировать код для указанной модели данных. Допустимые значения: ‘ilp32’ для модели данных типа SysV, в которой int, long int и указатели имеют размер 32 бита, и ‘lp64’ для модели данных типа SysV, в которой int имеет размер 32 бита, а long int и указатели — 64 бита.

Значение по умолчанию зависит от конкретной конфигурации цели. Обратите внимание, что ABI LP64 и ILP32 несовместимы при компоновке: необходимо компилировать всю программу с одним и тем же ABI и выполнять компоновку с совместимым набором библиотек.

-mbig-endian

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

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

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

Spec-Zone.ru

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