3.18.38 Параметры 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 генерировать инструкцию подсчёта единиц и оценку обратной величины с двойной точностью FP, реализованную на процессоре 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. Те же значения для 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 вместо него.
-mlra-
Включить локальную распределение регистров. Это все ещё экспериментально для PowerPC, поэтому по умолчанию компилятор использует стандартный загрузчик (т.е. -mno-lra).
-mspe-mno-spe-
Этот переключатель включает или выключает генерацию SIMD-инструкций SPE.
-mpaired-mno-paired-
Этот переключатель включает или выключает генерацию SIMD-инструкций PAIRED.
-mspe=yes/no-
Этот параметр устарел. Используйте -mspe и -mno-spe вместо него.
-mvsx-mno-vsx-
Генерировать код, который использует (не использует) векторные/скалярные (VSX) инструкции, а также включить использование встроенных функций, которые позволяют более прямой доступ к набору инструкций VSX.
-mcrypto-mno-crypto-
Включить (выключить) использование встроенных функций, которые позволяют прямой доступ к криптографическим инструкциям, добавленным в версии 2.07 ISA PowerPC.
-mdirect-move-mno-direct-move
-
Генерировать код, использующий (не использующий) инструкции для перемещения данных между регистрами общего назначения и векторами/скалярными (VSX) регистрами, добавленными в версию 2.07 ISA PowerPC.
-mhtm-mno-htm-
Включить (выключить) использование встроенных функций, позволяющих напрямую обращаться к инструкциям Hardware Transactional Memory (HTM), добавленным в версию 2.07 ISA PowerPC.
-mpower8-fusion-mno-power8-fusion-
Генерировать код, который сохраняет (не сохраняет) некоторые целочисленные операции смежными, чтобы инструкции можно было объединить на процессорах power8 и более поздних.
-mpower8-vector-mno-power8-vector-
Генерировать код, использующий (не использующий) векторы и скалярные инструкции, добавленные в версию 2.07 ISA PowerPC. Также включить использование встроенных функций, позволяющих более прямой доступ к векторным инструкциям.
-mquad-memory-mno-quad-memory-
Генерировать код, использующий (не использующий) неатомарные инструкции памяти квадрослов. Опция -mquad-memory требует использования 64-битного режима.
-mquad-memory-atomic-mno-quad-memory-atomic-
Генерировать код, использующий (не использующий) атомарные инструкции памяти квадрослов. Опция -mquad-memory-atomic требует использования 64-битного режима.
-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 или -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 также включит генерацию инструкций плавающей запятой IEEE 128-бит ISA 3.0. В противном случае плавающая запятая 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 не позволяет 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 при использовании совместимого с AIX ABI. Передавать аргументы с плавающей запятой типизированным функциям за пределами области сохранения регистров (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 выравнивание больших типов, таких как плавающие запятые double, на их естественной границе, основанной на размере. Опция -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 с малой endianностью, так как эти инструкции не работают, когда процессор находится в режиме малой endianности. Исключение составляют PPC740 и PPC750, которые допускают эти инструкции в режиме малой 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, дополнению для процессора PowerPC от марта 1995 года. Это значение по умолчанию, если вы не настраивали 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-
В системах 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, если инструкция PPCblнапрямую достигает вызываемую функцию; в противном случае компоновщик генерирует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, -ffinite-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-6.5.0/gcc/RS_002f6000-and-PowerPC-Options.html