Spec-Zone.ru › GCC 11

Далее: Параметры eBPF, Предыдущее: Параметры Darwin, Вверх: Параметры, зависящие от машины [Оглавление][Индекс]

3.19.13 Параметры DEC Alpha ¶

Эти параметры ‘-m’ определены для реализаций DEC Alpha:

-mno-soft-float
-msoft-float

Использовать (не использовать) аппаратные инструкции с плавающей точкой для операций с плавающей точкой. При указании -msoft-float для выполнения операций с плавающей точкой используются функции из libgcc.a. Если эти функции не заменены процедурами, эмулирующими операции с плавающей точкой, или скомпилированы таким образом, чтобы вызывать такие эмулирующие процедуры, эти функции выполняют операции с плавающей точкой. Если вы компилируете для Alpha без операций с плавающей точкой, необходимо убедиться, что библиотека построена таким образом, чтобы их не вызывать.

Обратите внимание, что реализации Alpha без операций с плавающей точкой должны иметь регистры с плавающей точкой.

-mfp-reg
-mno-fp-regs

Генерировать код, использующий (не использующий) набор регистров с плавающей точкой. -mno-fp-regs подразумевает -msoft-float. Если набор регистров с плавающей точкой не используется, операнды с плавающей точкой передаются в целочисленные регистры, как если бы они были целыми числами, а результаты с плавающей точкой передаются в $0 вместо $f0. Эта последовательность вызовов нестандартна, поэтому любая функция с аргументом или значением возврата с плавающей точкой, вызываемая кодом, скомпилированным с -mno-fp-regs, также должна быть скомпилирована с этим параметром.

Типичным применением этого параметра является построение ядра, которое не использует и, следовательно, не должно сохранять и восстанавливать какие-либо регистры с плавающей точкой.

-mieee

Архитектура Alpha реализует аппаратное обеспечение с плавающей точкой, оптимизированное для максимальной производительности. Она в основном совместима со стандартом IEEE с плавающей точкой. Однако для полной совместимости требуется программная поддержка. Этот параметр генерирует код, полностью совместимый с IEEE, за исключением того, что флаг inexact-flag не поддерживается (см. ниже). Если этот параметр включён, препроцессорная макрокоманда _IEEE_FP определяется во время компиляции. Полученный код менее эффективен, но способен правильно поддерживать ненормализованные числа и исключительные значения IEEE, такие как не число и плюс/минус бесконечность. Другие компиляторы Alpha называют этот параметр -ieee_with_no_inexact.

-mieee-with-inexact

Это аналогично -mieee, за исключением того, что сгенерированный код также поддерживает флаг IEEE inexact-flag. Включение этого параметра заставляет сгенерированный код реализовать полностью совместимую математику IEEE. В дополнение к _IEEE_FP, _IEEE_FP_EXACT определяется как макрокоманда препроцессора. На некоторых реализациях Alpha полученный код может выполняться значительно медленнее, чем код, сгенерированный по умолчанию. Поскольку очень мало кода зависит от inexact-flag, обычно этот параметр не следует указывать. Другие компиляторы Alpha называют этот параметр -ieee_with_inexact.

-mfp-trap-mode=trap-mode

Этот параметр контролирует, какие ловушки, связанные с плавающей точкой, включены. Другие компиляторы Alpha называют этот параметр -fptm trap-mode. Режим ловушки может быть установлен на одно из четырёх значений:

‘n’

Это значение по умолчанию (нормальное). Единственные ловушки, которые включены, это те, которые нельзя отключить в программном обеспечении (например, ловушка деления на ноль).

‘u’

В дополнение к ловушкам, включённым параметром ‘n’, также включены ловушки переполнения.

‘su’

Как ‘u’, но инструкции помечаются как безопасные для завершения в программном обеспечении (см. руководство по архитектуре Alpha для подробностей).

‘sui’

