Spec-Zone.ru › GCC 13

3.19.4 Параметры ARC

Следующие параметры управляют вариантом архитектуры, для которого компилируется код:

-mbarrel-shifter

Генерировать инструкции, поддерживаемые сдвиговым регистром. Это значение по умолчанию, если не задано -mcpu=ARC601 или ‘-mcpu=ARCEM’.

-mjli-always

Вызвать функцию с помощью инструкции jli_s. Этот параметр действителен только для архитектуры ARCv2.

-mcpu=cpu

Установить параметры типа архитектуры, использования регистров и планирования инструкций для cpu. Доступны также сокращённые псевдонимы параметров для обеспечения обратной совместимости и удобства. Допустимые значения для cpu:

‘arc600’

Компиляция для ARC600. Псевдонимы: -mA6, -mARC600.

‘arc601’

Компиляция для ARC601. Псевдоним: -mARC601.

‘arc700’

Компиляция для ARC700. Псевдонимы: -mA7, -mARC700. Это значение по умолчанию при конфигурации с --with-cpu=arc700.

‘arcem’

Компиляция для ARC EM.

‘archs’

Компиляция для ARC HS.

‘em’

Компиляция для ARC EM CPU без аппаратных расширений.

‘em4’

Компиляция для ARC EM4 CPU.

‘em4_dmips’

Компиляция для ARC EM4 DMIPS CPU.

‘em4_fpus’

Компиляция для ARC EM4 DMIPS CPU с расширением для чисел с плавающей точкой одинарной точности.

‘em4_fpuda’

Компиляция для ARC EM4 DMIPS CPU с расширением для чисел с плавающей точкой одинарной точности и инструкциями двойной точности.

‘hs’

Компиляция для ARC HS CPU без аппаратных расширений, кроме атомарных инструкций.

‘hs34’

Компиляция для ARC HS34 CPU.

‘hs38’

Компиляция для ARC HS38 CPU.

‘hs38_linux’

Компиляция для ARC HS38 CPU со всеми аппаратными расширениями включёнными.

‘hs4x’

Компиляция для ARC HS4x CPU.

‘hs4xd’

Компиляция для ARC HS4xD CPU.

‘hs4x_rel31’

Компиляция для ARC HS4x CPU, релиз 3.10a.

‘arc600_norm’

Компиляция для ARC 600 CPU с включенными инструкциями norm.

‘arc600_mul32x16’

Компиляция для ARC 600 CPU с включенными инструкциями norm и 32x16-битовыми инструкциями умножения.

‘arc600_mul64’

Компиляция для ARC 600 CPU с включенными инструкциями norm и mul64-семейства.

‘arc601_norm’

Компиляция для ARC 601 CPU с включенными инструкциями norm.

‘arc601_mul32x16’

Компиляция для ARC 601 CPU с включенными инструкциями norm и 32x16-битовыми инструкциями умножения.

‘arc601_mul64’

Компиляция для ARC 601 CPU с включенными инструкциями norm и mul64-семейства.

‘nps400’

Компиляция для ARC 700 на чипе NPS400.

‘em_mini’

Компиляция для ARC EM с минимальной конфигурацией, включающей уменьшенный набор регистров.

-mdpfp
-mdpfp-compact

Генерировать инструкции FPX двойной точности, настроенные для компактной реализации.

-mdpfp-fast

Генерировать инструкции FPX двойной точности, настроенные для быстродействующей реализации.

-mno-dpfp-lrsr

Отключить инструкции lr и sr от использования вспомогательных регистров расширения FPX.

-mea

Генерировать расширенные арифметические инструкции. В настоящее время поддерживаются только divaw, adds, subs, и sat16. Действительно только для -mcpu=ARC700.

-mno-mpy

Не генерировать инструкции mpy для ARC700. Этот параметр устарел.

-mmul32x16

Генерировать 32x16-битовые инструкции умножения и умножения-складывания.

-mmul64

Генерировать инструкции mul64 и mulu64. Действительно только для -mcpu=ARC600.

-mnorm

