Spec-Zone.ru › GCC 8

3.18.40 Параметры IBM RS/6000 и PowerPC

Эти параметры ‘-m’ определены для IBM RS/6000 и PowerPC:

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp

Эти параметры указывают, какие инструкции доступны на используемом процессоре. Значения по умолчанию определяются при конфигурации GCC. Указание -mcpu=cpu_type переопределяет эти параметры. Рекомендуется использовать опцию -mcpu=cpu_type вместо перечисленных выше.

Указание -mpowerpc-gpopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе Общего назначения, включая квадратный корень с плавающей запятой. Указание -mpowerpc-gfxopt позволяет GCC использовать необязательные инструкции архитектуры PowerPC в группе Графика, включая выбор с плавающей запятой.

Опция -mmfcrf позволяет GCC генерировать инструкцию перемещения из поля регистра состояния, реализованную на процессоре POWER4 и других процессорах, поддерживающих архитектуру PowerPC V2.01. Опция -mpopcntb позволяет GCC генерировать инструкции 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’, ‘power9’, ‘powerpc’, ‘powerpc64’, ‘powerpc64le’, ‘rs64’ и ‘native’.

-mcpu=powerpc, -mcpu=powerpc64 и -mcpu=powerpc64le задают типы машин для чистой 32-битной архитектуры PowerPC (любой порядок байтов), 64-битной архитектуры PowerPC с большим порядком байтов и 64-битной архитектуры PowerPC с малым порядком байтов соответственно, предполагая подходящую общую модель процессора для планирования.

Указание ‘native’ как типа процессора определяет и выбирает опцию архитектуры, соответствующую процессору хост-системы, выполняющей компиляцию. -mcpu=native не имеет эффекта, если GCC не распознаёт процессор.

Другие опции задают конкретный процессор. Сгенерированный код под этими опциями лучше всего работает на этом процессоре и может вообще не работать на других.

Опции -mcpu автоматически включают или отключают следующие опции:

-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple 
-mpopcntb -mpopcntd  -mpowerpc64 
-mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float 
-msimple-fpu  -mmulhw  -mdlmzb  -mmfpgpr -mvsx 
-mcrypto -mhtm -mpower8-fusion -mpower8-vector 
-mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware

Конкретные опции для каждого процессора различаются между версиями компилятора в зависимости от того, какие настройки кажутся оптимальными для данного процессора; они не обязательно отражают реальные возможности аппаратного обеспечения. Если вы хотите установить отдельную опцию в определённое значение, вы можете указать её после опции -mcpu, например, -mcpu=970 -mno-altivec.

В AIX, опции -maltivec и -mpowerpc64 в настоящее время не включаются или отключаются опцией -mcpu, так как AIX не полностью поддерживает эти опции. Вы по-прежнему можете включать или отключать их по отдельности, если уверены, что это сработает в вашей среде.

-mtune=cpu_type

Устанавливает параметры планирования инструкций для типа машины cpu_type, но не устанавливает тип архитектуры или использование регистров, как опция -mcpu=cpu_type. Те же значения для cpu_type используются для -mtune, что и для -mcpu. Если оба параметра указаны, сгенерированный код использует архитектуру и регистры, установленные -mcpu, но параметры планирования, установленные -mtune.

-mcmodel=small

Генерирует код PowerPC64 для модели small: TOC ограничен 64 КБ.

-mcmodel=medium

Генерирует код PowerPC64 для модели medium: TOC и другие статические данные могут составлять до 4 ГБ в общей сложности. Это значение по умолчанию для 64-битной Linux.

-mcmodel=large

Генерирует код PowerPC64 для модели large: TOC может составлять до 4 ГБ. Другие данные и код ограничены только 64-битным адресным пространством.

-maltivec
-mno-altivec

Генерирует код, использующий (не использующий) инструкции AltiVec, а также включает использование встроенных функций, которые позволяют более прямой доступ к набору инструкций AltiVec. Возможно, также потребуется установить -mabi=altivec, чтобы настроить текущий ABI с улучшениями ABI AltiVec.

