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
-
В системах 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, если инструкция 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, -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