3.18.3 Варианты архитектуры 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 без аппаратных расширений.
- ‘em4’
-
Компиляция для процессора ARC EM4.
- ‘em4_dmips’
-
Компиляция для процессора ARC EM4 DMIPS.
- ‘em4_fpus’
-
Компиляция для процессора ARC EM4 DMIPS с расширением для одноточной точности с плавающей точкой.
- ‘em4_fpuda’
-
Компиляция для процессора ARC EM4 DMIPS с расширением для одноточной точности с плавающей точкой и инструкциями двойной точности.
- ‘hs’
-
Компиляция для процессора ARC HS без аппаратных расширений, кроме атомных инструкций.
- ‘hs34’
-
Компиляция для процессора ARC HS34.
- ‘hs38’
-
Компиляция для процессора ARC HS38.
- ‘hs38_linux’
-
Компиляция для процессора ARC HS38 со всеми аппаратными расширениями.
- ‘arc600_norm’
-
Компиляция для процессора ARC 600 с включенными инструкциями
norm. - ‘arc600_mul32x16’
-
Компиляция для процессора ARC 600 с включенными инструкциями
normи 32x16-разрядными инструкциями умножения. - ‘arc600_mul64’
-
Компиляция для процессора ARC 600 с включенными инструкциями
normи инструкциямиmul64-семейства. - ‘arc601_norm’
-
Компиляция для процессора ARC 601 с включенными инструкциями
norm. - ‘arc601_mul32x16’
-
Компиляция для процессора ARC 601 с включенными инструкциями
normи 32x16-разрядными инструкциями умножения. - ‘arc601_mul64’
-
Компиляция для процессора ARC 601 с включенными инструкциями
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__.
Следующие параметры передаются в ассемблер и также определяют символы макросов препроцессора.
-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.
-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. См. Перекрёстное профилирование. Значение по умолчанию (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-8.5.0/gcc/ARC-Options.html