Spec-Zone.ru › GCC 15

3.20.23 Параметры LoongArch

Для целей LoongArch определены следующие параметры командной строки:

-march=arch-type

Генерировать инструкции для типа машины arch-type. Параметр -march=arch-type позволяет GCC генерировать код, который может вообще не работать на процессорах, отличных от указанного.

Для arch-type доступны следующие значения:

‘native’

Тип локального процессора, определённый нативным компилятором.

‘loongarch64’

Универсальный 64-разрядный процессор LoongArch.

‘la464’

Процессор на базе LoongArch LA464 с поддержкой LSX и LASX.

‘la664’

Процессор на базе LoongArch LA664 с поддержкой LSX, LASX и всех инструкций LoongArch v1.1.

‘la64v1.0’

Версия ISA LoongArch64 1.0.

‘la64v1.1’

Версия ISA LoongArch64 1.1.

Дополнительные сведения о версиях ISA LoongArch доступны по адресу https://github.com/loongson/la-toolchain-conventions.

-mtune=tune-type

Оптимизировать генерируемый код для указанного целевого процессора.

Для tune-type доступны следующие значения:

‘native’

Тип локального процессора, определённый нативным компилятором.

‘generic’

Универсальный процессор LoongArch.

‘loongarch64’

Универсальный 64-разрядный процессор LoongArch.

‘la464’

Ядро LoongArch LA464.

‘la664’

Ядро LoongArch LA664.

-mabi=base-abi-type

Генерировать код для указанного соглашения о вызовах. base-abi-type может принимать одно из следующих значений:

‘lp64d’

Для передачи параметров используются 64-разрядные регистры общего назначения и 32/64-разрядные регистры с плавающей точкой. Модель данных — LP64, в которой ‘int’ имеет размер 32 бита, а ‘long int’ и указатели — 64 бита.

‘lp64f’

Для передачи параметров используются 64-разрядные регистры общего назначения и 32-разрядные регистры с плавающей точкой. Модель данных — LP64, в которой ‘int’ имеет размер 32 бита, а ‘long int’ и указатели — 64 бита.

‘lp64s’

Для передачи параметров используются 64-разрядные регистры общего назначения, регистры с плавающей точкой не используются. Модель данных — LP64, в которой ‘int’ имеет размер 32 бита, а ‘long int’ и указатели — 64 бита.

-mfpu=fpu-type

Генерировать код для указанного типа FPU, который может принимать одно из следующих значений:

‘64’

Разрешить использование аппаратных инструкций с плавающей точкой для операций с 32- и 64-разрядными числами.

‘32’

Разрешить использование аппаратных инструкций с плавающей точкой для операций с 32-разрядными числами.

‘none’
‘0’

Запретить использование аппаратных инструкций с плавающей точкой.

-msimd=simd-type

Разрешить генерацию инструкций LoongArch SIMD для векторизации и встроенных функций. Значение может быть одним из следующих:

‘lasx’

Разрешить генерацию инструкций из 256-разрядного расширения LoongArch Advanced SIMD (LASX) и 128-разрядного расширения LoongArch SIMD (LSX).

‘lsx’

Разрешить генерацию инструкций из 128-разрядного расширения LoongArch SIMD (LSX).

‘none’

Запретить генерацию инструкций LoongArch SIMD.

-msoft-float

Принудительно установить -mfpu=none и запретить использование регистров с плавающей точкой для передачи параметров. Этот параметр может изменить целевой ABI.

-msingle-float

Принудительно установить -mfpu=32 и разрешить использование 32-разрядных регистров с плавающей точкой для передачи параметров. Этот параметр может изменить целевой ABI.

-mdouble-float

Принудительно установить -mfpu=64 и разрешить использование 32/64-разрядных регистров с плавающей точкой для передачи параметров. Этот параметр может изменить целевой ABI.

-mlasx
-mno-lasx
-mlsx
-mno-lsx

Постепенно изменять набор расширений SIMD (none / LSX / LASX), которые компилятор может использовать при генерации кода. Включение LASX с помощью mlasx автоматически включает LSX, а отключение LSX с помощью mno-lsx автоматически отключает LASX. Эти параметры, действующие только на уровне драйвера, применяются к итоговой конфигурации msimd и постепенно изменяют её в порядке появления в командной строке драйвера GCC, формируя итоговый / канонизированный параметр msimd, передаваемый непосредственно компилятору.

-mbranch-cost=n

Задать стоимость переходов примерно равной n инструкциям.

-maddr-reg-reg-cost=n

Задать стоимость ADDRESS_REG_REG равной значению, вычисленному по n.

-mcheck-zero-division
-mno-check-zero-divison

