3.20.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-
Сохранять (не сохранять) адрес кадра вызывающей функции в качестве указателя обратной цепочки в кадре стека вызываемой функции. Указатель обратной цепочки может потребоваться для отладки с помощью инструментов, не поддерживающих информацию 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. Обратите внимание, что некоторые выпуски 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.
-
-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», «z15»/«arch13», «z16»/«arch14», «z17»/«arch15» и «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-size на stack-guard байт (помните, что стек в S/390 растёт вниз). Если параметр stack-guard не указан, выбирается наименьшая степень двойки, превышающая размер кадра скомпилированной функции. Эти параметры предназначены для отладки проблем переполнения стека. Дополнительный код создаёт лишь небольшую нагрузку, поэтому его можно использовать и в системах, близких к промышленным, без значительного снижения производительности. Указанные значения должны быть точными степенями двойки, а stack-size должен быть больше stack-guard и не превышать 64 КБ. Для повышения эффективности дополнительный код предполагает, что стек начинается по адресу, выровненному по значению stack-size. Параметр stack-guard можно использовать только вместе с stack-size.
-
-mhotpatch=pre-halfwords,post-halfwords -
Если включён параметр горячей установки исправлений, для всех функций единицы компиляции генерируется пролог, поддерживающий «горячую установку исправлений». Перед меткой функции добавляется заданное количество двухбайтовых инструкций 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-15.3.0/gcc/S_002f390-and-zSeries-Options.html