Spec-Zone.ru › GCC 10

Далее: AVR Параметры, Предыдущее: ARC Параметры, Вверх: Параметры зависимые от машины [Оглавление][Индекс]

3.19.5 Параметры ARM ¶

Эти параметры ‘-m’ определены для порта ARM:

-mabi=name

Генерирует код для указанного ABI. Разрешенные значения: ‘apcs-gnu’, ‘atpcs’, ‘aapcs’, ‘aapcs-linux’ и ‘iwmmxt’.

-mapcs-frame

Генерирует фрейм стека, совместимый со стандартом вызова процедур ARM для всех функций, даже если это не строго необходимо для корректного выполнения кода. Указание -fomit-frame-pointer с этим параметром приводит к тому, что фреймы стека не генерируются для функций-листьев. По умолчанию используется -mno-apcs-frame. Этот параметр устарел.

-mapcs

Это синоним для -mapcs-frame и устарел.

-mthumb-interwork

Генерирует код, поддерживающий вызовы между наборами команд ARM и Thumb. Без этого параметра в процессорах предшествующих v5 архитектурах два набора команд нельзя надежно использовать в одной программе. По умолчанию используется -mno-thumb-interwork, так как при указании -mthumb-interwork генерируется немного больший код. В конфигурациях AAPCS этот параметр не имеет смысла.

-mno-sched-prolog

Препятствует переупорядочению инструкций в преамбуле функции или слиянию этих инструкций с инструкциями в теле функции. Это означает, что все функции начинаются с узнаваемого набора инструкций (или, по сути, одного из набора различных преамбул функций), и эта информация может использоваться для определения начала функций внутри исполняемого кода. По умолчанию используется -msched-prolog.

-mfloat-abi=name

Указывает, какой ABI с плавающей точкой использовать. Разрешенные значения: ‘soft’, ‘softfp’ и ‘hard’.

Указание ‘soft’ заставляет GCC генерировать вывод, содержащий вызовы библиотек для операций с плавающей точкой. ‘softfp’ позволяет генерировать код, использующий аппаратные инструкции с плавающей точкой, но при этом использовать соглашения о вызовах soft-float. ‘hard’ позволяет генерировать инструкции с плавающей точкой и использовать соглашения о вызовах, специфичные для FPU.

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

-mgeneral-regs-only

Генерирует код, использующий только регистры общего назначения. Это предотвратит использование компилятором регистров с плавающей точкой и Advanced SIMD, но не наложит никаких ограничений на ассемблер.

-mlittle-endian

Генерирует код для процессора, работающего в режиме little-endian. Это значение по умолчанию для всех стандартных конфигураций.

-mbig-endian

Генерирует код для процессора, работающего в режиме big-endian; по умолчанию компилируется код для процессора little-endian.

-mbe8
-mbe32

При линковке big-endian изображения выбирает между форматами BE8 и BE32. Параметр не оказывает влияния на little-endian изображения и игнорируется. Значение по умолчанию зависит от выбранной целевой архитектуры. Для архитектур ARMv6 и более поздних архитектур значение по умолчанию — BE8, для более старых архитектур — BE32. Формат BE32 устарел в ARM.

-march=name[+extension…]

Указывает имя целевой архитектуры ARM. GCC использует это имя, чтобы определить, какие инструкции можно выдать при генерации ассемблерного кода. Этот параметр может быть использован в сочетании или вместо параметра -mcpu=.

Разрешенные имена: ‘armv4t’, ‘armv5t’, ‘armv5te’, ‘armv6’, ‘armv6j’, ‘armv6k’, ‘armv6kz’, ‘armv6t2’, ‘armv6z’, ‘armv6zk’, ‘armv7’, ‘armv7-a’, ‘armv7ve’, ‘armv8-a’, ‘armv8.1-a’, ‘armv8.2-a’, ‘armv8.3-a’, ‘armv8.4-a’, ‘armv8.5-a’, ‘armv8.6-a’, ‘armv7-r’, ‘armv8-r’, ‘armv6-m’, ‘armv6s-m’, ‘armv7-m’, ‘armv7e-m’, ‘armv8-m.base’, ‘armv8-m.main’, ‘armv8.1-m.main’, ‘iwmmxt’ и ‘iwmmxt2’.

Кроме того, следующие архитектуры, которые не поддерживают состояние выполнения Thumb, распознаются, но поддержка устарела: ‘armv4’.

Многие из архитектур поддерживают расширения. Их можно добавить, добавив ‘+расширение’ к имени архитектуры. Параметры расширения обрабатываются в порядке их следования, и возможности накапливаются. Расширение также включит любые необходимые базовые расширения, от которых оно зависит. Например, расширение ‘+crypto’ всегда включит расширение ‘+simd’. Исключением из аддитивной конструкции являются расширения, которые начинаются с ‘+no…’: эти расширения отключают указанный параметр и любые другие расширения, которые могут зависеть от наличия этого расширения.

