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