Spec-Zone.ru › GCC 13

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 в группе общего назначения, включая квадратный корень с плавающей точкой. Указание -mpowerpc-gfxopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе графики, включая выбор с плавающей точкой.

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

Параметр -mpowerpc64 позволяет GCC генерировать дополнительные 64-битные инструкции, которые встречаются в полной архитектуре PowerPC64, и рассматривать GPR как 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-битной большой endian PowerPC и 64-битной little endian 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  -mpower8-vector
-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 с расширениями ABI AltiVec.

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

-mvrsave
-mno-vrsave

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

-msecure-plt

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

-mbss-plt

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

-misel
-mno-isel

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

-mvsx
-mno-vsx

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

-mcrypto
-mno-crypto

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

-mhtm
-mno-htm

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

-mpower8-fusion
-mno-power8-fusion

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

-mpower8-vector
-mno-power8-vector

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

-mquad-memory
-mno-quad-memory

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

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

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

-mfloat128
-mno-float128

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

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

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

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

-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. Вы можете указать одну или обе эти опции. Каждая из них приводит к созданию кода, который немного медленнее и больше, но сохраняет пространство TOC.

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

-maix64
-maix32

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

-mxl-compat
-mno-xl-compat

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

Правила вызова 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 с little-endian, так как эти инструкции не работают, когда процессор находится в режиме little-endian. Исключение составляют PPC740 и PPC750, которые разрешают эти инструкции в режиме little-endian.

-mupdate
-mno-update

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

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

Генерировать код, который пытается избежать (не избегать) использования индексированных инструкций загрузки или сохранения. Эти инструкции могут повлечь за собой штраф за производительность на процессорах Power6 в определённых ситуациях, таких как при прохождении по большим массивам, пересекающим границу 16M. Эта опция включена по умолчанию при нацеливании на 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
END_OF_DOCUMENT_MARKER

Как и -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 и Mac OS X код компилируется таким образом, что он не является перемещаемым, но его внешние ссылки перемещаемы. Полученный код подходит для приложений, но не для общих библиотек.

-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 от марта 1995 года, дополнению для процессора PowerPC. Это значение по умолчанию, если вы не настраивали 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 (большая эндианность) не поддерживают встроенные вызовы PLT.

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

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

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

-mpltseq
-mno-pltseq

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

-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 ulp (т.е. обратное значение 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 и memcpy.

--param rs6000-vect-unroll-limit=

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

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

Spec-Zone.ru

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