Spec-Zone.ru › GCC 14

3.19.40 RISC-V Параметры

Эти параметры командной строки определены для целей RISC-V:

-mbranch-cost=n

Устанавливает стоимость ветвлений примерно в n инструкций.

-mplt
-mno-plt

При генерации кода PIC разрешать или запрещать использование PLT. Игнорируется для не-PIC. По умолчанию используется -mplt.

-mabi=ABI-string

Указывает соглашение о вызовах для целочисленных и чисел с плавающей точкой. ABI-string содержит две части: размер целочисленных типов и регистры, используемые для типов с плавающей точкой. Например, ‘-march=rv64ifd -mabi=lp64d’ означает, что ‘long’ и указатели имеют 64 бита (явно определяя ‘int’ как 32 бита), и что значения с плавающей точкой до 64 бит передаются в регистрах F. В отличие от ‘-march=rv64ifd -mabi=lp64f’, который всё ещё позволяет компилятору генерировать код, использующий расширения F и D, но позволяет передавать только значения с плавающей точкой до 32 бит в регистрах; или ‘-march=rv64ifd -mabi=lp64’, в котором никакие аргументы с плавающей точкой не будут переданы в регистрах.

По умолчанию этот аргумент зависит от системы, пользователи, которые хотят определённое соглашение о вызовах, должны указать его явно. Допустимые соглашения о вызовах: ‘ilp32’, ‘ilp32f’, ‘ilp32d’, ‘lp64’, ‘lp64f’ и ‘lp64d’. Некоторые соглашения о вызовах невозможно реализовать на некоторых ISA: например, ‘-march=rv32if -mabi=ilp32d’ недопустимо, потому что соглашение о вызовах требует, чтобы значения 64 бит передавались в регистрах F, но регистры F имеют только 32 бита. Также существуют соглашения о вызовах ‘ilp32e’, которые могут использоваться только с архитектурой ‘rv32e’ и ‘lp64e’, которые могут использоваться только с ‘rv64e’. Эти соглашения о вызовах пока не хорошо определены и могут быть изменены.

-mfdiv
-mno-fdiv

Использовать или не использовать аппаратные инструкции для деления и извлечения квадратного корня чисел с плавающей точкой. Это требует расширений F или D для регистров с плавающей точкой. По умолчанию они используются, если в указанной архитектуре есть эти инструкции.

-mdiv
-mno-div

Использовать или не использовать аппаратные инструкции для целочисленного деления. Это требует расширения M. По умолчанию они используются, если в указанной архитектуре есть эти инструкции.

-misa-spec=ISA-spec-string

Указывает версию спецификации ISA RISC-V без привилегий (ранее уровень пользователя) для создания кода, соответствующего спецификации. Возможные значения для ISA-spec-string:

2.2

Генерировать код, соответствующий версии 2.2.

20190608

Генерировать код, соответствующий версии 20190608.

20191213

Генерировать код, соответствующий версии 20191213.

По умолчанию используется -misa-spec=20191213, если GCC не был сконфигурирован с --with-isa-spec=, задающим другой вариант по умолчанию.

-march=ISA-string

Генерировать код для заданной ISA RISC-V (например, ‘rv64im’). Строки ISA должны быть в нижнем регистре. Примеры: ‘rv64i’, ‘rv32g’, ‘rv32e’ и ‘rv32imaf’. Кроме того, принимается специальное значение help (-march=help) для вывода списка всех поддерживаемых расширений.

Синтаксис строки ISA определён следующим образом:

The string must start with ‘rv32’ or ‘rv64’, followed by

‘i’, ‘e’ или ‘g’, называемые базовой ISA.

The subsequent part of the string is a list of extension names. Extension

имена могут быть разделены на многобуквенные (например, ‘zba’) и однобуквенные (например, ‘v’). Однобуквенные расширения могут появляться последовательно, но многобуквенные расширения должны быть разделены подчёркиваниями.

An underscore can appear anywhere after the base ISA. It has no specific

имеют эффект, но используются для улучшения читаемости и могут использоваться как разделители.

Extension names may include an optional version number, following the

синтаксис ‘<major>p<minor>’ или ‘<major>’ (например, ‘m2p1’ или ‘m2’).

Поддерживаемые расширения перечислены ниже:

