3.17.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’ - Планирование как EV4 без расширений набора инструкций.
- ‘
ev45’ - Планирование как EV5 без расширений набора инструкций.
- ‘
21064’ - Планирование как EV5 с поддержкой расширения BWX.
- ‘
ev5’ - Планирование как EV5 с поддержкой расширения BWX и MAX.
- ‘
21164’ - Планирование как EV6 с поддержкой расширений BWX, FIX и MAX.
- ‘
ev56’ - Планирование как 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-4.9.4/gcc/DEC-Alpha-Options.html