3.19.45 Опции 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 генерировать инструкцию подсчета единиц и оценки обратной величины числа с двойной точностью FP, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчета единиц, реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления числа с плавающей запятой до целого числа, реализованные на процессоре 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-битной архитектуры PowerPC с большим порядком байтов и 64-битной архитектуры PowerPC с малым порядком байтов, соответственно, предполагая подходящую общую модель процессора для целей планирования.
Указание ‘native’ в качестве типа процессора определяет и выбирает параметр архитектуры, соответствующий процессору хост-системы, выполняющей компиляцию. -mcpu=native не имеет эффекта, если GCC не распознаёт процессор.
Другие параметры задают конкретный процессор. Сгенерированный код при этих параметрах лучше всего работает на этом процессоре и может вообще не работать на других.
Параметры -mcpu автоматически включают или отключают следующие параметры:
-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt -mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -mpower8-vector -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware -mprefixed -mpcrel -mmma -mrop-protect
Конкретные параметры, заданные для конкретного процессора, могут различаться между версиями компилятора в зависимости от того, какое значение кажется оптимальным для данного процессора; это необязательно отражает возможности реального оборудования. Если вы хотите установить отдельный параметр в определенное значение, вы можете указать его после параметра -mcpu, например -mcpu=970 -mno-altivec.
В AIX параметры -maltivec и -mpowerpc64 в настоящее время не включаются или отключаются параметром -mcpu, поскольку AIX не имеет полной поддержки этих параметров. Вы всё равно можете включить или отключить их индивидуально, если уверены, что это сработает в вашей среде.
-mtune=cpu_type-
Установите параметры планирования инструкций для типа машины cpu_type, но не устанавливайте тип архитектуры или использование регистров, как это делает -mcpu=cpu_type. Те же значения для cpu_type используются для -mtune, что и для -mcpu. Если оба параметра указаны, сгенерированный код использует архитектуру и регистры, установленные параметром -mcpu, но параметры планирования, установленные параметром -mtune.
-mcmodel=small-
Генерирует код PowerPC64 для модели small: размер TOC ограничен 64 КБ.
-mcmodel=medium-
Генерирует код PowerPC64 для модели medium: размер TOC и других статических данных может достигать 4 ГБ. Это значение по умолчанию для 64-битного Linux.
-mcmodel=large-
Генерирует код PowerPC64 для модели large: размер 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-
Генерирует код, использующий (не использующий) векторные/скалярные (VSX) инструкции, а также включает использование встроенных функций, которые позволяют получить более прямой доступ к набору инструкций VSX.
-mcrypto-mno-crypto-
Включает (отключает) использование встроенных функций, которые обеспечивают прямой доступ к криптографическим инструкциям, добавленным в версию 2.07 ISA PowerPC.
-mhtm-mno-htm-
Включает (выключает) использование встроенных функций, которые обеспечивают прямой доступ к инструкциям памяти с аппаратной транзакционной памятью (HTM), добавленным в версию 2.07 ISA PowerPC.
-mpower8-fusion-mno-power8-fusion-
Генерирует код, сохраняющий (не сохраняющий) некоторые целочисленные операции рядом, чтобы инструкции могли быть объединены на процессорах power8 и более поздних.
-mpower8-vector-mno-power8-vector-
Генерирует код, использующий (не использующий) векторные и скалярные инструкции, добавленные в версию 2.07 ISA PowerPC. Также включает использование встроенных функций, позволяющих получить более прямой доступ к векторным инструкциям.
-mquad-memory-mno-quad-memory-
Генерирует код, использующий (не использующий) неатомарные инструкции памяти с четырьмя словами. Параметр -mquad-memory требует использования 64-битного режима.
-mquad-memory-atomic-mno-quad-memory-atomic-
Генерирует код, использующий (не использующий) атомарные инструкции памяти с четырьмя словами. Параметр -mquad-memory-atomic требует использования 64-битного режима.
-mfloat128-mno-float128-
Включает/выключает ключевое слово __float128 для IEEE 128-битной плавающей точки и использует либо программную эмуляцию для IEEE 128-битной плавающей точки, либо аппаратные инструкции.
Для использования поддержки IEEE 128-битной плавающей точки должен быть включен набор инструкций VSX (-mvsx). Поддержка IEEE 128-битной плавающей точки поддерживается только в Linux.
Значение по умолчанию для -mfloat128 включено в системах PowerPC Linux, использующих набор инструкций VSX, и выключено в других системах.
Если вы используете набор инструкций ISA 3.0 (-mpower9-vector или -mcpu=power9) на 64-битной системе, поддержка IEEE 128-битной плавающей точки также включит генерацию инструкций 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 (таблицы содержания), которая создается для каждого исполняемого файла. Опция -mfull-toc выбрана по умолчанию. В этом случае GCC выделяет по крайней мере одну запись TOC для каждой уникальной ссылки на переменную, не являющуюся автоматической, в вашей программе. GCC также помещает константы с плавающей запятой в TOC. Однако в TOC доступно только 16 384 записи.
Если вы получаете сообщение об ошибке компоновщика, говорящее о том, что вы превысили доступное пространство TOC, вы можете уменьшить используемое пространство TOC с помощью опций -mno-fp-in-toc и -mno-sum-in-toc. -mno-fp-in-toc предотвращает помещение констант с плавающей запятой в TOC, а -mno-sum-in-toc заставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения вместо помещения этой суммы в TOC. Вы можете указать одну или обе эти опции. Каждая из них заставляет GCC производить код, который очень немного медленнее и больше, за счет экономии пространства TOC.
Если вы по-прежнему не хватает места в TOC, даже когда вы указываете обе эти опции, укажите -mminimal-toc вместо этого. Эта опция заставляет GCC создавать только одну запись TOC для каждого файла. При указании этой опции GCC производит код, который медленнее и больше, но который использует крайне мало места в TOC. Вы можете использовать эту опцию только в файлах, содержащих код, который выполняется реже.
-maix64-maix32-
Включить 64-битную ABI и соглашение о вызовах AIX: 64-битные указатели, 64-битный
longтип и инфраструктура, необходимая для их поддержки. Указание -maix64 подразумевает -mpowerpc64, а -maix32 отключает 64-битную ABI и подразумевает -mno-powerpc64. GCC по умолчанию имеет значение -maix32. -mxl-compat-mno-xl-compat-
Производить код, который более точно соответствует семантике компилятора IBM XL при использовании совместимой с AIX ABI. Передавать аргументы с плавающей запятой в прототипированные функции за пределами области сохранения регистров (RSA) в стеке в дополнение к аргументам FPR. Не предполагайте, что наиболее значимый двойной в 128-битном значении long double должным образом округляется при сравнении значений и преобразовании в двойной. Использовать имена символов XL для поддерживающих процедур long double.
Соглашение о вызовах AIX было расширено, но первоначально не документировано для обработки редкого случая C K&R вызова функции, которая принимает адрес своих аргументов с меньшим количеством аргументов, чем объявлено. Компиляторы 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’, и для AIX: ‘vec-extabi’, ‘vec-default’.
-mabi=ibmlongdouble-
Изменить текущий ABI для использования IBM расширенной точности long double. Вероятнее всего, это не сработает, если ваша система по умолчанию использует IEEE расширенной точности long double. Если вы измените тип long double с IEEE расширенной точности, компилятор выдаст предупреждение, если вы не используете параметр -Wno-psabi. Требуется включить -mlong-double-128.
-mabi=ieeelongdouble-
Изменить текущий ABI для использования IEEE расширенной точности long double. Вероятнее всего, это не сработает, если ваша система по умолчанию использует IBM расширенной точности long double. Если вы измените тип long double с IBM расширенной точности, компилятор выдаст предупреждение, если вы не используете параметр -Wno-psabi. Требуется включить -mlong-double-128.
-mabi=elfv1-
Изменить текущий ABI для использования ELFv1 ABI. Это ABI по умолчанию для 64-битного Linux на PowerPC с big-endian архитектурой. Переопределение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится плачевными результатами.
-mabi=elfv2-
Изменить текущий ABI для использования ELFv2 ABI. Это ABI по умолчанию для 64-битного Linux на PowerPC с little-endian архитектурой. Переопределение 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 байт, в разделы small data или BSS, а не в обычные разделы data или 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 может игнорировать все спецификации longcall, когда компоновщик известен как генерирующий склейку.
-mpltseq-mno-pltseq-
Реализовать (-fno-plt и длинные вызовы с использованием встроенной последовательности вызовов PLT, поддерживающей ленивую компоновку и длинные вызовы функций в динамически загружаемых общих библиотеках). Встроенные вызовы PLT поддерживаются только в системах PowerPC64 ELFv2 и 32-битных системах PowerPC с более новыми компоновщиками GNU, и они включены по умолчанию, если поддержка обнаружена при конфигурировании GCC, и, в случае 32-битного PowerPC, если GCC сконфигурирован с --enable-secureplt. Код -mpltseq и переносимые объекты 32-битного PowerPC -mbss-plt не могут быть связаны вместе.
-mtls-markers-mno-tls-markers-
Помечать (не помечать) вызовы
__tls_get_addrметкой переназначения, указывающей аргумент функции. Переназначение позволяет компоновщику надёжно связать вызов функции с инструкциями подготовки аргументов для оптимизации TLS, что, в свою очередь, позволяет GCC лучше планировать последовательность. -mrecip-mno-recip-
Этот параметр включает использование инструкций оценки обратной величины и оценки обратной величины квадратного корня с дополнительными шагами Ньютона-Рафсона для повышения точности вместо деления или извлечения квадратного корня и деления для аргументов с плавающей точкой. При использовании -mrecip (или, по крайней мере, -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math и -fno-trapping-math) следует использовать параметр -ffast-math. Обратите внимание, что, хотя пропускная способность последовательности обычно выше, чем пропускная способность инструкции без обратной величины, точность последовательности может быть уменьшена до 2 ulp (т.е. обратная величина 1,0 равна 0,99999994) для обратных величин квадратных корней.
-mrecip=opt-
Этот параметр управляет инструкциями оценки обратной величины, которые могут быть использованы. opt — список параметров, разделённых запятыми, которые могут быть предварены
!для инвертирования параметра:- ‘all’
-
Включить все инструкции оценки.
- ‘default’
-
Включить инструкции по умолчанию, эквивалентно -mrecip.
- ‘none’
-
Выключить все инструкции оценки, эквивалентно -mno-recip.
- ‘div’
-
Включить инструкции приближения обратной величины для одинарной и двойной точности.
- ‘divf’
-
Включить инструкции приближения обратной величины одинарной точности.
- ‘divd’
-
Включить инструкции приближения обратной величины двойной точности.
- ‘rsqrt’
-
Включить инструкции приближения обратной величины квадратного корня для одинарной и двойной точности.
- ‘rsqrtf’
-
Включить инструкции приближения обратной величины квадратного корня одинарной точности.
- ‘rsqrtd’
-
Включить инструкции приближения обратной величины квадратного корня двойной точности.
Например, -mrecip=all,!rsqrtd включает все инструкции оценки обратной величины, за исключением
FRSQRTE,XSRSQRTEDP, иXVRSQRTEDPинструкций, которые обрабатывают вычисления обратной величины квадратного корня двойной точности. -mrecip-precision-mno-recip-precision-
Предполагать (не предполагать), что инструкции оценки обратной величины обеспечивают более точные оценки, чем предписывает ABI PowerPC. Выбор -mcpu=power6, -mcpu=power7 или -mcpu=power8 автоматически выбирает -mrecip-precision. Инструкции оценки квадратного корня двойной точности по умолчанию не генерируются на машинах с низкой точностью, так как они не обеспечивают оценку, которая сходится после трёх шагов.
-mveclibabi=type-
Указывает тип ABI для векторизации встроенных функций с использованием внешней библиотеки. В настоящее время поддерживается только тип ‘mass’, который указывает на использование библиотек IBM Mathematical Acceleration Subsystem (MASS) для векторизации встроенных функций с использованием внешних библиотек. В настоящее время GCC генерирует вызовы
acosd2,acosf4,acoshd2,acoshf4,asind2,asinf4,asinhd2,asinhf4,atan2d2,atan2f4,atand2,atanf4,atanhd2,atanhf4,cbrtd2,cbrtf4,cosd2,cosf4,coshd2,coshf4,erfcd2,erfcf4,erfd2,erff4,exp2d2,exp2f4,expd2,expf4,expm1d2,expm1f4,hypotd2,hypotf4,lgammad2,lgammaf4,log10d2,log10f4,log1pd2,log1pf4,log2d2,log2f4,logd2,logf4,powd2,powf4,sind2,sinf4,sinhd2,sinhf4,sqrtd2,sqrtf4,tand2,tanf4,tanhd2, иtanhf4при генерации кода для power7. Также должны быть включены -ftree-vectorize и -funsafe-math-optimizations. Библиотеки MASS должны быть указаны при компоновке. -mfriz-mno-friz-
Генерировать (не генерировать) инструкцию
frizпри использовании параметра -funsafe-math-optimizations для оптимизации округления значений с плавающей точкой до 64-битного целого и обратно в число с плавающей точкой. Инструкцияfrizвозвращает не то же самое значение, если число с плавающей точкой слишком велико, чтобы уместиться в целое число. -mpointers-to-nested-functions-mno-pointers-to-nested-functions
-
Генерировать (не генерировать) код для загрузки регистра статической цепочки (
r11) при вызове через указатель на системах AIX и 64-битных Linux, где указатель функции указывает на 3-словный дескриптор, содержащий адрес функции, значение TOC, которое должно быть загружено в регистрr2, и значение статической цепочки, которое должно быть загружено в регистрr11. Флаг -mpointers-to-nested-functions включён по умолчанию. Вы не можете вызывать через указатели на вложенные функции или указатели на функции, скомпилированные на других языках, использующих статическую цепочку, если вы используете -mno-pointers-to-nested-functions. -msave-toc-indirect-mno-save-toc-indirect-
Генерировать (не генерировать) код для сохранения значения TOC в зарезервированном месте стека в прологе функции, если функция вызывает через указатель на системах AIX и 64-битных Linux. Если значение TOC не сохраняется в прологе, оно сохраняется непосредственно перед вызовом через указатель. Флаг -mno-save-toc-indirect используется по умолчанию.
-mcompat-align-parm-mno-compat-align-parm-
Генерировать (не генерировать) код для передачи параметров структуры с максимальным выравниванием 64 бит для совместимости со старыми версиями GCC.
Старые версии GCC (до 4.9.0) неправильно не выравнивали параметр структуры на 128-битную границу, когда эта структура содержала член, требующий 128-битного выравнивания. Это исправлено в более новых версиях GCC. Этот флаг может использоваться для генерации кода, совместимого с функциями, скомпилированными с более старыми версиями GCC.
Флаг -mno-compat-align-parm используется по умолчанию.
-mstack-protector-guard=guard-mstack-protector-guard-reg=reg-mstack-protector-guard-offset=offset-mstack-protector-guard-symbol=symbol-
Генерировать код защиты стека с использованием кантри в guard. Поддерживаемые места: ‘global’ для глобального кантри или ‘tls’ для кантри на поток в блоке TLS (по умолчанию с GNU libc версии 2.4 или более поздней).
В последнем случае флаги -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового регистра для чтения кантри, и с каким смещением от этого базового регистра. По умолчанию это задается соответствующим ABI. -mstack-protector-guard-symbol=symbol переопределяет смещение ссылкой на символ кантри в блоке TLS.
-mpcrel-mno-pcrel-
Генерировать (не генерировать) адресацию pc-относительных. Флаг -mpcrel требует включения средних кодовых моделей (-mcmodel=medium) и адресации с префиксом (-mprefixed).
-mprefixed-mno-prefixed-
Генерировать (не генерировать) режимы адресации с использованием префиксных инструкций загрузки и сохранения. Флаг -mprefixed требует включения флага -mcpu=power10 (или более поздней версии).
-mmma-mno-mma-
Генерировать (не генерировать) инструкции MMA. Флаг -mma требует включения флага -mcpu=power10 (или более поздней версии).
-mrop-protect-mno-rop-protect-
Генерировать (не генерировать) инструкции защиты ROP, если целевой процессор их поддерживает. В настоящее время этот флаг отключает оптимизацию shrink-wrap (-fshrink-wrap).
-mprivileged-mno-privileged-
Генерировать (не генерировать) код, который будет выполняться в привилегированном режиме.
-mblock-ops-unaligned-vsx-mno-block-ops-unaligned-vsx-
Генерировать (не генерировать) невыровненные загрузки и сохранения vsx для встроенной обработки расширений
memcpyиmemmove.
Далее: Параметры RX, Предыдущее: Параметры RL78, Выше: Параметры подмодели [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/RS_002f6000-and-PowerPC-Options.html