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
-
Использовать (не использовать) релаксации линкера. Если включен -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