Spec-Zone.ru › GCC 9

3.18.42 Параметры IBM RS/6000 и PowerPC

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

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-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 генерировать инструкцию подсчёта единиц и оценки обратной величины числа с двойной точностью с плавающей запятой, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчёта единиц, реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления чисел с плавающей запятой до целых чисел, реализованные на процессоре POWER5+ и других процессорах, поддерживающих архитектуру PowerPC V2.03. Параметр -mcmpb позволяет GCC генерировать инструкцию сравнения байтов, реализованную на процессоре POWER6 и других процессорах, поддерживающих архитектуру PowerPC V2.05. Параметр -mmfpgpr позволяет GCC генерировать инструкции перемещения чисел с плавающей запятой в/из регистров общего назначения, реализованные на процессоре POWER6X и других процессорах, поддерживающих расширенную архитектуру 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’, ‘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

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

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

-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

Генерирует код, использующий (не использующий) инструкции vector/scalar (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

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

Для использования поддержки плавающей точки IEEE 128-битного формата необходимо включить набор инструкций VSX (-mvsx, -mcpu=power7, -mcpu=power8) или -mcpu=power9. Поддержка плавающей точки IEEE 128-битного формата работает только на системах PowerPC 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 (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-битную AIX ABI и соглашение о вызовах: 64-битные указатели, 64-битный long тип и инфраструктура, необходимая для их поддержки. Указание -maix64 подразумевает -mpowerpc64, а -maix32 отключает 64-битную ABI и подразумевает -mno-powerpc64. GCC по умолчанию использует -maix32.

-mxl-compat
-mno-xl-compat

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

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

-mpe

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

-malign-natural
-malign-power

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

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

-msoft-float
-mhard-float

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

-mmultiple
-mno-multiple

Генерировать код, который использует (не использует) инструкции загрузки и сохранения нескольких слов. Эти инструкции генерируются по умолчанию на системах POWER, и не генерируются на системах PowerPC. Не используйте -mmultiple на системах PowerPC с порядком байтов 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’.

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

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

Предполагать (не предполагать), что инструкции оценки обратной величины обеспечивают более точные оценки, чем это предписывается PowerPC ABI. Выбор -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.

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

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

Spec-Zone.ru

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