Spec-Zone.ru › GCC 4

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-разрядных целей. Значение по умолчанию зависит от платформы.
-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.

В системах Darwin/PPC #pragma longcall генерирует jbsr callee, L42, плюс остров ветвления (код склеивания). Два целевых адреса представляют вызываемую функцию и остров ветвления. Линковщик Darwin/PPC предпочитает первый адрес и генерирует bl callee если инструкция PPC bl напрямую достигает вызываемую функцию; в противном случае линковщик генерирует 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API