Например, ‘-march=armv7-a+simd+nofp+vfpv4’ эквивалентно записи ‘-march=armv7-a+vfpv4’, поскольку параметр ‘+simd’ полностью отключён параметром ‘+nofp’, который следует за ним.

Большинство имён расширений имеют общее название, но имеют эффект, зависящий от архитектуры, к которой они применяются. Например, параметр ‘+simd’ может быть применён как к архитектуре ‘armv7-a’, так и к архитектуре ‘armv8-a’, но включит оригинальные расширения ARMv7-A Advanced SIMD (Neon) для ‘armv7-a’ и вариант ARMv8-A для ‘armv8-a’.

В таблице ниже перечислены поддерживаемые расширения для каждой архитектуры. Неупомянутые архитектуры не поддерживают никаких расширений.

END_OF_DOCUMENT_MARKER
‘armv5te’
‘armv6’
‘armv6j’
‘armv6k’
‘armv6kz’
‘armv6t2’
‘armv6z’
‘armv6zk’
‘+fp’

Инструкции с плавающей запятой VFPv2. Расширение ‘+vfpv2’ может использоваться как псевдоним для этого расширения.

‘+nofp’

Отключить инструкции с плавающей запятой.

‘armv7’

Общая подмножество архитектур ARMv7-A, ARMv7-R и ARMv7-M.

‘+fp’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности. Расширение ‘+vfpv3-d16’ может использоваться как псевдоним для этого расширения. Обратите внимание, что плавающая запятая не поддерживается базовой архитектурой ARMv7-M, но совместима с архитектурами ARMv7-A и ARMv7-R.

‘+nofp’

Отключить инструкции с плавающей запятой.

‘armv7-a’
‘+mp’

Расширение для многопроцессорных систем.

‘+sec’

Расширение безопасности.

‘+fp’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности. Расширение ‘+vfpv3-d16’ может использоваться как псевдоним для этого расширения.

‘+simd’

Расширенные инструкции SIMD (Neon) v1 и инструкции с плавающей запятой VFPv3. Расширения ‘+neon’ и ‘+neon-vfpv3’ могут использоваться как псевдонимы для этого расширения.

‘+vfpv3’

Инструкции с плавающей запятой VFPv3 с 32 регистрами двойной точности.

‘+vfpv3-d16-fp16’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности и операциями преобразования чисел с плавающей запятой полуточной точности.

‘+vfpv3-fp16’

Инструкции с плавающей запятой VFPv3 с 32 регистрами двойной точности и операциями преобразования чисел с плавающей запятой полуточной точности.

‘+vfpv4-d16’

Инструкции с плавающей запятой VFPv4 с 16 регистрами двойной точности.

‘+vfpv4’

Инструкции с плавающей запятой VFPv4 с 32 регистрами двойной точности.

‘+neon-fp16’

Расширенные инструкции SIMD (Neon) v1 и инструкции с плавающей запятой VFPv3 с операциями преобразования чисел с плавающей запятой полуточной точности.

‘+neon-vfpv4’

Расширенные инструкции SIMD (Neon) v2 и инструкции с плавающей запятой VFPv4.

‘+nosimd’

Отключить инструкции Advanced SIMD (не отключает инструкции с плавающей запятой).

‘+nofp’

Отключить инструкции с плавающей запятой и Advanced SIMD.

‘armv7ve’

Расширенная версия архитектуры ARMv7-A с поддержкой виртуализации.

‘+fp’

Инструкции с плавающей запятой VFPv4 с 16 регистрами двойной точности. Расширение ‘+vfpv4-d16’ может использоваться как псевдоним для этого расширения.

‘+simd’

Расширенные инструкции SIMD (Neon) v2 и инструкции с плавающей запятой VFPv4. Расширение ‘+neon-vfpv4’ может использоваться как псевдоним для этого расширения.

‘+vfpv3-d16’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности.

‘+vfpv3’

Инструкции с плавающей запятой VFPv3 с 32 регистрами двойной точности.

‘+vfpv3-d16-fp16’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности и операциями преобразования чисел с плавающей запятой полуточной точности.

‘+vfpv3-fp16’

Инструкции с плавающей запятой VFPv3 с 32 регистрами двойной точности и операциями преобразования чисел с плавающей запятой полуточной точности.

‘+vfpv4-d16’

Инструкции с плавающей запятой VFPv4 с 16 регистрами двойной точности.

‘+vfpv4’

Инструкции с плавающей запятой VFPv4 с 32 регистрами двойной точности.

‘+neon’

Расширенные инструкции SIMD (Neon) v1 и инструкции с плавающей запятой VFPv3. Расширение ‘+neon-vfpv3’ может использоваться как псевдоним для этого расширения.

‘+neon-fp16’

Расширенные инструкции SIMD (Neon) v1 и инструкции с плавающей запятой VFPv3 с операциями преобразования чисел с плавающей запятой полуточной точности.

‘+nosimd’

Отключить инструкции Advanced SIMD (не отключает инструкции с плавающей запятой).

‘+nofp’

