Spec-Zone.ru › GCC 6

3.18.40 Параметры 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, совместим по вызовам с кодом, скомпилированным с -mmo-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. Функции S/390 System z. -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», «z990», «z9-109», «z9-ec», «z10», «z196», «zEC12» и «z13». Значение по умолчанию — -march=z900. «g5» и «g6» устарели и будут удалены в будущих версиях.

-mtune=cpu-type

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

-mtpf-trace
-mno-tpf-trace

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

-mfused-madd
-mno-fused-madd

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

-mwarn-framesize=framesize

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

-mwarn-dynamicstack

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

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

Если эти опции заданы, S/390 бэкенд генерирует дополнительные инструкции в прологе функции, которые вызывают прерывание, если размер стека превышает stack-guard байт по отношению к stack-size (помните, что стек на S/390 растёт вниз). Если опция stack-guard опущена, выбирается наименьшая степень двойки, большая, чем размер фрейма скомпилированной функции. Эти опции предназначены для помощи в отладке проблем переполнения стека. Дополнительно сгенерированный код вызывает лишь небольшую нагрузку и поэтому может использоваться и в системах для производства без значительного ухудшения производительности. Заданные значения должны быть точными степенями двойки, а stack-size должен быть больше stack-guard, не превышая 64к. Для эффективности дополнительный код предполагает, что стек начинается с адреса, выровненного по значению 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.

Далее: Параметры подсчета, Предыдущее: Параметры RX, Вверх: Параметры подмодели [Оглавление][Индекс]

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

Spec-Zone.ru

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