3.18.45 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-
Предполагается, что у doubles есть выравнивание 8 байт. Это значение по умолчанию.
С -munaligned-doubles, GCC предполагает, что у doubles есть выравнивание 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, компилятор генерирует код проверки в функциях, возвращающих структуры или объединения, для обнаружения несовпадений размеров между двумя сторонами вызовов функций, согласно 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», «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 генерирует код для ABI SPARC-V8+. Разница с ABI V8 заключается в том, что глобальные и выходные регистры рассматриваются как 64-битные. Это включено по умолчанию в Solaris в 32-битном режиме для всех процессоров SPARC-V9.
-mvis-mno-vis-
С -mvis, GCC генерирует код, который использует расширения набора визуальных инструкций UltraSPARC. По умолчанию используется -mno-vis.
-mvis2-mno-vis2-
С -mvis2, GCC генерирует код, который использует расширения набора визуальных инструкций UltraSPARC версии 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-разрядном режиме. В противном случае предполагается, что такого смещения нет.
Далее: Параметры SPU, Предыдущее: Параметры Solaris 2, Вверх: Параметры субмодели [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/SPARC-Options.html