Вызывать (не вызывать) ловушку при делении целого числа на ноль. По умолчанию используется -mcheck-zero-division для -O0 или -Og и -mno-check-zero-division для остальных уровней оптимизации.

-mcond-move-int
-mno-cond-move-int

Условные перемещения целочисленных данных в регистрах общего назначения включены (отключены). По умолчанию используется -mcond-move-int.

-mcond-move-float
-mno-cond-move-float

Условные перемещения для регистров с плавающей точкой включены (отключены). По умолчанию используется -mcond-move-float.

-mmemcpy
-mno-memcpy

Принудительно использовать (не использовать) memcpy для перемещения блоков нетривиального размера. По умолчанию используется -mno-memcpy, что позволяет GCC встраивать большинство копирований с постоянным размером. Установка уровня оптимизации -Os также принудительно включает использование memcpy, однако явно указанный -mno-memcpy может переопределить это поведение независимо от порядка этих параметров в командной строке.

-mstrict-align
-mno-strict-align

Запретить или разрешить генерацию обращений к памяти, которые могут быть не выровнены по естественной границе объекта, как описано в спецификации архитектуры. По умолчанию используется -mno-strict-align.

-G num

Размещать глобальные и статические данные размером менее num байт в секции малых данных. Значение по умолчанию — 0.

-mmax-inline-memcpy-size=n

Встраивать все перемещения блоков (например, вызовы memcpy или копирование структур) размером не более n байт. Значение n по умолчанию — 1024.

-mcmodel=code-model

Задать одну из следующих моделей кода:

‘tiny-static (ещё не реализована)’
‘tiny (ещё не реализована)’
‘normal’

Текстовый сегмент должен находиться в пределах 128 МБ адресного пространства. Сегмент данных должен находиться в пределах 2 ГБ адресного пространства.

‘medium’

Текстовый сегмент и сегмент данных должны находиться в пределах 2 ГБ адресного пространства.

‘large (ещё не реализована)’
‘extreme’

В этом режиме размер сегмента кода и сегмента данных не ограничен. Параметр -mcmodel=extreme несовместим с -fplt и/или -mexplicit-relocs=none.

Модель кода по умолчанию — normal.

-mexplicit-relocs=style

Задать, когда использовать операторы перемещения ассемблера при работе с символьными адресами. Альтернативой является использование макросов ассемблера, которые могут ограничить планирование инструкций, но позволяют выполнять релаксацию компоновщиком. При -mexplicit-relocs=none всегда используются макросы ассемблера, при -mexplicit-relocs=always всегда используются операторы перемещения ассемблера, а при -mexplicit-relocs=auto компилятор использует операторы перемещения там, где релаксация компоновщиком невозможна, чтобы улучшить качество кода, а в остальных случаях — макросы. Значение параметра по умолчанию определяется возможностями ассемблера, обнаруженными во время сборки GCC, и настройкой -mrelax: -mexplicit-relocs=none, если ассемблер вообще не поддерживает операторы перемещения; -mexplicit-relocs=always, если ассемблер поддерживает операторы перемещения, но -mrelax не включён; -mexplicit-relocs=auto, если ассемблер поддерживает операторы перемещения и включён -mrelax.

-mexplicit-relocs

Псевдоним -mexplicit-relocs=always, оставленный для обратной совместимости.

-mno-explicit-relocs

Псевдоним -mexplicit-relocs=none, оставленный для обратной совместимости.

-mdirect-extern-access
-mno-direct-extern-access

Не использовать или использовать GOT для доступа к внешним символам. По умолчанию используется -mno-direct-extern-access: GOT используется для внешних символов с видимостью по умолчанию, но не для других внешних символов.

При использовании -mdirect-extern-access GOT не используется, и адресация всех внешних символов выполняется относительно PC. Этот параметр подходит только для сред, в которых динамическая компоновка не выполняется, например для встроенного ПО, ядер ОС и исполняемых файлов, скомпонованных с помощью -static или -static-pie. -mdirect-extern-access несовместим с -fPIC и -fpic.

-mrelax
-mno-relax

Использовать (не использовать) возможности релаксации компоновщика. Если включён параметр -mpass-mrelax-to-as, этот параметр также передаётся ассемблеру. Значение по умолчанию определяется во время сборки GCC путём проверки поддержки соответствующих возможностей ассемблером: -mrelax, если ассемблер поддерживает и параметр -mrelax, и релаксацию условных переходов (последняя необходима, иначе директивы .align и условные инструкции перехода в выводимом GCC ассемблерном коде могут быть отклонены ассемблером из-за переполнения перемещения); в противном случае используется -mno-relax.