Как ‘su’, но также включены ловушки неточных операций.

-mfp-rounding-mode=rounding-mode

Выбирает режим округления IEEE. Другие компиляторы Alpha называют этот параметр -fprm rounding-mode. rounding-mode может быть одним из:

‘n’

Нормальный режим округления IEEE. Числа с плавающей точкой округляются до ближайшего машинного числа или до чётного машинного числа в случае ничьи.

‘m’

Округление к минус бесконечности.

‘c’

Режим округления с отбрасыванием. Числа с плавающей точкой округляются к нулю.

‘d’

Динамический режим округления. Поле в регистре управления плавающей точкой (fpcr, см. справочник по архитектуре Alpha) контролирует применяемый режим округления. Библиотека C инициализирует этот регистр для округления к плюс бесконечности. Таким образом, если ваша программа не изменяет fpcr, ‘d’ соответствует округлению к плюс бесконечности.

-mtrap-precision=trap-precision

В архитектуре Alpha ловушки с плавающей точкой неточные. Это означает, что без программной помощи невозможно восстановиться после ловушки с плавающей точкой, и выполнение программы обычно должно быть прервано. GCC может генерировать код, который может помочь обработчикам ловушек операционной системы определить точное место, которое вызвало ловушку с плавающей точкой. В зависимости от требований приложения можно выбрать различные уровни точности:

‘p’

Точность программы. Этот параметр является параметром по умолчанию и означает, что обработчик ловушек может только определить, какая программа вызвала исключение с плавающей точкой.

‘f’

Точность функции. Обработчик ловушек может определить функцию, вызвавшую исключение с плавающей точкой.

‘i’

Точность инструкции. Обработчик ловушек может определить точную инструкцию, вызвавшую исключение с плавающей точкой.

Другие компиляторы Alpha предоставляют эквивалентные параметры, называемые -scope_safe и -resumption_safe.

-mieee-conformant

Этот параметр помечает сгенерированный код как совместимый с IEEE. Не используйте этот параметр, если вы также не указали -mtrap-precision=i и либо -mfp-trap-mode=su, либо -mfp-trap-mode=sui. Его единственное действие — вывести строку ‘.eflag 48’ в прологе функции сгенерированного файла ассемблера.

-mbuild-constants

Обычно GCC проверяет 32- или 64-битное целочисленное константу, чтобы увидеть, может ли она быть сконструирована из меньших констант за две или три инструкции. Если нет, он выводит константу как литерал и генерирует код для загрузки её из сегмента данных во время выполнения.

Используйте этот параметр, чтобы потребовать от GCC построение всех целочисленных констант с помощью кода, даже если это займёт больше инструкций (максимум шесть).

Вы обычно используете этот параметр для построения динамического загрузчика общей библиотеки. Будучи общей библиотекой, он должен переместить себя в память, прежде чем сможет найти переменные и константы в своём сегменте данных.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max

Укажите, должен ли GCC генерировать код для использования набора инструкций BWX, CIX, FIX и MAX. По умолчанию используется набор инструкций, поддерживаемый типом процессора, указанным с помощью параметра -mcpu=, или процессора, на котором был построен GCC, если он не указан.

-mfloat-vax
-mfloat-ieee

Генерировать код, использующий (не использующий) VAX F и G арифметику с плавающей точкой вместо одинарной и двойной точности IEEE.

-mexplicit-relocs
-mno-explicit-relocs

Старые ассемблеры Alpha не предоставляли возможности генерировать перемещения символов, за исключением макрокоманд ассемблера. Использование этих макрокоманд не позволяет оптимального планирования инструкций. GNU binutils версии 2.12 поддерживают новый синтаксис, который позволяет компилятору явно отмечать, какие перемещения символов должны применяться к каким инструкциям. Этот параметр в основном полезен для отладки, так как GCC обнаруживает возможности ассемблера при его построении и соответствующим образом устанавливает настройки по умолчанию.

