Spec-Zone.ru › GCC 7

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

Далее: Параметры FR30, Предыдущее: Параметры Darwin, Вверх: Параметры подмоделей [Содержание][Индекс]

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

Spec-Zone.ru

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