Spec-Zone.ru › GCC 8

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API