Генерировать инструкции norm. Это значение по умолчанию, если задано -mcpu=ARC700.

-mspfp
-mspfp-compact

Генерировать инструкции FPX одинарной точности, настроенные для компактной реализации.

-mspfp-fast

Генерировать инструкции FPX одинарной точности, настроенные для высокой производительности.

-msimd

Включить генерацию инструкций ARC SIMD через встроенные функции, специфичные для целевой платформы. Действительно только для -mcpu=ARC700.

-msoft-float

Этот параметр игнорируется; он предоставляется только для совместимости. По умолчанию генерируется код программной обработки чисел с плавающей точкой, и это значение по умолчанию может быть переопределено параметрами FPX; -mspfp, -mspfp-compact или -mspfp-fast для одинарной точности и -mdpfp, -mdpfp-compact или -mdpfp-fast для двойной точности.

-mswap

Генерировать инструкции swap.

-matomic

Включает использование расширения блокированных операций загрузки/хранения с условным выполнением для реализации встроенных атомарных функций памяти. Недоступно для ядер ARC 6xx или ARC EM.

-mdiv-rem

Включить инструкции div и rem для ядер ARCv2.

-mcode-density

Включить инструкции для повышения плотности кода для ARC EM. Этот параметр включён по умолчанию для ARC HS.

-mll64

Включить операции двойной загрузки/хранения для ядер ARC HS.

-mtp-regno=regno

Указать номер регистра указателя потока.

-mmpy-option=multo

Компилировать код ARCv2 с параметром для умножителя. Можно указать параметр с помощью строки или числового значения для multo. Значение по умолчанию — ‘wlh1’. Распознаваемые значения:

‘0’
‘none’

Умножитель недоступен.

‘1’
‘w’

16x16 умножитель, полностью конвейерный. Включаются следующие инструкции: mpyw и mpyuw.

‘2’
‘wlh1’

32x32 умножитель, полностью конвейерный (1 этап). Дополнительно включаются следующие инструкции: mpy, mpyu, mpym, mpymu, и mpy_s.

‘3’
‘wlh2’

32x32 умножитель, полностью конвейерный (2 этапа). Дополнительно включаются следующие инструкции: mpy, mpyu, mpym, mpymu, и mpy_s.

‘4’
‘wlh3’

Два 16x16 умножителя, блокирующие, последовательные. Дополнительно включаются следующие инструкции: mpy, mpyu, mpym, mpymu, и mpy_s.

‘5’
‘wlh4’

Один 16x16 умножитель, блокирующий, последовательный. Дополнительно включаются следующие инструкции: mpy, mpyu, mpym, mpymu, и mpy_s.

‘6’
‘wlh5’

Один 32x4 умножитель, блокирующий, последовательный. Дополнительно включаются следующие инструкции: mpy, mpyu, mpym, mpymu, и mpy_s.

‘7’
‘plus_dmpy’

Поддержка ARC HS SIMD.

‘8’
‘plus_macd’

Поддержка ARC HS SIMD.

‘9’
‘plus_qmacw’

Поддержка ARC HS SIMD.

Этот параметр доступен только для ядер ARCv2.

-mfpu=fpu

Включает поддержку конкретных расширений аппаратной части для плавающей запятой для ядер ARCv2. Поддерживаемые значения для fpu:

‘fpus’

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

‘fpud’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности. Также включено расширение для плавающей запятой одинарной точности. Недоступно для ARC EM.

‘fpuda’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности с использованием инструкций двойной точности. Также включено расширение для плавающей запятой одинарной точности. Этот параметр доступен только для ARC EM.

‘fpuda_div’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности с использованием инструкций двойной точности. Также включены расширения для плавающей запятой одинарной точности, квадратного корня и деления. Этот параметр доступен только для ARC EM.

‘fpuda_fma’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности с использованием инструкций двойной точности. Также включены расширения для плавающей запятой одинарной точности и слияния умножения и сложения.

‘fpuda_all’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности с использованием инструкций двойной точности. Также включены все расширения аппаратной части для плавающей запятой одинарной точности. Этот параметр доступен только для ARC EM.

