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 в группе «Общие» (General Purpose), включая квадратный корень с плавающей запятой. Указание -mpowerpc-gfxopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе «Графика» (Graphics), включая выбор плавающей запятой.
Параметр -mmfcrf позволяет GCC генерировать инструкцию перехода из поля регистра состояния (condition register field), реализованную на процессоре POWER4 и других процессорах, поддерживающих архитектуру PowerPC V2.01. Параметр -mpopcntb позволяет GCC генерировать инструкцию подсчёта единиц (popcount) и оценки обратной величины для чисел с двойной точностью FP, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчёта единиц (popcount), реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления чисел с плавающей запятой до целых значений, реализованные на процессоре POWER5+ и других процессорах, поддерживающих архитектуру PowerPC V2.03. Параметр -mcmpb позволяет GCC генерировать инструкцию сравнения байтов, реализованную на процессоре POWER6 и других процессорах, поддерживающих архитектуру PowerPC V2.05. Параметр -mhard-dfp позволяет GCC генерировать инструкции десятичной арифметики с плавающей запятой, реализованные на некоторых процессорах POWER.
Параметр -mpowerpc64 позволяет GCC генерировать дополнительные 64-битные инструкции, которые можно найти в полной архитектуре PowerPC64, и обрабатывать регистры как 64-битные, двойные значения. GCC по умолчанию использует -mno-powerpc64.
-
-mcpu=cpu_type -
Устанавливает тип архитектуры, использование регистров и параметры планирования инструкций для типа машины cpu_type. Допустимые значения для cpu_type — ‘401’, ‘403’, ‘405’, ‘405fp’, ‘440’, ‘440fp’, ‘464’, ‘464fp’, ‘476’, ‘476fp’, ‘505’, ‘601’, ‘602’, ‘603’, ‘603e’, ‘604’, ‘604e’, ‘620’, ‘630’, ‘740’, ‘7400’, ‘7450’, ‘750’, ‘801’, ‘821’, ‘823’, ‘860’, ‘970’, ‘8540’, ‘a2’, ‘e300c2’, ‘e300c3’, ‘e500mc’, ‘e500mc64’, ‘e5500’, ‘e6500’, ‘ec603e’, ‘G3’, ‘G4’, ‘G5’, ‘titan’, ‘power3’, ‘power4’, ‘power5’, ‘power5+’, ‘power6’, ‘power6x’, ‘power7’, ‘power8’, ‘power9’, ‘power10’, ‘powerpc’, ‘powerpc64’, ‘powerpc64le’, ‘rs64’, и ‘native’.
-mcpu=powerpc, -mcpu=powerpc64 и -mcpu=powerpc64le задают типы машин с чистой 32-битной архитектурой PowerPC (любой порядок байтов), 64-битной большой эндиан PowerPC и 64-битной малой эндиан PowerPC соответственно, с соответствующей общей моделью процессора, предполагаемой для целей планирования.
Указание ‘native’ в качестве типа процессора обнаруживает и выбирает параметр архитектуры, соответствующий процессору хост-системы, выполняющей компиляцию. -mcpu=native не оказывает никакого эффекта, если GCC не распознаёт процессор.
Другие параметры задают конкретный процессор. Сгенерированный код при этих параметрах лучше всего работает на этом процессоре и может вообще не работать на других.
Параметры -mcpu автоматически включают или отключают следующие параметры:
-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt -mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -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 с расширениями AltiVec ABI.
Когда используется -maltivec, порядок элементов для встроенных функций AltiVec, таких как
vec_splat,vec_extract, иvec_insert, соответствует порядку элементов массива, соответствующему порядку байтов целевой платформы. То есть, нулевой элемент определяет самый левый элемент в регистре вектора при целевой платформе с большим порядком байтов и определяет самый правый элемент в регистре вектора при целевой платформе с малым порядком байтов. -
-mvrsave -mno-vrsave-
Генерирует инструкции VRSAVE при генерации кода AltiVec.
-
-msecure-plt -
Генерирует код, который позволяет
ldиld.soсоздавать исполняемые файлы и общие библиотеки с неисполняемыми.pltи.gotсекциями. Это параметр PowerPC 32-битного SYSV ABI. -
-mbss-plt -
Генерирует код, который использует BSS
.pltсекцию, которуюld.soзаполняет, и требует.pltи.gotсекции, которые оба являются читаемыми и исполняемыми. Это параметр PowerPC 32-битного SYSV ABI. -
-misel -mno-isel-
Этот переключатель включает или выключает генерацию инструкций ISEL.
-
-mvsx -mno-vsx-
Генерирует код, использующий (не использующий) векторные/скалярные (VSX) инструкции, а также включает использование встроенных функций, которые позволяют получить более прямой доступ к набору инструкций VSX.
-
-mcrypto -mno-crypto-
Включает (отключает) использование встроенных функций, которые позволяют получить прямой доступ к криптографическим инструкциям, добавленным в версию 2.07 ISA PowerPC.
-
-mhtm -mno-htm-
Включает (отключает) использование встроенных функций, которые позволяют получить прямой доступ к инструкциям транзакционной памяти аппаратного обеспечения (HTM), добавленным в версию 2.07 ISA PowerPC.
-
-mpower8-fusion -mno-power8-fusion-
Генерирует код, который сохраняет (не сохраняет) некоторые целочисленные операции рядом, чтобы инструкции могли быть объединены на процессорах power8 и более поздних.
-
-mquad-memory -mno-quad-memory-
Генерирует код, использующий (не использующий) неатомарные инструкции памяти для четырёхбайтовых слов. Параметр -mquad-memory требует использования 64-битного режима.
-
-mquad-memory-atomic -mno-quad-memory-atomic-
Генерирует код, использующий (не использующий) атомарные инструкции памяти для четырёхбайтовых слов. Параметр -mquad-memory-atomic требует использования 64-битного режима.
-
-mfloat128 -mno-float128
-
Включить/отключить ключевое слово __float128 для плавающей точки IEEE 128 бит и использовать либо программную эмуляцию для плавающей точки IEEE 128 бит, либо аппаратные инструкции.
Для использования поддержки плавающей точки IEEE 128 бит необходимо включить набор инструкций VSX (-mvsx). Поддержка плавающей точки IEEE 128 бит поддерживается только в Linux.
По умолчанию -mfloat128 включен на системах PowerPC Linux, использующих набор инструкций VSX, и выключен на других системах.
Если вы используете набор инструкций ISA 3.0 (-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. Вы можете указать одну или обе эти опции. Каждая из них заставляет GCC создавать код немного медленнее и больше за счёт экономии пространства 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. Передавать аргументы с плавающей точкой прототипированным функциям в дополнение к аргументам FPR в область сохранения регистров (RSA) на стеке. Не предполагать, что наиболее значимый двойной в 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 с малым эндианом, так как эти инструкции не работают, когда процессор находится в режиме малого эндиана. Исключение составляют PPC740 и PPC750, которые разрешают эти инструкции в режиме малого эндиана.
-
-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/macOS код компилируется таким образом, что он не является перепозиционируемым, но его внешние ссылки являются перепозиционируемыми. Полученный код подходит для приложений, но не для динамически подключаемых библиотек.
-
-msingle-pic-base -
Регистр, используемый для адресации PIC, обрабатывается как только для чтения, а не загружается в прологе для каждой функции. Системное время выполнения отвечает за инициализацию этого регистра соответствующим значением перед началом выполнения.
-
-mprioritize-restricted-insns=priority -
Эта опция управляет приоритетом, который назначается инструкциям с ограниченным временем выполнения в рамках второго прохода планирования. Аргумент priority принимает значения ‘0’, ‘1’ или ‘2’ для назначения инструкций с ограниченным временем выполнения соответственно без приоритета, наивысшего приоритета или второго по высоте приоритета.
-
-msched-costly-dep=dependence_type -
Эта опция управляет тем, какие зависимости считаются дорогостоящими целевым процессором во время планирования инструкций. Аргумент dependence_type принимает одно из следующих значений:
- ‘no’
-
Ни одна зависимость не является дорогостоящей.
- ‘all’
-
Все зависимости являются дорогостоящими.
- ‘true_store_to_load’
-
Истинная зависимость от сохранения к загрузке является дорогостоящей.
- ‘store_to_load’
-
Любая зависимость от сохранения к загрузке является дорогостоящей.
- number
Любая зависимость, задержка которой больше или равна number, является дорогостоящей.
-
-minsert-sched-nops=scheme -
Эта опция управляет тем, какой метод вставки NOP используется во время второго прохода планирования. Аргумент scheme принимает одно из следующих значений:
- ‘no’
-
Не вставлять NOP.
- ‘pad’
-
Заполнять NOP любой группой выдачи, в которой есть свободные слоты выдачи, в соответствии с группировкой планировщика.
- ‘regroup_exact’
-
Вставлять NOP для принудительного распределения дорогостоящих зависимых инструкций в отдельные группы. Вставляется ровно столько NOP, сколько необходимо, чтобы переместить инструкцию в новую группу, в соответствии с оцененной группировкой процессора.
- number
Вставлять NOP для принудительного распределения дорогостоящих зависимых инструкций в отдельные группы. Вставляется number NOP для принудительного перемещения инструкции в новую группу.
-
-mcall-sysv -
В системах System V.4 и встраиваемых системах PowerPC компилируется код с использованием соглашений о вызовах, которые соответствуют черновику спецификации System V Application Binary Interface, дополнению для процессоров PowerPC от марта 1995 года. Это значение по умолчанию, если вы не настраивали GCC с использованием ‘powerpc-*-eabiaix’.
-
-mcall-sysv-eabi -mcall-eabi-
Указать опции -mcall-sysv и -meabi.
-
-mcall-sysv-noeabi -
Указать опции -mcall-sysv и -mno-eabi.
-
-mcall-aixdesc -
В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы AIX.
-
-mcall-linux -
В системах System V.4 и встраиваемых системах PowerPC компилируется код для GNU-системы на базе Linux.
-
-mcall-freebsd -
В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы FreeBSD.
-
-mcall-netbsd -
В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы NetBSD.
-
-mcall-openbsd -
В системах System V.4 и встраиваемых системах PowerPC компилируется код для операционной системы OpenBSD.
-
-mtraceback=traceback_type -
Выбрать тип таблицы отслеживания. Действительные значения для traceback_type — ‘full’, ‘part’ и ‘no’.
-
-maix-struct-return -
Возвратить все структуры в памяти (как указано в спецификации AIX ABI).
-
-msvr4-struct-return -
Возвращать структуры размером меньше 8 байт в регистрах (как указано в спецификации SVR4 ABI).
-
-mabi=abi-type -
Расширить текущую ABI определённым расширением или удалить такое расширение. Допустимые значения: ‘altivec’, ‘no-altivec’, ‘ibmlongdouble’, ‘ieeelongdouble’, ‘elfv1’, ‘elfv2’, и для AIX: ‘vec-extabi’, ‘vec-default’.
-
-mabi=ibmlongdouble -
Изменить текущую ABI на использование IBM 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 (big-endian) не поддерживают встроенные вызовы PLT.
В системах Darwin/PPC,
#pragma longcallгенерируетjbsr callee, L42, плюс остров перехода (код мостика). Два адреса целевых систем представляют вызываемую функцию и остров перехода. Компоновщик Darwin/PPC предпочитает первый адрес и генерируетbl callee, если инструкция PPCblнепосредственно достигает вызываемой функции; в противном случае компоновщик генерирует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 единиц последнего разряда (т.е. обратная величина 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иmemmove. --param rs6000-vect-unroll-limit=-
Векторизатор проверит информацию о целевой системе, чтобы определить, будет ли выгодно развернуть основной векторизованный цикл и на сколько. Этот параметр устанавливает верхнюю границу того, насколько векторизатор будет развертывать основной цикл. Значение по умолчанию равно четырем.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/RS_002f6000-and-PowerPC-Options.html