Когда используется -maltivec, а не -maltivec=le или -maltivec=be, порядок элементов для встроенных функций AltiVec, таких как vec_splat, vec_extract, и vec_insert, соответствует порядку элементов массива, соответствующему порядку байтов целевого объекта. То есть, элемент ноль определяет самый левый элемент в регистре вектора при нацеливании на платформу с большим порядком байтов и определяет самый правый элемент в регистре вектора при нацеливании на платформу с малым порядком байтов.

-maltivec=be

Генерирует инструкции AltiVec, используя порядок элементов с большим порядком байтов, независимо от того, используется ли целевой объект с большим или малым порядком байтов. Это значение по умолчанию при нацеливании на платформу с большим порядком байтов. Использование данной опции в настоящее время устарело. Поддержка этой функции будет удалена в GCC 9.

Порядок элементов используется для интерпретации номеров элементов во встроенных функциях AltiVec, таких как vec_splat, vec_extract, и vec_insert. По умолчанию они соответствуют порядку элементов массива, соответствующему порядку байтов для целевого объекта.

-maltivec=le

Генерирует инструкции AltiVec, используя порядок элементов с малым порядком байтов, независимо от того, используется ли целевой объект с большим или малым порядком байтов. Это значение по умолчанию при нацеливании на платформу с малым порядком байтов. Эта опция в настоящее время игнорируется при нацеливании на платформу с большим порядком байтов.

Порядок элементов используется для интерпретации номеров элементов во встроенных функциях AltiVec, таких как vec_splat, vec_extract, и vec_insert. По умолчанию они соответствуют порядку элементов массива, соответствующему порядку байтов для целевого объекта.

-mvrsave
-mno-vrsave

Генерирует инструкции VRSAVE при генерации кода AltiVec.

-msecure-plt

Генерирует код, который позволяет ld и ld.so создавать исполняемые файлы и общие библиотеки с неисполняемыми .plt и .got разделами. Это опция PowerPC 32-битного SYSV ABI.

-mbss-plt

Генерирует код, использующий раздел BSS .plt, который ld.so заполняет, и требует разделы .plt и .got, которые являются одновременно записываемыми и исполняемыми. Это опция PowerPC 32-битного SYSV ABI.

-misel
-mno-isel

Этот переключатель включает или отключает генерацию инструкций ISEL.

-misel=yes/no

Этот переключатель устарел. Используйте -misel и -mno-isel вместо него.

-mpaired
-mno-paired

Этот переключатель включает или отключает генерацию инструкций PAIRED simd.

-mvsx
-mno-vsx

Генерирует код, использующий (не использующий) векторные/скалярные (VSX) инструкции, а также включает использование встроенных функций, которые позволяют более прямой доступ к набору инструкций VSX.

-mcrypto
-mno-crypto

Включить (отключить) использование встроенных функций, которые позволяют прямой доступ к криптографическим инструкциям, добавленным в версию 2.07 ISA PowerPC.

-mhtm
-mno-htm

Включить (отключить) использование встроенных функций, которые позволяют прямой доступ к инструкциям Hardware Transactional Memory (HTM), добавленным в версию 2.07 ISA PowerPC.

-mpower8-fusion
-mno-power8-fusion

Генерирует код, который сохраняет (не сохраняет) некоторые целочисленные операции рядом, чтобы инструкции могли быть объединены на процессорах power8 и более поздних.

-mpower8-vector
-mno-power8-vector

Генерировать код, использующий (не использующий) векторы и скалярные инструкции, добавленные в версию 2.07 ISA PowerPC. Также включить использование встроенных функций, позволяющих получить более прямой доступ к векторным инструкциям.

-mquad-memory
-mno-quad-memory

Генерировать код, использующий (не использующий) неатомарные инструкции для памяти квадрослов. Опция -mquad-memory требует использования 64-битного режима.

-mquad-memory-atomic
-mno-quad-memory-atomic