Отключить инструкции с плавающей запятой и Advanced SIMD.

‘armv8-a’
‘+crc’

Инструкции проверки циклическим избыточным кодом (CRC).

‘+simd’

Расширенные инструкции SIMD и с плавающей запятой ARMv8-A.

‘+crypto’

Криптографические инструкции.

‘+nocrypto’

Отключить криптографические инструкции.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

‘+sb’

Инструкция барьера упреждения.

‘+predres’

Инструкции ограничения прогнозирования выполнения и данных.

‘armv8.1-a’
‘+simd’

Расширенные инструкции SIMD и с плавающей запятой ARMv8.1-A.

‘+crypto’

Криптографические инструкции. Это также включает в себя инструкции Advanced SIMD и с плавающей запятой.

‘+nocrypto’

Отключить криптографические инструкции.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

‘+sb’

Инструкция барьера упреждения.

‘+predres’

Инструкции ограничения прогнозирования выполнения и данных.

‘armv8.2-a’
‘armv8.3-a’
‘+fp16’

Инструкции обработки данных с плавающей запятой полуточной точности. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘+fp16fml’

Расширение fmla для чисел с плавающей запятой полуточной точности. Это также включает расширение чисел с плавающей запятой полуточной точности, Advanced SIMD и инструкции с плавающей запятой.

‘+simd’

Расширенные инструкции SIMD и с плавающей запятой ARMv8.1-A.

‘+crypto’

Криптографические инструкции. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘+dotprod’

Включить расширение Dot Product. Это также включает инструкции Advanced SIMD.

‘+nocrypto’

Отключить криптографическое расширение.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

‘+sb’

Инструкция барьера упреждения.

‘+predres’

Инструкции ограничения прогнозирования выполнения и данных.

‘+i8mm’

Инструкции умножения матриц целых чисел 8-битного размера. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘+bf16’

Инструкции с плавающей запятой Brain полуточной точности. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘armv8.4-a’
‘+fp16’

Инструкции обработки данных с плавающей запятой полуточной точности. Это также включает инструкции Advanced SIMD и с плавающей запятой, а также расширение Dot Product и расширение fmla для чисел с плавающей запятой полуточной точности.

‘+simd’

Расширенные инструкции SIMD и с плавающей запятой ARMv8.3-A, а также расширение Dot Product.

‘+crypto’

Криптографические инструкции. Это также включает инструкции Advanced SIMD и с плавающей запятой, а также расширение Dot Product.

‘+nocrypto’

Отключить криптографическое расширение.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

‘+sb’

Инструкция барьера упреждения.

‘+predres’

Инструкции ограничения прогнозирования выполнения и данных.

‘+i8mm’

Инструкции умножения матриц целых чисел 8-битного размера. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘+bf16’

Инструкции с плавающей запятой Brain полуточной точности. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘armv8.5-a’
‘+fp16’

Инструкции обработки данных с плавающей запятой полуточной точности. Это также включает инструкции Advanced SIMD и с плавающей запятой, а также расширение Dot Product и расширение fmla для полуточной плавающей запятой.

‘+simd’

Инструкции ARMv8.3-A Advanced SIMD и с плавающей запятой, а также расширение Dot Product.

‘+crypto’

Криптографические инструкции. Это также включает инструкции Advanced SIMD и с плавающей запятой, а также расширение Dot Product.

‘+nocrypto’

Отключить криптографическое расширение.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

‘+i8mm’

Инструкции умножения 8-битных целочисленных матриц. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘+bf16’

Инструкции с плавающей запятой полуточной точности Brain. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘armv8.6-a’
‘+fp16’

Инструкции обработки данных с плавающей запятой полуточной точности. Это также включает инструкции Advanced SIMD и с плавающей запятой, а также расширение Dot Product и расширение fmla для полуточной плавающей запятой.

‘+simd’

Инструкции ARMv8.3-A Advanced SIMD и с плавающей запятой, а также расширение Dot Product.

‘+crypto’

Криптографические инструкции. Это также включает инструкции Advanced SIMD и с плавающей запятой, а также расширение Dot Product.

‘+nocrypto’

Отключить криптографическое расширение.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

‘+i8mm’

Инструкции умножения 8-битных целочисленных матриц. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘+bf16’

Инструкции с плавающей запятой полуточной точности Brain. Это также включает инструкции Advanced SIMD и с плавающей запятой.

‘armv7-r’
‘+fp.sp’

Инструкции с плавающей запятой VFPv3 одинарной точности. Расширение ‘+vfpv3xd’ может использоваться как псевдоним для этого расширения.

‘+fp’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности. Расширение +vfpv3-d16 может использоваться как псевдоним для этого расширения.

‘+vfpv3xd-d16-fp16’

Инструкции с плавающей запятой VFPv3 одинарной точности с 16 регистрами двойной точности и операциями преобразования полуточной точности с плавающей запятой.

‘+vfpv3-d16-fp16’

Инструкции с плавающей запятой VFPv3 с 16 регистрами двойной точности и операциями преобразования полуточной точности с плавающей запятой.

