Spec-Zone.ru › GCC 14

3.19.42 IBM RS/6000 и PowerPC параметры

Эти параметры ‘-m’ определены для IBM RS/6000 и PowerPC:

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mhard-dfp
-mno-hard-dfp

Эти параметры используются для указания доступных инструкций на используемом процессоре. Значение по умолчанию для этих параметров определяется при конфигурации GCC. Указание -mcpu=cpu_type переопределяет указание этих параметров. Рекомендуется использовать параметр -mcpu=cpu_type вместо перечисленных выше параметров.

Указание -mpowerpc-gpopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе «Общие» (General Purpose), включая квадратный корень с плавающей запятой. Указание -mpowerpc-gfxopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе «Графика» (Graphics), включая выбор плавающей запятой.

Параметр -mmfcrf позволяет GCC генерировать инструкцию перехода из поля регистра состояния (condition register field), реализованную на процессоре POWER4 и других процессорах, поддерживающих архитектуру PowerPC V2.01. Параметр -mpopcntb позволяет GCC генерировать инструкцию подсчёта единиц (popcount) и оценки обратной величины для чисел с двойной точностью FP, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчёта единиц (popcount), реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления чисел с плавающей запятой до целых значений, реализованные на процессоре POWER5+ и других процессорах, поддерживающих архитектуру PowerPC V2.03. Параметр -mcmpb позволяет GCC генерировать инструкцию сравнения байтов, реализованную на процессоре POWER6 и других процессорах, поддерживающих архитектуру PowerPC V2.05. Параметр -mhard-dfp позволяет GCC генерировать инструкции десятичной арифметики с плавающей запятой, реализованные на некоторых процессорах POWER.

Параметр -mpowerpc64 позволяет GCC генерировать дополнительные 64-битные инструкции, которые можно найти в полной архитектуре PowerPC64, и обрабатывать регистры как 64-битные, двойные значения. GCC по умолчанию использует -mno-powerpc64.

-mcpu=cpu_type

Устанавливает тип архитектуры, использование регистров и параметры планирования инструкций для типа машины cpu_type. Допустимые значения для cpu_type — ‘401’, ‘403’, ‘405’, ‘405fp’, ‘440’, ‘440fp’, ‘464’, ‘464fp’, ‘476’, ‘476fp’, ‘505’, ‘601’, ‘602’, ‘603’, ‘603e’, ‘604’, ‘604e’, ‘620’, ‘630’, ‘740’, ‘7400’, ‘7450’, ‘750’, ‘801’, ‘821’, ‘823’, ‘860’, ‘970’, ‘8540’, ‘a2’, ‘e300c2’, ‘e300c3’, ‘e500mc’, ‘e500mc64’, ‘e5500’, ‘e6500’, ‘ec603e’, ‘G3’, ‘G4’, ‘G5’, ‘titan’, ‘power3’, ‘power4’, ‘power5’, ‘power5+’, ‘power6’, ‘power6x’, ‘power7’, ‘power8’, ‘power9’, ‘power10’, ‘powerpc’, ‘powerpc64’, ‘powerpc64le’, ‘rs64’, и ‘native’.

-mcpu=powerpc, -mcpu=powerpc64 и -mcpu=powerpc64le задают типы машин с чистой 32-битной архитектурой PowerPC (любой порядок байтов), 64-битной большой эндиан PowerPC и 64-битной малой эндиан PowerPC соответственно, с соответствующей общей моделью процессора, предполагаемой для целей планирования.

Указание ‘native’ в качестве типа процессора обнаруживает и выбирает параметр архитектуры, соответствующий процессору хост-системы, выполняющей компиляцию. -mcpu=native не оказывает никакого эффекта, если GCC не распознаёт процессор.

Другие параметры задают конкретный процессор. Сгенерированный код при этих параметрах лучше всего работает на этом процессоре и может вообще не работать на других.

Параметры -mcpu автоматически включают или отключают следующие параметры:

-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
-mpopcntb  -mpopcntd  -mpowerpc64
-mpowerpc-gpopt  -mpowerpc-gfxopt
-mmulhw  -mdlmzb  -mmfpgpr  -mvsx
-mcrypto  -mhtm  -mpower8-fusion
-mquad-memory  -mquad-memory-atomic  -mfloat128
-mfloat128-hardware -mprefixed -mpcrel -mmma
-mrop-protect

Конкретные параметры, установленные для любого процессора, различаются в разных версиях компилятора, в зависимости от того, какая настройка, как кажется, создаёт оптимальный код для этого процессора; это необязательно отражает реальные возможности оборудования. Если вы хотите установить отдельный параметр в определённое значение, вы можете указать его после параметра -mcpu, например, -mcpu=970 -mno-altivec.

В AIX параметры -maltivec и -mpowerpc64 в настоящее время не включаются и не отключаются параметром -mcpu, потому что в AIX нет полной поддержки этих параметров. Вы по-прежнему можете включить или отключить их индивидуально, если уверены, что это сработает в вашей среде.

-mtune=cpu_type

