3.17.38 Параметры IBM RS/6000 и PowerPC
Эти параметры определены для 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 генерировать инструкции popcount и оценки обратной величины с двойной точностью FP, реализованные на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр-mpopcntdпозволяет GCC генерировать инструкцию popcount, реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр-mfprndпозволяет GCC генерировать инструкции округления FP до целого, реализованные на процессоре POWER5+ и других процессорах, поддерживающих архитектуру PowerPC V2.03. Параметр-mcmpbпозволяет GCC генерировать инструкцию сравнения байтов, реализованную на процессоре POWER6 и других процессорах, поддерживающих архитектуру PowerPC V2.05. Параметр-mmfpgprпозволяет GCC генерировать инструкции перемещения FP в/из регистров общего назначения, реализованные на процессоре 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’, ‘powerpc’, ‘powerpc64’, ‘powerpc64le’, и ‘rs64’.-mcpu=powerpc,-mcpu=powerpc64, и-mcpu=powerpc64leуказывают на типы машин архитектуры чисто 32-битного PowerPC (любой порядок байтов), 64-битного большого порядка байтов PowerPC и 64-битного малого порядка байтов PowerPC, с соответствующей общей моделью процессора, предполагаемой для целей планирования.Другие параметры указывают на конкретный процессор. Сгенерированный код с этими параметрами работает лучше на этом процессоре и может вообще не работать на других.
Параметры
-mcpuавтоматически включают или отключают следующие параметры:-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -mhtm -mpower8-fusion -mpower8-vector -mquad-memory -mquad-memory-atomic
Указанные параметры для каждого конкретного процессора варьируются между версиями компилятора, в зависимости от того, какой набор параметров, по-видимому, генерирует оптимальный код для этого процессора; это не обязательно отражает реальные возможности оборудования. Если вы хотите установить отдельный параметр в определенное значение, вы можете указать его после параметра
-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 ограничен 64k.
-mcmodel=medium- Генерировать код PowerPC64 для модели medium: TOC и другие статические данные могут быть до 4 ГБ в общем объёме.
-mcmodel=large- Генерировать код PowerPC64 для модели large: TOC может быть до 4 ГБ. Другие данные и код ограничены только 64-разрядным адресным пространством.
-
-maltivec-mno-altivec - Генерировать код с использованием (без использования) инструкций AltiVec, а также включить использование встроенных функций, которые позволяют более прямой доступ к набору инструкций AltiVec. Возможно, также потребуется установить
-mabi=altivecдля корректировки текущего ABI с улучшениями ABI AltiVec.Когда используется
-maltivec, а не-maltivec=leили-maltivec=be, порядок элементов для Altivec-встроенных функций, таких какvec_splat,vec_extract, иvec_insert, будет соответствовать порядку элементов массива, соответствующему порядку байтов целевой системы. То есть, элемент с номером ноль идентифицирует самый левый элемент в регистре вектора при нацеливании на платформу с большим порядком байтов и идентифицирует самый правый элемент в регистре вектора при нацеливании на платформу с малым порядком байтов. -maltivec=be- Генерировать инструкции Altivec с использованием порядка элементов большого порядка байтов, независимо от того, является ли целевая платформа платформой с большим или малым порядком байтов. Это значение по умолчанию при нацеливании на платформу с большим порядком байтов.
Порядок элементов используется для интерпретации номеров элементов в Altivec-встроенных функциях, таких как
vec_splat,vec_extract, иvec_insert. По умолчанию они соответствуют порядку элементов массива, соответствующему порядку байтов для целевой системы. -maltivec=le- Генерировать инструкции Altivec с использованием порядка элементов малого порядка байтов, независимо от того, является ли целевая платформа платформой с большим или малым порядком байтов. Это значение по умолчанию при нацеливании на платформу с малым порядком байтов. В настоящее время этот параметр игнорируется при нацеливании на платформу с большим порядком байтов.
Порядок элементов используется для интерпретации номеров элементов в Altivec-встроенных функциях, таких как
vec_splat,vec_extract, иvec_insert. По умолчанию они соответствуют порядку элементов массива, соответствующему порядку байтов для целевой системы. -
-mvrsave-mno-vrsave - Генерировать инструкции VRSAVE при генерации кода AltiVec.
-mgen-cell-microcode- Генерировать инструкции микрокода Cell.
-mwarn-cell-microcode- Выводить предупреждение при генерации инструкции микрокода Cell. Примером инструкции микрокода Cell является сдвиг переменной.
-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.
-
-misel=yes/no - Этот переключатель устарел. Используйте
-miselи-mno-iselвместо него. -
-mspe-mno-spe - Этот переключатель включает или отключает генерацию инструкций SIMD SPE.
-
-mpaired-mno-paired - Этот переключатель включает или отключает генерацию инструкций SIMD PAIRED.
-
-mspe=yes/no - Этот параметр устарел. Используйте
-mspeи-mno-speвместо него. -
-mvsx-mno-vsx - Генерировать код, использующий (не использующий) векторные/скалярные (VSX) инструкции, а также включить использование встроенных функций, которые позволяют более прямой доступ к набору инструкций VSX.
-
-mcrypto-mno-crypto
- Включить (отключить) использование встроенных функций, обеспечивающих прямой доступ к криптографическим инструкциям, добавленным в версию 2.07 ISA PowerPC.
-
-mdirect-move-mno-direct-move - Генерировать код, использующий (не использующий) инструкции перемещения данных между регистрами общего назначения и векторами/скалярами (VSX) регистров, добавленные в версии 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-битного режима. -
-mfloat-gprs=yes/single/double/no-mfloat-gprs - Этот переключатель включает или отключает генерацию операций с плавающей запятой над регистрами общего назначения для архитектур, которые их поддерживают.
Аргумент yes или single включает использование операций с плавающей запятой одинарной точности.
Аргумент double включает использование операций с плавающей запятой одинарной и двойной точности.
Аргумент no отключает операции с плавающей запятой над регистрами общего назначения.
Эта опция в настоящее время доступна только на MPC854x.
-
-m32-m64 - Генерировать код для 32-битных или 64-битных сред целей Darwin и SVR4 (включая GNU/Linux). 32-битная среда устанавливает int, long и указатель на 32 бита и генерирует код, который работает на любом варианте PowerPC. 64-битная среда устанавливает int на 32 бита, а long и указатель на 64 бита и генерирует код для PowerPC64, как и для
-mpowerpc64. -
-mfull-toc-mno-fp-in-toc-mno-sum-in-toc-mminimal-toc - Изменить генерацию TOC (Table Of Contents), который создаётся для каждого исполняемого файла. Опция
-mfull-tocвыбрана по умолчанию. В этом случае GCC выделяет по крайней мере одну запись TOC для каждой уникальной ссылки на неавтоматическую переменную в вашей программе. GCC также помещает константы с плавающей запятой в TOC. Однако в TOC доступно только 16 384 записи.Если вы получите сообщение об ошибке компоновщика, говорящее о переполнении доступного пространства TOC, вы можете уменьшить используемое пространство TOC с помощью опций
-mno-fp-in-tocи-mno-sum-in-toc.-mno-fp-in-tocпредотвращает размещение GCC констант с плавающей запятой в TOC, а-mno-sum-in-tocзаставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения вместо помещения этой суммы в TOC. Вы можете указать одну или обе эти опции. Каждая из них заставляет GCC создавать немного более медленный и более большой код за счёт экономии пространства TOC.Если у вас всё ещё не хватает места в TOC, даже когда вы указали обе эти опции, укажите
-mminimal-tocвместо этого. Эта опция заставляет GCC создавать только одну запись TOC для каждого файла. Когда вы укажете эту опцию, GCC создаст код, который медленнее и больше, но использует очень мало пространства TOC. Вы можете использовать эту опцию только для файлов, которые содержат менее часто исполняемый код. -
-maix64-maix32 - Включить 64-битную AIX ABI и правила вызова: 64-битные указатели, 64-битный
longтип и инфраструктура, необходимая для их поддержки. Указание-maix64подразумевает-mpowerpc64, в то время как-maix32отключает 64-битную ABI и подразумевает-mno-powerpc64. GCC по умолчанию использует-maix32. -
-mxl-compat-mno-xl-compat - Создавать код, более точно соответствующий семантике компилятора IBM XL при использовании совместимой с AIX ABI. Передавать аргументы с плавающей запятой прототипированным функциям за пределами области сохранения регистров (RSA) в стеке в дополнение к аргументам FPR. Не предполагать, что наиболее значимый двойной в 128-битном значении long double корректно округлен при сравнении значений и преобразовании в двойной. Использовать имена символов XL для поддержки процедур long double.
Правила вызова AIX были расширены, но первоначально не были задокументированы для обработки необычного случая K&R C вызова функции, которая принимает адрес своих аргументов с меньшим количеством аргументов, чем объявлено. Компиляторы IBM XL обращаются к аргументам с плавающей запятой, которые не помещаются в RSA, из стека, когда подпрограмма компилируется без оптимизации. Поскольку постоянное сохранение аргументов с плавающей запятой в стеке неэффективно и редко необходимо, эта опция по умолчанию не включена и необходима только при вызове подпрограмм, скомпилированных компиляторами IBM XL без оптимизации.
-mpe- Поддержка IBM RS/6000 SP Параллельной среды (PE). Связывать приложение, написанное для использования обмена сообщениями, со специальным стартовым кодом, чтобы приложение могло запускаться. Система должна иметь PE в стандартном расположении (
/usr/lpp/ppe.poe/), или файлspecsдолжен быть переопределён с помощью опции-specs=для указания соответствующего расположения каталога. Параллельная среда не поддерживает потоки, поэтому опция-mpeи опция-pthreadнесовместимы. -
-malign-natural-malign-power - В AIX, 32-битном Darwin и 64-битном PowerPC GNU/Linux опция
-malign-naturalпереопределяет определяемое ABI выравнивание более крупных типов, таких как двойные с плавающей запятой, на границе их естественного размера. Опция-malign-powerинструктирует GCC следовать правилам выравнивания, определённым ABI. GCC по умолчанию использует стандартное выравнивание, определённое в ABI.В 64-битном Darwin естественное выравнивание является значением по умолчанию, и
-malign-powerне поддерживается. -
-msoft-float-mhard-float - Генерировать код, не использующий (использующий) набор регистров с плавающей запятой. Эмуляция программной плавающей запятой предоставляется, если вы используете опцию
-msoft-float, и передаёте эту опцию в GCC при компоновке. -
-msingle-float-mdouble-float - Генерировать код для операций с плавающей запятой одинарной или двойной точности.
-mdouble-floatподразумевает-msingle-float. -msimple-fpu- Не генерировать инструкции
sqrtиdivдля блока аппаратной плавающей запятой. -
-mfpu=name - Указать тип блока плавающей запятой. Допустимые значения для name — ‘
sp_lite’ (эквивалентно-msingle-float -msimple-fpu), ‘dp_lite’ (эквивалентно-mdouble-float -msimple-fpu), ‘sp_full’ (эквивалентно-msingle-float), и ‘dp_full’ (эквивалентно-mdouble-float). -mxilinx-fpu- Выполнять оптимизации для блока плавающей запятой на Xilinx PPC 405/440.
-
-mmultiple-mno-multiple - Генерировать код, использующий (не использующий) инструкции загрузки нескольких слов и инструкции сохранения нескольких слов. Эти инструкции генерируются по умолчанию на системах POWER и не генерируются на системах PowerPC. Не используйте
-mmultipleна системах PowerPC с little-endian, так как эти инструкции не работают, когда процессор находится в little-endian режиме. Исключение составляют PPC740 и PPC750, которые допускают эти инструкции в little-endian режиме. -
-mstring-mno-string - Генерировать код, использующий (не использующий) инструкции загрузки строк и инструкции сохранения строк слов для сохранения нескольких регистров и выполнения небольших перемещений блоков. Эти инструкции генерируются по умолчанию на системах POWER и не генерируются на системах PowerPC. Не используйте
-mstringна системах 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.
-maix-struct-return- Возвращать все структуры в памяти (как указано в AIX ABI).
-msvr4-struct-return- Возвращать структуры размером меньше 8 байт в регистрах (как указано в SVR4 ABI).
-
-mabi=abi-type - Расширить текущую ABI определённым расширением или удалить такое расширение. Допустимые значения — altivec, no-altivec, spe, no-spe, ibmlongdouble, ieeelongdouble, elfv1, elfv2.
-mabi=spe- Расширить текущую ABI с расширениями SPE ABI. Это не меняет ABI по умолчанию, а вместо этого добавляет расширения SPE ABI к текущей ABI.
-mabi=no-spe- Отключить расширения Book-E SPE ABI для текущей ABI.
-mabi=ibmlongdouble- Изменить текущую ABI на использование IBM расширенной точности long double. Это опция PowerPC 32-битной SYSV ABI.
-mabi=ieeelongdouble- Изменить текущую ABI на использование IEEE расширенной точности long double. Это опция PowerPC 32-битной Linux ABI.
-mabi=elfv1- Изменить текущую ABI на использование ELFv1 ABI. Это ABI по умолчанию для big-endian PowerPC 64-битного Linux. Переопределение ABI по умолчанию требует специальной поддержки системы и, скорее всего, закончится катастрофическим сбоем.
-mabi=elfv2- Изменить текущую ABI на использование ELFv2 ABI. Это ABI по умолчанию для little-endian PowerPC 64-битного Linux. Переопределение 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’. -
-mblock-move-inline-limit=num - Выполните все перемещения блоков (например, вызовы
memcpyили копирования структур), не превышающие num байт. Минимальное значение num составляет 32 байта для 32-разрядных целей и 64 байта для 64-разрядных целей. Значение по умолчанию зависит от платформы. -
-Gnum - В встраиваемых системах 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.
В системах Darwin/PPC
#pragma longcallгенерируетjbsr callee, L42, плюс остров ветвления (код склеивания). Два целевых адреса представляют вызываемую функцию и остров ветвления. Линковщик Darwin/PPC предпочитает первый адрес и генерируетbl calleeесли инструкция PPCblнапрямую достигает вызываемую функцию; в противном случае линковщик генерируетbl L42для вызова острова ветвления. Остров ветвления добавляется в тело вызывающей функции; он вычисляет полный 32-разрядный адрес вызываемой функции и переходит к нему.В системах Mach-O (Darwin) эта опция направляет компилятор на генерацию склеивания для каждого прямого вызова, а линковщик Darwin решает, использовать его или отбросить.
В будущем GCC может игнорировать все спецификации длинных вызовов, когда известно, что линковщик генерирует склеивание.
-
-mtls-markers-mno-tls-markers - Пометить (не отмечать) вызовы к
__tls_get_addrс помощью перемещения, указывающего на аргумент функции. Перемещение позволяет линковщику надежно связать вызов функции с инструкциями настройки аргументов для оптимизации TLS, что, в свою очередь, позволяет GCC лучше планировать последовательность. -pthread- Добавляет поддержку многопоточности с помощью библиотеки pthreads. Эта опция устанавливает флаги как для препроцессора, так и для линковщика.
-
-mrecip-mno-recip - Эта опция включает использование инструкций оценки обратной величины и оценки обратной величины квадратного корня с дополнительными шагами Ньютона-Рафсона для повышения точности вместо выполнения деления или извлечения квадратного корня и деления для аргументов с плавающей точкой. Вы должны использовать опцию
-ffast-mathпри использовании-mrecip(или по крайней мере-funsafe-math-optimizations,-finite-math-only,-freciprocal-mathи-fno-trapping-math). Обратите внимание, что, хотя производительность последовательности обычно выше, чем производительность необратной инструкции, точность последовательности может быть снижена до 2 ulp (т. е. обратная величина 1.0 равна 0.99999994) для обратных величин квадратных корней. -
-mrecip=opt - Эта опция контролирует, какие инструкции оценки обратной величины можно использовать. opt — это список опций, разделенных запятыми, которые могут быть предваряемыми
!для инвертирования опции:all: включить все инструкции оценки,default: включить инструкции по умолчанию, эквивалентно-mrecip,none: отключить все инструкции оценки, эквивалентно-mno-recip;div: включить инструкции приближения обратной величины для одинарной и двойной точности;divf: включить инструкции приближения обратной величины одинарной точности;divd: включить инструкции приближения обратной величины двойной точности;rsqrt: включить инструкции приближения обратной величины квадратного корня для одинарной и двойной точности;rsqrtf: включить инструкции приближения обратной величины квадратного корня одинарной точности;rsqrtd: включить инструкции приближения обратной величины квадратного корня двойной точности;Например,
-mrecip=all,!rsqrtdвключает все инструкции оценки обратной величины, за исключением инструкцийFRSQRTE,XSRSQRTEDPиXVRSQRTEDP, которые обрабатывают вычисления обратной величины квадратного корня двойной точности. -
-mrecip-precision-mno-recip-precision - Предполагать (не предполагать), что инструкции оценки обратной величины обеспечивают более точные оценки, чем это предписывает ABI PowerPC. Выбор
-mcpu=power6,-mcpu=power7или-mcpu=power8автоматически выбирает-mrecip-precision. Инструкции оценки квадратного корня двойной точности не генерируются по умолчанию на машинах с низкой точностью, так как они не обеспечивают оценку, которая сходится после трех шагов. -
-mveclibabi=type - Указывает тип ABI, который следует использовать для векторизации встроенных функций с помощью внешней библиотеки. В настоящее время поддерживается только тип
mass, который указывает на использование библиотек IBM Mathematical Acceleration Subsystem (MASS) для векторизации встроенных функций с помощью внешних библиотек. В настоящее время GCC генерирует вызовы кacosd2,acosf4,acoshd2,acoshf4,asind2,asinf4,asinhd2,asinhf4,atan2d2,atan2f4,atand2,atanf4,atanhd2,atanhf4,cbrtd2,cbrtf4,cosd2,cosf4,coshd2,coshf4,erfcd2,erfcf4,erfd2,erff4,exp2d2,exp2f4,expd2,expf4,expm1d2,expm1f4,hypotd2,hypotf4,lgammad2,lgammaf4,log10d2,log10f4,log1pd2,log1pf4,log2d2,log2f4,logd2,logf4,powd2,powf4,sind2,sinf4,sinhd2,sinhf4,sqrtd2,sqrtf4,tand2,tanf4,tanhd2, иtanhf4при генерации кода для power7. Также должны быть включены-ftree-vectorizeи-funsafe-math-optimizations. Библиотеки MASS должны быть указаны при линковке. -
-mfriz-mno-friz - Генерировать (не генерировать) инструкцию
frizпри использовании опции-funsafe-math-optimizationsдля оптимизации округления значений с плавающей точкой до 64-разрядных целых чисел и обратно в числа с плавающей точкой. Инструкцияfrizне возвращает то же значение, если число с плавающей точкой слишком велико, чтобы поместиться в целое число. -
-mpointers-to-nested-functions-mno-pointers-to-nested-functions - Генерировать (не генерировать) код для загрузки регистра статической цепи (r11) при вызове через указатель в системах AIX и 64-битных Linux, где указатель функции указывает на 3-словный дескриптор, содержащий адрес функции, значение TOC, которое нужно загрузить в регистр r2, и значение статической цепи, которое нужно загрузить в регистр r11.
-mpointers-to-nested-functionsвключено по умолчанию. Вы не можете вызывать через указатели на вложенные функции или указатели на функции, скомпилированные на других языках, которые используют статическую цепь, если вы используете-mno-pointers-to-nested-functions. -
-msave-toc-indirect-mno-save-toc-indirect
- Генерировать (не генерировать) код для сохранения значения TOC в зарезервированном стековом местоположении в прологе функции, если функция обращается через указатель на системах AIX и 64-битных Linux. Если значение TOC не сохраняется в прологе, оно сохраняется непосредственно перед вызовом через указатель. Опция
-mno-save-toc-indirect— это значение по умолчанию. -
-mcompat-align-parm-mno-compat-align-parm - Генерировать (не генерировать) код для передачи параметров структуры с максимальным выравниванием 64 бита, для совместимости со старыми версиями GCC.
Старые версии GCC (до 4.9.0) неправильно не выравнивали параметр структуры на границе 128 бит, если эта структура содержала член, требующий выравнивания 128 бит. Это исправлено в более новых версиях GCC. Эта опция может быть использована для генерации кода, совместимого с функциями, скомпилированными с более старыми версиями GCC.
Опция
-mno-compat-align-parm— это значение по умолчанию.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/RS_002f6000-and-PowerPC-Options.html