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’
-
Включает поддержку расширений аппаратного обеспечения с плавающей запятой двойной точности с использованием инструкций двойной точности для поддержки. Также включаются расширения одинарной точности и расширение аппаратного обеспечения для умножения и сложения. Этот параметр доступен только для 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 -
Использовать обычные кешируемые обращения к памяти для ссылок volatile. Это значение по умолчанию.
-
-mno-volatile-cache -
Включить обход кэша для ссылок volatile.
Следующие параметры уточняют генерацию кода:
-
-malign-call -
Ничего не делает. Сохранено для обратной совместимости.
-
-mauto-modify-reg -
Включить использование pre/post modify с перемещением регистра.
-
-mbbit-peephole -
Ничего не делает. Сохранено для обратной совместимости.
-
-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; это называется вызовом милликода. Поскольку эти вызовы могут создавать проблемы с производительностью и/или проблемами с линковкой при нестандартном способе линковки, этот параметр предоставляет возможность включить или отключить генерацию вызовов милликода.
-
-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-
Компиляция кода для целевых платформ большого порядка байтов. Использование этих параметров теперь устарело. Код большого порядка байтов поддерживается настройкой 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-14.2.0/gcc/ARC-Options.html