Генерировать код, использующий (не использующий) атомарные инструкции для памяти квадрослов. Опция -mquad-memory-atomic требует использования 64-битного режима.

-mfloat128
-mno-float128

Включить/выключить ключевое слово __float128 для 128-битной плавающей точки IEEE и использовать либо эмуляцию в программном обеспечении, либо аппаратные инструкции для 128-битной плавающей точки IEEE.

Для использования поддержки 128-битной плавающей точки IEEE необходимо включить набор инструкций VSX (-mvsx, -mcpu=power7, -mcpu=power8) или -mcpu=power9. Поддержка 128-битной плавающей точки IEEE работает только в системах PowerPC Linux.

По умолчанию -mfloat128 включён в системах PowerPC Linux, использующих набор инструкций VSX, и выключен в других системах.

Если вы используете набор инструкций ISA 3.0 (-mpower9-vector или -mcpu=power9) на 64-битной системе, поддержка 128-битной плавающей точки IEEE также включит генерацию инструкций ISA 3.0 для 128-битной плавающей точки IEEE. В противном случае, если вы не указываете генерировать инструкции ISA 3.0 или если вы нацелены на 32-битную систему большого эндиан, 128-битная плавающая точка IEEE будет реализована с помощью эмуляции в программном обеспечении.

-mfloat128-hardware
-mno-float128-hardware

Включить/выключить использование аппаратных инструкций ISA 3.0 для поддержки типа данных __float128.

По умолчанию -mfloat128-hardware включён в системах PowerPC Linux, использующих набор инструкций ISA 3.0, и выключен в других системах.

-m32
-m64

Генерировать код для 32- или 64-битных сред целей Darwin и SVR4 (включая GNU/Linux). 32-битная среда устанавливает int, long и указатель на 32 бита и генерирует код, который работает на любом варианте PowerPC. 64-битная среда устанавливает int на 32 бита, а long и указатель на 64 бита и генерирует код для PowerPC64, как для -mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc

Изменить генерацию TOC (Table Of Contents), которая создаётся для каждого исполняемого файла. Опция -mfull-toc выбрана по умолчанию. В этом случае GCC выделяет по крайней мере одну запись TOC для каждой уникальной неавтоматической ссылки на переменную в вашей программе. GCC также помещает константы с плавающей точкой в TOC. Однако в TOC доступно только 16 384 записи.

Если вы получите сообщение об ошибке компоновщика, указывающее на переполнение доступного пространства TOC, вы можете уменьшить используемое пространство TOC с помощью опций -mno-fp-in-toc и -mno-sum-in-toc. -mno-fp-in-toc предотвращает размещение GCC констант с плавающей точкой в TOC, а -mno-sum-in-toc заставляет GCC генерировать код для вычисления суммы адреса и константы во время выполнения вместо размещения этой суммы в TOC. Вы можете указать одну или обе эти опции. Каждая из них приводит к созданию кода, который немного медленнее и больше, но экономит пространство TOC.

Если вы всё ещё столкнётесь с недостатком места в TOC, даже когда вы указали обе эти опции, укажите -mminimal-toc вместо этого. Эта опция заставляет GCC создать только одну запись TOC для каждого файла. При использовании этой опции GCC генерирует код, который медленнее и больше, но использует очень мало места в TOC. Возможно, вам захочется использовать эту опцию только для файлов, которые содержат код, выполняемый реже.

-maix64
-maix32

Включить 64-битную ABI и соглашение о вызовах AIX: 64-битные указатели, 64-битный long тип и инфраструктура, необходимая для их поддержки. Указание -maix64 подразумевает -mpowerpc64, а -maix32 отключает 64-битную ABI и подразумевает -mno-powerpc64. GCC по умолчанию использует -maix32.

-mxl-compat
-mno-xl-compat

