3.19.50 Параметры 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-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. Это значение по умолчанию. -mfaster-structs-mno-faster-structs-
С -mfaster-structs, компилятор предполагает, что структуры должны иметь выравнивание 8 байт. Это позволяет использовать пары инструкций
lddиstdдля копирования в присваивании структуры вместо вдвое большего количества парldиst. Однако, использование этого изменённого выравнивания напрямую нарушает SPARC ABI. Поэтому это предназначено только для использования в тех целях, где разработчик признаёт, что полученный код напрямую не соответствует правилам ABI. -mstd-struct-return-mno-std-struct-return-
С -mstd-struct-return, компилятор генерирует код проверки в функциях, возвращающих структуры или объединения, для обнаружения несоответствий размера между двумя сторонами вызовов функций, в соответствии с 32-битной ABI.
Значение по умолчанию — -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. Отличие от 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.
-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’
-
Расслабленный порядок памяти
- ‘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-10.5.0/gcc/SPARC-Options.html