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 со всеми расширениями аппаратного обеспечения включенными.
- ‘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-
Включить использование pre/post modify с смещением регистра.
-mbbit-peephole-
Включить bbit peephole2.
-mno-brcc-
Этот параметр отключает специфичный для целевого процессора этап в arc_reorg для генерации инструкций сравнения и перехода (
brcc). Он не влияет на генерацию этих инструкций, управляемую этапом объединения. -mcase-vector-pcrel-
Использовать таблицы переключателей с относительными адресами ПК для сокращения таблиц переходов. По умолчанию для -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-
Ничего не делает. Сохранено для обратной совместимости.
-mq-class-
Этот параметр устарел. Включить альтернативные инструкции ‘q’. По умолчанию для -Os.
-mRcq-
Включить обработку ограничения ‘Rcq’. Большинство генераций короткого кода зависит от этого. По умолчанию.
-mRcw-
Включить обработку ограничения ‘Rcw’. Большинство сгенерированных условных инструкций ccfsm в основном зависит от этого. По умолчанию.
-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-
Ничего не делает. Сохранено для обратной совместимости.
Следующие параметры сохраняются для обратной совместимости, но теперь устарели и будут удалены в будущих версиях:
-margonaut-
Устаревший FPX.
-mbig-endian-EB-
Компилировать код для целей с большим порядком байтов. Использование этих параметров теперь устарело. Код с большим порядком байтов поддерживается путем конфигурации GCC для построения
arceb-elf32иarceb-linux-uclibcцелей, для которых big endian по умолчанию. -mlittle-endian-EL-
Компилировать код для целей с малым порядком байтов. Использование этих параметров теперь устарело. Код с малым порядком байтов поддерживается путем конфигурации 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-12.2.0/gcc/ARC-Options.html