Создать код, который более точно соответствует семантике компилятора IBM XL при использовании совместимой с AIX ABI. Передавать аргументы с плавающей точкой прототипированным функциям в стек за зоной сохранения регистров (RSA) помимо аргументных FPR. Не предполагать, что наиболее значимая двойка в 128-битном значении long double корректно округляется при сравнении значений и преобразовании в двойку. Использовать имена символов XL для функций поддержки long double.

Соглашение о вызовах AIX было расширено, но первоначально не документировано для обработки редкого случая 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 с малым эндиан, так как эти инструкции не работают, когда процессор находится в режиме малого эндиан. Исключение составляют PPC740 и PPC750, которые разрешают эти инструкции в режиме малого эндиан.

-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 (ABI) от марта 1995 года, дополненному для процессоров PowerPC. Это значение по умолчанию, если вы не настраивали GCC с помощью ‘powerpc-*-eabiaix’.

-mcall-sysv-eabi
-mcall-eabi

Указывать оба параметра -mcall-sysv и -meabi.

-mcall-sysv-noeabi

Указывать оба параметра -mcall-sysv и -mno-eabi.

-mcall-aixdesc

В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы AIX.

-mcall-linux

В системах System V.4 и встроенных системах PowerPC код компилируется для системы GNU на базе Linux.

-mcall-freebsd

В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы FreeBSD.

-mcall-netbsd

В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы NetBSD.

-mcall-openbsd

В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы OpenBSD.

-mtraceback=traceback_type

Выбрать тип таблицы отслеживания. Допустимые значения для traceback_type — ‘full’, ‘part’ и ‘no’.

-maix-struct-return

Возвращать все структуры в памяти (как указано в AIX ABI).

-msvr4-struct-return

Возвращать структуры размером меньше 8 байт в регистрах (как указано в SVR4 ABI).

-mabi=abi-type

Расширить текущий ABI определенным расширением или удалить такое расширение. Допустимые значения — ‘altivec’, ‘no-altivec’, ‘spe’, ‘no-spe’, ‘ibmlongdouble’, ‘ieeelongdouble’, ‘elfv1’, ‘elfv2’.

-mabi=ibmlongdouble

Изменить текущий ABI на использование IBM расширенной точности long double. Вероятно, это не сработает, если ваша система по умолчанию использует IEEE расширенной точности long double. Если вы измените тип long double с IEEE расширенной точности, компилятор выдаст предупреждение, если вы не используете параметр -Wno-psabi. Требуется включить -mlong-double-128.

-mabi=ieeelongdouble

Изменить текущий ABI на использование IEEE расширенной точности long double. Вероятно, это не сработает, если ваша система по умолчанию использует IBM расширенной точности long double. Если вы измените тип long double с IBM расширенной точности, компилятор выдаст предупреждение, если вы не используете параметр -Wno-psabi. Требуется включить -mlong-double-128.

-mabi=elfv1

Изменить текущий ABI на использование ELFv1 ABI. Это ABI по умолчанию для 64-битного Linux на PowerPC с big-endian. Изменение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится катастрофой.

-mabi=elfv2

Изменить текущий ABI на использование ELFv2 ABI. Это ABI по умолчанию для 64-битного Linux на PowerPC с little-endian. Изменение ABI по умолчанию требует специальной поддержки системы и, вероятно, закончится катастрофой.

-mgnu-attribute
-mno-gnu-attribute

Выводить директивы ассемблера .gnu_attribute для установки пар тег/значение в секции .gnu.attributes, которые определяют вариации ABI в параметрах функций или возвращаемых значениях.

-mprototype
-mno-prototype

В системах System V.4 и встроенных системах PowerPC предполагается, что все вызовы функций с переменным числом аргументов корректно продекларированы. В противном случае компилятор должен вставить инструкцию перед каждым вызовом без прототипа, чтобы установить или сбросить бит 6 регистра состояния условия (CR) для обозначения того, передаются ли значения с плавающей точкой в регистрах с плавающей точкой, если функция принимает переменное число аргументов. При использовании -mprototype только вызовы продекларированных функций с переменным числом аргументов устанавливают или сбрасывают этот бит.