‘+nofp’

Отключить расширение с плавающей запятой.

‘+idiv’

Инструкции целочисленного деления ARM-состояния.

‘+noidiv’

Отключить расширение целочисленного деления ARM-состояния.

‘armv7e-m’
‘+fp’

Инструкции с плавающей запятой VFPv4 одинарной точности.

‘+fpv5’

Инструкции с плавающей запятой FPv5 одинарной точности.

‘+fp.dp’

Инструкции с плавающей запятой FPv5 одинарной и двойной точности.

‘+nofp’

Отключить расширения с плавающей запятой.

‘armv8.1-m.main’
‘+dsp’

Инструкции DSP.

‘+mve’

Инструкции целочисленных расширений Vector Extension (MVE) M-профиля.

‘+mve.fp’

Инструкции целочисленных и расширений с плавающей запятой одинарной точности Vector Extension (MVE) M-профиля.

‘+fp’

Инструкции с плавающей запятой одинарной точности.

‘+fp.dp’

Инструкции с плавающей запятой одинарной и двойной точности.

‘+nofp’

Отключить расширение с плавающей запятой.

‘+cdecp0, +cdecp1, ... , +cdecp7’

Включить расширение Custom Datapath Extension (CDE) на выбранных сопроцессорах в соответствии с числами, указанными в параметрах в диапазоне от 0 до 7.

‘armv8-m.main’
‘+dsp’

Инструкции DSP.

‘+nodsp’

Отключить расширение DSP.

‘+fp’

Инструкции с плавающей запятой одинарной точности.

‘+fp.dp’

Инструкции с плавающей запятой одинарной и двойной точности.

‘+nofp’

Отключить расширение с плавающей запятой.

‘+cdecp0, +cdecp1, ... , +cdecp7’

Включить расширение Custom Datapath Extension (CDE) на выбранных сопроцессорах в соответствии с числами, указанными в параметрах в диапазоне от 0 до 7.

‘armv8-r’
‘+crc’

Инструкции Cyclic Redundancy Check (CRC).

‘+fp.sp’

Инструкции с плавающей запятой FPv5 одинарной точности.

‘+simd’

Инструкции ARMv8-A Advanced SIMD и с плавающей запятой.

‘+crypto’

Криптографические инструкции.

‘+nocrypto’

Отключить криптографические инструкции.

‘+nofp’

Отключить инструкции с плавающей запятой, Advanced SIMD и криптографические инструкции.

-march=native заставляет компилятор автоматически обнаружить архитектуру компьютера сборки. В настоящее время эта функция поддерживается только в GNU/Linux и не все архитектуры распознаются. Если автоматическое обнаружение не удалось, параметр не имеет эффекта.

-mtune=name

Этот параметр указывает имя целевого процессора ARM, для которого GCC должен настраивать производительность кода. Для некоторых реализаций ARM лучшая производительность может быть достигнута с использованием этого параметра. Допустимые имена: ‘arm7tdmi’, ‘arm7tdmi-s’, ‘arm710t’, ‘arm720t’, ‘arm740t’, ‘strongarm’, ‘strongarm110’, ‘strongarm1100’, ‘strongarm1110’, ‘arm8’, ‘arm810’, ‘arm9’, ‘arm9e’, ‘arm920’, ‘arm920t’, ‘arm922t’, ‘arm946e-s’, ‘arm966e-s’, ‘arm968e-s’, ‘arm926ej-s’, ‘arm940t’, ‘arm9tdmi’, ‘arm10tdmi’, ‘arm1020t’, ‘arm1026ej-s’, ‘arm10e’, ‘arm1020e’, ‘arm1022e’, ‘arm1136j-s’, ‘arm1136jf-s’, ‘mpcore’, ‘mpcorenovfp’, ‘arm1156t2-s’, ‘arm1156t2f-s’, ‘arm1176jz-s’, ‘arm1176jzf-s’, ‘generic-armv7-a’, ‘cortex-a5’, ‘cortex-a7’, ‘cortex-a8’, ‘cortex-a9’, ‘cortex-a12’, ‘cortex-a15’, ‘cortex-a17’, ‘cortex-a32’, ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a55’, ‘cortex-a57’, ‘cortex-a72’, ‘cortex-a73’, ‘cortex-a75’, ‘cortex-a76’, ‘cortex-a76ae’, ‘cortex-a77’, ‘ares’, ‘cortex-r4’, ‘cortex-r4f’, ‘cortex-r5’, ‘cortex-r7’, ‘cortex-r8’, ‘cortex-r52’, ‘cortex-m0’, ‘cortex-m0plus’, ‘cortex-m1’, ‘cortex-m3’, ‘cortex-m4’, ‘cortex-m7’, ‘cortex-m23’, ‘cortex-m33’, ‘cortex-m35p’, ‘cortex-m55’, ‘cortex-m1.small-multiply’, ‘cortex-m0.small-multiply’, ‘cortex-m0plus.small-multiply’, ‘exynos-m1’, ‘marvell-pj4’, ‘neoverse-n1’, ‘neoverse-n2’, ‘neoverse-v1’, ‘xscale’, ‘iwmmxt’, ‘iwmmxt2’, ‘ep9312’, ‘fa526’, ‘fa626’, ‘fa606te’, ‘fa626te’, ‘fmp626’, ‘fa726te’, ‘xgene1’.

