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