-msim

В встроенных системах PowerPC предполагается, что модуль запуска называется sim-crt0.o, а стандартные библиотеки C — libsim.a и libc.a. Это значение по умолчанию для конфигураций ‘powerpc-*-eabisim’.

-mmvme

В встроенных системах PowerPC предполагается, что модуль запуска называется crt0.o, а стандартные библиотеки C — libmvme.a и libc.a.

-mads

В встроенных системах PowerPC предполагается, что модуль запуска называется crt0.o, а стандартные библиотеки C — libads.a и libc.a.

-myellowknife

В встроенных системах PowerPC предполагается, что модуль запуска называется crt0.o, а стандартные библиотеки C — libyk.a и libc.a.

-mvxworks

В системах System V.4 и встроенных системах PowerPC укажите, что компилируете для системы VxWorks.

-memb

В встроенных системах PowerPC установите бит PPC_EMB в заголовке флагов ELF, чтобы указать, что используются расширенные перестановки ‘eabi’.

-meabi
-mno-eabi

В системах System V.4 и встроенных системах PowerPC (не) соблюдается интерфейс двоичного кода встроенных приложений (EABI), который представляет собой набор изменений в спецификации System V.4. Выбор -meabi означает, что стек выравнивается по границе 8 байт, функция __eabi вызывается из main для настройки среды EABI, а опция -msdata может использовать как r2, так и r13, чтобы указывать на две отдельные области малых данных. Выбор -mno-eabi означает, что стек выравнивается по границе 16 байт, никакая функция инициализации EABI не вызывается из main, и опция -msdata использует только r13, чтобы указать на одну область малых данных. Опция -meabi включена по умолчанию, если вы настраивали GCC, используя одну из опций ‘powerpc*-*-eabi*’.

-msdata=eabi

В системах System V.4 и встроенных системах PowerPC поместите малые инициализированные const глобальные и статические данные в секцию .sdata2, на которую указывает регистр r2. Поместите малые инициализированные не-const глобальные и статические данные в секцию .sdata, на которую указывает регистр r13. Поместите малые неинициализированные глобальные и статические данные в секцию .sbss, которая прилегает к секции .sdata. Опция -msdata=eabi несовместима с опцией -mrelocatable. Опция -msdata=eabi также устанавливает опцию -memb.

-msdata=sysv

В системах System V.4 и встроенных системах PowerPC поместите малые глобальные и статические данные в секцию .sdata, на которую указывает регистр r13. Поместите малые неинициализированные глобальные и статические данные в секцию .sbss, которая прилегает к секции .sdata. Опция -msdata=sysv несовместима с опцией -mrelocatable.

-msdata=default
-msdata

В системах System V.4 и встроенных системах PowerPC, если используется -meabi, компилируйте код так же, как -msdata=eabi, в противном случае компилируйте код так же, как -msdata=sysv.

-msdata=data

В системах System V.4 и встроенных системах PowerPC поместите малые глобальные данные в секцию .sdata. Поместите малые неинициализированные глобальные данные в секцию .sbss. Однако не используйте регистр r13 для адресации малых данных. Это поведение по умолчанию, если не используются другие опции -msdata.

-msdata=none
-mno-sdata

Во встроенных системах PowerPC поместите все инициализированные глобальные и статические данные в секцию .data, а все неинициализированные данные — в секцию .bss.

-mreadonly-in-sdata
-mreadonly-in-sdata

Поместите объекты только для чтения в секцию .sdata также. Это значение по умолчанию.

-mblock-move-inline-limit=num

Встраивайте все перемещения блоков (например, вызовы memcpy или копирование структур) меньше или равные num байт. Минимальное значение для num составляет 32 байта для 32-битных целей и 64 байта для 64-битных целей. Значение по умолчанию зависит от целевой системы.

-mblock-compare-inline-limit=num

