3.18.42 Параметры 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Сохранять (не сохранять) адрес фрейма вызывающей функции в качестве указателя backchain в фрейм стека вызываемой функции. Backchain может потребоваться для отладки с использованием инструментов, которые не понимают информацию о фреймах вызовов DWARF. Когда в силе -mno-packed-stack, указатель backchain сохраняется внизу фрейма стека; когда в силе -mpacked-stack, backchain помещается в верхнее слово области сохранения регистров 96/160 байт.
В общем случае, код, скомпилированный с -mbackchain, совместим по вызовам с кодом, скомпилированным с -mno-backchain; однако, использование backchain для отладки обычно требует, чтобы весь двоичный файл был построен с -mbackchain. Обратите внимание, что комбинация -mbackchain, -mpacked-stack и -mhard-float не поддерживается. Для сборки ядра Linux используйте -msoft-float.
По умолчанию backchain не поддерживается.
-mpacked-stack-mno-packed-stackИспользовать (не использовать) структуру стека с уплотнением. Если указано -mno-packed-stack, компилятор использует все поля области сохранения регистров 96/160 байт только для их предполагаемого назначения; неиспользуемые поля по-прежнему занимают место в стеке. Если указано -mpacked-stack, слоты сохранения регистров плотно упакованы в верхней части области сохранения регистров; неиспользуемое пространство повторно используется для других целей, что позволяет более эффективно использовать доступное пространство стека. Однако, когда -mbackchain также активен, верхнее слово области сохранения всегда используется для хранения backchain, а регистр возврата всегда сохраняется на два слова ниже backchain.
До тех пор, пока указатель backchain фрейма стека не используется, код, сгенерированный с -mpacked-stack, совместим по вызовам с кодом, сгенерированным с -mno-packed-stack. Обратите внимание, что некоторые не-FSF версии GCC 2.95 для S/390 или zSeries генерируют код, использующий backchain фрейма стека во время выполнения, а не только для отладки. Такой код не совместим по вызовам с кодом, скомпилированным с -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 включена, для всех функций в единице компиляции генерируется пролог функции «горячей замены». Метка функции предваряется заданным количеством инструкций NOP с двумя байтами (pre-halfwords, максимальное значение 1000000). После метки добавляются 2 * post-halfwords байта, используя самые большие инструкции NOP, которые поддерживает архитектура (максимальное значение 1000000).
Если оба аргумента равны нулю, горячая замена отключена.
Эту опцию можно переопределить для отдельных функций с помощью атрибута
hotpatch.
Далее: Параметры оценки, Предыдущее: Параметры RX, Вверх: Параметры подмодели [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/S_002f390-and-zSeries-Options.html