Имя расширения Поддерживаемая версия Описание
i 2.0, 2.1 Базовое расширение для целых чисел.
e 2.0 Уменьшенное базовое расширение для целых чисел.
g - Базовое расширение для общих вычислений, ‘g’ будет расширено до ‘i’, ‘m’, ‘a’, ‘f’, ‘d’, ‘zicsr’ и ‘zifencei’.
m 2.0 Расширение для умножения и деления целых чисел.
a 2.0, 2.1 Расширение атомарных операций.
f 2.0, 2.2 Расширение для операций с плавающей точкой одинарной точности.
d 2.0, 2.2 Расширение для операций с плавающей точкой двойной точности.
c 2.0 Расширение сжатия.
h 1.0 Расширение для гипервизора.
v 1.0 Расширение для векторов.
zicsr 2.0 Расширение доступа к регистрам управления и состояния.
zifencei 2.0 Расширение барьера для выборки инструкций.
zicond 1.0 Расширение для условных операций с целыми числами.
za64rs 1.0 Размер набора резервирования 64 байта.
za128rs 1.0 Размер набора резервирования 128 байт.
zawrs 1.0 Расширение ожидания набора резервирования.
zba 1.0 Расширение для вычисления адресов.
zbb 1.0 Базовое расширение для манипулирования битами.
zbc 1.0 Расширение для безмасового умножения.
zbs 1.0 Расширение для операций с одиночными битами.
zfinx 1.0 Расширение для операций с плавающей точкой одинарной точности в регистрах целых чисел.
zdinx 1.0 Расширение для операций с плавающей точкой двойной точности в регистрах целых чисел.
zhinx 1.0 Расширение для операций с плавающей точкой полуторной точности в регистрах целых чисел.
zhinxmin 1.0 Минимальное расширение для операций с плавающей точкой полуторной точности в регистрах целых чисел.
zbkb 1.0 Расширение криптографии для манипулирования битами.
zbkc 1.0 Расширение криптографии для безмасового умножения.
zbkx 1.0 Расширение криптографии для перестановки кроссбара.
zkne 1.0 Расширение для шифрования AES.
zknd 1.0 Расширение для дешифрования AES.
zknh 1.0 Расширение для функции хэширования.
zkr 1.0 Расширение для источника энтропии.
zksed 1.0 Расширение для блочного шифра SM4.
zksh 1.0 Расширение для функции хэширования SM3.
zkt 1.0 Расширение задержки выполнения независимо от данных.
zk 1.0 Стандартное расширение для скалярной криптографии.
zkn 1.0 Расширение набора алгоритмов NIST.
zks 1.0 Расширение набора алгоритмов ShangMi.
zihintntl 1.0 Расширение подсказок для невременной локальности.
zihintpause 1.0 Расширение подсказки паузы.
zicboz 1.0 Расширение нулевого значения блока кэша.
zicbom 1.0 Расширение управления блоком кэша.
zicbop 1.0 Расширение предварительной выборки блока кэша.
zic64b 1.0 Размер блока кэша 64 байта.
ziccamoa 1.0 Основная память поддерживает все атомарные операции в A.
ziccif 1.0 Основная память поддерживает выборку инструкций с требованием атомарности.
zicclsm 1.0 Основная память поддерживает невыровненные загрузки/сохранения.
ziccrse 1.0 Основная память поддерживает поступательное продвижение в последовательностях LR/SC.
zicntr 2.0 Стандартное расширение для базовых счетчиков и таймеров.
zihpm 2.0 Стандартное расширение для счетчиков производительности аппаратного обеспечения.
ztso 1.0 Расширение для полного упорядочения сохранений.
zve32x 1.0 Расширения векторов для встроенных процессоров.
zve32f 1.0 Расширения векторов для встроенных процессоров.
zve64x 1.0 Расширения векторов для встроенных процессоров.
zve64f 1.0 Расширения векторов для встроенных процессоров.
zve64d 1.0 Расширения векторов для встроенных процессоров.
zvl32b 1.0 Стандартные расширения минимальной длины вектора.
zvl64b 1.0 Стандартные расширения минимальной длины вектора.
zvl128b 1.0 Стандартные расширения минимальной длины вектора.
zvl256b 1.0 Стандартные расширения минимальной длины вектора.
zvl512b 1.0 Стандартные расширения минимальной длины вектора.
zvl1024b 1.0 Стандартные расширения минимальной длины вектора.
zvl2048b 1.0 Стандартные расширения минимальной длины вектора.
zvl4096b 1.0 Стандартные расширения минимальной длины вектора.
zvbb 1.0 Расширение векторной базовой манипуляции битами.
zvbc 1.0 Расширение векторного безмассового умножения.
zvkb 1.0 Расширение криптографии векторной манипуляции битами.
zvkg 1.0 Расширение GCM/GMAC для векторов.
zvkned 1.0 Расширение блочного шифра AES для векторов.
zvknha 1.0 Расширение безопасного хэширования SHA-2 для векторов.
zvknhb 1.0 Расширение безопасного хэширования SHA-2 для векторов.
zvksed 1.0 Расширение блочного шифра SM4 для векторов.
zvksh 1.0 Расширение безопасного хэширования SM3 для векторов.
zvkn 1.0 Расширение набора алгоритмов NIST для векторов, ‘zvkn’ расширяется до ‘zvkned’, ‘zvknhb’, ‘zvkb’ и ‘zvkt’.
zvknc 1.0 Расширение набора алгоритмов NIST для векторов с безмассовым умножением, ‘zvknc’ расширяется до ‘zvkn’ и ‘zvbc’.
zvkng 1.0 Расширение набора алгоритмов NIST для векторов с расширением GCM, ‘zvkng’ расширяется до ‘zvkn’ и ‘zvkg’.
zvks 1.0 Расширение набора алгоритмов ShangMi для векторов, ‘zvks’ расширяется до ‘zvksed’, ‘zvksh’, ‘zvkb’ и ‘zvkt’.
zvksc 1.0 Расширение набора алгоритмов ShangMi для векторов с безмассовым умножением, ‘zvksc’ расширяется до ‘zvks’ и ‘zvbc’.
zvksg 1.0 Расширение набора алгоритмов ShangMi для векторов с расширением GCM, ‘zvksg’ расширяется до ‘zvks’ и ‘zvkg’.
zvkt 1.0 Расширение задержки выполнения независимо от данных для векторов.
zfh 1.0 Расширение для операций с плавающей точкой полуторной точности.
zfhmin 1.0 Минимальное расширение для операций с плавающей точкой полуторной точности.
zvfh 1.0 Расширение для операций с плавающей точкой полуторной точности для векторов.
zvfhmin 1.0 Минимальное расширение для операций с плавающей точкой полуторной точности для векторов.
zvfbfmin 1.0 Расширение преобразования BF16 для векторов.
zfa 1.0 Дополнительное расширение для операций с плавающей точкой.
zmmul 1.0 Расширение для умножения целых чисел.
zca 1.0 Целочисленное расширение сжатых инструкций.
zcf 1.0 Расширение для сжатых загрузки и сохранения чисел с одинарной точностью с плавающей запятой.
zcd 1.0 Расширение для сжатых загрузки и сохранения чисел с двойной точностью с плавающей запятой.
zcb 1.0 Простое расширение сжатых инструкций.
zce 1.0 Расширения сжатых инструкций для встроенных процессоров.
zcmp 1.0 Расширение для сжатых инструкций push и pop.
zcmt 1.0 Расширение инструкции перехода к таблице.
smaia 1.0 Расширение архитектуры прерываний высокого уровня.
smepmp 1.0 Расширения PMP для предотвращения доступа к памяти и выполнение кода в режиме машины.
smstateen 1.0 Расширение разрешения состояния.
ssaia 1.0 Расширение архитектуры прерываний высокого уровня для режима супервизора.
sscofpmf 1.0 Расширение для подсчета переполнений и фильтрации.
ssstateen 1.0 Расширение разрешения состояния для режима супервизора.
sstc 1.0 Расширение прерываний таймера режима супервизора.
svinval 1.0 Расширение для отмены кэша трансляции адресов с высокой точностью.
svnapot 1.0 Расширение для трансляции непрерывности NAPOT.
svpbmt 1.0 Расширение для типов памяти на основе страниц.
xcvmac 1.0 Расширение Core-V для умножения и накопления.
xcvalu 1.0 Расширение Core-V для прочих операций ALU.
xcvelw 1.0 Расширение Core-V для загрузки слова с событиями.
xtheadba 1.0 Расширение T-head для вычисления адресов.
xtheadbb 1.0 Расширение T-head для базовых операций манипулирования битами.
xtheadbs 1.0 Расширение T-head для инструкций с одиночными битами.
xtheadcmo 1.0 Расширение T-head для операций управления кэшем.
xtheadcondmov 1.0 Расширение T-head для условного перемещения.
xtheadfmemidx 1.0 Расширение T-head для индексированных операций памяти для регистров с плавающей запятой.
xtheadfmv 1.0 Расширение T-head для передачи данных с двойной плавающей запятой и старшими битами.
xtheadint 1.0 Расширение T-head для ускорения прерываний.
xtheadmac 1.0 Расширение T-head для умножения и накопления.
xtheadmemidx 1.0 Расширение T-head для индексированных операций памяти.
xtheadmempair 1.0 Расширение T-head для операций памяти с двумя регистрами GPR.
xtheadsync 1.0 Расширение T-head для синхронизации многоядерных систем.
xventanacondops 1.0 Расширение Ventana для целочисленных условных операций.