Устанавливает параметры планирования инструкций для типа машины cpu_type, но не устанавливает тип архитектуры или использование регистров, как это делает -mcpu=cpu_type. Те же значения для cpu_type используются для -mtune, что и для -mcpu. Если оба параметра указаны, сгенерированный код использует архитектуру и регистры, установленные параметром -mcpu, но параметры планирования, установленные параметром -mtune.

-mcmodel=small

Генерирует код PowerPC64 для маленькой модели: TOC ограничен 64 КБ.

-mcmodel=medium

Генерирует код PowerPC64 для средней модели: TOC и другие статические данные могут достигать общего размера до 4 ГБ. Это значение по умолчанию для 64-битного Linux.

-mcmodel=large

Генерирует код PowerPC64 для большой модели: TOC может достигать размера до 4 ГБ. Другие данные и код ограничены только 64-битным адресным пространством.

-maltivec
-mno-altivec

Генерирует код, использующий (не использующий) инструкции AltiVec, а также включает использование встроенных функций, которые позволяют получить более прямой доступ к набору инструкций AltiVec. Вам также может потребоваться установить -mabi=altivec, чтобы настроить текущий ABI с расширениями AltiVec ABI.

Когда используется -maltivec, порядок элементов для встроенных функций AltiVec, таких как vec_splat, vec_extract, и vec_insert, соответствует порядку элементов массива, соответствующему порядку байтов целевой платформы. То есть, нулевой элемент определяет самый левый элемент в регистре вектора при целевой платформе с большим порядком байтов и определяет самый правый элемент в регистре вектора при целевой платформе с малым порядком байтов.

-mvrsave
-mno-vrsave

Генерирует инструкции VRSAVE при генерации кода AltiVec.

-msecure-plt

Генерирует код, который позволяет ld и ld.so создавать исполняемые файлы и общие библиотеки с неисполняемыми .plt и .got секциями. Это параметр PowerPC 32-битного SYSV ABI.

-mbss-plt

Генерирует код, который использует BSS .plt секцию, которую ld.so заполняет, и требует .plt и .got секции, которые оба являются читаемыми и исполняемыми. Это параметр PowerPC 32-битного SYSV ABI.

-misel
-mno-isel

Этот переключатель включает или выключает генерацию инструкций ISEL.

-mvsx
-mno-vsx

Генерирует код, использующий (не использующий) векторные/скалярные (VSX) инструкции, а также включает использование встроенных функций, которые позволяют получить более прямой доступ к набору инструкций VSX.

-mcrypto
-mno-crypto

Включает (отключает) использование встроенных функций, которые позволяют получить прямой доступ к криптографическим инструкциям, добавленным в версию 2.07 ISA PowerPC.

-mhtm
-mno-htm

Включает (отключает) использование встроенных функций, которые позволяют получить прямой доступ к инструкциям транзакционной памяти аппаратного обеспечения (HTM), добавленным в версию 2.07 ISA PowerPC.

-mpower8-fusion
-mno-power8-fusion

Генерирует код, который сохраняет (не сохраняет) некоторые целочисленные операции рядом, чтобы инструкции могли быть объединены на процессорах power8 и более поздних.

-mquad-memory
-mno-quad-memory

Генерирует код, использующий (не использующий) неатомарные инструкции памяти для четырёхбайтовых слов. Параметр -mquad-memory требует использования 64-битного режима.

-mquad-memory-atomic
-mno-quad-memory-atomic

Генерирует код, использующий (не использующий) атомарные инструкции памяти для четырёхбайтовых слов. Параметр -mquad-memory-atomic требует использования 64-битного режима.

-mfloat128
-mno-float128

Включить/отключить ключевое слово __float128 для плавающей точки IEEE 128 бит и использовать либо программную эмуляцию для плавающей точки IEEE 128 бит, либо аппаратные инструкции.

Для использования поддержки плавающей точки IEEE 128 бит необходимо включить набор инструкций VSX (-mvsx). Поддержка плавающей точки IEEE 128 бит поддерживается только в Linux.

По умолчанию -mfloat128 включен на системах PowerPC Linux, использующих набор инструкций VSX, и выключен на других системах.

Если вы используете набор инструкций ISA 3.0 (-mcpu=power9) на 64-битной системе, поддержка плавающей точки IEEE 128 бит также включит генерацию инструкций плавающей точки ISA 3.0 IEEE 128 бит. В противном случае, если вы не укажете на генерацию инструкций ISA 3.0 или нацеливаетесь на 32-битную систему большого эндиана, плавающая точка IEEE 128 бит будет реализована с помощью программной эмуляции.

-mfloat128-hardware
-mno-float128-hardware

Включить/отключить использование аппаратных инструкций ISA 3.0 для поддержки типа данных __float128.

По умолчанию -mfloat128-hardware включен на системах PowerPC Linux, использующих набор инструкций ISA 3.0, и выключен на других системах.

-m32
-m64

Генерировать код для 32-битных или 64-битных сред целей Darwin и SVR4 (включая GNU/Linux). 32-битная среда устанавливает int, long и указатель на 32 бита и генерирует код, который работает на любом варианте PowerPC. 64-битная среда устанавливает int на 32 бита, а long и указатель на 64 бита и генерирует код для PowerPC64, как для -mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc

