Spec-Zone.ru › GCC 15

3.20.47 Параметры SPARC

На SPARC поддерживаются следующие параметры «-m»:

-mno-app-regs
-mapp-regs

Укажите -mapp-regs, чтобы генерировать код с использованием глобальных регистров с 2 по 4, которые ABI SPARC SVR4 резервирует для приложений. Как и глобальный регистр 1, каждый из глобальных регистров с 2 по 4 считается регистром, доступным для выделения, который затирается при вызове функций. Это значение используется по умолчанию.

Чтобы обеспечить полное соответствие ABI SVR4 ценой некоторого снижения производительности, укажите -mno-app-regs. Рекомендуется компилировать с этим параметром библиотеки и системное программное обеспечение.

-mflat
-mno-flat

При указании -mflat компилятор не генерирует инструкции сохранения и восстановления регистров и использует «плоскую» модель с одним регистровым окном. Эта модель совместима с обычной моделью регистровых окон. Локальные регистры и входные регистры (0–5) по-прежнему считаются сохраняемыми при вызовах регистровыми и при необходимости сохраняются в стеке.

При указании -mno-flat (значение по умолчанию) компилятор генерирует инструкции сохранения и восстановления регистров (за исключением листовых функций). Это обычный режим работы.

-mfpu
-mhard-float

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

-mno-fpu
-msoft-float

Генерировать код с библиотечными вызовами для операций с плавающей точкой. Предупреждение: необходимые библиотеки доступны не для всех целевых платформ SPARC. Обычно используются средства стандартного компилятора C для этой машины, но при кросс-компиляции сделать это напрямую невозможно. Для кросс-компиляции необходимо самостоятельно обеспечить подходящие библиотечные функции. Встраиваемые целевые платформы «sparc-*-aout» и «sparclite-*-*» поддерживают программную обработку операций с плавающей точкой.

Параметр -msoft-float меняет соглашение о вызовах в выходном файле, поэтому он полезен только в том случае, если с этим параметром скомпилирована вся программа. В частности, для этого необходимо скомпилировать libgcc.a, библиотеку, поставляемую вместе с GCC, с параметром -msoft-float.

-mhard-quad-float

Генерировать код, содержащий инструкции с плавающей точкой для четырёхсловных значений (long double).

-msoft-quad-float

Генерировать код с библиотечными вызовами для инструкций с плавающей точкой, работающих с четырёхсловными значениями (long double). Вызываются функции, определённые в ABI SPARC. Это значение используется по умолчанию.

На момент написания этого документа не существует реализаций SPARC с аппаратной поддержкой инструкций с плавающей точкой для четырёхсловных значений. При выполнении любой из этих инструкций все они вызывают обработчик ловушки, который эмулирует её действие. Из-за накладных расходов на обработчик ловушки такой способ значительно медленнее вызова библиотечных функций ABI. Поэтому по умолчанию используется параметр -msoft-quad-float.

-mno-unaligned-doubles
-munaligned-doubles

Предполагать, что значения типа double выровнены по границе 8 байт. Это значение используется по умолчанию.

При указании -munaligned-doubles GCC предполагает, что значения типа double выровнены по границе 8 байт, только если они входят в состав другого типа или имеют абсолютный адрес. В остальных случаях предполагается выравнивание по границе 4 байт. Указание этого параметра позволяет избежать некоторых редких проблем совместимости с кодом, сгенерированным другими компиляторами. По умолчанию этот параметр не используется, поскольку он снижает производительность, особенно при обработке чисел с плавающей точкой.

-muser-mode
-mno-user-mode

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

-mfaster-structs
-mno-faster-structs

При указании -mfaster-structs компилятор предполагает, что структуры должны быть выровнены по границе 8 байт. Это позволяет использовать пары инструкций ldd и std для копирования при присваивании структур вместо вдвое большего числа пар ld и st. Однако такое изменение выравнивания напрямую нарушает ABI SPARC. Поэтому этот параметр предназначен только для целевых платформ, где разработчик осознаёт, что получаемый код не будет в точности соответствовать правилам ABI.