Если -march= не указано, используется значение из -mcpu.

Если ни -march, ни -mcpu= не указаны, значение по умолчанию зависит от системы. Пользователи, желающие использовать определённые расширения архитектуры, должны явно указать их.

-mcpu=processor-string

Используйте архитектуру и оптимизируйте выходные данные для заданного процессора, указанного конкретным именем процессора. Допустимые значения для этого параметра: ‘sifive-e20’, ‘sifive-e21’, ‘sifive-e24’, ‘sifive-e31’, ‘sifive-e34’, ‘sifive-e76’, ‘sifive-s21’, ‘sifive-s51’, ‘sifive-s54’, ‘sifive-s76’, ‘sifive-u54’, ‘sifive-u74’, ‘sifive-x280’, ‘sifive-xp450’, ‘sifive-x670’.

Обратите внимание, что -mcpu не переопределяет -march или -mtune.

-mtune=processor-string

Оптимизируйте выходные данные для заданного процессора, указанного микроархитектурой или конкретным именем процессора. Допустимые значения для этого параметра: ‘rocket’, ‘sifive-3-series’, ‘sifive-5-series’, ‘sifive-7-series’, ‘thead-c906’, ‘size’, ‘sifive-p400-series’, ‘sifive-p600-series’, и все допустимые значения для -mcpu=.

