Spec-Zone.ru › GCC 12

3.19.45 Опции 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 генерировать инструкцию подсчета единиц и оценки обратной величины числа с двойной точностью FP, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчета единиц, реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления числа с плавающей запятой до целого числа, реализованные на процессоре 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-битной архитектуры 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  -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 для модели small: размер TOC ограничен 64 КБ.

-mcmodel=medium

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

-mcmodel=large

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

-maltivec
-mno-altivec

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

Когда используется -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 и более поздних.

-mpower8-vector
-mno-power8-vector

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

-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 (-mpower9-vector или -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 (таблицы содержания), которая создается для каждого исполняемого файла. Опция -mfull-toc выбрана по умолчанию. В этом случае GCC выделяет по крайней мере одну запись TOC для каждой уникальной ссылки на переменную, не являющуюся автоматической, в вашей программе. GCC также помещает константы с плавающей запятой в TOC. Однако в TOC доступно только 16 384 записи.

Если вы получаете сообщение об ошибке компоновщика, говорящее о том, что вы превысили доступное пространство TOC, вы можете уменьшить используемое пространство TOC с помощью опций -mno-fp-in-toc и -mno-sum-in-toc. -mno-fp-in-toc предотвращает помещение констант с плавающей запятой в TOC, а -mno-sum-in-toc заставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения вместо помещения этой суммы в TOC. Вы можете указать одну или обе эти опции. Каждая из них заставляет GCC производить код, который очень немного медленнее и больше, за счет экономии пространства 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 при использовании совместимой с AIX ABI. Передавать аргументы с плавающей запятой в прототипированные функции за пределами области сохранения регистров (RSA) в стеке в дополнение к аргументам FPR. Не предполагайте, что наиболее значимый двойной в 128-битном значении long double должным образом округляется при сравнении значений и преобразовании в двойной. Использовать имена символов XL для поддерживающих процедур long double.

Соглашение о вызовах AIX было расширено, но первоначально не документировано для обработки редкого случая C K&R вызова функции, которая принимает адрес своих аргументов с меньшим количеством аргументов, чем объявлено. Компиляторы 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 в определенных ситуациях, таких как при прохождении по большим массивам, которые пересекают границу 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 и 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 расширенной точности long double. Вероятнее всего, это не сработает, если ваша система по умолчанию использует IEEE расширенной точности long double. Если вы измените тип long double с IEEE расширенной точности, компилятор выдаст предупреждение, если вы не используете параметр -Wno-psabi. Требуется включить -mlong-double-128.

-mabi=ieeelongdouble

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

-mabi=elfv1

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

-mabi=elfv2

Изменить текущий ABI для использования ELFv2 ABI. Это ABI по умолчанию для 64-битного Linux на PowerPC с little-endian архитектурой. Переопределение 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 соответствовать (не соответствовать) Embedded Applications Binary Interface (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 байт, в разделы small data или BSS, а не в обычные разделы data или 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 может игнорировать все спецификации longcall, когда компоновщик известен как генерирующий склейку.

-mpltseq
-mno-pltseq

Реализовать (-fno-plt и длинные вызовы с использованием встроенной последовательности вызовов PLT, поддерживающей ленивую компоновку и длинные вызовы функций в динамически загружаемых общих библиотеках). Встроенные вызовы 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

Этот параметр включает использование инструкций оценки обратной величины и оценки обратной величины квадратного корня с дополнительными шагами Ньютона-Рафсона для повышения точности вместо деления или извлечения квадратного корня и деления для аргументов с плавающей точкой. При использовании -mrecip (или, по крайней мере, -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math и -fno-trapping-math) следует использовать параметр -ffast-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, если целевой процессор их поддерживает. В настоящее время этот флаг отключает оптимизацию shrink-wrap (-fshrink-wrap).

-mprivileged
-mno-privileged

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

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

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

Далее: Параметры RX, Предыдущее: Параметры RL78, Выше: Параметры подмодели [Содержание][Индекс]

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

Spec-Zone.ru

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