-msmall-data
-mlarge-data

При использовании -mexplicit-relocs статические данные обращаются через перемещения gp-relative. При использовании -msmall-data объекты длиной 8 байт или меньше размещаются в маленькой области данных (разделах .sdata и .sbss) и обращаются через 16-битные перемещения относительно регистра $gp. Это ограничивает размер малой области данных 64 КБ, но позволяет переменным обращаться к ним непосредственно с помощью одной инструкции.

По умолчанию используется -mlarge-data. С этим параметром область данных ограничена значением чуть ниже 2 ГБ. Программы, которым требуется более 2 ГБ данных, должны использовать malloc или mmap, чтобы выделить данные в куче вместо сегмента данных программы.

При генерации кода для общих библиотек -fpic подразумевает -msmall-data, а -fPIC подразумевает -mlarge-data.

-msmall-text
-mlarge-text

При использовании -msmall-text компилятор предполагает, что код всей программы (или общей библиотеки) помещается в 4 МБ и, следовательно, достижим с помощью инструкции перехода. При использовании -msmall-data компилятор может предположить, что все локальные символы имеют одинаковое значение $gp, а значит, уменьшить количество инструкций, необходимых для вызова функции, с 4 до 1.

По умолчанию используется -mlarge-text.

-mcpu=cpu_type

Установите параметры набора инструкций и планирования инструкций для типа процессора cpu_type. Вы можете указать либо имя в стиле ‘EV’, либо соответствующий номер чипа. GCC поддерживает параметры планирования для процессоров семейства EV4, EV5 и EV6 и выбирает значения по умолчанию для набора инструкций из указанного процессора. Если вы не укажете тип процессора, GCC по умолчанию использует процессор, на котором был скомпилирован компилятор.

Допустимые значения для cpu_type:

‘ev4’
‘ev45’
‘21064’

Планирование как EV4 и не имеет расширений набора инструкций.

‘ev5’
‘21164’

Планирование как EV5 и не имеет расширений набора инструкций.

‘ev56’
‘21164a’

Планирование как EV5 и поддерживает расширение BWX.

‘pca56’
‘21164pc’
‘21164PC’

Планирование как EV5 и поддерживает расширения BWX и MAX.

‘ev6’
‘21264’

Планирование как EV6 и поддерживает расширения BWX, FIX и MAX.

‘ev67’
‘21264a’

Планирование как EV6 и поддерживает расширения BWX, CIX, FIX и MAX.

Нативные инструментальные цепочки также поддерживают значение ‘native’, которое выбирает лучший вариант архитектуры для процессора хоста. -mcpu=native не оказывает никакого влияния, если GCC не распознаёт процессор.

-mtune=cpu_type

Установите только параметры планирования инструкций для типа процессора cpu_type. Набор инструкций не изменяется.

Нативные инструментальные цепочки также поддерживают значение ‘native’, которое выбирает лучший вариант архитектуры для процессора хоста. -mtune=native не оказывает никакого влияния, если GCC не распознаёт процессор.

-mmemory-latency=time

Устанавливает задержку, которую планировщик должен предположить для типичных обращений к памяти, как их видит приложение. Это число сильно зависит от шаблонов доступа к памяти, используемых приложением, и размера внешнего кэша на машине.

Допустимые значения для time:

‘number’

Десятичное число, представляющее количество тактов процессора.

‘L1’
‘L2’
‘L3’
‘main’

Компилятор содержит оценки количества тактов процессора для «типичного» оборудования EV4 и EV5 для кэшей уровня 1, 2 и 3 (также называемых Dcache, Scache и Bcache), а также для основной памяти. Обратите внимание, что L3 действителен только для EV5.

Следующее: Параметры eBPF, Предыдущее: Параметры Darwin, Вверх: Зависимые от модели машины параметры [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/DEC-Alpha-Options.html

Spec-Zone.ru

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