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 (также называемых 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-8.5.0/gcc/DEC-Alpha-Options.html