Spec-Zone.ru › GCC 8

3.18.11 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-относительные перенос. Когда используется -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-8.5.0/gcc/DEC-Alpha-Options.html

Spec-Zone.ru

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