3.18.3 ARC Параметры
Следующие параметры управляют вариантом архитектуры, для которого компилируется код:
-mbarrel-shifter-
Генерировать инструкции, поддерживаемые сдвиговым регистром. Это значение по умолчанию, если не задано -mcpu=ARC601 или ‘-mcpu=ARCEM’.
-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.
-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.
Следующие параметры передаются в ассемблер и также определяют символы препроцессора.
-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целевых платформ. -mno-sdata-
Не генерировать ссылки sdata. Это значение по умолчанию для инструментальных цепочек, созданных для
arc-linux-uclibcиarceb-linux-uclibcцелевых платформ. -mvolatile-cache-
Использовать обычные кешируемые обращения к памяти для переменных ссылок. Это значение по умолчанию.
-mno-volatile-cache-
Включить обход кэша для переменных ссылок.
Следующие параметры позволяют усовершенствовать генерацию кода:
-malign-call-
Выполнить оптимизации выравнивания для инструкций вызова.
-mauto-modify-reg-
Включить использование пре/пост модификации с регистровым смещением.
-mbbit-peephole-
Включить peephole2 для bbit.
-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-
Включить использование индексированных загрузках. Это может быть проблематично, потому что некоторые оптимизаторы затем предполагают, что существуют индексированные сохранения, чего на самом деле нет.
Включить локальное распределение регистров. Это всё ещё экспериментально для ARC, поэтому по умолчанию компилятор использует стандартное перераспределение (т.е. -mno-lra).
-mlra-priority-none-
Не указывать приоритет для целевых регистров.
-mlra-priority-compact-
Указать приоритет целевых регистров для r0..r3 / r12..r15.
-mlra-priority-noncompact-
Уменьшить приоритет целевых регистров для r0..r3 / r12..r15.
-mno-millicode-
При оптимизации по размеру (используя -Os), прологи и эпилоги, которые должны сохранить или восстановить большое количество регистров, часто укорачиваются путём вызова специальной функции в libgcc; это называется вызовом millicode. Поскольку эти вызовы могут вызвать проблемы с производительностью и/или проблемы с компоновкой при компоновке нестандартным способом, данный параметр служит для отключения генерации вызовов millicode.
-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. См. Cross-profiling. По умолчанию (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, Предыдущее: Опции Adapteva Epiphany, Наверх: Опции подмоделей [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/ARC-Options.html