Изменить генерацию TOC (Table Of Contents), которая создается для каждого исполняемого файла. Опция -mfull-toc выбрана по умолчанию. В этом случае GCC выделяет по крайней мере одну запись TOC для каждой уникальной ссылки на неавтоматическую переменную в вашей программе. GCC также помещает константы с плавающей точкой в TOC. Однако в TOC доступно только 16 384 записи.

Если вы получаете сообщение об ошибке компоновщика, говорящее о переполнении доступного пространства TOC, вы можете уменьшить используемое пространство TOC с помощью опций -mno-fp-in-toc и -mno-sum-in-toc. -mno-fp-in-toc предотвращает помещение GCC констант с плавающей точкой в TOC, а -mno-sum-in-toc заставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения вместо помещения этой суммы в TOC. Вы можете указать одну или обе эти опции. Каждая из них заставляет GCC создавать код немного медленнее и больше за счёт экономии пространства TOC.

Если вам всё ещё не хватает места в TOC, даже когда вы указали обе эти опции, укажите -mminimal-toc вместо этого. Эта опция заставляет GCC создавать только одну запись TOC для каждого файла. При указании этой опции GCC создаёт код, который медленнее и больше, но использует очень мало пространства TOC. Вы можете использовать эту опцию только для файлов, содержащих менее часто исполняемый код.

-maix64
-maix32

Включить 64-битный AIX ABI и соглашение о вызовах: 64-битные указатели, 64-битный long тип и инфраструктура, необходимая для их поддержки. Указание -maix64 подразумевает -mpowerpc64, а -maix32 отключает 64-битный ABI и подразумевает -mno-powerpc64. GCC по умолчанию использует -maix32.

-mxl-compat
-mno-xl-compat

Создавать код, более точно соответствующий семантике компилятора IBM XL при использовании совместимого с AIX ABI. Передавать аргументы с плавающей точкой прототипированным функциям в дополнение к аргументам FPR в область сохранения регистров (RSA) на стеке. Не предполагать, что наиболее значимый двойной в 128-битном длинном двойном значении правильно округлён при сравнении значений и преобразовании в двойной. Использовать имена символов XL для поддержки рутин длинной двойной.

Соглашение о вызовах AIX было расширено, но первоначально не было задокументировано для обработки редкого случая K&R C для вызова функции, принимающей адрес своих аргументов с меньшим количеством аргументов, чем объявлено. Компиляторы IBM XL обращаются к аргументам с плавающей точкой, которые не помещаются в RSA, со стека, когда подпрограмма компилируется без оптимизации. Поскольку постоянное хранение аргументов с плавающей точкой в стеке неэффективно и редко требуется, эта опция по умолчанию не включена и необходима только при вызове подпрограмм, скомпилированных компиляторами IBM XL без оптимизации.

-mpe

Поддержка IBM RS/6000 SP Параллельной среды (PE). Связывать приложение, написанное для использования передачи сообщений, со специальным стартовым кодом для запуска приложения. Система должна иметь PE, установленную в стандартном месте (/usr/lpp/ppe.poe/), или файл specs должен быть переопределён с опцией -specs= для указания соответствующего расположения каталога. Параллельная среда не поддерживает потоки, поэтому опция -mpe и опция -pthread несовместимы.

-malign-natural
-malign-power

В AIX, 32-битных Darwin и 64-битных PowerPC GNU/Linux, опция -malign-natural переопределяет определённое ABI выравнивание более крупных типов, таких как двойные с плавающей точкой, на их границу, основанную на естественном размере. Опция -malign-power сообщает GCC следовать правилам выравнивания, указанным в ABI. GCC по умолчанию использует стандартное выравнивание, определённое в ABI.

В 64-битной Darwin естественное выравнивание является по умолчанию, и -malign-power не поддерживается.

-msoft-float
-mhard-float

Генерировать код, не использующий (использующий) набор регистров с плавающей точкой. Программная эмуляция с плавающей точкой предоставляется, если вы используете опцию -msoft-float и передаёте опцию GCC при компоновке.

-mmultiple
-mno-multiple

Генерировать код, использующий (не использующий) инструкции загрузки и сохранения нескольких слов. Эти инструкции генерируются по умолчанию на системах POWER и не генерируются на системах PowerPC. Не используйте -mmultiple на системах PowerPC с малым эндианом, так как эти инструкции не работают, когда процессор находится в режиме малого эндиана. Исключение составляют PPC740 и PPC750, которые разрешают эти инструкции в режиме малого эндиана.

-mupdate
-mno-update

Генерировать код, использующий (не использующий) инструкции загрузки или сохранения, которые обновляют базовый регистр до адреса вычисленного местоположения памяти. Эти инструкции генерируются по умолчанию. Если вы используете -mno-update, есть небольшой интервал между временем обновления указателя стека и сохранением адреса предыдущей рамки, что означает, что код, который перемещает кадр стека через прерывания или сигналы, может получить повреждённые данные.

-mavoid-indexed-addresses
-mno-avoid-indexed-addresses

