Spec-Zone.ru › GCC 14

3.19.22 Параметры 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 инструкций.

-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.

-msmall-data-limit=number

Поместить глобальные и статические данные размером меньше number байт в специальный раздел (на некоторых целевых платформах). Значение по умолчанию равно 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
END_OF_DOCUMENT_MARKER

Использовать (не использовать) релаксации линкера. Если включен -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. Обратите внимание, что, хотя производительность последовательности выше, чем производительность инструкции без использования приближений, точность последовательности может быть снижена до 2 единиц в последнем разряде (например, обратное значение 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.

--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-14.2.0/gcc/LoongArch-Options.html

Spec-Zone.ru

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