3.18.13 Параметры 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-9.5.0/gcc/DEC-Alpha-Options.html