3.19.42 IBM RS/6000 и PowerPC параметры
Эти параметры ‘-m’ определены для IBM RS/6000 и PowerPC:
-
-mpowerpc-gpopt -mno-powerpc-gpopt-mpowerpc-gfxopt-mno-powerpc-gfxopt-mpowerpc64-mno-powerpc64-mmfcrf-mno-mfcrf-mpopcntb-mno-popcntb-mpopcntd-mno-popcntd-mfprnd-mno-fprnd-mcmpb-mno-cmpb-mhard-dfp-mno-hard-dfp-
Вы используете эти параметры для указания доступных инструкций на используемом процессоре. Значение по умолчанию для этих параметров определяется при настройке GCC. Указание -mcpu=cpu_type переопределяет указание этих параметров. Мы рекомендуем использовать параметр -mcpu=cpu_type вместо перечисленных выше параметров.
Указание -mpowerpc-gpopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе общего назначения, включая квадратный корень с плавающей точкой. Указание -mpowerpc-gfxopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе графики, включая выбор с плавающей точкой.
Параметр -mmfcrf позволяет GCC генерировать инструкцию перемещения из поля регистра условий, реализованную на процессоре POWER4 и других процессорах, которые поддерживают архитектуру PowerPC V2.01. Параметр -mpopcntb позволяет GCC генерировать инструкцию popcount и оценку обратной величины двойной точности с плавающей точкой, реализованные на процессоре POWER5 и других процессорах, которые поддерживают архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию popcount, реализованную на процессоре POWER7 и других процессорах, которые поддерживают архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления FP до целых чисел, реализованные на процессоре POWER5+ и других процессорах, которые поддерживают архитектуру PowerPC V2.03. Параметр -mcmpb позволяет GCC генерировать инструкцию сравнения байтов, реализованную на процессоре POWER6 и других процессорах, которые поддерживают архитектуру PowerPC V2.05. Параметр -mhard-dfp позволяет GCC генерировать инструкции десятичной арифметики с плавающей точкой, реализованные на некоторых процессорах POWER.
Параметр -mpowerpc64 позволяет GCC генерировать дополнительные 64-битные инструкции, которые встречаются в полной архитектуре PowerPC64, и рассматривать GPR как 64-битные, двойные величины. GCC по умолчанию использует -mno-powerpc64.
-
-mcpu=cpu_type -
Установите тип архитектуры, использование регистров и параметры планирования инструкций для типа машины cpu_type. Допустимые значения для cpu_type — ‘401’, ‘403’, ‘405’, ‘405fp’, ‘440’, ‘440fp’, ‘464’, ‘464fp’, ‘476’, ‘476fp’, ‘505’, ‘601’, ‘602’, ‘603’, ‘603e’, ‘604’, ‘604e’, ‘620’, ‘630’, ‘740’, ‘7400’, ‘7450’, ‘750’, ‘801’, ‘821’, ‘823’, ‘860’, ‘970’, ‘8540’, ‘a2’, ‘e300c2’, ‘e300c3’, ‘e500mc’, ‘e500mc64’, ‘e5500’, ‘e6500’, ‘ec603e’, ‘G3’, ‘G4’, ‘G5’, ‘titan’, ‘power3’, ‘power4’, ‘power5’, ‘power5+’, ‘power6’, ‘power6x’, ‘power7’, ‘power8’, ‘power9’, ‘power10’, ‘powerpc’, ‘powerpc64’, ‘powerpc64le’, ‘rs64’ и ‘native’.
-mcpu=powerpc, -mcpu=powerpc64 и -mcpu=powerpc64le указывают на типы машин с чистой 32-битной архитектурой PowerPC (любой порядок байтов), 64-битной большой endian PowerPC и 64-битной little endian PowerPC, с соответствующей общей моделью процессора, предполагаемой для целей планирования.
Указание ‘native’ в качестве типа процессора определяет и выбирает параметр архитектуры, соответствующий процессору хост-системы, выполняющей компиляцию. -mcpu=native не имеет эффекта, если GCC не распознаёт процессор.
Другие параметры указывают на конкретный процессор. Код, сгенерированный с этими параметрами, работает лучше на этом процессоре и может вообще не работать на других.
Параметры -mcpu автоматически включают или выключают следующие параметры:
-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt -mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -mpower8-vector -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware -mprefixed -mpcrel -mmma -mrop-protect
Конкретные параметры, установленные для любого конкретного процессора, варьируются между версиями компилятора, в зависимости от того, какая настройка, кажется, производит оптимальный код для этого процессора; это не обязательно отражает реальные возможности аппаратного обеспечения. Если вы хотите установить отдельный параметр на конкретное значение, вы можете указать его после параметра -mcpu, например, -mcpu=970 -mno-altivec.
В AIX параметры -maltivec и -mpowerpc64 в настоящее время не включаются или выключаются параметром -mcpu, поскольку AIX не имеет полной поддержки этих параметров. Вы по-прежнему можете включить или выключить их индивидуально, если уверены, что это сработает в вашей среде.
-
-mtune=cpu_type -
Установите параметры планирования инструкций для типа машины cpu_type, но не устанавливайте тип архитектуры или использование регистров, как это делает -mcpu=cpu_type. Те же значения для cpu_type используются для -mtune, что и для -mcpu. Если оба параметра указаны, сгенерированный код использует архитектуру и регистры, установленные параметром -mcpu, но параметры планирования, установленные параметром -mtune.
-
-mcmodel=small -
Генерировать код PowerPC64 для маленькой модели: TOC ограничен 64 кБ.
-
-mcmodel=medium -
Генерировать код PowerPC64 для средней модели: TOC и другие статические данные могут достигать общего размера до 4 ГБ. Это значение по умолчанию для 64-битной Linux.
-
-mcmodel=large -
Генерировать код PowerPC64 для большой модели: TOC может достигать размера 4 ГБ. Другие данные и код ограничены только 64-битным адресным пространством.
-
-maltivec -mno-altivec-
Генерировать код, который использует (не использует) инструкции AltiVec, а также включить использование встроенных функций, которые позволяют более прямой доступ к набору инструкций AltiVec. Возможно, также потребуется установить -mabi=altivec для корректировки текущей ABI с расширениями ABI AltiVec.
При использовании -maltivec, порядок элементов для встроенных функций AltiVec, таких как
vec_splat,vec_extract, иvec_insert, соответствует порядку элементов массива, соответствующему порядку байтов целевой системы. То есть, элемент ноль идентифицирует самый левый элемент в регистре вектора при нацеливании на платформу с big-endian, и идентифицирует самый правый элемент в регистре вектора при нацеливании на платформу с little-endian. -
-mvrsave -mno-vrsave-
Генерировать инструкции VRSAVE при генерации кода AltiVec.
-
-msecure-plt -
Генерировать код, который позволяет
ldиld.soсоздавать исполняемые файлы и динамические библиотеки с неисполняемыми.pltи.gotсекциями. Это параметр ABI SYSV PowerPC 32-бит. -
-mbss-plt -
Генерировать код, который использует секцию BSS
.plt, которуюld.soзаполняет, и требует секции.pltи.got, которые обе являются читаемыми и исполняемыми. Это параметр ABI SYSV PowerPC 32-бит. -
-misel -mno-isel-
Этот переключатель включает или выключает генерацию инструкций ISEL.
-
-mvsx -mno-vsx-
Генерировать код, использующий (не использующий) векторные/скалярные (VSX) инструкции, а также включить использование встроенных функций, которые позволяют более прямой доступ к набору инструкций VSX.
-
-mcrypto -mno-crypto-
Включить использование (отключить) встроенных функций, которые позволяют прямой доступ к криптографическим инструкциям, добавленным в версии 2.07 ISA PowerPC.
-
-mhtm -mno-htm-
Включить (отключить) использование встроенных функций, которые позволяют прямой доступ к инструкциям Hardware Transactional Memory (HTM), добавленным в версии 2.07 ISA PowerPC.
-
-mpower8-fusion -mno-power8-fusion-
Генерировать код, который сохраняет (не сохраняет) некоторые целочисленные операции смежными, чтобы инструкции могли быть объединены вместе на процессорах power8 и более поздних.
-
-mpower8-vector -mno-power8-vector-
Генерировать код, который использует (не использует) векторные и скалярные инструкции, добавленные в версии 2.07 ISA PowerPC. Также включить использование встроенных функций, которые позволяют более прямой доступ к векторным инструкциям.
-
-mquad-memory -mno-quad-memory-
Генерировать код, использующий (не использующий) неатомарные инструкции памяти квадрослова. Параметр -mquad-memory требует использования 64-битного режима.
-
-mquad-memory-atomic -mno-quad-memory-atomic
-
Генерировать код, использующий (не использующий) атомные инструкции для обработки четырёхбайтных блоков памяти. Опция -mquad-memory-atomic требует использования 64-битного режима.
-
-mfloat128 -mno-float128-
Включить/выключить ключевое слово __float128 для 128-битной плавающей точки IEEE и использовать либо программную эмуляцию для 128-битной плавающей точки IEEE, либо аппаратные инструкции.
Для использования поддержки 128-битной плавающей точки IEEE необходимо включить набор инструкций VSX (-mvsx). Поддержка 128-битной плавающей точки IEEE поддерживается только в Linux.
По умолчанию -mfloat128 включен на системах PowerPC Linux, использующих набор инструкций VSX, и выключен на других системах.
Если вы используете набор инструкций ISA 3.0 (-mpower9-vector или -mcpu=power9) на 64-битной системе, поддержка 128-битной плавающей точки IEEE также включит генерацию инструкций ISA 3.0 для 128-битной плавающей точки IEEE. В противном случае, если вы не задаёте генерацию инструкций ISA 3.0 или нацеливаетесь на 32-битную систему с big-endian, 128-битная плавающая точка IEEE будет реализована с помощью программной эмуляции.
-
-mfloat128-hardware -mno-float128-hardware-
Включить/выключить использование аппаратных инструкций ISA 3.0 для поддержки типа данных __float128.
По умолчанию -mfloat128-hardware включен на системах PowerPC Linux, использующих набор инструкций ISA 3.0, и выключен на других системах.
-
-m32 -m64-
Генерировать код для 32-битных или 64-битных сред целей Darwin и SVR4 (включая GNU/Linux). 32-битная среда устанавливает int, long и указатель на 32 бита и генерирует код, который работает на любом варианте PowerPC. 64-битная среда устанавливает int на 32 бита, а long и указатель на 64 бита и генерирует код для PowerPC64, как для -mpowerpc64.
-
-mfull-toc -mno-fp-in-toc-mno-sum-in-toc-mminimal-toc-
Изменить генерацию TOC (Table Of Contents), которая создаётся для каждого исполняемого файла. Опция -mfull-toc выбрана по умолчанию. В этом случае GCC выделяет по крайней мере одну запись TOC для каждой уникальной ссылки на неавтоматическую переменную в вашей программе. GCC также помещает константы с плавающей точкой в TOC. Однако в TOC доступно только 16 384 записи.
Если вы получите сообщение об ошибке компоновщика, указывающее на переполнение доступного пространства TOC, вы можете уменьшить используемое пространство TOC с помощью опций -mno-fp-in-toc и -mno-sum-in-toc. -mno-fp-in-toc предотвращает размещение GCC констант с плавающей точкой в TOC, а -mno-sum-in-toc заставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения вместо помещения этой суммы в TOC. Вы можете указать одну или обе эти опции. Каждая из них приводит к созданию кода, который немного медленнее и больше, но сохраняет пространство TOC.
Если у вас всё ещё недостаточно места в TOC, даже когда вы указали обе эти опции, укажите -mminimal-toc вместо этого. Эта опция заставляет GCC создавать только одну запись TOC для каждого файла. При указании этой опции GCC генерирует код, который медленнее и больше, но использует чрезвычайно мало пространства TOC. Вы можете использовать эту опцию только для файлов, содержащих менее часто выполняемый код.
-
-maix64 -maix32-
Включить 64-битную ABI и правила вызова AIX: 64-битные указатели, 64-битный тип
long, и инфраструктура, необходимая для их поддержки. Указание -maix64 подразумевает -mpowerpc64, в то время как -maix32 отключает 64-битную ABI и подразумевает -mno-powerpc64. GCC по умолчанию использует -maix32. -
-mxl-compat -mno-xl-compat-
Создать код, более точно соответствующий семантике компилятора IBM XL при использовании ABI, совместимой с AIX. Передавать аргументы с плавающей точкой прототипированным функциям в область сохранения регистров (RSA) на стеке в дополнение к аргументам FPR. Не предполагать, что наиболее значимый двойной в 128-битном значении типа long double корректно округлён при сравнении значений и преобразовании в двойной. Использовать имена символов XL для подпрограмм поддержки long double.
Правила вызова AIX были расширены, но первоначально не были задокументированы для обработки редкого случая K&R C для вызова функции, принимающей адрес своих аргументов с меньшим количеством аргументов, чем объявлено. Компиляторы IBM XL обращаются к аргументам с плавающей точкой, которые не помещаются в RSA, со стека, когда подпрограмма компилируется без оптимизации. Поскольку постоянное хранение аргументов с плавающей точкой в стеке является неэффективным и редко необходимым, эта опция по умолчанию выключена и необходима только при вызове подпрограмм, скомпилированных компиляторами IBM XL без оптимизации.
-
-mpe -
Поддержка параллельной среды IBM RS/6000 SP (PE). Подключать приложение, написанное для использования передачи сообщений, со специальным стартовым кодом, чтобы приложение могло работать. Система должна иметь PE в стандартном расположении (/usr/lpp/ppe.poe/) или файл specs должен быть переопределён с помощью опции -specs= для указания соответствующего расположения каталога. Параллельная среда не поддерживает потоки, поэтому опции -mpe и -pthread несовместимы.
-
-malign-natural -malign-power-
В AIX, 32-битной Darwin и 64-битной PowerPC GNU/Linux опция -malign-natural переопределяет определяемое ABI выравнивание более крупных типов, таких как двойные значения с плавающей точкой, на их границе, основанной на естественном размере. Опция -malign-power указывает GCC на соблюдение правил выравнивания, определённых в ABI. GCC по умолчанию использует стандартное выравнивание, определённое в ABI.
В 64-битной Darwin естественное выравнивание является по умолчанию, и -malign-power не поддерживается.
-
-msoft-float -mhard-float-
Генерировать код, не использующий (использующий) набор регистров с плавающей точкой. Если вы используете опцию -msoft-float, предоставляется программная эмуляция плавающей точки, и передайте эту опцию GCC при компоновке.
-
-mmultiple -mno-multiple-
Генерировать код, использующий (не использующий) инструкции для загрузки и сохранения нескольких слов. Эти инструкции генерируются по умолчанию на системах POWER и не генерируются на системах PowerPC. Не используйте -mmultiple на системах PowerPC с little-endian, так как эти инструкции не работают, когда процессор находится в режиме little-endian. Исключение составляют PPC740 и PPC750, которые разрешают эти инструкции в режиме little-endian.
-
-mupdate -mno-update-
Генерировать код, использующий (не использующий) инструкции загрузки или сохранения, которые обновляют базовый регистр до адреса рассчитанного местоположения памяти. Эти инструкции генерируются по умолчанию. Если вы используете -mno-update, существует небольшой интервал между временем обновления указателя стека и временем сохранения адреса предыдущей рамки, что означает, что код, который просматривает раму стека через прерывания или сигналы, может получить повреждённые данные.
-
-mavoid-indexed-addresses -mno-avoid-indexed-addresses-
Генерировать код, который пытается избежать (не избегать) использования индексированных инструкций загрузки или сохранения. Эти инструкции могут повлечь за собой штраф за производительность на процессорах Power6 в определённых ситуациях, таких как при прохождении по большим массивам, пересекающим границу 16M. Эта опция включена по умолчанию при нацеливании на Power6 и отключена в противном случае.
-
-mfused-madd -mno-fused-madd-
Генерировать код, использующий (не использующий) инструкции умножения и накопления с плавающей точкой. Эти инструкции генерируются по умолчанию, если используется аппаратная плавающая точка. Зависимая от машины опция -mfused-madd теперь сопоставлена с независимой от машины опцией -ffp-contract=fast, а -mno-fused-madd сопоставлена с -ffp-contract=off.
-
-mmulhw -mno-mulhw-
Генерировать код, использующий (не использующий) инструкции умножения и умножения-накопления для полуслов на процессорах IBM 405, 440, 464 и 476. Эти инструкции генерируются по умолчанию при нацеливании на эти процессоры.
-
-mdlmzb -mno-dlmzb-
Генерировать код, использующий (не использующий) инструкцию поиска строк «dlmzb» на процессорах IBM 405, 440, 464 и 476. Эта инструкция генерируется по умолчанию при нацеливании на эти процессоры.
-
-mno-bit-align -mbit-align-
В системах System V.4 и встроенных системах PowerPC не (не) принудительно выравнивать структуры и объединения, содержащие битовые поля, к базовому типу битового поля.
Например, по умолчанию структура, содержащая только 8
unsignedбитовых полей длиной 1, выравнивается к 4-байтовой границе и имеет размер 4 байта. Используя -mno-bit-align, структура выравнивается к 1-байтовой границе и имеет размер 1 байт. -
-mno-strict-align -mstrict-align-
В системах System V.4 и встроенных системах PowerPC не (не) предполагается, что невыровненные обращения к памяти обрабатываются системой.
-
-mrelocatable -mno-relocatable-
Генерировать код, позволяющий (не позволяющий) статической программе переместиться в другой адрес во время выполнения. Простой загрузчик встроенной системы PowerPC должен переместить всё содержимое
.got2и 4-байтовых локаций, перечисленных в разделе.fixup, таблицу 32-битных адресов, сгенерированных этой опцией. Для этого все связанные объекты должны быть скомпилированы с -mrelocatable или -mrelocatable-lib. Код -mrelocatable выравнивает стек к 8-байтовой границе. -
-mrelocatable-lib -mno-relocatable-lib
-
Как и -mrelocatable, -mrelocatable-lib генерирует раздел
.fixup, чтобы разрешить перемещение статически скомпилированных исполняемых файлов во время выполнения, но -mrelocatable-lib не использует меньшее выравнивание стека, чем -mrelocatable. Объекты, скомпилированные с -mrelocatable-lib, могут быть связаны с объектами, скомпилированными с любой комбинацией опций -mrelocatable. -
-mno-toc -mtoc-
В системах System V.4 и встроенных системах PowerPC не предполагается, что регистр 2 содержит указатель на глобальную область, указывающую на адреса, используемые в программе.
-
-mlittle -mlittle-endian-
В системах System V.4 и встроенных системах PowerPC код компилируется для процессора в формате little-endian. Опция -mlittle-endian эквивалентна -mlittle.
-
-mbig -mbig-endian-
В системах System V.4 и встроенных системах PowerPC код компилируется для процессора в формате big-endian. Опция -mbig-endian эквивалентна -mbig.
-
-mdynamic-no-pic -
В системах Darwin и Mac OS X код компилируется таким образом, что он не является перемещаемым, но его внешние ссылки перемещаемы. Полученный код подходит для приложений, но не для общих библиотек.
-
-msingle-pic-base -
Регистр, используемый для адресации PIC, обрабатывается как только для чтения, а не загружается в прологе каждой функции. Системный код во время выполнения отвечает за инициализацию этого регистра соответствующим значением перед началом выполнения.
-
-mprioritize-restricted-insns=priority -
Данная опция управляет приоритетом, который назначается инструкциям с ограниченным слотом диспетчеризации во время второго прохода планирования. Аргумент priority принимает значения ‘0’, ‘1’ или ‘2’ для назначения отсутствующего, наивысшего или второго по величине приоритета (соответственно) инструкциям с ограниченным слотом диспетчеризации.
-
-msched-costly-dep=dependence_type -
Данная опция управляет тем, какие зависимости считаются дорогостоящими целевой системой во время планирования инструкций. Аргумент dependence_type принимает одно из следующих значений:
- ‘no’
-
Никакая зависимость не является дорогостоящей.
- ‘all’
-
Все зависимости являются дорогостоящими.
- ‘true_store_to_load’
-
Истинная зависимость от сохранения к загрузке является дорогостоящей.
- ‘store_to_load’
-
Любая зависимость от сохранения к загрузке является дорогостоящей.
- number
Любая зависимость, для которой задержка больше или равна number, является дорогостоящей.
-
-minsert-sched-nops=scheme -
Данная опция управляет тем, какой схеме вставки NOP используется во время второго прохода планирования. Аргумент scheme принимает одно из следующих значений:
- ‘no’
-
Не вставлять NOP.
- ‘pad’
-
Заполнить NOP всеми группами диспетчеризации, которые имеют свободные слоты выдачи, в соответствии с группировкой планировщика.
- ‘regroup_exact’
-
Вставить NOP, чтобы заставить дорогостоящие зависимые инструкции в отдельные группы. Вставить ровно столько NOP, сколько необходимо, чтобы заставить инструкцию в новую группу, в соответствии с оценкой группировки процессора.
- number
Вставить NOP, чтобы заставить дорогостоящие зависимые инструкции в отдельные группы. Вставить number NOP, чтобы заставить инструкцию в новую группу.
-
-mcall-sysv -
В системах System V.4 и встроенных системах PowerPC компилируется код с использованием правил вызова, которые соответствуют черновику System V Application Binary Interface от марта 1995 года, дополнению для процессора PowerPC. Это значение по умолчанию, если вы не настраивали GCC с помощью ‘powerpc-*-eabiaix’.
-
-mcall-sysv-eabi -mcall-eabi-
Укажите как опцию -mcall-sysv, так и -meabi.
-
-mcall-sysv-noeabi -
Укажите как опцию -mcall-sysv, так и -mno-eabi.
-
-mcall-aixdesc -
В системах System V.4 и встроенных системах PowerPC компилируется код для операционной системы AIX.
-
-mcall-linux -
В системах System V.4 и встроенных системах PowerPC компилируется код для системы GNU на базе Linux.
-
-mcall-freebsd -
В системах System V.4 и встроенных системах PowerPC компилируется код для операционной системы FreeBSD.
-
-mcall-netbsd -
В системах System V.4 и встроенных системах PowerPC компилируется код для операционной системы NetBSD.
-
-mcall-openbsd -
В системах System V.4 и встроенных системах PowerPC компилируется код для операционной системы OpenBSD.
-
-mtraceback=traceback_type -
Выберите тип таблицы отслеживания. Допустимые значения для traceback_type — ‘full’, ‘part’ и ‘no’.
-
-maix-struct-return -
Возвратить все структуры в памяти (как указано в AIX ABI).
-
-msvr4-struct-return -
Возвратить структуры размером меньше 8 байт в регистрах (как указано в SVR4 ABI).
-
-mabi=abi-type -
Расширить текущий ABI с помощью определенного расширения или удалить такое расширение. Допустимые значения: ‘altivec’, ‘no-altivec’, ‘ibmlongdouble’, ‘ieeelongdouble’, ‘elfv1’, ‘elfv2’, и для AIX: ‘vec-extabi’, ‘vec-default’.
-
-mabi=ibmlongdouble -
Изменить текущий ABI для использования IBM extended-precision long double. Вероятно, это не сработает, если ваша система по умолчанию использует IEEE extended-precision long double. Если вы измените тип long double с IEEE extended-precision, компилятор выведет предупреждение, если вы не используете опцию -Wno-psabi. Требуется включение -mlong-double-128.
-
-mabi=ieeelongdouble -
Изменить текущий ABI для использования IEEE extended-precision long double. Вероятно, это не сработает, если ваша система по умолчанию использует IBM extended-precision long double. Если вы измените тип long double с IBM extended-precision, компилятор выведет предупреждение, если вы не используете опцию -Wno-psabi. Требуется включение -mlong-double-128.
-
-mabi=elfv1 -
Изменить текущий ABI для использования ELFv1 ABI. Это ABI по умолчанию для big-endian PowerPC 64-битного Linux. Переопределение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится катастрофой.
-
-mabi=elfv2 -
Изменить текущий ABI для использования ELFv2 ABI. Это ABI по умолчанию для little-endian PowerPC 64-битного Linux. Переопределение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится катастрофой.
-
-mgnu-attribute -mno-gnu-attribute-
Выводить ассемблерные директивы .gnu_attribute для установки пар тег/значение в разделе .gnu.attributes, которые задают варианты ABI в параметрах функций или возвращаемых значениях.
-
-mprototype -mno-prototype-
В системах System V.4 и встроенных системах PowerPC предполагается, что все вызовы функций с переменным числом аргументов правильно прототипированы. В противном случае компилятор должен вставить инструкцию перед каждым вызовом без прототипа для установки или сброса бита 6 регистра состояния условия (
CR) для указания того, передаются ли значения с плавающей точкой в регистрах с плавающей точкой в случае, если функция принимает переменное число аргументов. С -mprototype устанавливаются или сбрасываются только вызовы прототипированных функций с переменным числом аргументов. -
-msim -
В встроенных системах PowerPC предполагается, что модуль загрузки называется sim-crt0.o, а стандартные библиотеки C — libsim.a и libc.a. Это значение по умолчанию для конфигураций ‘powerpc-*-eabisim’.
-
-mmvme -
В встроенных системах PowerPC предполагается, что модуль загрузки называется crt0.o, а стандартные библиотеки C — libmvme.a и libc.a.
-
-mads -
В встроенных системах PowerPC предполагается, что модуль загрузки называется crt0.o, а стандартные библиотеки C — libads.a и libc.a.
-
-myellowknife -
В встроенных системах PowerPC предполагается, что модуль загрузки называется crt0.o, а стандартные библиотеки C — libyk.a и libc.a.
-
-mvxworks -
В системах System V.4 и встроенных системах PowerPC укажите, что вы компилируете для системы VxWorks.
-
-memb -
В встроенных системах PowerPC установите бит
PPC_EMBв заголовке флагов ELF, чтобы указать, что используются расширенные перемещения ‘eabi’. -
-meabi -mno-eabi
-
В системах System V.4 и встраиваемых PowerPC (соблюдают/не соблюдают) интерфейс двоичного кодирования встроенных приложений (EABI), представляющий собой набор модификаций спецификаций System V.4. Выбор -meabi означает, что стек выровнен по границе 8 байт, функция
__eabiвызывается изmainдля настройки среды EABI, а опция -msdata может использовать какr2, так иr13, для указания на две отдельные области малых данных. Выбор -mno-eabi означает, что стек выровнен по границе 16 байт, функция инициализации EABI не вызывается изmain, а опция -msdata использует толькоr13для указания на одну область малых данных. Опция -meabi включена по умолчанию, если вы настраивали GCC, используя один из вариантов ‘powerpc*-*-eabi*’. -
-msdata=eabi -
В системах System V.4 и встраиваемых PowerPC, поместите инициализированные малые
constглобальные и статические данные в секцию.sdata2, на которую указывает регистрr2. Поместите инициализированные малые не-constглобальные и статические данные в секцию.sdata, на которую указывает регистрr13. Поместите неинициализированные малые глобальные и статические данные в секцию.sbss, которая прилегает к секции.sdata. Опция -msdata=eabi несовместима с опцией -mrelocatable. Опция -msdata=eabi также устанавливает опцию -memb. -
-msdata=sysv -
В системах System V.4 и встраиваемых PowerPC, поместите малые глобальные и статические данные в секцию
.sdata, на которую указывает регистрr13. Поместите неинициализированные малые глобальные и статические данные в секцию.sbss, которая прилегает к секции.sdata. Опция -msdata=sysv несовместима с опцией -mrelocatable. -
-msdata=default -msdata-
В системах System V.4 и встраиваемых PowerPC, если используется -meabi, компилируйте код так же, как -msdata=eabi, в противном случае компилируйте код так же, как -msdata=sysv.
-
-msdata=data -
В системах System V.4 и встраиваемых PowerPC, поместите малые глобальные данные в секцию
.sdata. Поместите неинициализированные малые глобальные данные в секцию.sbss. Однако не используйте регистрr13для обращения к малым данным. Это поведение по умолчанию, если не используются другие опции -msdata. -
-msdata=none -mno-sdata-
В встраиваемых системах PowerPC поместите все инициализированные глобальные и статические данные в секцию
.data, а все неинициализированные данные в секцию.bss. -
-mreadonly-in-sdata -
Поместите объекты только для чтения в секцию
.sdata. Это поведение по умолчанию. -
-mblock-move-inline-limit=num -
Встройте все перемещения блоков (например, вызовы к
memcpyили копирование структур), не превышающие num байт. Минимальное значение для num составляет 32 байта для 32-битных и 64 байта для 64-битных целей. Значение по умолчанию зависит от целевой платформы. -
-mblock-compare-inline-limit=num -
Генерируйте нециклический встроенный код для всех сравнений блоков (например, вызовы к
memcmpили сравнение структур), не превышающих num байт. Если num равно 0, отключено любое встраивание сравнения блоков (нециклическое и циклическое). Значение по умолчанию зависит от целевой платформы. -
-mblock-compare-inline-loop-limit=num -
Генерируйте встроенное расширение с использованием циклического кода для всех сравнений блоков, которые меньше или равны num байтам, но больше предела для нециклического встроенного сравнения блоков. Если длина блока не постоянна, не более num байтов будут сравниваться перед вызовом
memcmpдля сравнения оставшейся части блока. Значение по умолчанию зависит от целевой платформы. -
-mstring-compare-inline-limit=num -
Сравните не более num байтов строки с помощью встроенного кода. Если различие или конец строки не найдены в конце встроенного сравнения, вызов
strcmpилиstrncmpпозаботятся о продолжении сравнения. Значение по умолчанию составляет 64 байта. -
-G num -
В встраиваемых системах PowerPC, поместите глобальные и статические элементы, не превышающие num байтов, в секции малых данных или BSS вместо обычных секций данных или BSS. По умолчанию num равно 8. Переключатель -G num также передаётся линковщику. Все модули должны быть скомпилированы с одинаковым значением -G num.
-
-mregnames -mno-regnames-
В системах System V.4 и встраиваемых системах PowerPC (выводят/не выводят) имена регистров в выводе ассемблерного языка, используя символические формы.
-
-mlongcall -mno-longcall-
По умолчанию предполагается, что все вызовы находятся далеко, поэтому требуется более длинная и дорогостоящая последовательность вызовов. Это необходимо для вызовов, находящихся на расстоянии более 32 мегабайт (33 554 432 байта) от текущего расположения. Краткий вызов генерируется, если компилятор знает, что вызов не может быть так далёк. Этот параметр можно переопределить атрибутом функции
shortcallили#pragma longcall(0).Некоторые линковщики способны обнаруживать вызовы за пределами диапазона и генерировать на лету код-мостик. В этих системах длинные вызовы не нужны и генерируют более медленный код. На момент написания этого документа линковщик AIX может это делать, а также GNU линковщик для PowerPC/64. Планируется добавить эту функцию в GNU линковщик для 32-битных систем PowerPC.
В системах PowerPC64 ELFv2 и 32-битных системах PowerPC с более новыми GNU линковщиками GCC может генерировать длинные вызовы, используя встроенную последовательность вызовов PLT (см. -mpltseq). PowerPC с -mbss-plt и PowerPC64 ELFv1 (большая эндианность) не поддерживают встроенные вызовы PLT.
В системах Darwin/PPC,
#pragma longcallгенерируетjbsr callee, L42, плюс остров ветвления (код-мостик). Два целевых адреса представляют вызываемую функцию и остров ветвления. Линковщик Darwin предпочитает первый адрес и генерируетbl callee, если инструкция PPCblдостигает вызываемую функцию напрямую; в противном случае линковщик генерируетbl L42для вызова острова ветвления. Остров ветвления добавляется в тело вызывающей функции; он вычисляет полный 32-битный адрес вызываемой функции и переходит к нему.В системах Mach-O (Darwin) этот параметр направляет компилятор генерировать код-мостик для каждого прямого вызова, а линковщик Darwin решает, использовать его или нет.
В будущем GCC может игнорировать все спецификации longcall, когда известно, что линковщик генерирует код-мостик.
-
-mpltseq -mno-pltseq-
Реализовать (не реализовывать) -fno-plt и длинные вызовы, используя встроенную последовательность вызова PLT, которая поддерживает ленивую компоновку и длинные вызовы к функциям в разделяемых библиотеках dlopen. Встроенные вызовы PLT поддерживаются только в системах PowerPC64 ELFv2 и 32-битных системах PowerPC с более новыми GNU линковщиками и включены по умолчанию, если поддержка обнаружена при настройке GCC, и, в случае 32-битного PowerPC, если GCC настроен с --enable-secureplt. Код -mpltseq и переместимые объекты 32-битного PowerPC -mbss-plt не могут быть связаны вместе.
-
-mtls-markers -mno-tls-markers-
Пометить (не отмечать) вызовы к
__tls_get_addrс помощью перемещения, определяющего аргумент функции. Перемещение позволяет линковщику надёжно связывать вызовы функций с инструкциями настройки аргументов для оптимизации TLS, что, в свою очередь, позволяет GCC лучше планировать последовательность. -
-mrecip -mno-recip-
Этот параметр включает использование оценок обратных значений и оценок обратных квадратных корней с дополнительными шагами Ньютона-Рафсона для повышения точности вместо выполнения деления или квадратного корня и деления для аргументов с плавающей точкой. Вы должны использовать опцию -ffast-math при использовании -mrecip (или, по крайней мере, -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math и -fno-trapping-math). Обратите внимание, что, хотя пропускная способность последовательности обычно выше, чем пропускная способность инструкции без взаимных значений, точность последовательности может быть уменьшена до 2 ulp (т.е. обратное значение 1,0 равно 0,99999994) для обратных квадратных корней.
-
-mrecip=opt
-
Этот параметр управляет тем, какие инструкции оценки обратных значений могут быть использованы. opt — это список параметров, разделённых запятыми, которые могут быть предваряемыми
!для инвертирования параметра:- ‘all’
-
Включить все инструкции оценки.
- ‘default’
-
Включить стандартные инструкции, эквивалентные -mrecip.
- ‘none’
-
Отключить все инструкции оценки, эквивалентные -mno-recip.
- ‘div’
-
Включить инструкции приближения обратного значения для одинарной и двойной точности.
- ‘divf’
-
Включить инструкции приближения обратного значения для одинарной точности.
- ‘divd’
-
Включить инструкции приближения обратного значения для двойной точности.
- ‘rsqrt’
-
Включить инструкции приближения обратного квадратного корня для одинарной и двойной точности.
- ‘rsqrtf’
-
Включить инструкции приближения обратного квадратного корня для одинарной точности.
- ‘rsqrtd’
-
Включить инструкции приближения обратного квадратного корня для двойной точности.
Например, -mrecip=all,!rsqrtd включает все инструкции оценки обратных значений, за исключением
FRSQRTE,XSRSQRTEDP, иXVRSQRTEDPинструкций, обрабатывающих вычисления обратного квадратного корня двойной точности. -
-mrecip-precision -mno-recip-precision-
Предполагать (не предполагать), что инструкции оценки обратных значений предоставляют оценки большей точности, чем предписывает ABI PowerPC. Выбор -mcpu=power6, -mcpu=power7 или -mcpu=power8 автоматически выбирает -mrecip-precision. Инструкции оценки квадратного корня двойной точности по умолчанию не генерируются на машинах с низкой точностью, так как они не предоставляют оценку, сходящуюся за три шага.
-
-mveclibabi=type -
Указывает тип ABI для векторизации встроенных функций с использованием внешней библиотеки. В настоящее время поддерживается только тип ‘mass’, который указывает на использование библиотек IBM Mathematical Acceleration Subsystem (MASS) для векторизации встроенных функций с использованием внешних библиотек. В настоящее время GCC генерирует вызовы к
acosd2,acosf4,acoshd2,acoshf4,asind2,asinf4,asinhd2,asinhf4,atan2d2,atan2f4,atand2,atanf4,atanhd2,atanhf4,cbrtd2,cbrtf4,cosd2,cosf4,coshd2,coshf4,erfcd2,erfcf4,erfd2,erff4,exp2d2,exp2f4,expd2,expf4,expm1d2,expm1f4,hypotd2,hypotf4,lgammad2,lgammaf4,log10d2,log10f4,log1pd2,log1pf4,log2d2,log2f4,logd2,logf4,powd2,powf4,sind2,sinf4,sinhd2,sinhf4,sqrtd2,sqrtf4,tand2,tanf4,tanhd2, иtanhf4при генерации кода для power7. Также должны быть включены -ftree-vectorize и -funsafe-math-optimizations. Библиотеки MASS должны быть указаны при линковке. -
-mfriz -mno-friz-
Генерировать (не генерировать) инструкцию
frizпри использовании параметра -funsafe-math-optimizations для оптимизации округления значений с плавающей точкой до 64-битного целого числа и обратно в значение с плавающей точкой. Инструкцияfrizне возвращает то же значение, если число с плавающей точкой слишком велико для представления в целом. -
-mpointers-to-nested-functions -mno-pointers-to-nested-functions-
Генерировать (не генерировать) код для загрузки регистра статической цепочки (
r11) при вызове через указатель на системах AIX и 64-битных Linux, где указатель функции указывает на 3-словный дескриптор, содержащий адрес функции, значение TOC, которое необходимо загрузить в регистрr2, и значение статической цепочки, которое необходимо загрузить в регистрr11. Параметр -mpointers-to-nested-functions включён по умолчанию. Вы не можете вызывать через указатели на вложенные функции или указатели на функции, скомпилированные на других языках, использующих статическую цепочку, если вы используете -mno-pointers-to-nested-functions. -
-msave-toc-indirect -mno-save-toc-indirect-
Генерировать (не генерировать) код для сохранения значения TOC в зарезервированном месте в стеке в прологе функции, если функция вызывается через указатель на системах AIX и 64-битных Linux. Если значение TOC не сохраняется в прологе, оно сохраняется непосредственно перед вызовом через указатель. Параметр -mno-save-toc-indirect используется по умолчанию.
-
-mcompat-align-parm -mno-compat-align-parm-
Генерировать (не генерировать) код для передачи параметров структуры с максимальным выравниванием 64 бита для совместимости со старыми версиями GCC.
Старые версии GCC (до 4.9.0) некорректно не выравнивали параметр структуры на границе 128 бит, когда эта структура содержала член, требующий выравнивания 128 бит. Это исправлено в более новых версиях GCC. Этот параметр может быть использован для генерации кода, совместимого с функциями, скомпилированными с более старыми версиями GCC.
Параметр -mno-compat-align-parm используется по умолчанию.
-
-mstack-protector-guard=guard -mstack-protector-guard-reg=reg-mstack-protector-guard-offset=offset-mstack-protector-guard-symbol=symbol-
Генерировать код защиты стека с использованием канделя в guard. Поддерживаемые расположения: ‘global’ для глобального канделя или ‘tls’ для канделя на нить в блоке TLS (по умолчанию с GNU libc версии 2.4 или новее).
В последнем случае параметры -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового регистра для чтения канделя и с какого смещения от этого базового регистра. По умолчанию они заданы согласно соответствующему ABI. -mstack-protector-guard-symbol=symbol заменяет смещение ссылкой на символ канделя в блоке TLS.
-
-mpcrel -mno-pcrel-
Генерировать (не генерировать) адресацию pc-относительную. Параметр -mpcrel требует включения кодовой модели среднего размера (-mcmodel=medium) и адресации с префиксом (-mprefixed).
-
-mprefixed -mno-prefixed-
Генерировать (не генерировать) режимы адресации, используя инструкции загрузки и сохранения с префиксом. Параметр -mprefixed требует включения параметра -mcpu=power10 (или новее).
-
-mmma -mno-mma-
Генерировать (не генерировать) инструкции MMA. Параметр -mma требует включения параметра -mcpu=power10 (или новее).
-
-mrop-protect -mno-rop-protect-
Генерировать (не генерировать) инструкции защиты ROP, если целевой процессор их поддерживает. В настоящее время этот параметр отключает оптимизацию сжатия (-fshrink-wrap).
-
-mprivileged -mno-privileged-
Генерировать (не генерировать) код, который будет выполняться в привилегированном режиме.
-
-mblock-ops-unaligned-vsx -mno-block-ops-unaligned-vsx-
Генерировать (не генерировать) невыровненные загрузки и сохранения VSX для встроенного расширения
memcpyиmemcpy. --param rs6000-vect-unroll-limit=-
Векторизатор проверит информацию о целевом процессоре, чтобы определить, будет ли выгодно развернуть основной векторизованный цикл и на сколько. Этот параметр устанавливает верхнюю границу того, насколько векторизатор развернёт основной цикл. Значение по умолчанию равно четырем.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/RS_002f6000-and-PowerPC-Options.html