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’, также включены прерывания при потере точности (underflow).
- ‘su’
Как ‘u’, но инструкции помечены как безопасные для завершения программным способом (см. руководство по архитектуре Alpha для подробностей).
- ‘sui’
Как ‘su’, но также включены прерывания при потере точности (inexact).
-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.
Далее: Параметры eBPF, Предыдущее: Параметры Darwin, Наверх: Параметры субмодели [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/DEC-Alpha-Options.html