-mstd-struct-return
-mno-std-struct-return

При указании -mstd-struct-return компилятор генерирует проверочный код в функциях, возвращающих структуры или объединения, чтобы обнаруживать несоответствие размеров между двумя сторонами вызова функции, как предусмотрено 32-разрядным ABI.

По умолчанию используется -mno-std-struct-return. Этот параметр не влияет на 64-разрядный режим.

-mcpu=cpu_type

Задать набор инструкций, набор регистров и параметры планирования инструкций для типа машины cpu_type. Допустимые значения cpu_type: «v7», «cypress», «v8», «supersparc», «hypersparc», «leon», «leon3», «leon3v7», «leon5», «sparclite», «f930», «f934», «sparclite86x», «sparclet», «tsc701», «v9», «ultrasparc», «ultrasparc3», «niagara», «niagara2», «niagara3», «niagara4», «niagara7» и «m8».

В штатных наборах инструментов Solaris и GNU/Linux также поддерживается значение «native», которое выбирает оптимальный параметр архитектуры для процессора хост-системы. Параметр -mcpu=native не действует, если GCC не распознаёт процессор.

Для значений, задающих архитектуру, а не реализацию, используются параметры планирования инструкций по умолчанию. Это «v7», «v8», «sparclite», «sparclet», «v9».

Ниже приведён список поддерживаемых архитектур и соответствующих реализаций.

v7

cypress, leon3v7

v8

supersparc, hypersparc, leon, leon3, leon5

sparclite

f930, f934, sparclite86x

sparclet

tsc701

v9

ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7, m8

По умолчанию (если не задано иное при настройке) GCC генерирует код для варианта V7 архитектуры SPARC. При указании -mcpu=cypress компилятор дополнительно оптимизирует его для чипа Cypress CY7C602, используемого в серии SPARCStation/SPARCServer 3xx. Этот параметр также подходит для более старых SPARCStation 1, 2, IPX и других.

При указании -mcpu=v8 GCC генерирует код для варианта V8 архитектуры SPARC. Единственное отличие от кода V7 состоит в том, что компилятор выдаёт инструкции целочисленного умножения и деления, имеющиеся в SPARC-V8, но отсутствующие в SPARC-V7. При указании -mcpu=supersparc компилятор дополнительно оптимизирует код для чипа SuperSPARC, используемого в сериях SPARCStation 10, 1000 и 2000.

При указании -mcpu=sparclite GCC генерирует код для варианта SPARClite архитектуры SPARC. Добавляются инструкции целочисленного умножения, шага целочисленного деления и сканирования (ffs), имеющиеся в SPARClite, но отсутствующие в SPARC-V7. При указании -mcpu=f930 компилятор дополнительно оптимизирует код для чипа Fujitsu MB86930 — исходного SPARClite без FPU. При указании -mcpu=f934 компилятор дополнительно оптимизирует код для чипа Fujitsu MB86934 — более поздней версии SPARClite с FPU.

При указании -mcpu=sparclet GCC генерирует код для варианта SPARClet архитектуры SPARC. Добавляются инструкции целочисленного умножения, умножения с накоплением, шага целочисленного деления и сканирования (ffs), имеющиеся в SPARClet, но отсутствующие в SPARC-V7. При указании -mcpu=tsc701 компилятор дополнительно оптимизирует код для чипа TEMIC SPARClet.

При указании -mcpu=v9 GCC генерирует код для варианта V9 архитектуры SPARC. Добавляются 64-разрядные инструкции перемещения целых чисел и чисел с плавающей точкой, три дополнительных регистра кодов условий для чисел с плавающей точкой и инструкции условного перемещения. При указании -mcpu=ultrasparc компилятор дополнительно оптимизирует код для чипов Sun UltraSPARC I/II/IIi. При указании -mcpu=ultrasparc3 компилятор дополнительно оптимизирует код для чипов Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+. При указании -mcpu=niagara компилятор дополнительно оптимизирует код для чипов Sun UltraSPARC T1. При указании -mcpu=niagara2 компилятор дополнительно оптимизирует код для чипов Sun UltraSPARC T2. При указании -mcpu=niagara3 компилятор дополнительно оптимизирует код для чипов Sun UltraSPARC T3. При указании -mcpu=niagara4 компилятор дополнительно оптимизирует код для чипов Sun UltraSPARC T4. При указании -mcpu=niagara7 компилятор дополнительно оптимизирует код для чипов Oracle SPARC M7. При указании -mcpu=m8 компилятор дополнительно оптимизирует код для чипов Oracle M8.

