Spec-Zone.ru › GCC 15

3.20.13 Параметры DEC Alpha

Для реализаций DEC Alpha определены следующие параметры «-m»:

-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, если тип не указан.

-msafe-bwa
-mno-safe-bwa

Указывают, следует ли GCC при отсутствии дополнительного набора инструкций BWX генерировать код, безопасный для многопоточной работы и асинхронных сигналов, для операций доступа к байтам и выровненным словам в памяти.

-msafe-partial
-mno-safe-partial

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

-mfloat-vax
-mfloat-ieee

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

-mexplicit-relocs
-mno-explicit-relocs

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

-msmall-data
-mlarge-data

При включённом параметре -mexplicit-relocs доступ к статическим данным осуществляется с помощью перемещений относительно gp. При использовании -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, и тем самым сократить количество инструкций, необходимых для вызова функции, с четырёх до одной.

По умолчанию используется -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 с кэшами первого, второго и третьего уровней (также называемыми Dcache, Scache и Bcache), а также для основной памяти. Обратите внимание, что L3 допустим только для EV5.

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

Spec-Zone.ru

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