3.19.47 SPARC Параметры
Эти параметры ‘-m’ поддерживаются на SPARC:
-
-mno-app-regs -mapp-regs-
Укажите -mapp-regs, чтобы сгенерировать вывод, используя глобальные регистры 2 по 4, которые SPARC SVR4 ABI зарезервировал для приложений. Как и глобальный регистр 1, каждый глобальный регистр 2 по 4 затем обрабатывается как регистр, который может быть выделен и который сброшен вызовами функций. Это значение по умолчанию.
Чтобы полностью соответствовать спецификации SVR4 ABI, с потерей производительности, укажите -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-
Предполагается, что двойные имеют выравнивание размером 8 байт. Это значение по умолчанию.
С -munaligned-doubles GCC предполагает, что двойные имеют выравнивание 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 генерирует код для ABI SPARC-V8+. Разница с ABI V8 заключается в том, что глобальные и выходные регистры считаются 64-битными. Это включено по умолчанию в Solaris в 32-битном режиме для всех процессоров SPARC-V9.
-
-mvis -mno-vis-
С -mvis, GCC генерирует код, который использует расширения набора инструкций UltraSPARC Visual. По умолчанию установлено -mno-vis.
-
-mvis2 -mno-vis2-
С -mvis2, GCC генерирует код, который использует расширения набора инструкций UltraSPARC Visual версии 2.0. По умолчанию установлено -mvis2, когда целевой процессор поддерживает такие инструкции, такие как UltraSPARC-III и более поздние. Установка -mvis2 также устанавливает -mvis.
-
-mvis3 -mno-vis3-
С -mvis3, GCC генерирует код, который использует расширения набора инструкций UltraSPARC Visual версии 3.0. По умолчанию установлено -mvis3, когда целевой процессор поддерживает такие инструкции, такие как niagara-3 и более поздние. Установка -mvis3 также устанавливает -mvis2 и -mvis.
-
-mvis4 -mno-vis4-
С -mvis4, GCC генерирует код, который использует расширения набора инструкций UltraSPARC Visual версии 4.0. По умолчанию установлено -mvis4, когда целевой процессор поддерживает такие инструкции, такие как niagara-7 и более поздние. Установка -mvis4 также устанавливает -mvis3, -mvis2 и -mvis.
-
-mvis4b -mno-vis4b-
С -mvis4b, GCC генерирует код, который использует расширения набора инструкций UltraSPARC Visual версии 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-14.2.0/gcc/SPARC-Options.html