3.18.3 Варианты архитектуры ARC
Следующие параметры управляют вариантом архитектуры, для которого компилируется код:
-mbarrel-shifter-
Генерировать инструкции, поддерживаемые сдвиговым регистром. По умолчанию, если не заданы -mcpu=ARC601 или -mcpu=ARCEM.
-mcpu=cpu-
Установить параметры типа архитектуры, использования регистров и планирования инструкций для cpu. Также доступны сокращённые варианты для обратной совместимости и удобства. Поддерживаемые значения для cpu:
- ‘ARC600’
- ‘arc600’
-
Компиляция для ARC600. Псевдонимы: -mA6, -mARC600.
- ‘ARC601’
- ‘arc601’
-
Компиляция для ARC601. Псевдоним: -mARC601.
- ‘ARC700’
- ‘arc700’
-
Компиляция для ARC700. Псевдонимы: -mA7, -mARC700. По умолчанию при настройке с --with-cpu=arc700.
- ‘ARCEM’
- ‘arcem’
-
Компиляция для ARC EM.
- ‘ARCHS’
- ‘archs’
Компиляция для ARC HS.
-mdpfp-mdpfp-compact-
FPX: Генерировать инструкции FPX двойной точности, настроенные для компактной реализации.
-mdpfp-fast-
FPX: Генерировать инструкции 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: Генерировать инструкции FPX одинарной точности, настроенные для компактной реализации.
-mspfp-fast-
FPX: Генерировать инструкции 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.
-mmpy-option=multo-
Компилировать код ARCv2 с вариантом проектирования умножителя. ‘wlh1’ является значением по умолчанию. Признаваемые значения для multo:
- ‘0’
-
Нет доступного умножителя.
- ‘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.
Этот параметр доступен только для ядер 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 бит для вызовов, который является смещением, доступным для безусловной инструкции branch-and-link. Условное выполнение вызовов функций подавляется, чтобы разрешить использование диапазона 25 бит вместо диапазона 21 бит с условным branch-and-link. Это значение по умолчанию для инструментальных цепочек, скомпилированных для
arc-linux-uclibcиarceb-linux-uclibcцелевых платформ. -mno-sdata-
Не генерировать ссылки sdata. Это значение по умолчанию для инструментальных цепочек, скомпилированных для
arc-linux-uclibcиarceb-linux-uclibcцелевых платформ. -mucb-mcount-
Инструментировать вызовами mcount, как используется в коде UCB. Т.е. выполнять подсчёт в вызываемой функции, а не в вызывающей. По умолчанию инструментация ARC выполняет подсчёт в вызывающей функции.
-mvolatile-cache-
Использовать обычно кэшируемые обращения к памяти для волатильных ссылок. Это значение по умолчанию.
-mno-volatile-cache-
Включить обход кэша для волатильных ссылок.
Следующие параметры позволяют точнее настроить генерацию кода:
-malign-call-
Выполнять оптимизации выравнивания для инструкций вызова.
-mauto-modify-reg-
Включить использование пред/после модификации со смещением регистра.
-mbbit-peephole-
Включить bbit peephole2.
-mno-brcc-
Этот параметр отключает специфичный для целевой платформы этап в arc_reorg для генерации инструкций
BRcc. Он не влияет на генерациюBRcc, управляемую этапом объединения. -mcase-vector-pcrel-
Использовать pc-относительные таблицы switch case - это позволяет укоротить таблицы case. Это значение по умолчанию для -Os.
-mcompact-casesi-
Включить компактную структуру casesi. Это значение по умолчанию для -Os.
-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, должны использовать целевые платформы
arceb-elf32иarceb-linux-uclibcпри построении инструментальной цепочки, для которой big endian является значением по умолчанию. -mlittle-endian-EL-
Компилировать код для целевых платформ с little endian. Использование этих параметров устарело. Пользователи, которые хотят код с little endian, должны использовать целевые платформы
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-6.5.0/gcc/ARC-Options.html