3.18.48 Параметры 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-
Предполагается, что у переменных типа 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.
-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’, ‘niagara7’ и ‘m8’.
Родные 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, 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’, ‘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 заключается в том, что регистры глобальных и выходных данных рассматриваются как 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 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-битном режиме. В противном случае предполагается, что такого смещения нет.
Далее: Параметры SPU, Предыдущий: Параметры Solaris 2, Вверх: Параметры подмоделей [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/SPARC-Options.html