Spec-Zone.ru › GCC 9

3.18.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.

Далее: Параметры FR30, Предыдущий: Параметры Darwin, Вверх: Параметры подмодели [Оглавление][Указатель]

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

Spec-Zone.ru

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