3.19.51 Параметры SPARC
Эти параметры «-m» поддерживаются на 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-msoft-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. Это значение по умолчанию. -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 компилятор генерирует код проверки в функциях, возвращающих структуры или объединения, чтобы обнаружить несоответствие размеров между двумя сторонами вызовов функций, согласно ABI 32-бит.
Значение по умолчанию — -mno-std-struct-return. Этот параметр не влияет в 64-битном режиме.
-mlra-mno-lra-
Включить локальное выделение регистров. По умолчанию для SPARC начиная с GCC 7, поэтому -mno-lra необходимо передать, чтобы получить старый Reload.
-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-битных целых чисел и чисел с плавающей запятой, 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. С -mcpu=niagara7 компилятор дополнительно оптимизирует его для чипов Oracle SPARC M7. С -mcpu=m8 компилятор дополнительно оптимизирует его для чипов Oracle M8.
-mtune=cpu_type-
Установить параметры планирования инструкций для типа машины cpu_type, но не устанавливать набор инструкций или набор регистров, который устанавливает параметр -mcpu=cpu_type.
Те же значения, что и для -mcpu=cpu_type, могут использоваться для -mtune=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 генерирует код для SPARC-V8+ ABI. Отличие от ABI V8 заключается в том, что регистры global и out считаются 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.
-mvis4-mno-vis4-
С -mvis4, GCC генерирует код, использующий расширения набора инструкций UltraSPARC Visual Instruction Set версии 4.0. По умолчанию -mvis4 используется при нацеливании на процессор, поддерживающий такие инструкции, такие как niagara-7 и более поздние версии. Установка -mvis4 также устанавливает -mvis3, -mvis2 и -mvis.
-mvis4b-mno-vis4b-
С -mvis4b, GCC генерирует код, использующий расширения набора инструкций UltraSPARC Visual Instruction Set версии 4.0, плюс дополнительные инструкции VIS, представленные в архитектуре Oracle SPARC 2017. По умолчанию -mvis4b используется при нацеливании на процессор, поддерживающий такие инструкции, такие как m8 и более поздние версии. Установка -mvis4b также устанавливает -mvis4, -mvis3, -mvis2 и -mvis.
-mcbcond-mno-cbcond-
С -mcbcond, GCC генерирует код, использующий инструкции UltraSPARC Compare-and-Branch-on-Condition. По умолчанию -mcbcond используется при нацеливании на процессор, поддерживающий такие инструкции, такие как Niagara-4 и более поздние версии.
-mfmaf-mno-fmaf-
С -mfmaf, GCC генерирует код, использующий инструкции UltraSPARC Fused Multiply-Add Floating-point. По умолчанию -mfmaf используется при нацеливании на процессор, поддерживающий такие инструкции, такие как Niagara-3 и более поздние версии.
-mfsmuld-mno-fsmuld-
С -mfsmuld, GCC генерирует код, использующий инструкцию Floating-point Multiply Single to Double (FsMULd). По умолчанию -mfsmuld используется при нацеливании на процессор, поддерживающий архитектуры V8 или V9 с FPU, за исключением -mcpu=leon.
-mpopc-mno-popc-
С -mpopc, GCC генерирует код, использующий инструкцию UltraSPARC Population Count. По умолчанию -mpopc используется при нацеливании на процессор, поддерживающий такую инструкцию, такие как Niagara-2 и более поздние версии.
-msubxc-mno-subxc-
С -msubxc, GCC генерирует код, использующий инструкцию UltraSPARC Subtract-Extended-with-Carry. По умолчанию -msubxc используется при нацеливании на процессор, поддерживающий такую инструкцию, такие как Niagara-7 и более поздние версии.
-mfix-at697f-
Включить документированное решение для единственного сбоя процессора Atmel AT697F (что соответствует сбою #13 процессора AT697E).
-mfix-ut699-
Включить документированные решения для ошибок с плавающей точкой и ошибок сброса кэша данных процессора UT699.
-mfix-ut700-
Включить документированное решение для ошибки последовательных операций записи процессора UT699E/UT700.
-mfix-gr712rc-
Включить документированное решение для ошибки последовательных операций записи процессора GR712RC.
Эти параметры ‘-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’
-
Relaxed Memory Order (Расслабленный порядок памяти)
- ‘pso’
-
Partial Store Order (Частичный порядок записи)
- ‘tso’
-
Total Store Order (Полный порядок записи)
- ‘sc’
Sequential Consistency (Последовательная согласованность)
Эти модели памяти формально определены в приложении D руководства по архитектуре SPARC-V9, как задано в поле
PSTATE.MMпроцессора. -mstack-bias-mno-stack-bias-
С -mstack-bias, GCC предполагает, что указатель стека и указатель фрейма, если он присутствует, смещены на -2047, которые необходимо добавить обратно при ссылке на кадр стека. Это значение по умолчанию в 64-битном режиме. В противном случае предполагается, что такого смещения нет.
Далее: Параметры System V, Предыдущее: Параметры Solaris 2, Вверх: Параметры подмоделей [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/SPARC-Options.html