Генерируйте нециклический встроенный код для всех сравнений блоков (например, вызовы memcmp или сравнения структур) меньше или равные num байт. Если num равно 0, все встроенное расширение (нециклическое и циклическое) сравнения блоков отключено. Значение по умолчанию зависит от целевой системы.

-mblock-compare-inline-loop-limit=num

Генерируйте встроенное расширение с циклическим кодом для всех сравнений блоков, которые меньше или равны num байт, но больше предела для нециклического встроенного сравнения блоков. Если длина блока не является постоянной, не более num байт будут сравнены перед вызовом memcmp для сравнения остальной части блока. Значение по умолчанию зависит от целевой системы.

-mstring-compare-inline-limit=num

Генерируйте не более num пар инструкций загрузки для сравнения строки встроены. Если различие или конец строки не найдены в конце встроенного сравнения, вызов strcmp или strncmp позаботятся об остальной части сравнения. Значение по умолчанию составляет 8 пар загрузки, которые сравнят 64 байта на 64-битной целевой системе и 32 байта на 32-битной целевой системе.

-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 может игнорировать все спецификации longcall, если компоновщик известен тем, что генерирует код вставки.

-mtls-markers
-mno-tls-markers

Помечать (не помечать) вызовы __tls_get_addr с релокейшеном, указывающим на аргумент функции. Релокация позволяет компоновщику надежно связать вызов функции с инструкциями настройки аргументов для оптимизации TLS, что, в свою очередь, позволяет GCC лучше планировать последовательность.

-mrecip
-mno-recip

Эта опция позволяет использовать инструкции оценки обратной величины и оценки обратного квадратного корня с дополнительными шагами Ньютона-Рафсона для повышения точности вместо выполнения деления или квадратного корня и деления для аргументов с плавающей точкой. При использовании опции -mrecip (или, по крайней мере, -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math и -fno-trapping-math) следует использовать опцию -ffast-math. Обратите внимание, что, хотя пропускная способность последовательности обычно выше, чем пропускная способность инструкции без обратного вычисления, точность последовательности может быть уменьшена до 2 ulp (например, обратная величина 1.0 равна 0.99999994) для обратных квадратных корней.

-mrecip=opt

Эта опция управляет тем, какие инструкции оценки обратной величины можно использовать. opt — это список опций, разделенных запятыми, которые могут быть предварены !, чтобы инвертировать опцию:

‘all’

Включить все инструкции оценки.

‘default’

Включить инструкции по умолчанию, эквивалентные -mrecip.

‘none’

Отключить все инструкции оценки, эквивалентные -mno-recip.

‘div’

Включить инструкции приближенного вычисления обратной величины как для одинарной, так и для двойной точности.

‘divf’

Включить инструкции приближенного вычисления обратной величины одинарной точности.

‘divd’

Включить инструкции приближенного вычисления обратной величины двойной точности.

‘rsqrt’

Включить инструкции приближенного вычисления обратного квадратного корня как для одинарной, так и для двойной точности.

‘rsqrtf’

Включить инструкции приближенного вычисления обратного квадратного корня одинарной точности.

‘rsqrtd’

Включить инструкции приближенного вычисления обратного квадратного корня двойной точности.

Таким образом, например, -mrecip=all,!rsqrtd включает все инструкции оценки обратной величины, за исключением FRSQRTE, XSRSQRTEDP, и XVRSQRTEDP инструкций, которые обрабатывают вычисления обратного квадратного корня двойной точности.

-mrecip-precision
-mno-recip-precision

Предполагать (не предполагать), что инструкции оценки обратной величины обеспечивают более высокую точность оценки, чем предписывает ABI PowerPC. Выбор -mcpu=power6, -mcpu=power7 или -mcpu=power8 автоматически выбирает -mrecip-precision. Инструкции оценки обратного квадратного корня двойной точности по умолчанию не генерируются на машинах с низкой точностью, поскольку они не обеспечивают оценку, которая сходится за три шага.

-mveclibabi=type