Генерировать код, который пытается избежать (не избегать) использования индексированных инструкций загрузки или сохранения. Эти инструкции могут привести к снижению производительности на процессорах Power6 в определённых ситуациях, таких как прохождение по большим массивам, пересекающим границу 16 М. Эта опция включена по умолчанию при нацеливании на Power6 и отключена в противном случае.

-mfused-madd
-mno-fused-madd

Генерировать код, использующий (не использующий) инструкции умножения и накопления с плавающей точкой. Эти инструкции генерируются по умолчанию, если используется аппаратная плавающая точка. Зависимая от машины опция -mfused-madd теперь отображается на независимую от машины опцию -ffp-contract=fast, а -mno-fused-madd отображается на -ffp-contract=off.

-mmulhw
-mno-mulhw

Генерировать код, использующий (не использующий) инструкции умножения и умножения-накопления на полусловах на процессорах IBM 405, 440, 464 и 476. Эти инструкции генерируются по умолчанию при нацеливании на эти процессоры.

-mdlmzb
-mno-dlmzb

Генерировать код, использующий (не использующий) инструкцию поиска строк ‘dlmzb’ на процессорах IBM 405, 440, 464 и 476. Эта инструкция генерируется по умолчанию при нацеливании на эти процессоры.

-mno-bit-align
-mbit-align

В системах System V.4 и встраиваемых системах PowerPC не (принудительно) выравнивать структуры и объединения, содержащие битовые поля, к базовому типу битового поля.

Например, по умолчанию структура, содержащая только 8 unsigned битовых полей длиной 1, выравнивается к границе 4 байта и имеет размер 4 байта. Используя -mno-bit-align, структура выравнивается к границе 1 байта и имеет размер 1 байт.

-mno-strict-align
-mstrict-align

В системах System V.4 и встраиваемых системах PowerPC не (предполагать), что обращение к невыровненной памяти обрабатывается системой.

-mrelocatable
-mno-relocatable

Генерировать код, который позволяет (не позволяет) статически связанному исполняемому файлу перемещаться в другой адрес во время выполнения. Простой загрузчик встраиваемой системы PowerPC должен переместить всё содержимое .got2 и 4-байтовых местоположений, перечисленных в .fixup разделе, таблицу 32-битных адресов, сгенерированных этой опцией. Для работы все объединённые объекты должны быть скомпилированы с -mrelocatable или -mrelocatable-lib. Код -mrelocatable выравнивает стек к 8-байтовой границе.

-mrelocatable-lib
-mno-relocatable-lib

Как и -mrelocatable, -mrelocatable-lib генерирует раздел .fixup для перемещения статических исполняемых файлов во время выполнения, но -mrelocatable-lib не использует меньшее выравнивание стека -mrelocatable. Объекты, скомпилированные с -mrelocatable-lib, могут быть связаны с объектами, скомпилированными с любыми комбинациями опций -mrelocatable.

-mno-toc
-mtoc

В системах System V.4 и встраиваемых системах PowerPC не предполагается, что регистр 2 содержит указатель на глобальную область, указывающую на адреса, используемые в программе.

-mlittle
-mlittle-endian

В системах System V.4 и встраиваемых системах PowerPC код компилируется для процессора в режиме little-endian. Опция -mlittle-endian эквивалентна опции -mlittle.

-mbig
-mbig-endian

В системах System V.4 и встраиваемых системах PowerPC код компилируется для процессора в режиме big-endian. Опция -mbig-endian эквивалентна опции -mbig.

-mdynamic-no-pic

В системах Darwin/macOS код компилируется таким образом, что он не является перепозиционируемым, но его внешние ссылки являются перепозиционируемыми. Полученный код подходит для приложений, но не для динамически подключаемых библиотек.

-msingle-pic-base

Регистр, используемый для адресации PIC, обрабатывается как только для чтения, а не загружается в прологе для каждой функции. Системное время выполнения отвечает за инициализацию этого регистра соответствующим значением перед началом выполнения.

-mprioritize-restricted-insns=priority

Эта опция управляет приоритетом, который назначается инструкциям с ограниченным временем выполнения в рамках второго прохода планирования. Аргумент priority принимает значения ‘0’, ‘1’ или ‘2’ для назначения инструкций с ограниченным временем выполнения соответственно без приоритета, наивысшего приоритета или второго по высоте приоритета.

-msched-costly-dep=dependence_type

Эта опция управляет тем, какие зависимости считаются дорогостоящими целевым процессором во время планирования инструкций. Аргумент dependence_type принимает одно из следующих значений:

‘no’

Ни одна зависимость не является дорогостоящей.

‘all’

Все зависимости являются дорогостоящими.

‘true_store_to_load’

Истинная зависимость от сохранения к загрузке является дорогостоящей.

‘store_to_load’

Любая зависимость от сохранения к загрузке является дорогостоящей.

number

Любая зависимость, задержка которой больше или равна number, является дорогостоящей.

-minsert-sched-nops=scheme

Эта опция управляет тем, какой метод вставки NOP используется во время второго прохода планирования. Аргумент scheme принимает одно из следующих значений:

‘no’

Не вставлять NOP.

‘pad’

