Spec-Zone.ru › GCC 7

3.18.39 Варианты 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 генерировать инструкцию перемещения из регистра состояния (condition register field) реализованную на процессоре POWER4 и других процессорах, поддерживающих архитектуру PowerPC V2.01. Параметр -mpopcntb позволяет GCC генерировать инструкцию подсчета единиц и оценки обратной величины с плавающей точкой двойной точности, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчета единиц, реализованную на процессоре 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’.

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

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

Параметры -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 -mfloat128 -mfloat128-hardware

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

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

-mtune=cpu_type

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

-mcmodel=small

Генерировать код PowerPC64 для модели small: TOC ограничен 64k.

-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, соответствует порядку элементов массива, соответствующему порядку байтов целевой платформы. То есть, элемент ноль идентифицирует самый левый элемент в регистре вектора при нацеливании на платформу big-endian, и идентифицирует самый правый элемент в регистре вектора при нацеливании на платформу little-endian.

-maltivec=be

Генерировать инструкции AltiVec с использованием порядка элементов big-endian, независимо от того, является ли целевая платформа big- или little-endian. Это значение по умолчанию при нацеливании на платформу big-endian.

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

-maltivec=le

Генерировать инструкции AltiVec с использованием порядка элементов little-endian, независимо от того, является ли целевая платформа big- или little-endian. Это значение по умолчанию при нацеливании на платформу little-endian. Этот параметр в настоящее время игнорируется при нацеливании на платформу big-endian.

Порядок элементов используется для интерпретации номеров элементов в 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 вместо него.

-mlra

Включить локальную регистрацию. По умолчанию используется LRA (т.е. -mno-lra).

-mspe
-mno-spe

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

-mpaired
-mno-paired

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

-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
END_OF_DOCUMENT_MARKER

Генерировать код, который сохраняет (не сохраняет) некоторые целочисленные операции рядом, чтобы инструкции могли быть объединены вместе на процессорах 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-битного режима.

-mupper-regs-di
-mno-upper-regs-di

Генерировать код, который использует (не использует) скалярные инструкции, которые нацелены на все 64 регистра в наборе регистров векторно-скалярной плавающей запятой, добавленных в версии 2.06 ISA PowerPC при обработке целых чисел. -mupper-regs-di включена по умолчанию, если вы используете опции -mcpu=power7, -mcpu=power8, -mcpu=power9 или -mvsx.

-mupper-regs-df
-mno-upper-regs-df

Генерировать код, который использует (не использует) скалярные инструкции двойной точности, которые нацелены на все 64 регистра в наборе регистров векторно-скалярной плавающей запятой, добавленных в версии 2.06 ISA PowerPC. -mupper-regs-df включена по умолчанию, если вы используете опции -mcpu=power7, -mcpu=power8, -mcpu=power9 или -mvsx.

-mupper-regs-sf
-mno-upper-regs-sf

Генерировать код, который использует (не использует) скалярные инструкции одинарной точности, которые нацелены на все 64 регистра в наборе регистров векторно-скалярной плавающей запятой, добавленных в версии 2.07 ISA PowerPC. -mupper-regs-sf включена по умолчанию, если вы используете опции -mcpu=power8, -mpower8-vector или -mcpu=power9.

-mupper-regs
-mno-upper-regs

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

Если используется опция -mno-upper-regs, она выключает обе опции -mupper-regs-sf и -mupper-regs-df.

-mfloat128
-mno-float128

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

Набор инструкций VSX (-mvsx, -mcpu=power7 или -mcpu=power8) должен быть включен для использования опции -mfloat128. Опция -mfloat128 работает только на 64-битных Linux-системах PowerPC.

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

-mfloat128-hardware
-mno-float128-hardware

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

Если вы используете -mfloat128-hardware, она также включит опцию -mfloat128.

Если вы выбираете инструкции ISA 3.0 с -mcpu=power9, но не используете ни -mfloat128, ни -mfloat128-hardware, поддержка IEEE 128-битной плавающей запятой не будет включена.

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

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

-maix64
-maix32

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

-mxl-compat
-mno-xl-compat

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

Соглашение о вызовах AIX было расширено, но первоначально не документировано, чтобы обрабатывать редкий случай K&R C вызова функции, принимающей адрес своих аргументов с меньшим количеством аргументов, чем объявлено. Компиляторы IBM XL обращаются к аргументам с плавающей запятой, которые не помещаются в RSA, из стека, когда подпрограмма компилируется без оптимизации. Так как постоянное хранение аргументов с плавающей запятой в стеке является неэффективным и редко необходимым, эта опция не включена по умолчанию и необходима только при вызове подпрограмм, скомпилированных компиляторами IBM XL без оптимизации.

-mpe

Поддержка IBM RS/6000 SP Parallel Environment (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 с малой эндианностью, так как эти инструкции не работают, когда процессор находится в режиме малой эндианности. Исключения составляют 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 компилировать код для процессора в режиме малой эндианности. Опция -mlittle-endian эквивалентна -mlittle.

-mbig
-mbig-endian

В системах System V.4 и встраиваемых системах PowerPC компилировать код для процессора в режиме большой эндианности. Опция -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

Отключить расширения SPE ABI Book-E для текущего ABI.

-mabi=ibmlongdouble

Изменить текущий ABI для использования IBM расширенной точности long double. Это параметр PowerPC 32-битного SYSV ABI. Требует включения -mlong-double-128.

-mabi=ieeelongdouble

Изменить текущий ABI для использования IEEE расширенной точности long double. Это параметр PowerPC 32-битного Linux ABI. Требует включения -mlong-double-128.

-mabi=elfv1

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

-mabi=elfv2

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

-mgnu-attribute
-mno-gnu-attribute

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

-mprototype
-mno-prototype

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

-msim

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

-mmvme

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

-mads

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

-myellowknife

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

-mvxworks

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

-memb

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

-meabi
-mno-eabi

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

-msdata=eabi

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

-msdata=sysv

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

-msdata=default
-msdata

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

-msdata=data

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

-msdata=none
-mno-sdata

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

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

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

-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 может игнорировать все спецификации 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

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

-mveclibabi=type

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

-mfriz
-mno-friz

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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