-mtune=cpu_type

Задать параметры планирования инструкций для типа машины cpu_type, не задавая набор инструкций и набор регистров, которые задаёт параметр -mcpu=cpu_type.

Для -mtune=cpu_type можно использовать те же значения, что и для -mcpu=cpu_type, но полезны только те из них, которые выбирают конкретную реализацию процессора. Это «cypress», «supersparc», «hypersparc», «leon», «leon3», «leon3v7», «leon5», «f930», «f934», «sparclite86x», «tsc701», «ultrasparc», «ultrasparc3», «niagara», «niagara2», «niagara3», «niagara4», «niagara7» и «m8». В штатных наборах инструментов Solaris и GNU/Linux также можно использовать значение «native».

-mv8plus
-mno-v8plus

При указании -mv8plus GCC генерирует код для ABI SPARC-V8+. Отличие от ABI V8 состоит в том, что глобальные регистры и регистры вывода считаются 64-разрядными. В 32-разрядном режиме этот параметр включён по умолчанию в Solaris для всех процессоров SPARC-V9.

-mvis
-mno-vis

При указании -mvis GCC генерирует код, использующий расширения набора визуальных инструкций UltraSPARC. По умолчанию используется -mno-vis.

-mvis2
-mno-vis2

При указании -mvis2 GCC генерирует код, использующий версию 2.0 расширений набора визуальных инструкций UltraSPARC. По умолчанию используется -mvis2, если целевой процессор поддерживает такие инструкции, например UltraSPARC-III и более поздние. Указание -mvis2 также включает -mvis.

-mvis3
-mno-vis3

При указании -mvis3 GCC генерирует код, использующий версию 3.0 расширений набора визуальных инструкций UltraSPARC. По умолчанию используется -mvis3, если целевой процессор поддерживает такие инструкции, например niagara-3 и более поздние. Указание -mvis3 также включает -mvis2 и -mvis.

-mvis3b
-mno-vis3b

При указании -mvis3b GCC генерирует код, использующий версию 3.0 расширений набора визуальных инструкций UltraSPARC, а также дополнительные инструкции VIS, появившиеся в архитектуре Oracle SPARC 2011. По умолчанию используется -mvis3b, если целевой процессор поддерживает такие инструкции, например niagara-7 и более поздние. Указание -mvis3b также включает -mvis3, -mvis2 и -mvis.

-mvis4
-mno-vis4

При указании -mvis4 GCC генерирует код, использующий версию 4.0 расширений набора визуальных инструкций UltraSPARC. По умолчанию используется -mvis4, если целевой процессор поддерживает такие инструкции, например niagara-7 и более поздние. Указание -mvis4 также включает -mvis3b, -mvis3, -mvis2 и -mvis.

-mvis4b
-mno-vis4b

При указании -mvis4b GCC генерирует код, использующий версию 4.0 расширений набора визуальных инструкций UltraSPARC, а также дополнительные инструкции VIS, появившиеся в архитектуре Oracle SPARC 2017. По умолчанию используется -mvis4b, если целевой процессор поддерживает такие инструкции, например m8 и более поздние. Указание -mvis4b также включает -mvis4, -mvis3b, -mvis3, -mvis2 и -mvis.

-mcbcond
-mno-cbcond

При указании -mcbcond GCC генерирует код, использующий инструкции UltraSPARC сравнения и ветвления по условию. По умолчанию используется -mcbcond, если целевой процессор поддерживает такие инструкции, например Niagara-4 и более поздние.

-mfmaf
-mno-fmaf