‘fpus_div’

Включает поддержку расширений аппаратной части для плавающей запятой одинарной точности, квадратного корня и деления.

‘fpud_div’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности, квадратного корня и деления. Этот параметр включает параметр ‘fpus_div’. Недоступен для ARC EM.

‘fpus_fma’

Включает поддержку расширений аппаратной части для плавающей запятой одинарной точности и слияния умножения и сложения.

‘fpud_fma’

Включает поддержку расширений аппаратной части для плавающей запятой двойной точности и слияния умножения и сложения. Этот параметр включает параметр ‘fpus_fma’. Недоступен для ARC EM.

‘fpus_all’

Включает поддержку всех расширений аппаратной части для плавающей запятой одинарной точности.

‘fpud_all’

Включает поддержку всех расширений аппаратной части для плавающей запятой одинарной и двойной точности. Недоступно для ARC EM.

-mirq-ctrl-saved=register-range, blink, lp_count

Указывает регистры общего назначения, которые процессор автоматически сохраняет/восстанавливает при входе и выходе из прерывания. register-range задаётся как два регистра, разделённых дефисом. Диапазон регистров всегда начинается с r0, верхняя граница — регистр fp. blink и lp_count — необязательные. Этот параметр действителен только для ядер ARC EM и ARC HS.

-mrgf-banked-regs=number

Указывает количество регистров, дублированных во втором регистровом банке при входе в быстрое прерывание. Быстрые прерывания — это прерывания с наивысшим приоритетом уровня P0. Эти прерывания сохраняют только регистры PC и STATUS32, чтобы избежать операций с памятью во время последовательностей входа и выхода из прерывания. Используйте этот параметр, если вы используете быстрые прерывания в процессоре семейства ARC V2. Разрешённые значения: 4, 8, 16 и 32.

-mlpc-width=width

Укажите ширину регистра lp_count. Допустимые значения для width: 8, 16, 20, 24, 28 и 32 бита. По умолчанию ширина равна 32 битам. Если ширина меньше 32, компилятор не пытается преобразовать циклы в вашей программе для использования механизма цикла с нулевой задержкой, если неизвестно, что регистр lp_count может содержать требуемое значение счётчика цикла. В зависимости от указанной ширины, компилятор и библиотека выполнения могут продолжать использовать механизм цикла для различных целей. Этот параметр определяет макрос __ARC_LPC_WIDTH__ со значением width.

-mrf16

Этот параметр указывает компилятору сгенерировать код для 16-элементного регистрового файла. Этот параметр определяет макрос препроцессора __ARC_RF16__.

-mbranch-index

Включить использование инструкций bi или bih для реализации таблиц переходов.

Следующие параметры передаются в ассемблер и также определяют символы макросов препроцессора.

-mdsp-packa

Передаётся в ассемблер для включения расширений DSP Pack A. Также устанавливает символ препроцессора __Xdsp_packa. Этот параметр устарел.

-mdvbf

Передаётся в ассемблер для включения расширения двойной бабочки Витерби. Также устанавливает символ препроцессора __Xdvbf. Этот параметр устарел.

-mlock

Передаётся в ассемблер для включения расширения условного блокирования загрузки/сохранения. Также устанавливает символ препроцессора __Xlock.

-mmac-d16

Передаётся в ассемблер. Также устанавливает символ препроцессора __Xxmac_d16. Этот параметр устарел.

-mmac-24

Передаётся в ассемблер. Также устанавливает символ препроцессора __Xxmac_24. Этот параметр устарел.

-mrtsc

Передаётся в ассемблер для включения инструкции расширения счётчика отсчётов времени 64 бит. Также устанавливает символ препроцессора __Xrtsc. Этот параметр устарел.

-mswape

Передаётся в ассемблер для включения инструкции расширения порядка перестановки байтов. Также устанавливает символ препроцессора __Xswape.

-mtelephony

Передаётся в ассемблер для включения инструкций с двумя и одним операндом для телефонии. Также устанавливает символ препроцессора __Xtelephony. Этот параметр устарел.

-mxy

