Spec-Zone.ru › GCC 5

3.17.4 Параметры ARM

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

-mabi=name

Генерировать код для указанного ABI. Допустимые значения: ‘apcs-gnu’, ‘atpcs’, ‘aapcs’, ‘aapcs-linux’ и ‘iwmmxt’.

-mapcs-frame

Генерировать кадр стека, соответствующий ARM Procedure Call Standard для всех функций, даже если это не строго необходимо для правильного выполнения кода. Указание -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-float и soft-float не совместимы при компоновке; необходимо скомпилировать всю программу с одним и тем же ABI и скомпоновать её с соответствующим набором библиотек.

-mlittle-endian

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

-mbig-endian

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

-march=name

Это указывает имя целевой архитектуры ARM. GCC использует это имя, чтобы определить, какие инструкции можно генерировать при создании кода ассемблера. Этот параметр можно использовать совместно с параметром -mcpu= или вместо него. Допустимые имена: ‘armv2’, ‘armv2a’, ‘armv3’, ‘armv3m’, ‘armv4’, ‘armv4t’, ‘armv5’, ‘armv5t’, ‘armv5e’, ‘armv5te’, ‘armv6’, ‘armv6j’, ‘armv6t2’, ‘armv6z’, ‘armv6zk’, ‘armv6-m’, ‘armv7’, ‘armv7-a’, ‘armv7-r’, ‘armv7-m’, ‘armv7e-m’, ‘armv7ve’, ‘armv8-a’, ‘armv8-a+crc’, ‘iwmmxt’, ‘iwmmxt2’, ‘ep9312’.

-march=armv7ve — это архитектура armv7-a с расширениями виртуализации.

-march=armv8-a+crc позволяет генерировать код для архитектуры ARMv8-A вместе с дополнительными расширениями CRC32.

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

-mtune=name

Этот параметр указывает имя целевого процессора ARM, для которого GCC должен настраивать производительность кода. В некоторых реализациях ARM лучшая производительность может быть достигнута с использованием этого параметра. Допустимые имена: ‘arm2’, ‘arm250’, ‘arm3’, ‘arm6’, ‘arm60’, ‘arm600’, ‘arm610’, ‘arm620’, ‘arm7’, ‘arm7m’, ‘arm7d’, ‘arm7dm’, ‘arm7di’, ‘arm7dmi’, ‘arm70’, ‘arm700’, ‘arm700i’, ‘arm710’, ‘arm710c’, ‘arm7100’, ‘arm720’, ‘arm7500’, ‘arm7500fe’, ‘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’, ‘cortex-a5’, ‘cortex-a7’, ‘cortex-a8’, ‘cortex-a9’, ‘cortex-a12’, ‘cortex-a15’, ‘cortex-a53’, ‘cortex-a57’, ‘cortex-a72’, ‘cortex-r4’, ‘cortex-r4f’, ‘cortex-r5’, ‘cortex-r7’, ‘cortex-m7’, ‘cortex-m4’, ‘cortex-m3’, ‘cortex-m1’, ‘cortex-m0’, ‘cortex-m0plus’, ‘cortex-m1.small-multiply’, ‘cortex-m0.small-multiply’, ‘cortex-m0plus.small-multiply’, ‘exynos-m1’, ‘marvell-pj4’, ‘xscale’, ‘iwmmxt’, ‘iwmmxt2’, ‘ep9312’, ‘fa526’, ‘fa626’, ‘fa606te’, ‘fa626te’, ‘fmp626’, ‘fa726te’, ‘xgene1’.

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

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

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

-mcpu=name

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

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

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

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

-mfpu=name

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

Если указан -msoft-float, это указывает формат значений с плавающей запятой.

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

-mfp16-format=name

Укажите формат типа с плавающей запятой половинной точности. Допустимые имена: ‘none’, ‘ieee’, и ‘alternative’; по умолчанию — ‘none’, в этом случае тип __fp16 не определён. Более подробная информация представлена в Half-Precision.

-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, как только для чтения, а не загружать его в прологе для каждой функции. Система выполнения отвечает за инициализацию этого регистра подходящим значением перед началом выполнения.

-mpic-register=reg

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

-mpic-data-is-text-relative

Предполагайте, что каждый сегмент данных относится к сегменту текста во время загрузки. Таким образом, он позволяет адресовать данные с помощью операций, относительных к регистру PC. Этот параметр включен по умолчанию для целей, отличных от VxWorks RTP.

-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 конфигурации.

-mtpcs-frame

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

-mtpcs-leaf-frame

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

-mcallee-super-interworking

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

-mcaller-super-interworking

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

-mtp=name

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

-mtls-dialect=dialect

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

-mword-relocations

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

-mfix-cortex-m3-ldrd

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

-munaligned-access
-mno-unaligned-access

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

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

-mneon-for-64bits

Включает использование Neon для обработки скалярных 64-битных операций. Это отключено по умолчанию, так как стоимость перемещения данных из регистров ядра в Neon высока.

-mslow-flash-data

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

-masm-syntax-unified

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

-mrestrict-it

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

-mprint-tune-info

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

Далее: Опции AVR, Предыдущий: Опции ARC, Вверх: Опции подмодели [Содержание][Индекс]

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

Spec-Zone.ru

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