Spec-Zone.ru › GCC 12

3.19.43 Параметры 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’. Это соглашение о вызовах пока не полностью определено и может измениться.

-mfdiv
-mno-fdiv

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

-mdiv
-mno-div

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

-misa-spec=ISA-spec-string

Укажите версию спецификации ISA RISC-V (ранее User-Level) для создания кода, соответствующего ей. Возможные значения для 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’.

Если -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’, ‘size’ и все допустимые значения для -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

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

-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

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

-memit-attribute
-mno-emit-attribute

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

-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

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

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

Далее: Параметры RL78, Предыдущее: Параметры PRU, Вверх: Параметры подмоделей [Содержание][Индекс]

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

Spec-Zone.ru

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