Заполнять NOP любой группой выдачи, в которой есть свободные слоты выдачи, в соответствии с группировкой планировщика.

‘regroup_exact’

Вставлять NOP для принудительного распределения дорогостоящих зависимых инструкций в отдельные группы. Вставляется ровно столько NOP, сколько необходимо, чтобы переместить инструкцию в новую группу, в соответствии с оцененной группировкой процессора.

number

Вставлять NOP для принудительного распределения дорогостоящих зависимых инструкций в отдельные группы. Вставляется number NOP для принудительного перемещения инструкции в новую группу.

-mcall-sysv

В системах System V.4 и встраиваемых системах PowerPC компилируется код с использованием соглашений о вызовах, которые соответствуют черновику спецификации System V Application Binary Interface, дополнению для процессоров PowerPC от марта 1995 года. Это значение по умолчанию, если вы не настраивали GCC с использованием ‘powerpc-*-eabiaix’.

-mcall-sysv-eabi
-mcall-eabi

Указать опции -mcall-sysv и -meabi.

-mcall-sysv-noeabi

Указать опции -mcall-sysv и -mno-eabi.

-mcall-aixdesc

В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы AIX.

-mcall-linux

В системах System V.4 и встраиваемых системах PowerPC компилируется код для GNU-системы на базе Linux.

-mcall-freebsd

В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы FreeBSD.

-mcall-netbsd

В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы NetBSD.

-mcall-openbsd

В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы OpenBSD.

-mtraceback=traceback_type

Выбрать тип таблицы отслеживания. Действительные значения для traceback_type — ‘full’, ‘part’ и ‘no’.

-maix-struct-return

Возвратить все структуры в памяти (как указано в спецификации AIX ABI).

-msvr4-struct-return

Возвращать структуры размером меньше 8 байт в регистрах (как указано в спецификации SVR4 ABI).

-mabi=abi-type

Расширить текущую ABI определённым расширением или удалить такое расширение. Допустимые значения: ‘altivec’, ‘no-altivec’, ‘ibmlongdouble’, ‘ieeelongdouble’, ‘elfv1’, ‘elfv2’, и для AIX: ‘vec-extabi’, ‘vec-default’.

-mabi=ibmlongdouble

Изменить текущую ABI на использование IBM extended-precision long double. Вероятность успеха низка, если ваша система по умолчанию использует IEEE extended-precision long double. Если вы изменяете тип long double с IEEE extended-precision, компилятор выдаст предупреждение, если вы не используете опцию -Wno-psabi. Требуется включение опции -mlong-double-128.

-mabi=ieeelongdouble

Изменить текущую ABI на использование IEEE extended-precision long double. Вероятность успеха низка, если ваша система по умолчанию использует IBM extended-precision long double. Если вы изменяете тип long double с IBM extended-precision, компилятор выдаст предупреждение, если вы не используете опцию -Wno-psabi. Требуется включение опции -mlong-double-128.

-mabi=elfv1

Изменить текущую ABI на использование ELFv1 ABI. Это ABI по умолчанию для big-endian PowerPC 64-битного Linux. Переопределение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится неудачей.

-mabi=elfv2

Изменить текущую ABI на использование ELFv2 ABI. Это ABI по умолчанию для little-endian PowerPC 64-битного Linux. Переопределение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится неудачей.

-mgnu-attribute
-mno-gnu-attribute

Генерировать ассемблерные директивы .gnu_attribute для установки пар тег/значение в секции .gnu.attributes, которые указывают на вариации ABI в параметрах функций или значениях возврата.

-mprototype
-mno-prototype

В системах System V.4 и встраиваемых системах PowerPC предполагается, что все вызовы функций с переменным числом аргументов должным образом прописаны. В противном случае компилятор должен вставить инструкцию перед каждым вызовом без прототипирования для установки или сброса бита 6 регистра кода состояния (CR) для указания, передаются ли значения с плавающей точкой в регистрах с плавающей точкой, если функция принимает переменное число аргументов. С помощью опции -mprototype только вызовы функций с переменным числом аргументов с прототипом устанавливают или сбрасывают этот бит.

-msim

В системах встраиваемых PowerPC предполагается, что модуль загрузки называется sim-crt0.o, а стандартные библиотеки C — libsim.a и libc.a. Это значение по умолчанию для конфигураций ‘powerpc-*-eabisim’.

-mmvme

В системах встраиваемых PowerPC предполагается, что модуль загрузки называется crt0.o, а стандартные библиотеки C — libmvme.a и libc.a.

-mads

В системах встраиваемых PowerPC предполагается, что модуль загрузки называется crt0.o, а стандартные библиотеки C — libads.a и libc.a.

-myellowknife

В системах встраиваемых PowerPC предполагается, что модуль загрузки называется crt0.o, а стандартные библиотеки C — libyk.a и libc.a.

-mvxworks

В системах System V.4 и встраиваемых системах PowerPC указывает, что компиляция ведётся для системы VxWorks.

-memb

В системах встраиваемых PowerPC устанавливается бит PPC_EMB в заголовке флагов ELF, чтобы указать, что используются расширенные перепозиционирования ‘eabi’.

-meabi
-mno-eabi

