3.20.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 без аппаратных расширений.
- ‘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 со всеми включёнными аппаратными расширениями.
- ‘hs4x’
-
Компилировать для процессора ARC HS4x.
- ‘hs4xd’
-
Компилировать для процессора ARC HS4xD.
- ‘hs4x_rel31’
-
Компилировать для процессора ARC HS4x, версия 3.10a.
- ‘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 -
Запретить использование вспомогательных регистров расширения FPX инструкциями
lrиsr. -
-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 -
Разрешить использование автоинкремента/автодекремента с регистровым смещением.
-
-mbbit-peephole -
Ничего не делает. Сохранён для обратной совместимости.
-
-mno-brcc -
Этот параметр отключает специфичный для целевой платформы этап в arc_reorg, генерирующий инструкции сравнения и условного перехода (
brcc). Он не влияет на генерацию этих инструкций этапом объединения. -
-mcase-vector-pcrel -
Использовать таблицы вариантов switch с адресацией относительно счётчика команд, чтобы уменьшить размер таблиц вариантов. Это значение используется по умолчанию для -Os.
-
-mcompact-casesi -
Включить компактный шаблон
casesi. Это значение используется по умолчанию для -Os и доступно только для ядер ARCv1. Этот параметр устарел. -
-mno-cond-exec -
Отключить специфичный для ARCompact этап генерации инструкций условного выполнения.
Из-за планирования слотов задержки и взаимодействия между номерами операндов, размерами литералов, длиной инструкций и поддержкой условного выполнения, независимому от целевой платформы этапу генерации условного выполнения часто недостаёт возможностей. Поэтому в порте ARC сохранён специальный этап, который после распределения регистров, сокращения переходов и планирования слотов задержки пытается найти дополнительные возможности для генерации условного выполнения. Этот этап обычно, но не всегда, повышает производительность и уменьшает размер кода ценой увеличения времени компиляции; поэтому предусмотрен параметр для его отключения. Если инструкции вызова выходят за допустимый диапазон смещения из-за условного выполнения, рассмотрите возможность использовать -mmedium-calls.
-
-mearly-cbranchsi -
Разрешить использование шаблона
cbranchsiдо перезагрузки регистров. -
-mexpand-adddi -
При генерации RTL разворачивать
adddi3иsubdi3вadd.f,adcи т. д. Этот параметр устарел. -
-mindexed-loads -
Разрешить использование индексированной загрузки. Это может вызвать проблемы, поскольку некоторые оптимизаторы предполагают наличие индексированных операций сохранения, которых на самом деле нет.
-
-mlra -
Ничего не делает. Сохранён для обратной совместимости.
-
-mlra-priority-none -
Не задавать приоритет для целевых регистров.
-
-mlra-priority-compact -
Задать приоритет целевых регистров для r0..r3 / r12..r15.
-
-mlra-priority-noncompact -
Снизить приоритет целевых регистров для r0..r3 / r12..r15.
-
-mmillicode -
При оптимизации размера (с помощью -Os) прологи и эпилоги, в которых требуется сохранить или восстановить большое количество регистров, часто сокращаются за счёт вызова специальной функции из libgcc; такой вызов называется вызовом millicode. Поскольку эти вызовы могут снижать производительность и/или вызывать проблемы при нестандартной компоновке, этот параметр позволяет включать или отключать генерацию вызовов millicode.
-
-mcode-density-frame -
Этот параметр разрешает компилятору генерировать инструкции
enterиleave. Эти инструкции допустимы только для процессоров с функцией повышения плотности кода. -
-mmixed-code -
Ничего не делает. Сохранён для обратной совместимости.
-
-mq-class -
Этот параметр устарел. Включить альтернативные варианты инструкции ‘q’. Это значение используется по умолчанию для -Os.
-
-mRcq -
Ничего не делает. Сохранён для обратной совместимости.
-
-mRcw -
Ничего не делает. Сохранён для обратной совместимости.
-
-msize-level=level -
Настроить оптимизацию размера с учётом длины инструкций и выравнивания. Допустимые значения level:
- ‘0’
-
Без оптимизации размера. Этот уровень устарел и обрабатывается как ‘1’.
- ‘1’
-
Короткие инструкции используются при наличии подходящих возможностей.
- ‘2’
-
Дополнительно отменяется выравнивание циклов и кода после барьеров.
- ‘3’
-
Дополнительно отменяется необязательное выравнивание данных и включается параметр Os.
Если задан -Os, по умолчанию используется значение ‘3’. В противном случае, если параметр не задан, поведение эквивалентно уровню ‘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, версия 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-15.3.0/gcc/ARC-Options.html