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