-mpass-mrelax-to-as
-mno-pass-mrelax-to-as

Передавать (не передавать) ассемблеру параметр -mrelax или -mno-relax. Значение по умолчанию определяется во время сборки GCC путём проверки поддержки соответствующих возможностей ассемблером: -mpass-mrelax-to-as, если ассемблер поддерживает параметр -mrelax; в противном случае — -mno-pass-mrelax-to-as. Этот параметр в основном полезен для отладки или взаимодействия с ассемблерами, отличными от использовавшегося во время сборки.

-mrecip

Этот параметр разрешает использовать инструкции оценки обратной величины и оценки обратного квадратного корня с дополнительными шагами Ньютона — Рафсона для повышения точности вместо выполнения деления либо вычисления квадратного корня и деления для аргументов с плавающей точкой. Эти инструкции генерируются только при включённых параметрах -funsafe-math-optimizations, -ffinite-math-only и -fno-trapping-math. По умолчанию этот параметр выключен. Перед его использованием необходимо убедиться, что целевой процессор поддерживает инструкции frecipe и frsqrte. Обратите внимание: хотя пропускная способность этой последовательности выше, чем у нерекiproкной инструкции, её точность может снизиться на величину до 2 ulp (то есть обратная величина 1.0 равна 0.99999994).

-mrecip=opt

Этот параметр определяет, какие инструкции оценки обратной величины можно использовать. opt — список параметров, разделённых запятыми; перед параметром можно поставить ‘!’, чтобы инвертировать его действие:

‘all’

Включить все инструкции оценки.

‘default’

Включить инструкции по умолчанию; эквивалентно -mrecip.

‘none’

Отключить все инструкции оценки; эквивалентно -mno-recip.

‘div’

Включить аппроксимацию скалярного деления.

‘vec-div’

Включить аппроксимацию векторизованного деления.

‘sqrt’

Включить аппроксимацию скалярного квадратного корня.

‘vec-sqrt’

Включить аппроксимацию векторизованного квадратного корня.

‘rsqrt’

Включить аппроксимацию скалярного обратного квадратного корня.

‘vec-rsqrt’

Включить аппроксимацию векторизованного обратного квадратного корня.

Например, -mrecip=all,!sqrt включает все аппроксимации обратной величины, кроме скалярного квадратного корня.

-mfrecipe
-mno-frecipe

Использовать (не использовать) инструкции frecipe.{s/d} и frsqrte.{s/d}. При сборке с параметром -march=la664 этот параметр включён по умолчанию. По умолчанию используется -mno-frecipe.

-mdiv32
-mno-div32

Использовать (не использовать) инструкции div.w[u] и mod.w[u] с входными данными без расширения знака. При сборке с параметром -march=la664 этот параметр включён по умолчанию. По умолчанию используется -mno-div32.

-mlam-bh
-mno-lam-bh

Использовать (не использовать) инструкции am{swap/add}[_db].{b/h}. При сборке с параметром -march=la664 этот параметр включён по умолчанию. По умолчанию используется -mno-lam-bh.

-mlamcas
-mno-lamcas

Использовать (не использовать) инструкции amcas[_db].{b/h/w/d}. При сборке с параметром -march=la664 этот параметр включён по умолчанию. По умолчанию используется -mno-lamcas.

-mld-seq-sa
-mno-ld-seq-sa

Нужен ли барьер загрузка-загрузка для одного адреса (dbar 0x700). При сборке с параметром -march=la664 этот параметр включён по умолчанию. По умолчанию используется -mno-ld-seq-sa; барьер загрузка-загрузка необходим.

-mtls-dialect=opt

Этот параметр определяет, какой диалект TLS можно использовать для моделей TLS с общей и локальной динамической компоновкой.

‘trad’

Использовать традиционный TLS. Это значение используется по умолчанию.

‘desc’

Использовать дескрипторы TLS.

-mannotate-tablejump
-mno-annotate-tablejump

Создать секцию аннотаций .discard.tablejump_annotate для сопоставления инструкции jirl с таблицей переходов, если таблица переходов используется для оптимизации оператора switch. Некоторым внешним инструментам, например objtool системы сборки ядра Linux, необходима эта аннотация для анализа потока управления. По умолчанию используется -mno-annotate-tablejump.

--param loongarch-vect-unroll-limit=n

Векторизатор будет использовать доступные данные о настройке целевой платформы, чтобы определить, целесообразно ли разворачивать основной векторизованный цикл и насколько. Этот параметр задаёт верхнюю границу степени разворачивания основного цикла векторизатором. Значение по умолчанию — шесть.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/LoongArch-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API