В системах System V.4 и встраиваемых системах PowerPC предполагается соответствие интерфейсу приложений встроенных систем (EABI), который представляет собой набор модификаций спецификаций System V.4. Выбор опции -meabi означает, что стек выравнивается по границе в 8 байт, функция __eabi вызывается из main для настройки среды EABI, а опция -msdata может использовать как r2, так и r13 для указания на две отдельные небольшие области данных. Выбор опции -mno-eabi означает, что стек выравнивается по границе в 16 байт, никакая функция инициализации EABI не вызывается из main, и опция -msdata использует только r13 для указания на одну небольшую область данных. Опция -meabi включена по умолчанию, если вы настраивали GCC с использованием одного из вариантов ‘powerpc*-*-eabi*’.

-msdata=eabi

В системах System V.4 и встроенных системах PowerPC поместите небольшие инициализированные const глобальные и статические данные в раздел .sdata2, к которому обращается регистр r2. Поместите небольшие инициализированные не-const глобальные и статические данные в раздел .sdata, к которому обращается регистр r13. Поместите небольшие неинициализированные глобальные и статические данные в раздел .sbss, который прилегает к разделу .sdata. Опция -msdata=eabi несовместима с опцией -mrelocatable. Опция -msdata=eabi также устанавливает опцию -memb.

-msdata=sysv

В системах System V.4 и встроенных системах PowerPC поместите небольшие глобальные и статические данные в раздел .sdata, к которому обращается регистр r13. Поместите небольшие неинициализированные глобальные и статические данные в раздел .sbss, который прилегает к разделу .sdata. Опция -msdata=sysv несовместима с опцией -mrelocatable.

-msdata=default
-msdata

В системах System V.4 и встроенных системах PowerPC, если используется -meabi, скомпилируйте код так же, как и с -msdata=eabi, в противном случае скомпилируйте код так же, как и с -msdata=sysv.

-msdata=data

В системах System V.4 и встроенных системах PowerPC поместите небольшие глобальные данные в раздел .sdata. Поместите небольшие неинициализированные глобальные данные в раздел .sbss. Однако не используйте регистр r13 для адресации малых данных. Это поведение по умолчанию, если не используются другие опции -msdata.

-msdata=none
-mno-sdata

В встроенных системах PowerPC поместите все инициализированные глобальные и статические данные в раздел .data, а все неинициализированные данные — в раздел .bss.

-mreadonly-in-sdata

Поместите объекты только для чтения в раздел .sdata также. Это значение по умолчанию.

-mblock-move-inline-limit=num

Выполните инлайнирование всех блочных перемещений (например, вызовов memcpy или копий структур) размером не более num байт. Минимальное значение для num составляет 32 байта на 32-битных целевых системах и 64 байта на 64-битных целевых системах. Значение по умолчанию зависит от целевой системы.

-mblock-compare-inline-limit=num

Сгенерируйте нециклический встроенный код для всех блочных сравнений (например, вызовов memcmp или структурных сравнений) размером не более num байт. Если num равно 0, вся встроенная инлайнизация (нециклическая и циклическая) блочного сравнения отключена. Значение по умолчанию зависит от целевой системы.

-mblock-compare-inline-loop-limit=num

Сгенерируйте встроенную инлайнизацию с использованием циклического кода для всех блочных сравнений, размер которых меньше или равен num байтам, но больше предела для нециклической встроенной инлайнизации блочного сравнения. Если длина блока не является постоянной, максимум num байт будет сравнено перед вызовом memcmp для сравнения оставшейся части блока. Значение по умолчанию зависит от целевой системы.

-mstring-compare-inline-limit=num

Сравните не более num байтов строки с помощью встроенного кода. Если различие или конец строки не найдены в конце встроенного сравнения, вызов strcmp или strncmp позаботится о продолжении сравнения. Значение по умолчанию составляет 64 байта.

-G num

В встроенных системах PowerPC поместите глобальные и статические элементы размером не более num байт в разделы малых данных или BSS вместо обычных разделов данных или BSS. По умолчанию num равно 8. Переключатель -G num также передается в компоновщик. Все модули должны быть скомпилированы с одинаковым значением -G num.

-mregnames
-mno-regnames

В системах System V.4 и встроенных системах PowerPC выводить (не выводить) имена регистров в выходном коде ассемблера в символической форме.

-mlongcall
-mno-longcall

По умолчанию предполагается, что все вызовы находятся далеко, поэтому требуется более длинная и более дорогая последовательность вызова. Это необходимо для вызовов, удалённых более чем на 32 мегабайта (33 554 432 байта) от текущей позиции. Короткий вызов генерируется, если компилятор знает, что вызов не может быть так далёк. Этот параметр может быть переопределён атрибутом функции shortcall или #pragma longcall(0).

Некоторые компоновщики могут обнаруживать вызовы за пределами диапазона и генерировать код-мостик на лету. В этих системах длинные вызовы не нужны и генерируют более медленный код. На момент написания этого документа компоновщик AIX может это делать, а также компоновщик GNU для PowerPC/64. Планируется добавить эту функцию в компоновщик GNU для 32-битных систем PowerPC.