Также этот параметр может указать, что GCC должен настраивать производительность кода для системы big.LITTLE. Допустимые имена: ‘cortex-a15.cortex-a7’, ‘cortex-a17.cortex-a7’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a72.cortex-a35’, ‘cortex-a73.cortex-a53’, ‘cortex-a75.cortex-a55’, ‘cortex-a76.cortex-a55’.

-mtune=generic-arch указывает, что GCC должен настраивать производительность для набора процессоров в рамках архитектуры arch. Цель заключается в генерации кода, который будет хорошо работать на наиболее популярных процессорах в данный момент, балансируя между оптимизациями, полезными для некоторых процессоров в этом диапазоне, и избегая проблем производительности других процессоров. Влияние этого параметра может меняться в будущих версиях GCC по мере появления и исчезновения моделей процессоров.

-mtune допускает те же расширенные параметры, что и -mcpu, но расширенные параметры не влияют на настройку сгенерированного кода.

-mtune=native заставляет компилятор автоматически определять процессор компьютера сборки. В настоящее время эта функция поддерживается только в GNU/Linux, и не все архитектуры распознаются. Если автоматическое определение не удается, параметр не имеет эффекта.

-mcpu=name[+extension…]

Это указывает имя целевого процессора ARM. GCC использует это имя для получения имени целевой архитектуры ARM (как если бы был указан параметр -march) и типа процессора ARM, для которого необходимо настроить производительность (как если бы был указан параметр -mtune). В случае использования этого параметра совместно с -march или -mtune, эти параметры имеют приоритет над соответствующей частью этого параметра.

Многие из поддерживаемых процессоров реализуют необязательные архитектурные расширения. В этом случае архитектурные расширения обычно включены по умолчанию. Если существуют реализации, которым не хватает расширения, синтаксис расширения можно использовать для отключения тех расширений, которые отсутствуют. Для инструкций с плавающей точкой и Advanced SIMD (Neon) также необходимо учитывать настройки параметров -mfloat-abi и -mfpu: инструкции с плавающей точкой и Advanced SIMD будут использоваться только если -mfloat-abi не установлен на ‘soft’; а любая установка -mfpu, отличная от ‘auto’, переопределит доступные инструкции с плавающей точкой и SIMD-инструкции.

Например, ‘cortex-a9’ можно найти в трех основных конфигурациях: только целочисленные, только с блоком обработки плавающей точки или с блоком обработки плавающей точки и Advanced SIMD. По умолчанию все инструкции включены, но расширения ‘+nosimd’ и ‘+nofp’ могут использоваться для отключения только SIMD-инструкций или и SIMD-инструкций, и инструкций с плавающей точкой соответственно.

Допустимые имена для этого параметра такие же, как и для -mtune.

Следующие расширенные параметры являются общими для перечисленных процессоров:

‘+nodsp’

Отключить инструкции DSP на ‘cortex-m33’, ‘cortex-m35p’.

‘+nofp’

Отключает инструкции с плавающей точкой на ‘arm9e’, ‘arm946e-s’, ‘arm966e-s’, ‘arm968e-s’, ‘arm10e’, ‘arm1020e’, ‘arm1022e’, ‘arm926ej-s’, ‘arm1026ej-s’, ‘cortex-r5’, ‘cortex-r7’, ‘cortex-r8’, ‘cortex-m4’, ‘cortex-m7’, ‘cortex-m33’ и ‘cortex-m35p’. Отключает инструкции с плавающей точкой и SIMD-инструкции на ‘generic-armv7-a’, ‘cortex-a5’, ‘cortex-a7’, ‘cortex-a8’, ‘cortex-a9’, ‘cortex-a12’, ‘cortex-a15’, ‘cortex-a17’, ‘cortex-a15.cortex-a7’, ‘cortex-a17.cortex-a7’, ‘cortex-a32’, ‘cortex-a35’, ‘cortex-a53’ и ‘cortex-a55’.

‘+nofp.dp’

Отключает компонент двойной точности инструкций с плавающей точкой на ‘cortex-r5’, ‘cortex-r7’, ‘cortex-r8’, ‘cortex-r52’ и ‘cortex-m7’.

‘+nosimd’

Отключает SIMD-инструкции (но не инструкции с плавающей точкой) на ‘generic-armv7-a’, ‘cortex-a5’, ‘cortex-a7’ и ‘cortex-a9’.

‘+crypto’

