3.18.44 Параметры 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. Однако использование этого изменённого выравнивания напрямую нарушает SPARC ABI. Поэтому предполагается использование только на тех целевых платформах, где разработчик осознаёт, что полученный код не соответствует правилам ABI. -mstd-struct-return-mno-std-struct-return-
С -mstd-struct-return, компилятор генерирует код проверки в функциях, возвращающих структуры или объединения, для обнаружения несоответствий размера между двумя сторонами вызовов функций, как указано в 32-битной ABI.
По умолчанию используется -mno-std-struct-return. Этот параметр не оказывает влияния в 64-битном режиме.
-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’.
В родных средах 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
По умолчанию (если не настроено иначе) 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.
-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’. В родных средах 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 версии 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.
-mcbcond-mno-cbcond-
С -mcbcond, GCC генерирует код, который использует инструкции сравнения и перехода, как определено в архитектуре Sparc 2011. По умолчанию -mcbcond используется при нацеливании на процессор, поддерживающий такие инструкции, такие как niagara-4 и более поздние.
-mpopc-mno-popc-
С -mpopc, GCC генерирует код, который использует инструкцию подсчета битов UltraSPARC. По умолчанию -mpopc используется при нацеливании на процессор, поддерживающий такие инструкции, такие как Niagara-2 и более поздние.
-mfmaf-mno-fmaf-
С -mfmaf, GCC генерирует код, который использует расширения UltraSPARC для плавающей точки слияния умножения-сложения. По умолчанию -mfmaf используется при нацеливании на процессор, поддерживающий такие инструкции, такие как Niagara-3 и более поздние.
-mfix-at697f-
Включить документированное решение для единственного сбоя процессора Atmel AT697F (что соответствует сбою #13 процессора AT697E).
-mfix-ut699-
Включить документированные решения для ошибок плавающей точки и ошибок обнуления кэша данных процессора UT699.
Эти опции ‘-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-6.5.0/gcc/SPARC-Options.html