Передаётся в ассемблер для включения расширения памяти XY. Также устанавливает символ препроцессора __Xxy.

Следующие параметры управляют тем, как аннотируется код ассемблера:

-misize

Аннотировать инструкции ассемблера оцененными адресами.

-mannotate-align

Объяснять, какие соображения выравнивания привели к решению сделать инструкцию короткой или длинной.

Следующие параметры передаются в компоновщик:

-marclinux

Передаётся в компоновщик, чтобы указать использование эмуляции arclinux. Этот параметр включен по умолчанию в инструментальных цепочках, построенных для arc-linux-uclibc и arceb-linux-uclibc целей, когда не запрашивается профилирование.

-marclinux_prof

Передаётся в компоновщик, чтобы указать использование эмуляции arclinux_prof. Этот параметр включен по умолчанию в инструментальных цепочках, построенных для arc-linux-uclibc и arceb-linux-uclibc целей, когда запрашивается профилирование.

Следующие параметры управляют семантикой генерируемого кода:

-mlong-calls

Генерировать вызовы как вызовы косвенного доступа к регистру, обеспечивая таким образом доступ к полному 32-битному диапазону адресов.

-mmedium-calls

Не использовать диапазон адресации менее 25 бит для вызовов, который является смещением, доступным для безусловной инструкции ветвления и связи. Условное выполнение вызовов функций подавляется, чтобы разрешить использование 25-битного диапазона вместо 21-битного диапазона с условным ветвлением и связью. Это значение по умолчанию для инструментальных цепочек, построенных для arc-linux-uclibc и arceb-linux-uclibc целей.

-G num

Размещать определения внешне видимых данных в небольшом разделе данных, если эти данные не превышают num байт. Значение по умолчанию num — 4 для любой конфигурации ARC или 8 при наличии операций двойной загрузки/хранения.

-mno-sdata

Не генерировать ссылки sdata. Это значение по умолчанию для инструментальных цепочек, построенных для arc-linux-uclibc и arceb-linux-uclibc целей.

-mvolatile-cache

Использовать обычные кэшируемые обращения к памяти для ссылок volatile. Это значение по умолчанию.

-mno-volatile-cache

Включить обход кэша для ссылок volatile.

Следующие параметры уточняют генерацию кода:

-malign-call

Ничего не делает. Сохранено для обратной совместимости.

-mauto-modify-reg

Включить использование модификаций pre/post с смещением регистра.

-mbbit-peephole

Включить оптимизацию bbit peephole2.

-mno-brcc

Этот параметр отключает специфичный для целевого процессора этап в arc_reorg для генерации инструкций сравнения и перехода (brcc). Он не влияет на генерацию этих инструкций, управляемых этапом объединения.

-mcase-vector-pcrel

Использовать таблицы switch-case с относительным адресом PC для сокращения таблиц case. Это значение по умолчанию для -Os.

-mcompact-casesi

Включить компактный шаблон casesi. Это значение по умолчанию для -Os и доступно только для ядер ARCv1. Этот параметр устарел.

-mno-cond-exec

Отключить специфичный для ARCompact этап генерации условных инструкций.

Из-за планирования слотов задержки и взаимодействий между номерами операндов, размерами литералов, длиной инструкций и поддержкой условного выполнения, независимый от целевого процессора этап генерации условного выполнения часто неэффективен, поэтому порт ARC сохранил специальный этап, который пытается найти больше возможностей для генерации условного выполнения после размещения регистров, сокращения переходов и планирования слотов задержки. Этот этап, как правило, но не всегда, улучшает производительность и размер кода, ценой дополнительного времени компиляции, поэтому существует возможность его выключения. Если у вас есть проблема с тем, что инструкции вызова превышают допустимый диапазон смещения из-за условного выполнения, рассмотрите использование -mmedium-calls вместо этого.

-mearly-cbranchsi

Включить предварительное использование загрузки cbranchsi шаблона.

-mexpand-adddi

Развернуть adddi3 и subdi3 во время генерации RTL в add.f, adc и т.д. Этот параметр устарел.

-mindexed-loads

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