Если -mtune= не указано, используется значение из -mcpu; по умолчанию — ‘rocket’ при отсутствии обоих.

Выбор ‘size’ не предназначен для использования конечными пользователями. Он используется, когда указан -Os. Он переопределяет информацию о стоимости инструкций, предоставленную -mtune=, но не переопределяет информацию о конвейере. Это помогает уменьшить размер кода, сохраняя при этом хорошую производительность.

-mpreferred-stack-boundary=num

Попытаться выровнять границу стека по границе, кратной 2 в степени num байт. Если -mpreferred-stack-boundary не указано, по умолчанию используется 4 (16 байт или 128 бит).

Предупреждение: Если вы используете этот параметр, то все модули, включая библиотеки и модули инициализации, должны быть скомпилированы с одинаковым значением.

-msmall-data-limit=n

Поместить глобальные и статические данные, меньшие, чем n байт, в специальный раздел (на некоторых целевых платформах).

-msave-restore
-mno-save-restore

Использовать или не использовать более короткий, но медленный пролог и эпилог, использующий вызовы функций из библиотеки. По умолчанию используются быстрые встроенные прологи и эпилоги.

-mmovcc
-mno-movcc

Генерировать или не генерировать бесветвящиеся последовательности кода с условным перемещением, даже на целевых платформах, не имеющих специальных инструкций для условных операций. Если включено, последовательности операций ALU генерируются с использованием базовых целочисленных инструкций ISA, если это выгодно.

-minline-atomics
-mno-inline-atomics

Использовать или не использовать более короткий, но медленный эмуляционный код подсловных атомарных операций, использующий вызовы функций из libatomic. По умолчанию используются быстрые встроенные подсловные атомарные операции, не требующие libatomic.

-minline-strlen
-mno-inline-strlen

Вставлять или не вставлять вызовы strlen, если это возможно. Вставка будет выполнена только в том случае, если строка правильно выровнена и доступны инструкции для ускоренной обработки. По умолчанию вызовы strlen не вставляются.

-minline-strcmp
-mno-inline-strcmp

