3.18.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 со всеми расширениями аппаратного обеспечения.
- ‘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.
-mlpc-width=width-
Укажите ширину регистра
lp_count. Допустимые значения для width — 8, 16, 20, 24, 28 и 32 бита. По умолчанию ширина фиксирована в 32 бита. Если ширина меньше 32, компилятор не пытается преобразовать циклы в вашей программе для использования механизма циклов с нулевой задержкой, если не известно, что регистрlp_countможет содержать требуемое значение счётчика цикла. -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-
Использовать обычные кэшированные обращения к памяти для волатильных ссылок. Это значение по умолчанию.
-mno-volatile-cache-
Включить обход кэша для волатильных ссылок.
Следующие параметры уточняют генерацию кода:
-malign-call-
Оптимизация выравнивания для инструкций вызова.
-mauto-modify-reg-
Включить использование пре/пост модификации с регистровым смещением.
-mbbit-peephole-
Включить оптимизацию bbit peephole2.
-mno-brcc-
Этот параметр отключает специфичный для целевой архитектуры этап в arc_reorg для генерации инструкций сравнения и ветвления (
brcc). Он не влияет на генерацию этих инструкций, управляемых этапом комбинатора. -mcase-vector-pcrel-
Использовать таблицы переключателей с относительными адресами PC для сокращения таблиц переключателей. По умолчанию для -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; это называется вызовом millicode. Поскольку эти вызовы могут создать проблемы с производительностью и/или проблемами с линковкой при линковке нестандартным способом, этот параметр предоставлен для включения или отключения генерации вызовов millicode.
-mcode-density-frame-
Этот параметр включает компилятору в выдачу инструкций
enterиleave. Эти инструкции применимы только для процессоров с функцией кодовой плотности. -mmixed-code-
Настройка распределения регистров для помощи в генерации инструкций длиной 16 бит. Это, как правило, приводит к уменьшению среднего размера инструкции, но увеличивает их количество.
-mq-class-
Включить альтернативные инструкции ‘q’. По умолчанию для -Os.
-mRcq-
Включить обработку ограничений ‘Rcq’. Большинство генерации короткого кода зависит от этого. По умолчанию.
-mRcw-
Включить обработку ограничений ‘Rcw’. Большинство инструкций ccfsm condexec в основном зависят от этого. По умолчанию.
-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.
-mmultcost=num-
Стоимость, принимаемая для инструкции умножения, где ‘4’ равно обычной инструкции.
-munalign-prob-threshold=probability-
Установить порог вероятности для невставляемых ветвей. При настройке для ‘ARC700’ и оптимизации по скорости, ветви без заполненного слота задержки предпочтительно выводятся невставлеными и длинными, если профилирование показывает, что вероятность ветвления меньше probability. Смотрите Перекрёстное профилирование. По умолчанию (REG_BR_PROB_BASE/2), т.е. 5000.
Следующие параметры сохраняются для обратной совместимости, но теперь устарели и будут удалены в будущей версии:
-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.
Далее: Параметры ARM, Предыдущее: Параметры AMD GCN, Наверх: Параметры подмодели [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/ARC-Options.html