В системах PowerPC64 ELFv2 и 32-битных системах PowerPC с более новыми компоновщиками GNU GCC может генерировать длинные вызовы с использованием встроенной последовательности вызова PLT (см. -mpltseq). PowerPC с -mbss-plt и PowerPC64 ELFv1 (big-endian) не поддерживают встроенные вызовы PLT.

В системах Darwin/PPC, #pragma longcall генерирует jbsr callee, L42, плюс остров перехода (код мостика). Два адреса целевых систем представляют вызываемую функцию и остров перехода. Компоновщик Darwin/PPC предпочитает первый адрес и генерирует bl callee, если инструкция PPC bl непосредственно достигает вызываемой функции; в противном случае компоновщик генерирует bl L42 для вызова острова перехода. Остров перехода добавляется к телу вызывающей функции; он вычисляет полный 32-битный адрес вызываемой функции и переходит к нему.

В системах Mach-O (Darwin) эта опция направляет компилятор на вывод кода мостика для каждого прямого вызова, а компоновщик Darwin решает, использовать его или отбросить.

В будущем GCC может игнорировать все спецификации длинных вызовов, когда компоновщик, как известно, генерирует код мостика.

-mpltseq
-mno-pltseq

Реализовать (не реализовывать) -fno-plt и длинные вызовы с использованием встроенной последовательности вызова PLT, которая поддерживает ленивую компоновку и длинные вызовы функциям в динамически подключаемых общих библиотеках. Встроенные вызовы PLT поддерживаются только в системах PowerPC64 ELFv2 и 32-битных системах PowerPC с более новыми компоновщиками GNU и включены по умолчанию, если поддержка обнаружена при конфигурации GCC, и, в случае 32-битных систем PowerPC, если GCC сконфигурирован с --enable-secureplt. Код -mpltseq и -mbss-plt 32-битные PowerPC объекты, не могут быть объединены в одну компоновку.

-mtls-markers
-mno-tls-markers

Пометить (не отмечать) вызовы __tls_get_addr с помощью перемещения, определяющего аргумент функции. Перемещение позволяет компоновщику надёжно связать вызов функции с инструкциями настройки аргументов для оптимизации TLS, что, в свою очередь, позволяет GCC лучше планировать последовательность.

-mrecip
-mno-recip

Эта опция позволяет использовать инструкции оценки обратной величины и оценки обратного квадратного корня с дополнительными шагами Ньютона-Рафсона для повышения точности вместо выполнения деления или извлечения квадратного корня и деления для аргументов с плавающей точкой. Следует использовать опцию -ffast-math при использовании -mrecip (или по крайней мере -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math и -fno-trapping-math). Обратите внимание, что, хотя производительность последовательности обычно выше, чем производительность инструкции без обратной величины, точность последовательности может быть снижена до 2 единиц последнего разряда (т.е. обратная величина 1,0 равна 0,99999994) для обратных квадратных корней.

-mrecip=opt

Эта опция управляет инструкциями приближённого вычисления обратной величины, которые могут быть использованы. opt — это список опций, разделённых запятыми, которые могут предваряться ! для инвертирования опции:

‘all’

Включить все инструкции приближённого вычисления.

‘default’

Включить инструкции по умолчанию, эквивалентные -mrecip.

‘none’

Отключить все инструкции приближённого вычисления, эквивалентные -mno-recip.

‘div’

Включить инструкции приближённого вычисления обратной величины для одинарной и двойной точности.

‘divf’

Включить инструкции приближённого вычисления обратной величины одинарной точности.

‘divd’

Включить инструкции приближённого вычисления обратной величины двойной точности.

‘rsqrt’

Включить инструкции приближённого вычисления обратного квадратного корня для одинарной и двойной точности.

‘rsqrtf’

Включить инструкции приближённого вычисления обратного квадратного корня одинарной точности.

‘rsqrtd’

Включить инструкции приближённого вычисления обратного квадратного корня двойной точности.

Например, -mrecip=all,!rsqrtd включает все инструкции приближённого вычисления обратной величины, за исключением FRSQRTE, XSRSQRTEDP, и XVRSQRTEDP инструкций, которые обрабатывают вычисления обратного квадратного корня двойной точности.

-mrecip-precision
-mno-recip-precision

Предполагать (не предполагать), что инструкции приближённого вычисления обратной величины обеспечивают точность оценок, превышающую требования ABI PowerPC. Выбор -mcpu=power6, -mcpu=power7 или -mcpu=power8 автоматически выбирает -mrecip-precision. Инструкции приближённого вычисления обратного квадратного корня двойной точности не генерируются по умолчанию на машинах с низкой точностью, так как они не обеспечивают оценку, которая сходится после трёх шагов.

-mveclibabi=type

