Spec-Zone.ru › GCC 10

Далее: Параметры 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 с порядком байтов big endian и 64-битной PowerPC с порядком байтов little endian, соответственно, с предположением об использовании подходящей обобщенной модели процессора для планирования.

Указание ‘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

Установленные параметры для каждого процессора могут различаться в зависимости от версии компилятора, в зависимости от того, какие параметры кажутся оптимальными для данного процессора; это не обязательно отражает реальные возможности аппаратного обеспечения. Если вы хотите установить отдельный параметр в определённое значение, вы можете указать его после параметра -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

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

При компиляции кода для систем 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

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

-mcall-sysv-eabi
-mcall-eabi

Укажите параметры -mcall-sysv и -meabi.

-mcall-sysv-noeabi

Укажите параметры -mcall-sysv и -mno-eabi.

-mcall-aixdesc

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

-mcall-linux

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

-mcall-freebsd

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

-mcall-netbsd

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

-mcall-openbsd

В системах 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

В системах 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

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

-memb

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

-meabi
-mno-eabi

В системах 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

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

-msdata=sysv

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

-msdata=default
-msdata

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

-msdata=data

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

-msdata=none
-mno-sdata

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

-mreadonly-in-sdata

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

-mblock-move-inline-limit=num

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

-mblock-compare-inline-limit=num

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

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

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

-mstring-compare-inline-limit=num

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

-G num

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

-mregnames
-mno-regnames

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

-mlongcall
-mno-longcall

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

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

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

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

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

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

-mpltseq
-mno-pltseq

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

-mtls-markers
-mno-tls-markers

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

-mrecip
-mno-recip

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

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

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

Spec-Zone.ru

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