3.18.41 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, генерировать код, совместимый с GNU/Linux ABI для S/390. Когда указан -m64, генерировать код, совместимый с GNU/Linux ABI для zSeries. Это позволяет GCC, в частности, генерировать 64-битные инструкции. Для целей «s390» по умолчанию используется -m31, в то время как для целей «s390x» по умолчанию используется -m64.
-mzarch-mesaКогда указан -mzarch, генерировать код, используя инструкции, доступные в z/Architecture. Когда указан -mesa, генерировать код, используя инструкции, доступные в ESA/390. Обратите внимание, что -mesa невозможен с -m64. При генерации кода, совместимого с GNU/Linux ABI для S/390, по умолчанию используется -mesa. При генерации кода, совместимого с GNU/Linux ABI для 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’/‘arch5’, ‘z990’/‘arch6’, ‘z9-109’, ‘z9-ec’/‘arch7’, ‘z10’/‘arch8’, ‘z196’/‘arch9’, ‘zEC12’, ‘z13’/‘arch11’, ‘z14’/‘arch12’ и ‘native’.
По умолчанию -march=z900. ‘g5’/‘arch3’ и ‘g6’ устарели и будут удалены в будущих выпусках.
Указание «native» в качестве типа процессора может быть использовано для выбора наилучшего варианта архитектуры для процессора хоста. -march=native не имеет эффекта, если GCC не распознаёт процессор.
-mtune=cpu-typeНастраивать всё применимое в сгенерированном коде на cpu-type, за исключением ABI и набора доступных инструкций. Список значений cpu-type такой же, как для -march. По умолчанию используется значение, используемое для -march.
-mtpf-trace-mno-tpf-traceГенерировать код, добавляющий (не добавляющий) специфичные для TPF ОС ветви к трассировочным процедурам в операционной системе. Этот параметр выключен по умолчанию, даже при компиляции для TPF ОС.
-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-7.5.0/gcc/S_002f390-and-zSeries-Options.html