Вставлять или не вставлять вызовы strcmp, если это возможно. Вставка будет выполнена только в том случае, если строки правильно выровнены и доступны инструкции для ускоренной обработки. По умолчанию вызовы strcmp не вставляются.

Параметр --param riscv-strcmp-inline-limit=n контролирует максимальное количество сравниваемых байт вставляемым кодом. Значение по умолчанию равно 64.

-minline-strncmp
-mno-inline-strncmp

Вставлять или не вставлять вызовы strncmp, если это возможно. Вставка будет выполнена только в том случае, если строки правильно выровнены и доступны инструкции для ускоренной обработки. По умолчанию вызовы strncmp не вставляются.

Параметр --param riscv-strcmp-inline-limit=n контролирует максимальное количество сравниваемых байт вставляемым кодом. Значение по умолчанию равно 64.

-mshorten-memrefs
-mno-shorten-memrefs

Использовать или не использовать сжатые инструкции загрузки/сохранения, заменяя загрузку/сохранение «базовый регистр + большой офсет» на новую загрузку/сохранение «новый базовый + малый офсет». Если новый базовый регистр помещается в сжатый регистр, то новая загрузка/сохранение может быть сжатой. В настоящее время поддерживается только 32-битная целочисленная загрузка/сохранение.

-mstrict-align
-mno-strict-align

Не генерировать или генерировать обращения к памяти с невыровненным адресом. По умолчанию значение устанавливается в зависимости от того, поддерживает ли процессор, для которого производится оптимизация, быстрый доступ к невыровненным данным или нет.

-mcmodel=medlow

Генерировать код для средней модели кода (низкая сложность). Программа и её статически определённые символы должны лежать в одном 2-гигабайтном адресном пространстве и между абсолютными адресами −2 ГиБ и +2 ГиБ. Программы могут быть статически или динамически скомпонованы. Это модель кода по умолчанию.

-mcmodel=medany

Генерировать код для средней модели кода (любой). Программа и её статически определённые символы должны лежать в любом 2-гигабайтном адресном пространстве. Программы могут быть статически или динамически скомпонованы.

Код, сгенерированный с помощью модели кода «средняя, любая», является позиционно-независимым, но не гарантируется, что он будет работать корректно при компоновке в позиционно-независимые исполняемые файлы или библиотеки.

-mexplicit-relocs
-mno-exlicit-relocs

Использовать или не использовать операторы перемещения ассемблера при работе со символическими адресами. Альтернатива — использование макросов ассемблера, что может ограничить оптимизацию.

-mrelax
-mno-relax

Используйте релаксации линковщика, чтобы уменьшить количество инструкций, необходимых для получения адресов символов. По умолчанию используются релаксации линковщика.

-mriscv-attribute
-mno-riscv-attribute

Выводить (не выводить) атрибуты RISC-V для записи дополнительной информации в объекты ELF. Для этой функции требуется как минимум binutils 2.32.

-mcsr-check
-mno-csr-check

Включает или отключает проверку CSR.

-malign-data=type

Управление выравниванием переменных и констант массивов, структур или объединений GCC. Поддерживаемые значения для type — ‘xlen’ (используется ширина регистра x как значение выравнивания) и ‘natural’ (используется естественное выравнивание). По умолчанию используется ‘xlen’.

-mbig-endian

Генерировать код в формате big-endian. По умолчанию, когда GCC сконфигурирован для целевого процессора ‘riscv64be-*-*’ или ‘riscv32be-*-*’.

-mlittle-endian

Генерировать код в формате little-endian. По умолчанию, когда GCC сконфигурирован для целевого процессора ‘riscv64-*-*’ или ‘riscv32-*-*’, но не для ‘riscv64be-*-*’ или ‘riscv32be-*-*’.

-mstack-protector-guard=guard
-mstack-protector-guard-reg=reg
-mstack-protector-guard-offset=offset

Генерировать код защиты стека с использованием канистра (canary) в guard. Поддерживаемые местоположения — ‘global’ для глобальной канистры или ‘tls’ для канистры на нить в блоке TLS.

В последнем случае опции -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового для чтения канистры и с каким смещением от этого базового регистра. По умолчанию регистр и смещение не заданы, так как это используется только в ядре Linux.

-mtls-dialect=desc

Использовать описатели TLS в качестве механизма локального хранения потоков для динамического доступа к переменным TLS.

-mtls-dialect=trad

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

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

Spec-Zone.ru

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