3.19.46 Параметры 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. -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’, ‘z15’/‘arch13’, и ‘native’.
По умолчанию используется -march=z900.
Указание ‘native’ в качестве типа процессора может быть использовано для выбора лучшего варианта архитектуры для процессора хоста. -march=native не имеет эффекта, если GCC не распознаёт процессор.
-mtune=cpu-type-
Оптимизировать код, относящийся к cpu-type, за исключением ABI и набора доступных инструкций. Список значений cpu-type аналогичен списку для -march. По умолчанию используется значение, используемое для -march.
-mtpf-trace-mno-tpf-trace-
Генерировать код, который добавляет (не добавляет) специфичные для TPF ветви ОС для отслеживания в операционной системе. Эта опция выключена по умолчанию, даже при компиляции для TPF ОС.
-mtpf-trace-skip-mno-tpf-trace-skip-
Генерировать код, который изменяет (не изменяет) целевые точки ветвления по умолчанию, включенные -mtpf-trace, на указание на специализированные трассирующие процедуры, предоставляющие возможность выборочного пропуска записей трассировки функций для TPF ОС. Эта опция выключена по умолчанию, даже при компиляции для TPF ОС и указании -mtpf-trace.
-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, не превышая 64k. Для эффективности дополнительный код предполагает, что стек начинается с адреса, выровненного по значению, заданному параметром stack-size. Параметр stack-guard может использоваться только вместе с stack-size.
-mhotpatch=pre-halfwords,post-halfwords-
Если опция hotpatch включена, для всех функций в единице компиляции генерируется преамбула «горячей подмены». Метка функции предваряется заданным количеством двухбайтовых инструкций NOP (pre-halfwords, максимум 1000000). После метки добавляется 2 * post-halfwords байта, используя наиболее подходящие инструкции NOP, которые позволяет архитектура (максимум 1000000).
Если оба аргумента равны нулю, горячая подмена отключена.
Этот параметр может быть переопределён для отдельных функций с помощью атрибута
hotpatch.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/S_002f390-and-zSeries-Options.html