Spec-Zone.ru › GCC 6

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-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-6.5.0/gcc/DEC-Alpha-Options.html

Spec-Zone.ru

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