Включает криптографические инструкции на ‘cortex-a32’, ‘cortex-a35’, ‘cortex-a53’, ‘cortex-a55’, ‘cortex-a57’, ‘cortex-a72’, ‘cortex-a73’, ‘cortex-a75’, ‘exynos-m1’, ‘xgene1’, ‘cortex-a57.cortex-a53’, ‘cortex-a72.cortex-a53’, ‘cortex-a73.cortex-a35’, ‘cortex-a73.cortex-a53’ и ‘cortex-a75.cortex-a55’.

Кроме того, псевдоцелевой ‘generic-armv7-a’ по умолчанию использует VFPv3 с 16 регистрами двойной точности. Он поддерживает следующие расширенные параметры: ‘mp’, ‘sec’, ‘vfpv3-d16’, ‘vfpv3’, ‘vfpv3-d16-fp16’, ‘vfpv3-fp16’, ‘vfpv4-d16’, ‘vfpv4’, ‘neon’, ‘neon-vfpv3’, ‘neon-fp16’, ‘neon-vfpv4’. Значения такие же, как и для расширений -march=armv7-a.

-mcpu=generic-arch также допустимо и эквивалентно -march=arch -mtune=generic-arch. Для получения дополнительной информации см. -mtune.

-mcpu=native заставляет компилятор автоматически определять процессор компьютера сборки. В настоящее время эта функция поддерживается только в GNU/Linux, и не все архитектуры распознаются. Если автоматическое определение не удается, параметр не имеет эффекта.

-mfpu=name

Это определяет, какое аппаратное обеспечение с плавающей точкой (или эмуляцию аппаратного обеспечения) доступно на целевой платформе. Допустимые имена: ‘auto’, ‘vfpv2’, ‘vfpv3’, ‘vfpv3-fp16’, ‘vfpv3-d16’, ‘vfpv3-d16-fp16’, ‘vfpv3xd’, ‘vfpv3xd-fp16’, ‘neon-vfpv3’, ‘neon-fp16’, ‘vfpv4’, ‘vfpv4-d16’, ‘fpv4-sp-d16’, ‘neon-vfpv4’, ‘fpv5-d16’, ‘fpv5-sp-d16’, ‘fp-armv8’, ‘neon-fp-armv8’ и ‘crypto-neon-fp-armv8’. Обратите внимание, что ‘neon’ — псевдоним для ‘neon-vfpv3’, а ‘vfp’ — псевдоним для ‘vfpv2’.

Настройка ‘auto’ — значение по умолчанию и является специальной. Она заставляет компилятор выбирать инструкции с плавающей точкой и расширения Advanced SIMD на основе настроек -mcpu и -march.

Если выбранное аппаратное обеспечение с плавающей точкой включает расширение NEON (например, -mfpu=neon), обратите внимание, что операции с плавающей точкой не генерируются проходом автовекторизации GCC, если также не указана -funsafe-math-optimizations. Это связано с тем, что аппаратное обеспечение NEON не полностью реализует стандарт IEEE 754 для арифметики с плавающей точкой (в частности, значения с нормализованной мантиссой обрабатываются как нули), поэтому использование инструкций NEON может привести к потере точности.

Вы также можете установить имя fpu на уровне функции, используя атрибуты функции target("fpu=") (см. Атрибуты функций ARM) или директивы (см. Директивы опций для конкретных функций).

-mfp16-format=name

Указывает формат полуточного типа с плавающей точкой __fp16. Допустимые имена: ‘none’, ‘ieee’, и ‘alternative’; значение по умолчанию — ‘none’, в этом случае тип __fp16 не определён. Смотрите Полуточная арифметика с плавающей точкой для получения дополнительной информации.

-mstructure-size-boundary=n

Размеры всех структур и объединений округляются до кратного числу бит, заданному этой опцией. Допустимые значения: 8, 32 и 64. Значение по умолчанию варьируется в зависимости от используемой инструментальной цепочки. Для инструментальной цепочки, ориентированной на COFF, значение по умолчанию равно 8. Значение 64 разрешено только в том случае, если это поддерживается основой ABI.

Указание большего числа может привести к более быстрому и эффективному коду, но также может увеличить размер программы. Различные значения потенциально несовместимы. Код, скомпилированный с одним значением, не может обязательно работать с кодом или библиотеками, скомпилированными с другим значением, если они обмениваются информацией, используя структуры или объединения.

Эта опция устарела.

-mabort-on-noreturn

Генерирует вызов функции abort в конце функции noreturn. Он выполняется, если функция пытается вернуть значение.

-mlong-calls
-mno-long-calls

Указывает компилятору выполнять вызовы функций, сначала загружая адрес функции в регистр, а затем выполняя вызов подпрограммы на этом регистре. Этот флаг необходим, если целевая функция расположена за пределами диапазона адресации в 64 мегабайта для вызова подпрограммы на основе смещения.

Даже если этот флаг включён, не все вызовы функций преобразуются в длинные вызовы. Правило заключается в том, что статические функции, функции с атрибутом short_call, функции, находящиеся в области действия директивы #pragma no_long_calls, и функции, чьи определения уже скомпилированы в текущей единице компиляции, не преобразуются в длинные вызовы. Исключениями из этого правила являются определения слабых функций, функций с атрибутом long_call или атрибутом section, и функций, находящихся в области действия директивы #pragma long_calls — они всегда преобразуются в длинные вызовы.

