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. Разрешенные значения: 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-
Включить использование предварительной/последующей модификации со смещением регистра.
-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целей, для которых 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.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/ARC-Options.html