3.19.40 Параметры RISC-V
Эти параметры командной строки определены для целей RISC-V:
-
-mbranch-cost=n -
Устанавливает стоимость ветвлений примерно в n инструкций.
-
-mplt -mno-plt-
При генерации кода PIC разрешить или запретить использование PLT. Игнорируется для не-PIC. По умолчанию — -mplt.
-
-mabi=ABI-string -
Указывает соглашения о вызовах для целочисленных и с плавающей точкой типов. ABI-строка содержит две части: размер целочисленных типов и регистры, используемые для типов с плавающей точкой. Например, ‘-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’ является недопустимым, так как ABI требует, чтобы 64-битные значения передавались в F-регистрах, но F-регистры имеют ширину только 32 бита. Также есть ABI ‘ilp32e’, который можно использовать только с архитектурой ‘rv32e’. Данный ABI в настоящее время не полностью специфицирован и может быть изменён.
-
-mfdiv -mno-fdiv-
Использовать или не использовать аппаратные инструкции для деления и извлечения квадратного корня с плавающей точкой. Это требует расширений F или D для регистров с плавающей точкой. По умолчанию они используются, если у указанной архитектуры есть эти инструкции.
-
-mdiv -mno-div-
Использовать или не использовать аппаратные инструкции для целочисленного деления. Это требует расширения M. По умолчанию они используются, если у указанной архитектуры есть эти инструкции.
-
-misa-spec=ISA-spec-string -
Указывает версию спецификации ISA RISC-V Unprivileged (ранее User-Level) для генерации кода, соответствующего этой версии. Возможные значения для ISA-spec-строка:
2.2Генерирует код, соответствующий версии 2.2.
20190608Генерирует код, соответствующий версии 20190608.
20191213Генерирует код, соответствующий версии 20191213.
По умолчанию используется -misa-spec=20191213, если GCC не был сконфигурирован с --with-isa-spec= для указания другого значения по умолчанию.
-
-march=ISA-string -
Генерировать код для заданной RISC-V ISA (например, ‘rv64im’). Строки ISA должны быть в нижнем регистре. Примеры: ‘rv64i’, ‘rv32g’, ‘rv32e’ и ‘rv32imaf’.
Если -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’.
-
-mtune=processor-string -
Оптимизировать вывод для заданного процессора, указанного по микроархитектуре или имени. Допустимые значения для этого параметра: ‘rocket’, ‘sifive-3-series’, ‘sifive-5-series’, ‘sifive-7-series’, ‘thead-c906’, ‘size’ и все допустимые значения для -mcpu=.
Если -mtune= не указано, используется значение из -mcpu. Если оба параметра не указаны, по умолчанию используется ‘rocket’.
Выбор ‘size’ не предназначен для использования конечными пользователями. Он используется при указании -Os. Он переопределяет информацию о стоимости инструкций, предоставленную -mtune=, но не переопределяет информацию о конвейере. Это помогает уменьшить размер кода, сохраняя при этом хорошую производительность.
-
-mpreferred-stack-boundary=num -
Попытка выровнять границу стека по границе в 2 в степени число байт. Если -mpreferred-stack-boundary не указан, значение по умолчанию равно 4 (16 байт или 128 бит).
Предупреждение: Если вы используете этот переключатель, вы должны скомпилировать все модули с одним и тем же значением, включая любые библиотеки. Это включает системные библиотеки и стартовые модули.
-
-msmall-data-limit=n -
Разместить глобальные и статические данные размером меньше n байт в специальном разделе (на некоторых целевых системах).
-
-msave-restore -mno-save-restore-
Использовать или не использовать более короткий, но медленный пролог и эпилог кода, использующий вызовы функций библиотеки. По умолчанию используются быстрые встроенные прологи и эпилоги.
-
-minline-atomics -mno-inline-atomics-
Использовать или не использовать более короткий, но медленный код эмуляции атомных операций подслов, использующий вызовы функций libatomic. По умолчанию используются быстрые встроенные атомные операции подслов, не требующие libatomic.
-
-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 выравнивает переменные и константы типов массивов, структур или объединений. Поддерживаемые значения для тип — ‘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-
Генерировать код защиты стека с помощью канистры в страже. Поддерживаемые места — ‘global’ для глобальной канистры или ‘tls’ для канистры на поток в блоке TLS.
В последнем случае параметры -mstack-protector-guard-reg=reg и -mstack-protector-guard-offset=offset дополнительно указывают, какой регистр использовать в качестве базового регистра для чтения канистры, и смещение от этого базового регистра. Регистр или смещение по умолчанию отсутствуют, так как это предназначено исключительно для использования в ядре Linux.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/RISC_002dV-Options.html