-mlra

Включить локальное размещение регистров. Для ARC это всё ещё экспериментально, поэтому компилятор по умолчанию использует стандартную перезагрузку (т.е. -mno-lra).

-mlra-priority-none

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

-mlra-priority-compact

Указать приоритет целевых регистров для r0..r3 / r12..r15.

-mlra-priority-noncompact

Уменьшить приоритет целевых регистров для r0..r3 / r12..r15.

-mmillicode

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

-mcode-density-frame

Этот параметр позволяет компилятору выводить инструкции enter и leave. Эти инструкции допустимы только для процессоров с функциями высокой плотности кода.

-mmixed-code

Ничего не делает. Сохранено для обратной совместимости.

-mq-class

Этот параметр устарел. Включить альтернативы инструкции ‘q’. Это значение по умолчанию для -Os.

-mRcq

Ничего не делает. Сохранено для обратной совместимости.

-mRcw

Ничего не делает. Сохранено для обратной совместимости.

-msize-level=level

Уточнение оптимизации размера относительно длины и выравнивания инструкций. Признанные значения для level:

‘0’

Без оптимизации размера. Этот уровень устарел и обрабатывается как ‘1’.

‘1’

Короткие инструкции используются по возможности.

‘2’

Кроме того, выравнивание циклов и кода после барьеров отключается.

‘3’

Кроме того, выравнивание данных по необходимости отключается, и параметр Os включён.

По умолчанию устанавливается в ‘3’ при использовании -Os. В противном случае поведение при отсутствии этого параметра эквивалентно уровню ‘1’.

-mtune=cpu

Настройка параметров планирования инструкций для cpu, переопределяя любые значения, подразумеваемые -mcpu=.

Поддерживаемые значения для cpu:

‘ARC600’

Настройка для процессора ARC600.

‘ARC601’

Настройка для процессора ARC601.

‘ARC700’

Настройка для процессора ARC700 со стандартным блоком умножения.

‘ARC700-xmac’

Настройка для процессора ARC700 с блоком XMAC.

‘ARC725D’

Настройка для процессора ARC725D.

‘ARC750D’

Настройка для процессора ARC750D.

‘core3’

Настройка для процессора типа ARCv2 core3. Этот параметр включает использование инструкции dbnz.

‘release31a’

Настройка для ARC4x release 3.10a.

-mmultcost=num

Стоимость, предполагаемая для инструкции умножения, где ‘4’ равно обычной инструкции.

-munalign-prob-threshold=probability

Ничего не делает. Сохранено для обратной совместимости.

Следующие параметры поддерживаются для обратной совместимости, но теперь устарели и будут удалены в будущей версии:

-margonaut

Устаревший FPX.

-mbig-endian
-EB

Компиляция кода для целей big-endian. Использование этих параметров теперь устарело. Код big-endian поддерживается конфигурированием GCC для построения arceb-elf32 и arceb-linux-uclibc целей, для которых big-endian по умолчанию.

-mlittle-endian
-EL

Компиляция кода для целей little-endian. Использование этих параметров теперь устарело. Код little-endian поддерживается конфигурированием GCC для построения arc-elf32 и arc-linux-uclibc целей, для которых little-endian по умолчанию.

-mbarrel_shifter

Заменено на -mbarrel-shifter.

-mdpfp_compact

Заменено на -mdpfp-compact.

-mdpfp_fast

Заменено на -mdpfp-fast.

-mdsp_packa

Заменено на -mdsp-packa.

-mEA

Заменено на -mea.

-mmac_24

Заменено на -mmac-24.

-mmac_d16

Заменено на -mmac-d16.

-mspfp_compact

Заменено на -mspfp-compact.

-mspfp_fast

Заменено на -mspfp-fast.

-mtune=cpu

Значения ‘arc600’, ‘arc601’, ‘arc700’ и ‘arc700-xmac’ для cpu заменены соответственно на ‘ARC600’, ‘ARC601’, ‘ARC700’ и ‘ARC700-xmac’.

-multcost=num

Заменено на -mmultcost.

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

Spec-Zone.ru

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