3.17.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 2. Когда
-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. Обратите внимание, что некоторые версии GCC 2.95 для S/390 или zSeries, не от FSF, генерировали код, который использует цепочку вызовов в кадре стека во время выполнения, а не только для отладки. Такой код не совместим с кодом, скомпилированным с-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. -
-mmvcle-mno-mvcle - Генерировать (или не генерировать) код, использующий инструкцию
mvcleдля выполнения блочных перемещений. Когда-mno-mvcleуказано, использовать циклmvcвместо. Это значение по умолчанию, если не оптимизировано под размер. -
-mdebug-mno-debug - Выводить (или не выводить) дополнительную отладочную информацию при компиляции. По умолчанию отладочная информация не выводится.
-
-march=cpu-type - Генерировать код, который выполняется на cpu-type, которое является именем системы, представляющей определённый тип процессора. Возможные значения для cpu-type — ‘
g5’, ‘g6’, ‘z900’, ‘z990’, ‘z9-109’, ‘z9-ec’, ‘z10’, ‘z196’, и ‘zEC12’. При генерации кода, использующего инструкции, доступные в архитектуре z/Architecture, значение по умолчанию-march=z900. В противном случае значение по умолчанию-march=g5. -
-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.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/S_002f390-and-zSeries-Options.html