Spec-Zone.ru › GCC 5

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

Spec-Zone.ru

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