Указывает тип ABI для использования при векторизации встроенных функций с использованием внешней библиотеки. В настоящее время поддерживается только тип «mass», который указывает на использование библиотек IBM’s Mathematical Acceleration Subsystem (MASS) для векторизации встроенных функций с использованием внешних библиотек. В настоящее время GCC генерирует вызовы к acosd2, acosf4, acoshd2, acoshf4, asind2, asinf4, asinhd2, asinhf4, atan2d2, atan2f4, atand2, atanf4, atanhd2, atanhf4, cbrtd2, cbrtf4, cosd2, cosf4, coshd2, coshf4, erfcd2, erfcf4, erfd2, erff4, exp2d2, exp2f4, expd2, expf4, expm1d2, expm1f4, hypotd2, hypotf4, lgammad2, lgammaf4, log10d2, log10f4, log1pd2, log1pf4, log2d2, log2f4, logd2, logf4, powd2, powf4, sind2, sinf4, sinhd2, sinhf4, sqrtd2, sqrtf4, tand2, tanf4, tanhd2, и tanhf4 при генерации кода для power7. Также должны быть включены -ftree-vectorize и -funsafe-math-optimizations. Библиотеки MASS должны быть указаны при линковке.

-mfriz
-mno-friz

Генерировать (не генерировать) инструкцию friz, когда используется опция -funsafe-math-optimizations для оптимизации округления значений с плавающей запятой до 64-битного целого и обратно в число с плавающей запятой. Инструкция friz возвращает другое значение, если число с плавающей точкой слишком велико для хранения в целом числе.

-mpointers-to-nested-functions
-mno-pointers-to-nested-functions

Генерировать (не генерировать) код для загрузки регистра статической цепочки (r11) при вызове через указатель на системах AIX и 64-битных Linux, где указатель функции указывает на 3-словный дескриптор, содержащий адрес функции, значение TOC для загрузки в регистр r2, и значение статической цепочки для загрузки в регистр r11. -mpointers-to-nested-functions включен по умолчанию. Вы не можете вызывать функции через указатели на вложенные функции или указатели на функции, скомпилированные на других языках, использующих статическую цепочку, если вы используете -mno-pointers-to-nested-functions.

-msave-toc-indirect
-mno-save-toc-indirect

Генерировать (не генерировать) код для сохранения значения TOC в выделенном месте стека в преамбуле функции, если функция вызывает другую функцию через указатель на системах AIX и 64-битных Linux. Если значение TOC не сохраняется в преамбуле, оно сохраняется непосредственно перед вызовом через указатель. Опция -mno-save-toc-indirect установлена по умолчанию.

-mcompat-align-parm
-mno-compat-align-parm

Генерировать (не генерировать) код для передачи параметров структуры с максимальным выравниванием 64 бита для совместимости со старыми версиями GCC.

Старые версии GCC (до 4.9.0) неправильно не выравнивали параметр структуры на границе 128 бит, когда эта структура содержала член, требующий 128-битного выравнивания. Это исправлено в более новых версиях GCC. Эта опция может использоваться для генерации кода, совместимого с функциями, скомпилированными с помощью более старых версий GCC.

Опция -mno-compat-align-parm установлена по умолчанию.

-mstack-protector-guard=guard
-mstack-protector-guard-reg=reg
-mstack-protector-guard-offset=offset
-mstack-protector-guard-symbol=symbol

Генерировать код защиты стека с использованием кантри в guard. Поддерживаемые расположения — «global» для глобального кантри или «tls» для кантри на поток в блоке TLS (по умолчанию с GNU libc версии 2.4 или более поздней).

При последнем выборе опции -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового регистра для чтения кантри, и с каким смещением от этого базового регистра. По умолчанию для этих параметров указаны значения, определённые в соответствующем ABI. -mstack-protector-guard-symbol=symbol переопределяет смещение ссылкой на символ кантри в блоке TLS.

Далее: Опции RX, Предыдущее: Опции RL78, Вверх: Опции подмодели [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/RS_002f6000-and-PowerPC-Options.html

Spec-Zone.ru

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