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