При указании -mfmaf GCC генерирует код, использующий инструкции UltraSPARC объединённого умножения и сложения чисел с плавающей точкой. По умолчанию используется -mfmaf, если целевой процессор поддерживает такие инструкции, например Niagara-3 и более поздние.

-mfsmuld
-mno-fsmuld

При указании -mfsmuld GCC генерирует код, использующий инструкцию умножения числа с плавающей точкой одинарной точности на число двойной точности (FsMULd). По умолчанию используется -mfsmuld для целевых процессоров с FPU, поддерживающих версии архитектуры V8 или V9, за исключением -mcpu=leon.

-mpopc
-mno-popc

При указании -mpopc GCC генерирует код, использующий инструкцию подсчёта числа единичных битов UltraSPARC. По умолчанию используется -mpopc, если целевой процессор поддерживает такую инструкцию, например Niagara-2 и более поздние.

-msubxc
-mno-subxc

При указании -msubxc GCC генерирует код, использующий инструкцию UltraSPARC вычитания с расширением и переносом. По умолчанию используется -msubxc, если целевой процессор поддерживает такую инструкцию, например Niagara-7 и более поздние.

-mfix-at697f

Включить документированный обходной приём для единственной ошибки процессора Atmel AT697F (соответствующей ошибке № 13 процессора AT697E).

-mfix-ut699

Включить документированные обходные приёмы для ошибок FPU и ошибки аннулирования кэша данных процессора UT699.

-mfix-ut700

Включить документированный обходной приём для ошибки последовательной записи процессора UT699E/UT700.

-mfix-gr712rc

Включить документированный обходной приём для ошибки последовательной записи процессора GR712RC.

На процессорах SPARC-V9 в 64-разрядной среде, помимо перечисленных выше, поддерживаются следующие параметры «-m»:

-m32
-m64

Генерировать код для 32-разрядной или 64-разрядной среды. В 32-разрядной среде типы int, long и указатели имеют размер 32 бита. В 64-разрядной среде тип int имеет размер 32 бита, а long и указатели — 64 бита.

-mcmodel=which

Задать одну из следующих моделей кода:

«medlow»

Модель кода Medium/Low: 64-разрядные адреса; программы должны быть скомпонованы в нижних 32 битах памяти. Программы могут компоновываться статически или динамически.

«medmid»

Модель кода Medium/Middle: 64-разрядные адреса; программы должны быть скомпонованы в нижних 44 битах памяти, размер текстового сегмента и сегмента данных должен быть меньше 2 ГБ, а сегмент данных должен располагаться не далее чем в 2 ГБ от текстового сегмента.

«medany»

Модель кода Medium/Anywhere: 64-разрядные адреса; программы можно компоновать в любом месте памяти, размер текстового сегмента и сегмента данных должен быть меньше 2 ГБ, а сегмент данных должен располагаться не далее чем в 2 ГБ от текстового сегмента.

«embmedany»

Модель кода Medium/Anywhere для встраиваемых систем: 64-разрядные адреса; размер текстового сегмента и сегмента данных должен быть меньше 2 ГБ, оба сегмента могут начинаться в любом месте памяти (определяется во время компоновки). Глобальный регистр %g4 указывает на начало сегмента данных. Программы компонуются статически; PIC не поддерживается.

-mmemory-model=mem-model

Задать одну из следующих моделей памяти, используемых процессором:

«default»

Модель памяти процессора и операционной системы по умолчанию.

«rmo»

Ослабленный порядок памяти

«pso»

Частичный порядок записи

«tso»

Полный порядок записи

«sc»

Последовательная согласованность

Эти модели памяти формально определены в приложении D руководства по архитектуре SPARC-V9; они задаются полем PSTATE.MM процессора.

-mstack-bias
-mno-stack-bias

При указании -mstack-bias GCC предполагает, что указатель стека и, если он присутствует, указатель кадра смещены на −2047; при обращении к кадрам стека это смещение необходимо компенсировать. В 64-разрядном режиме этот параметр включён по умолчанию. В противном случае предполагается, что такого смещения нет.

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

Spec-Zone.ru

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