Spec-Zone.ru › GCC 14

3.19.44 Варианты S/390 и zSeries

Это варианты «-m», определенные для архитектуры S/390 и zSeries.

-mhard-float
-msoft-float

Использовать (не использовать) аппаратные инструкции и регистры с плавающей запятой для операций с плавающей запятой. При указании -msoft-float, для выполнения операций с плавающей запятой используются функции в libgcc.a. При указании -mhard-float, компилятор генерирует инструкции IEEE с плавающей запятой. Это значение по умолчанию.

-mhard-dfp
-mno-hard-dfp

Использовать (не использовать) аппаратные инструкции десятичной плавающей запятой для операций с десятичной плавающей запятой. При указании -mno-hard-dfp, для выполнения операций с десятичной плавающей запятой используются функции в libgcc.a. При указании -mhard-dfp, компилятор генерирует аппаратные инструкции десятичной плавающей запятой. Это значение по умолчанию для -march=z9-ec и выше.

-mlong-double-64
-mlong-double-128

Эти переключатели контролируют размер типа long double. Размер 64 бита делает тип long double эквивалентным типу double. Это значение по умолчанию.

-mbackchain
-mno-backchain

Сохранять (не сохранять) адрес кадрового указателя вызывающей функции как указатель обратной цепочки в кадр стека вызываемой функции. Обратная цепочка может потребоваться для отладки с использованием инструментов, не понимающих информацию о кадрах вызовов DWARF. Когда -mno-packed-stack активна, указатель обратной цепочки сохраняется внизу кадра стека; когда -mpacked-stack активна, обратная цепочка помещается в самое верхнее слово области сохранения регистров 96/160 байт.

В целом, код, скомпилированный с -mbackchain, совместим по вызовам с кодом, скомпилированным с -mno-backchain; однако, использование обратной цепочки для целей отладки обычно требует, чтобы весь двоичный файл был скомпилирован с -mbackchain. Обратите внимание, что сочетание -mbackchain, -mpacked-stack и -mhard-float не поддерживается. Для компиляции ядра Linux используйте -msoft-float.

Значение по умолчанию — не поддерживать обратную цепочку.

-mpacked-stack
-mno-packed-stack

Использовать (не использовать) компактную структуру стека. При указании -mno-packed-stack, компилятор использует все поля области сохранения регистров 96/160 байт только для их стандартного назначения; неиспользуемые поля все еще занимают место в стеке. При указании -mpacked-stack, слоты сохранения регистров плотно упаковываются вверху области сохранения регистров; неиспользуемое место повторно используется для других целей, что позволяет более эффективно использовать доступное место в стеке. Однако, когда -mbackchain также активна, самое верхнее слово области сохранения всегда используется для хранения обратной цепочки, а регистр возврата всегда сохраняется на два слова ниже обратной цепочки.

Пока обратная цепочка кадра стека не используется, код, сгенерированный с -mpacked-stack, совместим по вызовам с кодом, сгенерированным с -mno-packed-stack. Обратите внимание, что некоторые не-FSF версии GCC 2.95 для S/390 или zSeries генерировали код, использующий обратную цепочку кадра стека во время выполнения, а не только для отладки. Такой код не совместим по вызовам с кодом, скомпилированным с -mpacked-stack. Также обратите внимание, что сочетание -mbackchain, -mpacked-stack и -mhard-float не поддерживается. Для компиляции ядра Linux используйте -msoft-float.

По умолчанию компактная структура стека не используется.

-msmall-exec
-mno-small-exec

Генерировать (или не генерировать) код, использующий инструкцию bras для вызовов подпрограмм. Это работает надежно только в том случае, если общий размер исполняемого файла не превышает 64 КБ. По умолчанию используется инструкция basr, которая не имеет этого ограничения.

-m64
-m31

При указании -m31, генерируется код, соответствующий ABI GNU/Linux для S/390. При указании -m64, генерируется код, соответствующий ABI GNU/Linux для zSeries. Это позволяет GCC, в частности, генерировать 64-битные инструкции. Для целей «s390» значение по умолчанию — -m31, в то время как для целей «s390x» значение по умолчанию — -m64.

-mzarch
-mesa

При указании -mzarch, генерируется код, использующий инструкции, доступные в архитектуре z/Architecture. При указании -mesa, генерируется код, использующий инструкции, доступные в ESA/390. Обратите внимание, что -mesa невозможна с -m64. При генерации кода, совместимого с ABI GNU/Linux для S/390, значение по умолчанию — -mesa. При генерации кода, совместимого с ABI GNU/Linux для zSeries, значение по умолчанию — -mzarch.

-mhtm
-mno-htm

Параметр -mhtm включает набор встроенных функций, использующих инструкции, доступные с помощью транзакционной системы выполнения, представленной с IBM zEnterprise EC12. -mhtm включена по умолчанию при использовании -march=zEC12.

-mvx
-mno-vx

При указании -mvx, генерируется код, использующий инструкции, доступные с расширением вектора, представленным с IBM z13. Этот параметр изменяет ABI для некоторых значений типа вектора в отношении выравнивания и соглашений о вызовах. В случае использования значений типа вектора в контексте, связанном с ABI, будет добавлен GAS-команда «.gnu_attribute» для обозначения результирующего двоичного файла с используемым ABI. -mvx включена по умолчанию при использовании -march=z13.

