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-
Отключить использование вспомогательных регистров расширения FPX для инструкций
lrиsr. -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’
-
Включает поддержку расширений аппаратного обеспечения с плавающей точкой двойной точности с использованием инструкций с двойной точностью для ассистентов. Также включены расширения с плавающей точкой одинарной точности и аппаратных расширений слияния умножения и сложения. Этот параметр доступен только для ARC EM.
- ‘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-
Использовать обычные кэшируемые обращения к памяти для переменных ссылок. Это значение по умолчанию.
-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; это называется вызовом милликода. Поскольку эти вызовы могут вызвать проблемы с производительностью и/или проблемы с линковкой при линковке нестандартным способом, этот параметр предназначен для включения или выключения генерации вызовов милликода.
-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-
Компиляция кода для целевых систем большого порядка байтов. Использование этих параметров теперь устарело. Код большого порядка байтов поддерживается настройкой GCC для построения
arceb-elf32иarceb-linux-uclibcцелей, для которых по умолчанию используется большой порядок байтов. -mlittle-endian-EL-
Компиляция кода для целевых систем малого порядка байтов. Использование этих параметров теперь устарело. Код малого порядка байтов поддерживается настройкой GCC для построения
arc-elf32иarc-linux-uclibcцелей, для которых по умолчанию используется малый порядок байтов. -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-11.4.0/gcc/ARC-Options.html