Spec-Zone.ru › GCC 11

Далее: Параметры RX, Предыдущее: Параметры RL78, Вверх: Параметры, зависящие от модели процессора [Оглавление][Индекс]

3.19.44 Параметры 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 генерировать инструкции округления чисел с плавающей запятой до целых чисел, реализованные на процессоре 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  -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 секциями. Это параметр 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

Включает (отключает) использование встроенных функций, которые позволяют прямой доступ к инструкциям 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

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

-mfloat128
-mno-float128
END_OF_DOCUMENT_MARKER

Включить/отключить ключевое слово __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-битного формата также включит генерацию инструкций плавающей точки IEEE 128-битного формата ISA 3.0. В противном случае, если вы не указали генерацию инструкций ISA 3.0 или нацеливаетесь на 32-битную систему с порядком байтов big endian, плавающая точка 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. Вы можете указать одну или обе эти опции. Каждая из них приводит к созданию кода, который работает немного медленнее и больше по размеру в ущерб сохранению пространства 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 корректно округляется при сравнении значений и преобразовании в double. Использовать имена символов XL для функций поддержки long double.

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

-mpe

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

-malign-natural
-malign-power

В AIX, 32-битных Darwin и 64-битных PowerPC GNU/Linux опция -malign-natural переопределяет определённое ABI выравнивание более крупных типов, таких как плавающая точка doubles, на границе их естественного размера. Опция -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, дополнению для процессоров 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 расширенную точность 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 по умолчанию для big-endian PowerPC 64-битного Linux. Переопределение ABI по умолчанию требует специальной поддержки системы и может привести к неожиданным результатам.

-mabi=elfv2

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

-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’.

-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 байт в разделы небольших данных или 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 может игнорировать все спецификации 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

Этот параметр включает использование оценок обратных величин и оценок обратных квадратных корней с дополнительными шагами Ньютона-Рафсона для повышения точности вместо выполнения деления или извлечения квадратного корня и деления для аргументов с плавающей запятой. Вы должны использовать параметр -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, когда целевой процессор их поддерживает. В настоящее время эта опция отключает оптимизацию 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-11.4.0/gcc/RS_002f6000-and-PowerPC-Options.html

Spec-Zone.ru

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