-mzvector
-mno-zvector

Параметр -mzvector включает расширения языка векторов и встроенные функции, использующие инструкции, доступные с расширением вектора, представленным с IBM z13. Этот параметр добавляет поддержку «vector» в качестве ключевого слова для определения переменных и аргументов типа вектор. «vector» доступен только при включенных расширениях GNU. Он не будет расширен при запросе строгой поддержки стандарта, например, с помощью -std=c99. В дополнение к встроенным функциям GCC низкого уровня, -mzvector включает набор встроенных функций, добавленных для совместимости с реализациями стиля AltiVec, такими как Power и Cell. Для использования этих встроенных функций необходимо включить заголовочный файл vecintrin.h. -mzvector отключена по умолчанию.

-mmvcle
-mno-mvcle

Генерировать (или не генерировать) код, использующий инструкцию mvcle для выполнения блочных перемещений. При указании -mno-mvcle используется цикл mvc вместо этого. Это значение по умолчанию, если не оптимизируется под размер.

-mdebug
-mno-debug

Печатать (или не печатать) дополнительную отладочную информацию при компиляции. По умолчанию отладочная информация не выводится.

-march=cpu-type

Генерировать код, который работает на cpu-type, которое является именем системы, представляющей определенный тип процессора. Возможные значения для cpu-type — «z900»/«arch5», «z990»/«arch6», «z9-109», «z9-ec»/«arch7», «z10»/«arch8», «z196»/«arch9», «zEC12», «z13»/«arch11», «z14»/«arch12», «z15»/«arch13», «z16»/«arch14» и «native».

Значение по умолчанию — -march=z900.

Указание «native» в качестве типа процессора может использоваться для выбора лучшего варианта архитектуры для процессора хоста. -march=native не имеет эффекта, если GCC не распознаёт процессор.

-mtune=cpu-type

Настроить cpu-type все применимые аспекты сгенерированного кода, за исключением ABI и набора доступных инструкций. Список значений cpu-type такой же, как и для -march. Значение по умолчанию — то же, что используется для -march.

-mtpf-trace
-mno-tpf-trace

Генерировать код, который добавляет (не добавляет) специфичные для TPF ветви ОС для отслеживания процедур в операционной системе. Этот параметр выключен по умолчанию, даже при компиляции для TPF ОС.

-mtpf-trace-skip
-mno-tpf-trace-skip

Генерировать код, который изменяет (не изменяет) целевые ветви по умолчанию, включённые -mtpf-trace, для указания на специализированные процедуры отслеживания, предоставляющие возможность выборочно пропускать записи отслеживания функций для TPF ОС. Этот параметр выключен по умолчанию, даже при компиляции для TPF ОС и указании -mtpf-trace.

-mfused-madd
-mno-fused-madd

Генерировать код, который использует (не использует) инструкции умножения и накопления с плавающей запятой. Эти инструкции генерируются по умолчанию, если используется аппаратная плавающая запятая.

-mwarn-framesize=framesize

Вывести предупреждение, если текущая функция превышает заданный размер кадра. Поскольку это проверка во время компиляции, она не должна быть реальной проблемой при выполнении программы. Она предназначена для выявления функций, которые, скорее всего, вызывают переполнение стека. Это полезно в среде с ограниченным размером стека, например, в ядре Linux.

-mwarn-dynamicstack

Вывести предупреждение, если функция вызывает alloca или использует динамически размерные массивы. Это, как правило, плохая идея при ограниченном размере стека.

-mstack-guard=stack-guard
-mstack-size=stack-size

Если эти параметры указаны, backend S/390 генерирует дополнительные инструкции в преамбуле функции, которые вызывают ошибку, если размер стека больше, чем stack-guard байт над stack-size (помните, что стек на S/390 растет вниз). Если параметр stack-guard опущен, выбирается наименьшая степень двойки, большая, чем размер кадра скомпилированной функции. Эти параметры предназначены для помощи в отладке проблем переполнения стека. Дополнительный код вызывает незначительные накладные расходы и, следовательно, может использоваться и в производственных системах без значительного снижения производительности. Указанные значения должны быть точными степенями двойки, и stack-size должен быть больше, чем stack-guard, не превышая 64k. Для повышения эффективности дополнительный код предполагает, что стек начинается с адреса, выровненного по значению, указанному параметром stack-size. Параметр stack-guard может использоваться только в сочетании с stack-size.

-mhotpatch=pre-halfwords,post-halfwords

Если включен параметр hotpatch, для всех функций в единице компиляции генерируется преамбула «hot-patching». К метке функции добавляется заданное количество инструкций NOP по два байта (pre-halfwords, максимум 1000000). После метки добавляется 2 * post-halfwords байта, используя наибольшие инструкции NOP, разрешенные архитектурой (максимум 1000000).

Если оба аргумента равны нулю, hotpatching отключен.

Этот параметр можно переопределить для отдельных функций с помощью атрибута hotpatch.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/S_002f390-and-zSeries-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API