3.19.12 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.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/DEC-Alpha-Options.html