Spec-Zone.ru › GCC 4

3.17.44 Параметры SPARC

Эти параметры поддерживаются на SPARC:

-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). Вызываемые функции определены в SPARC ABI. Это значение по умолчанию.

На момент написания этой документации не существует реализаций 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. Это значение по умолчанию.
-mno-faster-structs
-mfaster-structs
С -mfaster-structs, компилятор предполагает, что структуры должны иметь выравнивание 8 байт. Это позволяет использовать пары инструкций ldd и std для копирования при присваивании структур вместо вдвое большего количества пар инструкций ld и st. Однако использование этого изменённого выравнивания напрямую нарушает SPARC ABI. Поэтому оно предназначено только для использования на целевых платформах, где разработчик признаёт, что полученный код не соответствует правилам ABI.
-mcpu=cpu_type
Установить набор инструкций, набор регистров и параметры планирования инструкций для типа машины cpu_type. Поддерживаемые значения для cpu_type — ‘v7’, ‘cypress’, ‘v8’, ‘supersparc’, ‘hypersparc’, ‘leon’, ‘leon3’, ‘leon3v7’, ‘sparclite’, ‘f930’, ‘f934’, ‘sparclite86x’, ‘sparclet’, ‘tsc701’, ‘v9’, ‘ultrasparc’, ‘ultrasparc3’, ‘niagara’, ‘niagara2’, ‘niagara3’ и ‘niagara4’.

Нативные Solaris и GNU/Linux инструментарии также поддерживают значение ‘native’, которое выбирает наилучший вариант архитектуры для процессора-хоста. -mcpu=native не имеет эффекта, если GCC не распознаёт процессор.

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

Вот список каждой поддерживаемой архитектуры и их поддерживаемых реализаций.

v7
cypress, leon3v7
v8
supersparc, hypersparc, leon, leon3
sparclite
f930, f934, sparclite86x
sparclet
tsc701
v9
ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4

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

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

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

-mv8plus
-mno-v8plus
С -mv8plus, GCC генерирует код для SPARC-V8+ ABI. Отличие от V8 ABI заключается в том, что глобальные и выходные регистры считаются 64-битовыми. Это включено по умолчанию в Solaris в 32-битном режиме для всех процессоров SPARC-V9.
-mvis
-mno-vis
С -mvis, GCC генерирует код, который использует расширения UltraSPARC Visual Instruction Set. Значение по умолчанию — -mno-vis.
-mvis2
-mno-vis2
С -mvis2, GCC генерирует код, который использует расширения UltraSPARC Visual Instruction Set версии 2.0. По умолчанию — -mvis2, когда целевой процессор поддерживает такие инструкции, такие как UltraSPARC-III и новее. Установка -mvis2 также устанавливает -mvis.
-mvis3
-mno-vis3
С -mvis3, GCC генерирует код, который использует расширения UltraSPARC Visual Instruction Set версии 3.0. По умолчанию — -mvis3, когда целевой процессор поддерживает такие инструкции, такие как niagara-3 и новее. Установка -mvis3 также устанавливает -mvis2 и -mvis.
-mcbcond
-mno-cbcond
С -mcbcond, GCC генерирует код, который использует инструкции сравнения и перехода, как определено в архитектуре Sparc 2011. По умолчанию — -mcbcond, когда целевой процессор поддерживает такие инструкции, такие как niagara-4 и новее.
-mpopc
-mno-popc
С помощью -mpopc, GCC генерирует код, использующий инструкцию UltraSPARC подсчёта единиц. По умолчанию используется -mpopc, когда цель — процессор, поддерживающий такие инструкции, например, Niagara-2 и более поздние.
-mfmaf
-mno-fmaf
С помощью -mfmaf, GCC генерирует код, использующий расширения UltraSPARC для умножения с последующим сложением (Fused Multiply-Add) с плавающей точкой. По умолчанию используется -mfmaf, когда цель — процессор, поддерживающий такие инструкции, например, Niagara-3 и более поздние.
-mfix-at697f
Включить документированное решение для единственного ошибочного случая процессора Atmel AT697F (соответствует ошибочному случаю #13 процессора AT697E).
-mfix-ut699
Включить документированные решения для ошибок с плавающей точкой и ошибок с нулевым кэшем данных процессора UT699.

Эти параметры ‘-m’ поддерживаются в дополнение к вышеперечисленным на процессорах SPARC-V9 в 64-битных средах:

-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-4.9.4/gcc/SPARC-Options.html

Spec-Zone.ru

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