3.20.42 Параметры IBM RS/6000 и PowerPC
Эти параметры «-m» определены для IBM RS/6000 и PowerPC:
-
-mpowerpc-gpopt -mno-powerpc-gpopt-mpowerpc-gfxopt-mno-powerpc-gfxopt-mpowerpc64-mno-powerpc64-mmfcrf-mno-mfcrf-mpopcntb-mno-popcntb-mpopcntd-mno-popcntd-mfprnd-mno-fprnd-mcmpb-mno-cmpb-mhard-dfp-mno-hard-dfp-
Эти параметры используются для указания инструкций, доступных на используемом процессоре. Значение этих параметров по умолчанию определяется при настройке GCC. Указание -mcpu=cpu_type переопределяет значения этих параметров. Рекомендуется использовать параметр -mcpu=cpu_type, а не перечисленные выше параметры.
Указание -mpowerpc-gpopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC из группы общего назначения, включая инструкцию вычисления квадратного корня с плавающей точкой. Указание -mpowerpc-gfxopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC из графической группы, включая инструкцию выбора значения с плавающей точкой.
Параметр -mmfcrf позволяет GCC генерировать инструкцию перемещения из поля регистра условий, реализованную в процессоре POWER4 и других процессорах, поддерживающих архитектуру PowerPC V2.01. Параметр -mpopcntb позволяет GCC генерировать инструкции подсчёта установленных битов и оценки обратного значения числа с плавающей точкой двойной точности, реализованные в процессоре 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’, ‘power11’, ‘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. Для -mtune используются те же значения cpu_type, что и для -mcpu. Если указаны оба параметра, сгенерированный код использует архитектуру и регистры, заданные параметром -mcpu, но параметры планирования, заданные параметром -mtune.
-
-mcmodel=small -
Создать код PowerPC64 для малой модели: TOC ограничивается 64 КБ.
-
-mcmodel=medium -
Создать код PowerPC64 для средней модели: общий размер TOC и других статических данных может достигать 4 ГБ. Это значение по умолчанию для 64-разрядного Linux.
-
-mcmodel=large -
Создать код PowerPC64 для большой модели: размер TOC может достигать 4 ГБ. Размер других данных и кода ограничивается только 64-разрядным адресным пространством.
-
-maltivec -mno-altivec-
Создать код, который использует (не использует) инструкции AltiVec, а также включить использование встроенных функций, обеспечивающих более непосредственный доступ к набору инструкций AltiVec. Возможно, потребуется также задать -mabi=altivec, чтобы дополнить текущий ABI расширениями ABI AltiVec.
При использовании -maltivec порядок элементов для интринсиков AltiVec, таких как
vec_splat,vec_extractиvec_insert, соответствует порядку элементов массива с учётом порядка байтов целевой платформы. То есть элемент с индексом ноль обозначает крайний левый элемент в векторном регистре при работе на платформе с прямым порядком байтов и крайний правый элемент в векторном регистре при работе на платформе с обратным порядком байтов. -
-mvrsave -mno-vrsave-
Генерировать инструкции VRSAVE при создании кода AltiVec.
-
-msecure-plt -
Создать код, позволяющий
ldиld.soсобирать исполняемые файлы и разделяемые библиотеки с неисполняемыми секциями.pltи.got. Это параметр ABI SYSV для 32-разрядной PowerPC. -
-mbss-plt -
Создать код, использующий секцию BSS
.plt, которую заполняетld.so, и требующий секций.pltи.got, которые должны быть одновременно доступны для записи и исполнения. Это параметр ABI SYSV для 32-разрядной PowerPC. -
-msplit-patch-nops -
При добавлении NOP-инструкций в патчируемую область с помощью параметра -fpatchable-function-entry размещать NOP-инструкции «до» перед глобальной точкой входа, а NOP-инструкции «после» — после локальной точки входа. Если генерируется глобальная точка входа, последовательность NOP-инструкций при этом не будет непрерывной. Без этого параметра NOP-инструкции размещаются непосредственно перед локальной точкой входа и после неё: они образуют непрерывную последовательность, но глобальная и локальная точки входа оказываются дальше друг от друга. Если генерируется только одна точка входа, этот параметр не действует.
-
-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, и отключён в остальных системах.
Если в 64-разрядной системе используется набор инструкций ISA 3.0 (-mcpu=power9), поддержка чисел с плавающей точкой IEEE шириной 128 бит также включает генерацию соответствующих инструкций ISA 3.0. В противном случае, если генерация инструкций 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 запрещает GCC помещать в TOC константы с плавающей точкой, а -mno-sum-in-toc заставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения, вместо того чтобы помещать эту сумму в TOC. Можно указать один или оба этих параметра. Каждый из них позволяет сэкономить место в TOC за счёт незначительного замедления и увеличения размера кода GCC.
Если места в TOC всё ещё не хватает даже при указании обоих этих параметров, задайте вместо них -mminimal-toc. Этот параметр заставляет GCC создавать только одну запись TOC для каждого файла. При его использовании GCC создаёт более медленный и объёмный код, который, однако, использует очень мало места в TOC. Этот параметр можно применять только к файлам, содержащим код, который выполняется нечасто.
-
-maix64 -maix32-
Включить 64-разрядный ABI и соглашение о вызовах AIX: 64-разрядные указатели, 64-разрядный тип
longи необходимую для их поддержки инфраструктуру. Указание -maix64 подразумевает -mpowerpc64, а -maix32 отключает 64-разрядный ABI и подразумевает -mno-powerpc64. По умолчанию GCC использует -maix32. -
-mxl-compat -mno-xl-compat-
Создать код, который точнее соответствует семантике компилятора IBM XL при использовании ABI, совместимого с AIX. Передавать аргументы с плавающей точкой прототипированным функциям в стеке за областью сохранения регистров (RSA) в дополнение к регистрам FPR для аргументов. Не предполагать, что старшая часть числа double в значении long double шириной 128 бит корректно округлена при сравнении значений и преобразовании в double. Использовать имена символов XL для подпрограмм поддержки long double.
Соглашение о вызовах AIX было расширено, хотя изначально это не было задокументировано, для обработки редкого случая K&R C, когда вызывается функция, принимающая адрес своих аргументов, с меньшим числом аргументов, чем объявлено. Компиляторы IBM XL при компиляции подпрограммы без оптимизации обращаются к аргументам с плавающей точкой, не помещающимся в RSA, через стек. Поскольку постоянное сохранение аргументов с плавающей точкой в стеке неэффективно и требуется редко, этот параметр по умолчанию отключён; он необходим только при вызове подпрограмм, скомпилированных компиляторами IBM XL без оптимизации.
-
-mpe -
Поддерживать параллельную среду (PE) IBM RS/6000 SP. Связать приложение, использующее передачу сообщений, со специальным кодом запуска, чтобы приложение могло выполняться. В системе должна быть установлена PE в стандартном расположении (/usr/lpp/ppe.poe/) либо файл specs необходимо переопределить с помощью параметра -specs=, указав подходящий путь к каталогу. Параллельная среда не поддерживает потоки, поэтому параметры -mpe и -pthread несовместимы.
-
-malign-natural -malign-power-
В AIX, 32-разрядной Darwin и 64-разрядной PowerPC GNU/Linux параметр -malign-natural переопределяет заданное ABI выравнивание типов большего размера, например чисел double с плавающей точкой, по естественной границе, определяемой размером типа. Параметр -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, например при последовательном обходе больших массивов, пересекающих границу 16M. По умолчанию этот параметр включён для целевых процессоров Power6 и отключён в остальных случаях.
-
-mfused-madd -mno-fused-madd-
Создать код, использующий (не использующий) инструкции умножения с плавающей точкой и накопления. Эти инструкции генерируются по умолчанию при использовании аппаратной обработки чисел с плавающей точкой. Зависимый от машины параметр -mfused-madd теперь преобразуется в независимый от машины параметр -ffp-contract=fast, а -mno-fused-madd — в -ffp-contract=off.
-
-mmulhw -mno-mulhw-
Создать код, использующий (не использующий) инструкции умножения половинных слов и умножения с накоплением на процессорах IBM 405, 440, 464 и 476. При создании кода для этих процессоров данные инструкции генерируются по умолчанию.
-
-mdlmzb -mno-dlmzb-
Создать код, использующий (не использующий) инструкцию поиска строки ‘dlmzb’ на процессорах IBM 405, 440, 464 и 476. При создании кода для этих процессоров эта инструкция генерируется по умолчанию.
-
-mno-bit-align -mbit-align-
В System V.4 и встроенных системах PowerPC не (да) выравнивать структуры и объединения, содержащие битовые поля, по базовому типу битового поля.
Например, по умолчанию структура, содержащая только 8
unsignedбитовых полей длиной 1, выравнивается по границе 4 байт и имеет размер 4 байта. При использовании -mno-bit-align структура выравнивается по границе 1 байта, а её размер составляет 1 байт. -
-mno-strict-align -mstrict-align-
В System V.4 и встроенных системах PowerPC не (да) предполагать, что система обрабатывает невыровненные обращения к памяти.
-
-mrelocatable -mno-relocatable-
Создать код, позволяющий (не позволяющий) перемещать статический исполняемый файл по другому адресу во время выполнения. Загрузчик простой встроенной системы PowerPC должен переместить всё содержимое
.got2и местоположения размером 4 байта, перечисленные в секции.fixup— таблице 32-разрядных адресов, создаваемой этим параметром. Для этого все объединяемые объекты необходимо скомпилировать с параметром -mrelocatable или -mrelocatable-lib. Код, созданный с -mrelocatable, выравнивает стек по границе 8 байт. -
-mrelocatable-lib -mno-relocatable-lib-
Как и -mrelocatable, параметр -mrelocatable-lib создаёт секцию
.fixup, позволяющую перемещать статические исполняемые файлы во время выполнения, но не использует уменьшенное выравнивание стека, применяемое параметром -mrelocatable. Объекты, скомпилированные с -mrelocatable-lib, можно связывать с объектами, скомпилированными с любым сочетанием параметров -mrelocatable. -
-mno-toc -mtoc-
В System V.4 и встроенных системах PowerPC не (да) предполагать, что регистр 2 содержит указатель на глобальную область, содержащую адреса, используемые в программе.
-
-mlittle -mlittle-endian-
В System V.4 и встроенных системах PowerPC компилировать код для процессора в режиме обратного порядка байтов. Параметр -mlittle-endian эквивалентен параметру -mlittle.
-
-mbig -mbig-endian-
В System V.4 и встроенных системах PowerPC компилировать код для процессора в режиме прямого порядка байтов. Параметр -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 компилировать код с использованием соглашений о вызовах, соответствующих проекту дополнения для процессора PowerPC к двоичному интерфейсу приложений System V, опубликованному в марте 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 -
Возвращать все структуры в памяти (согласно ABI AIX).
-
-msvr4-struct-return -
Возвращать структуры размером менее 8 байт в регистрах (согласно ABI SVR4).
-
-mabi=abi-type -
Расширить текущий ABI определённым расширением или удалить такое расширение. Допустимые значения: ‘altivec’, ‘no-altivec’, ‘ibmlongdouble’, ‘ieeelongdouble’, ‘elfv1’, ‘elfv2’, а для AIX — ‘vec-extabi’, ‘vec-default’.
-
-mabi=ibmlongdouble -
Изменить текущий ABI, чтобы использовать long double с расширенной точностью IBM. Это может не работать, если в системе по умолчанию используется long double с расширенной точностью IEEE. При изменении типа long double с расширенной точности IEEE компилятор выдаёт предупреждение, если не указан параметр -Wno-psabi (см. Параметры запроса или подавления предупреждений). Требуется включить -mlong-double-128.
-
-mabi=ieeelongdouble -
Изменить текущий ABI, чтобы использовать long double с расширенной точностью IEEE. Это может не работать, если в системе по умолчанию используется long double с расширенной точностью IBM. При изменении типа long double с расширенной точностью IBM компилятор выдаёт предупреждение, если не указан параметр -Wno-psabi (см. Параметры запроса или подавления предупреждений). Требуется включить -mlong-double-128.
-
-mabi=elfv1 -
Изменить текущий ABI, чтобы использовать ABI ELFv1. Это ABI по умолчанию для 64-разрядной PowerPC Linux с прямым порядком байтов. Переопределение ABI по умолчанию требует специальной поддержки системы и, вероятно, приведёт к серьёзным сбоям.
-
-mabi=elfv2
-
Изменить текущий ABI на ABI ELFv2. Это ABI по умолчанию для 64-разрядных систем Linux на PowerPC с прямым порядком байтов. Переопределение 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 байт, из
mainвызывается функция__eabiдля настройки среды 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 байт, но превышающим предел для встраиваемых сравнений блоков без циклов. Если длина блока не является константой, перед вызовом
memcmpдля сравнения оставшейся части блока сравнивается не более num байт. Значение по умолчанию зависит от целевой платформы. -
-mstring-compare-inline-limit=num -
Сравнивать встроенным кодом не более num байт строки. Если к концу встроенного сравнения различие или конец строки не обнаружены, оставшуюся часть сравнения выполняет вызов
strcmpилиstrncmp. Значение по умолчанию — 64 байта. -
-G num -
Во встроенных системах PowerPC помещать глобальные и статические элементы размером не более num байт в секции малых данных или BSS, а не в обычные секции данных или BSS. По умолчанию num равно 8. Параметр -G num также передаётся компоновщику. Все модули следует компилировать с одинаковым значением -G num.
-
-mregnames -mno-regnames-
В системах System V.4 и во встроенных системах PowerPC выводить (не выводить) имена регистров в символьном виде в выходных данных на языке ассемблера.
-
-mlongcall -mno-longcall-
По умолчанию считать, что все вызовы находятся далеко, поэтому требуется более длинная и затратная последовательность вызова. Это необходимо для вызовов, расположенных более чем в 32 мегабайтах (33 554 432 байтах) от текущего адреса. Короткий вызов генерируется, если компилятору известно, что вызов не может находиться так далеко. Это поведение можно переопределить с помощью атрибута функции
shortcallили параметра#pragma longcall(0).Некоторые компоновщики могут обнаруживать вызовы за пределами диапазона и динамически генерировать вспомогательный код. В таких системах длинные вызовы не нужны и приводят к замедлению кода. На момент написания этого текста это умеет компоновщик AIX, а также компоновщик GNU для PowerPC/64. Планируется добавить эту возможность и в компоновщик GNU для 32-разрядных систем PowerPC.
В системах PowerPC64 ELFv2 и 32-разрядных системах PowerPC с новыми версиями компоновщика GNU GCC может генерировать длинные вызовы с помощью встроенной последовательности вызова PLT (см. -mpltseq). PowerPC с параметром -mbss-plt и PowerPC64 ELFv1 (с прямым порядком байтов) не поддерживают встроенные вызовы PLT.
В системах Darwin/PPC параметр
#pragma longcallгенерируетjbsr callee, L42и островок перехода (вспомогательный код). Два целевых адреса обозначают вызываемую функцию и островок перехода. Компоновщик Darwin/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. Объектные файлы PowerPC с перемещениями, созданные с помощью -mpltseq и -mbss-plt, нельзя компоновывать вместе.
-
-mtls-markers -mno-tls-markers-
Помечать (не помечать) вызовы
__tls_get_addrперемещением, указывающим аргумент функции. Перемещение позволяет компоновщику надёжно сопоставлять вызов функции с инструкциями подготовки аргумента для оптимизации TLS, что, в свою очередь, позволяет GCC эффективнее планировать последовательность. -
-mrecip -mno-recip-
Этот параметр включает использование инструкций оценки обратного значения и оценки обратного квадратного корня с дополнительными итерациями Ньютона — Рафсона для повышения точности вместо деления или вычисления квадратного корня и деления для аргументов с плавающей точкой. При использовании -mrecip следует также указывать параметр -ffast-math (или как минимум -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math и -fno-trapping-math). Обратите внимание: хотя пропускная способность последовательности обычно выше, чем у инструкции без использования обратного значения, точность последовательности для обратного квадратного корня может снизиться на величину до 2 единиц последнего разряда (ulp) (то есть обратное значение от 1,0 будет равно 0,99999994).
-
-mrecip=opt -
Этот параметр определяет, какие инструкции оценки обратного значения можно использовать. opt — это разделённый запятыми список параметров; перед параметром может стоять
!, инвертирующий его действие:- ‘all’
-
Включить все инструкции оценки.
- ‘default’
-
Включить инструкции по умолчанию; эквивалентно -mrecip.
- ‘none’
-
Отключить все инструкции оценки; эквивалентно -mno-recip.
- ‘div’
-
Включить инструкции аппроксимации обратного значения для одинарной и двойной точности.
- ‘divf’
-
Включить инструкции аппроксимации обратного значения для одинарной точности.
- ‘divd’
-
Включить инструкции аппроксимации обратного значения для двойной точности.
- ‘rsqrt’
-
Включить инструкции аппроксимации обратного квадратного корня для одинарной и двойной точности.
- ‘rsqrtf’
-
Включить инструкции аппроксимации обратного квадратного корня для одинарной точности.
- ‘rsqrtd’
-
Включить инструкции аппроксимации обратного квадратного корня для двойной точности.
Например, -mrecip=all,!rsqrtd включает все инструкции оценки обратного значения, кроме инструкций
FRSQRTE,XSRSQRTEDPиXVRSQRTEDP, предназначенных для вычисления обратного квадратного корня с двойной точностью. -
-mrecip-precision -mno-recip-precision-
Считать (не считать), что инструкции оценки обратного значения обеспечивают более точные результаты, чем требует ABI PowerPC. Выбор -mcpu=power6, -mcpu=power7 или -mcpu=power8 автоматически включает -mrecip-precision. По умолчанию инструкции оценки квадратного корня с двойной точностью не генерируются для процессоров с низкой точностью, поскольку после трёх итераций результат таких оценок не сходится.
-
-mveclibabi=type -
Задаёт тип ABI для векторизации встроенных функций с помощью внешней библиотеки. В настоящее время поддерживается только тип «mass», указывающий на использование библиотек IBM Mathematical Acceleration Subsystem (MASS) для векторизации встроенных функций с помощью внешних библиотек. При генерации кода для power7 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. Также необходимо включить параметры -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, где указатель на функцию указывает на трёхсловный дескриптор, содержащий адрес функции, значение 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-
Генерировать код защиты стека с использованием canary по адресу guard. Поддерживаются расположения «global» для глобального canary и «tls» для canary в блоке TLS, отдельного для каждого потока (по умолчанию в GNU libc версии 2.4 и новее).
При выборе последнего варианта параметры -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового при чтении canary и по какому смещению от этого базового регистра его считывать. По умолчанию используются значения, заданные соответствующим ABI.
-
-mpcrel -mno-pcrel-
Генерировать (не генерировать) адресацию относительно счётчика команд. Для параметра -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. --param rs6000-vect-unroll-limit=-
Векторизатор проверит сведения о целевой платформе, чтобы определить, будет ли полезно разворачивать основной векторизованный цикл и насколько. Этот параметр задаёт верхнюю границу степени развёртывания основного цикла векторизатором. Значение по умолчанию — четыре.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/RS_002f6000-and-PowerPC-Options.html