Указывает тип ABI для векторизации встроенных функций с использованием внешней библиотеки. В настоящее время поддерживается только тип ‘mass’, который указывает на использование библиотек IBM Mathematical Acceleration Subsystem (MASS) для векторизации встроенных функций с помощью внешних библиотек. В настоящее время GCC генерирует вызовы acosd2, acosf4, acoshd2, acoshf4, asind2, asinf4, asinhd2, asinhf4, atan2d2, atan2f4, atand2, atanf4, atanhd2, atanhf4, cbrtd2, cbrtf4, cosd2, cosf4, coshd2, coshf4, erfcd2, erfcf4, erfd2, erff4, exp2d2, exp2f4, expd2, expf4, expm1d2, expm1f4, hypotd2, hypotf4, lgammad2, lgammaf4, log10d2, log10f4, log1pd2, log1pf4, log2d2, log2f4, logd2, logf4, powd2, powf4, sind2, sinf4, sinhd2, sinhf4, sqrtd2, sqrtf4, tand2, tanf4, tanhd2, и tanhf4, при генерации кода для power7. Также должны быть включены как -ftree-vectorize, так и -funsafe-math-optimizations. Библиотеки MASS должны быть указаны во время компоновки.

-mfriz
-mno-friz

Генерировать (не генерировать) инструкцию friz, когда используется опция -funsafe-math-optimizations для оптимизации округления значений с плавающей запятой до 64-битного целого числа и обратно до значения с плавающей запятой. Инструкция friz не возвращает то же самое значение, если число с плавающей запятой слишком велико, чтобы поместиться в целое число.

-mpointers-to-nested-functions
-mno-pointers-to-nested-functions

Генерировать (не генерировать) код для загрузки регистра статической цепочки (r11) при вызове через указатель на системах AIX и 64-битных Linux, где указатель на функцию указывает на 3-словный дескриптор, содержащий адрес функции, значение TOC, которое должно быть загружено в регистр r2, и значение статической цепочки, которое должно быть загружено в регистр r11. Опция -mpointers-to-nested-functions включена по умолчанию. Вы не можете вызывать через указатели на вложенные функции или указатели на функции, скомпилированные на других языках, которые используют статическую цепочку, если вы используете -mno-pointers-to-nested-functions.

-msave-toc-indirect
-mno-save-toc-indirect

Генерировать (не генерировать) код для сохранения значения TOC в зарезервированном расположении стека в префиксе функции, если функция вызывает через указатель на системах AIX и 64-битных Linux. Если значение TOC не сохраняется в префиксе, оно сохраняется непосредственно перед вызовом через указатель. Опция -mno-save-toc-indirect установлена по умолчанию.

-mcompat-align-parm
-mno-compat-align-parm

Генерировать (не генерировать) код для передачи параметров структуры с максимальным выравниванием 64 бита для совместимости со старыми версиями GCC.

Более старые версии GCC (до 4.9.0) неправильно не выравнивали параметр структуры на границе 128 бит, когда эта структура содержала член, требующий выравнивания 128 бит. Это исправлено в более новых версиях GCC. Эта опция может быть использована для генерации кода, совместимого с функциями, скомпилированными с более старыми версиями GCC.

Опция -mno-compat-align-parm установлена по умолчанию.

-mstack-protector-guard=guard
-mstack-protector-guard-reg=reg
-mstack-protector-guard-offset=offset
-mstack-protector-guard-symbol=symbol

Генерировать код защиты стека с использованием «канделябра» в guard. Поддерживаемые расположения — ‘global’ для глобального «канделябра» или ‘tls’ для «канделябра» на нить в блоке TLS (по умолчанию с GNU libc версии 2.4 или более поздней).

В последнем случае опции -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового регистра для чтения «канделябра», и с каким смещением от этого базового регистра. Значения по умолчанию для них указаны в соответствующем ABI. -mstack-protector-guard-symbol=symbol переопределяет смещение ссылаясь на символ «канделябра» в блоке TLS.

-mpcrel
-mno-pcrel

Генерировать (не генерировать) pc-относительные адресации. Опция -mpcrel требует, чтобы были включены опции модели кода среднего размера (-mcmodel=medium) и адресации с префиксом (-mprefixed).

-mprefixed
-mno-prefixed

Генерировать (не генерировать) режимы адресации с использованием инструкций загрузки и сохранения с префиксом. Опция -mprefixed требует, чтобы была включена опция -mcpu=power10 (или более поздняя).

-mmma
-mno-mma

Генерировать (не генерировать) инструкции MMA. Опция -mma требует, чтобы была включена опция -mcpu=power10 (или более поздняя).

-mrop-protect
-mno-rop-protect

Генерировать (не генерировать) инструкции защиты ROP, когда процессор их поддерживает. В настоящее время эта опция отключает оптимизацию сжатия (-fshrink-wrap).

-mprivileged
-mno-privileged

Генерировать (не генерировать) код, который будет выполняться в привилегированном состоянии.

-mblock-ops-unaligned-vsx
-mno-block-ops-unaligned-vsx

Генерировать (не генерировать) невыровненные загрузки и сохранения VSX для встроенной расшифровки memcpy и memmove.

--param rs6000-vect-unroll-limit=

Векторизатор проверит информацию о целевой системе, чтобы определить, будет ли выгодно развернуть основной векторизованный цикл и на сколько. Этот параметр устанавливает верхнюю границу того, насколько векторизатор будет развертывать основной цикл. Значение по умолчанию равно четырем.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/RS_002f6000-and-PowerPC-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API