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