Эта функция не включена по умолчанию. Указание -mno-long-calls восстанавливает поведение по умолчанию, как и размещение вызовов функций в области действия директивы #pragma long_calls_off . Обратите внимание, что эти флаги не влияют на то, как компилятор генерирует код для обработки вызовов функций через указатели на функции.

-msingle-pic-base

Обрабатывает регистр, используемый для PIC адресации, как только для чтения, а не загружая его в прологе каждой функции. Системный код runtime ответственен за инициализацию этого регистра соответствующим значением до начала выполнения.

-mpic-register=reg

Указывает регистр, который будет использоваться для PIC адресации. Для стандартного случая PIC по умолчанию используется любой подходящий регистр, определённый компилятором. Для отдельного случая PIC по умолчанию используется ‘R9’, если целевая платформа основана на EABI или включена проверка стека, в противном случае по умолчанию используется ‘R10’.

-mpic-data-is-text-relative

Предполагает, что смещение между секциями текста и данных фиксировано во время статической компоновки. Это позволяет использовать операции PC-относительной адресации для доступа к данным, которые известны как находящиеся в секции данных. Для целей, не связанных с VxWorks RTP, этот флаг включен по умолчанию. При отключении на таких целях, это приводит к включению -msingle-pic-base по умолчанию.

-mpoke-function-name

Записывает имя каждой функции в секцию текста, непосредственно перед прологом функции. Сгенерированный код похож на этот:

t0
    .ascii "arm_poke_function_name", 0
    .align
t1
    .word 0xff000000 + (t1 - t0)
arm_poke_function_name
    mov     ip, sp
    stmfd   sp!, {fp, ip, lr, pc}
    sub     fp, ip, #4

При выполнении трассировки стека код может проверить значение pc хранящееся по адресу fp + 0. Если функция трассировки затем обращается к адресу pc - 12 и старшие 8 бит установлены, значит, имя функции встроено непосредственно перед этим местоположением и имеет длину ((pc[-3]) & 0xff000000).

-mthumb
-marm

Выбирает между генерацией кода, который выполняется в состояниях ARM и Thumb. По умолчанию для большинства конфигураций генерируется код, выполняющийся в состоянии ARM, но значение по умолчанию может быть изменено настройкой GCC с опцией --with-mode=state.

Вы также можете переопределить режим ARM и Thumb для каждой функции, используя атрибуты функции target("thumb") и target("arm") (см. Атрибуты функций ARM) или директивы (см. Директивы опций для конкретных функций).

-mflip-thumb

Переключает режимы ARM/Thumb для чередующихся функций. Эта опция предназначена для тестирования регрессии смешанного кода Thumb/ARM, и не предназначена для обычного использования при компиляции кода.

-mtpcs-frame

Генерирует фрейм стека, соответствующий стандарту Thumb Procedure Call Standard для всех функций, кроме листов. (Функция-лист — это функция, которая не вызывает другие функции.) По умолчанию установлено -mno-tpcs-frame.

-mtpcs-leaf-frame

Генерирует фрейм стека, соответствующий стандарту Thumb Procedure Call Standard для всех функций-листов. (Функция-лист — это функция, которая не вызывает другие функции.) По умолчанию установлено -mno-apcs-leaf-frame.

-mcallee-super-interworking

Добавляет в каждую внешнюю функцию в компилируемом файле заголовок набора инструкций ARM, который переключается на режим Thumb перед выполнением остальной части функции. Это позволяет вызывать эти функции из кода без межмодового переключения. Эта опция недействительна в конфигурациях AAPCS, потому что межмодовое переключение включено по умолчанию.

-mcaller-super-interworking

Позволяет вызовам через указатели на функции (включая виртуальные функции) работать правильно независимо от того, был ли целевой код скомпилирован для межмодового переключения или нет. При включении этой опции существует небольшая накладная стоимость при выполнении указателя на функцию. Эта опция недействительна в конфигурациях AAPCS, потому что межмодовое переключение включено по умолчанию.

-mtp=name

Указывает модель доступа для указателя на хранилище TLS. Допустимые модели: ‘soft’, которая генерирует вызовы __aeabi_read_tp, ‘cp15’, которая получает указатель на поток напрямую из cp15 (поддерживается в архитектуре arm6k), и ‘auto’, которая использует лучший доступный метод для выбранного процессора. Значение по умолчанию — ‘auto’.

-mtls-dialect=dialect

Указывает диалект для доступа к хранилищу TLS. Поддерживаются два диалекта — ‘gnu’ и ‘gnu2’. Диалект ‘gnu’ выбирает оригинальную схему GNU для поддержки локальных и глобальных динамических моделей TLS. Диалект ‘gnu2’ выбирает схему описателей GNU, которая обеспечивает лучшую производительность для общих библиотек. Схема описателей GNU совместима с оригинальной схемой, но требует новой поддержки ассемблера, компоновщика и библиотек. Модели TLS для начального и локального запуска не изменяются этой опцией и всегда используют оригинальную схему.

