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, совместим по вызовам с кодом, скомпилированным с -mno-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для вызовов подпрограмм. Это работает надёжно только если общий размер исполняемого файла не превышает 64k. По умолчанию используется инструкция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. -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’, ‘z16’/‘arch14’ и ‘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.
-mtpf-trace-skip-mno-tpf-trace-skip-
Генерировать код, который изменяет (не изменяет) значения по умолчанию для целей перехода, включенных опцией -mtpf-trace, на специализированные функции отслеживания, предоставляющие возможность выборочного пропуска записей отслеживания функций для TPF OS. Эта опция отключена по умолчанию, даже при компиляции для TPF OS и указании -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-11.4.0/gcc/S_002f390-and-zSeries-Options.html