Spec-Zone.ru › GCC 5

3.17.37 Параметры 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 генерировать инструкцию подсчёта единиц и оценки обратного значения числа с плавающей запятой двойной точности, реализованную на процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02. Параметр -mpopcntd позволяет GCC генерировать инструкцию подсчёта единиц, реализованную на процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06. Параметр -mfprnd позволяет GCC генерировать инструкции округления чисел с плавающей запятой до целых, реализованные на процессоре POWER5+ и других процессорах, поддерживающих архитектуру PowerPC V2.03. Параметр -mcmpb позволяет GCC генерировать инструкцию сравнения байтов, реализованную на процессоре POWER6 и других процессорах, поддерживающих архитектуру PowerPC V2.05. Параметр -mmfpgpr позволяет GCC генерировать инструкции перемещения чисел с плавающей запятой в/из регистров общего назначения, реализованные на процессоре 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 для малой модели: TOC ограничен 64Кб.

-mcmodel=medium

Генерирует код PowerPC64 для средней модели: размер TOC и других статических данных может достигать 4 Гб в сумме.

-mcmodel=large

Генерирует код PowerPC64 для большой модели: размер 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 вместо него.

-mspe
-mno-spe

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

-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

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

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

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

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

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

-mupper-regs
-mno-upper-regs

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

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

-mfloat-gprs=yes/single/double/no
-mfloat-gprs

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

Аргумент ‘yes’ или ‘single’ включает использование операций с плавающей запятой одинарной точности.

Аргумент ‘double’ включает использование операций с плавающей запятой одинарной и двойной точности.

Аргумент ‘no’ отключает операции с плавающей запятой над регистрами общего назначения.

Эта опция в настоящее время доступна только на MPC854x.

-m32
-m64

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

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

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

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

Если вы всё ещё столкнётесь с нехваткой места в 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 выравнивание более крупных типов, таких как floating-point doubles, на границе их естественного размера. Опция -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

Отключить расширения SPE ABI Book-E для текущего 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
END_OF_DOCUMENT_MARKER

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

-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 используется по умолчанию.

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

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

Spec-Zone.ru

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