3.18.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Сохранять (не сохранять) адрес кадровой области вызывающей функции в качестве указателя backchain в кадровой области вызываемой функции. Backchain может потребоваться для отладки с помощью инструментов, не понимающих информацию о кадрах вызовов DWARF. Когда активен -mno-packed-stack, указатель backchain сохраняется внизу кадровой области стека; когда активен -mpacked-stack, backchain помещается в самое верхнее слово области сохранения регистров 96/160 байт.
В общем случае, код, скомпилированный с -mbackchain, совместим с кодом, скомпилированным с -mmo-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для вызовов подпрограмм. Это работает надёжно только если общий размер исполняемого файла не превышает 64k. По умолчанию используется инструкция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’/‘arch5’, ‘z990’/‘arch6’, ‘z9-109’, ‘z9-ec’/‘arch7’, ‘z10’/‘arch8’, ‘z196’/‘arch9’, ‘zEC12’, ‘z13’/‘arch11’, ‘z14’/‘arch12’, и ‘native’.
Значение по умолчанию — -march=z900.
Указание ‘native’ в качестве типа процессора может быть использовано для выбора лучшего варианта архитектуры для процессора хоста. -march=native не имеет эффекта, если GCC не распознаёт процессор.
-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Если эти параметры указаны, 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 включён, для всех функций в единице компиляции генерируется преамбула функции «горячей замены». Метка функции предваряется заданным количеством инструкций 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-9.5.0/gcc/S_002f390-and-zSeries-Options.html