-mword-relocations

Генерирует только абсолютные перебазирования для значений размером в слове (т.е. R_ARM_ABS32). Это включено по умолчанию на целях (uClinux, SymbianOS), где загрузчик runtime накладывает это ограничение, и когда указаны -fpic или -fPIC. Эта опция конфликтует с -mslow-flash-data.

-mfix-cortex-m3-ldrd

Некоторые ядра Cortex-M3 могут вызывать повреждение данных при использовании инструкций ldrd с перекрывающимися регистрами назначения и базовыми регистрами. Эта опция предотвращает генерацию таких инструкций. Эта опция включена по умолчанию при указании -mcpu=cortex-m3.

-munaligned-access
-mno-unaligned-access

Включает (или отключает) чтение и запись значений размером 16 и 32 бита из адресов, не выровненных по 16 или 32 битам. По умолчанию невыровненный доступ отключён для всех архитектур до ARMv6, для всех ARMv6-M и для ARMv8-M Baseline, и включён для всех других архитектур. Если невыровненный доступ не включён, слова в упакованных структурах данных обращаются побайтово.

Атрибут ARM Tag_CPU_unaligned_access устанавливается в сгенерированном объектом файле в значение true или false, в зависимости от установки этой опции. Если невыровненный доступ включён, то препроцессорная переменная __ARM_FEATURE_UNALIGNED также определяется.

-mneon-for-64bits

Эта опция устарела и не оказывает влияния.

-mslow-flash-data

Предполагается, что загрузка данных из флеш-памяти медленнее, чем получение инструкций. Поэтому для повышения производительности минимизируется буквальная загрузка. Этот параметр поддерживается только при компиляции для ARMv7 M-профиля и по умолчанию выключен. Он конфликтует с -mword-relocations.

-masm-syntax-unified

Предполагается, что встроенный ассемблер использует унифицированный синтаксис asm. По умолчанию он выключен, что подразумевает разделенный синтаксис. Этот параметр не оказывает влияния на Thumb2. Однако это может измениться в будущих выпусках GCC. Разделенный синтаксис следует считать устаревшим.

-mrestrict-it

Ограничивает генерацию блоков IT для соответствия правилам ARMv8-A. Блоки IT могут содержать только одну 16-битную инструкцию из выбранного набора инструкций. Этот параметр включен по умолчанию для ARMv8-A в режиме Thumb.

-mprint-tune-info

Печатает информацию о настройке процессора в виде комментария в ассемблерном файле. Этот параметр используется только для регрессионного тестирования компилятора и не предназначен для обычного использования при компиляции кода. Этот параметр отключен по умолчанию.

-mverbose-cost-dump

Включить подробную выгрузку модели затрат в файлы отладки. Этот параметр предназначен для использования при отладке компилятора.

-mpure-code

Не разрешать размещение константных данных в секциях кода. Кроме того, при компиляции для формата ELF-объектов присваивать всем текстовым секциям атрибут секции ELF, специфичный для процессора SHF_ARM_PURECODE. Этот параметр доступен только при генерации кода без позиционной независимости для целей M-профиля.

-mcmse

Генерировать защищённый код в соответствии с «Спецификацией требований к инструментам разработки ARMv8-M Security Extensions», которую можно найти по адресу https://developer.arm.com/documentation/ecm0359818/latest/.

-mfix-cmse-cve-2021-35465

Меры по устранению потенциальной проблемы безопасности с инструкцией VLLDM в некоторых устройствах M-профиля при использовании CMSE (CVE-2021-365465). Этот параметр включён по умолчанию, когда параметр -mcpu= используется с cortex-m33, cortex-m35p или cortex-m55. Параметр -mno-fix-cmse-cve-2021-35465 может быть использован для отключения мер.

-mfdpic
-mno-fdpic

Выбор ABI FDPIC, который использует 64-битные описатели функций для представления указателей на функции. При конфигурации компилятора для arm-*-uclinuxfdpiceabi целей этот параметр включён по умолчанию и подразумевает -fPIE, если ни один из параметров, связанных с PIC/PIE, не предоставлен. На других целях он только включает функции генерации кода, специфичные для FDPIC, и пользователь должен явно предоставить необходимые параметры, связанные с PIC/PIE.

Обратите внимание, что статическая компоновка не поддерживается, так как она всё равно будет вовлекать динамическую компоновщик при самоперемещении программы. Если такое поведение приемлемо, используйте опции -static и -Wl,-dynamic-linker.

Противоположный параметр -mno-fdpic полезен (и необходим) для построения ядра Linux с использованием того же (arm-*-uclinuxfdpiceabi) инструментария, что и при построении приложений пользователя.

Далее: AVR Options, Предыдущий: ARC Options, Вверх: Параметры, зависящие от машины [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/ARM-Options.html

Spec-Zone.ru

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