3.19.42 Опции 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’. Некоторые соглашения о вызовах невозможно реализовать на некоторых наборах команд: например, ‘-march=rv32if -mabi=ilp32d’ недействительно, потому что соглашение о вызовах требует, чтобы значения 64 бит передавались в регистрах F, но регистры F имеют только 32 бита. Также существует соглашение о вызовах ‘ilp32e’, которое может быть использовано только с архитектурой ‘rv32e’. Это соглашение о вызовах в настоящее время не полностью определено и может быть изменено.
-mfdiv-mno-fdiv-
Использовать или не использовать аппаратные инструкции деления и извлечения квадратного корня с плавающей точкой. Это требует расширений F или D для регистров с плавающей точкой. По умолчанию используется, если в указанной архитектуре имеются эти инструкции.
-mdiv-mno-div-
Использовать или не использовать аппаратные инструкции для целочисленного деления. Требуется расширение M. По умолчанию используется, если в указанной архитектуре имеются эти инструкции.
-march=ISA-string-
Генерировать код для заданного набора команд RISC-V (например, ‘rv64im’). Строки набора команд должны быть в нижнем регистре. Примеры включают ‘rv64i’, ‘rv32g’, ‘rv32e’ и ‘rv32imaf’.
-mtune=processor-string-
Оптимизировать вывод для указанного процессора, заданного именем микроархитектуры. Допустимые значения для этой опции: ‘rocket’, ‘sifive-3-series’, ‘sifive-5-series’, ‘sifive-7-series’ и ‘size’.
Если -mtune= не указана, по умолчанию используется ‘rocket’.
Выбор ‘size’ не предназначен для использования конечными пользователями. Он используется при указании -Os. Он переопределяет информацию о стоимости инструкций, предоставляемую -mtune=, но не переопределяет информацию о конвейере. Это помогает уменьшить размер кода, сохраняя при этом хорошую производительность.
-mpreferred-stack-boundary=num-
Попытаться выровнять границу стека по границе в 2num байта. Если -mpreferred-stack-boundary не указана, значение по умолчанию — 4 (16 байт или 128 бит).
Предупреждение: Если вы используете этот ключ, то все модули, включая любые библиотеки, должны быть скомпилированы с тем же значением. Это включает системные библиотеки и стартовые модули.
-msmall-data-limit=n-
Поместить глобальные и статические данные размером меньше n байт в специальный раздел (на некоторых целях).
-msave-restore-mno-save-restore-
Использовать или не использовать более короткий, но медленный пролог и эпилог, использующий вызовы функций из библиотеки. По умолчанию используются быстрые встроенные прологи и эпилоги.
-mstrict-align-mno-strict-align-
Не генерировать или генерировать доступ к невыровненной памяти. По умолчанию устанавливается в зависимости от того, поддерживает ли оптимизируемый процессор быстрый доступ к невыровненной памяти или нет.
-mcmodel=medlow-
Сгенерировать код для модели кода medium-low. Программа и её статически определённые символы должны лежать в одном 2-гигабайтном адресном пространстве и лежать между абсолютными адресами −2 ГБ и +2 ГБ. Программы могут быть статически или динамически связаны. Это модель кода по умолчанию.
-mcmodel=medany-
Сгенерировать код для модели кода medium-any. Программа и её статически определённые символы должны находиться в любом 2-гигабайтном адресном пространстве. Программы могут быть статически или динамически связаны.
-mexplicit-relocs-mno-exlicit-relocs-
Использовать или не использовать операторы перемещения сборки при работе со символическими адресами. Альтернатива — использовать макросы ассемблера, что может ограничить оптимизацию.
-mrelax-mno-relax-
Использовать возможности релаксации компоновщика для уменьшения числа инструкций, необходимых для материализации адресов символов. По умолчанию используются возможности релаксации компоновщика.
-memit-attribute-mno-emit-attribute-
Выводить (не выводить) атрибут RISC-V для записи дополнительной информации в объекты ELF. Эта функция требует, по крайней мере, binutils 2.32.
-malign-data=type-
Управлять выравниванием переменных и констант типа массива, структуры или объединения. Допустимые значения для type — ‘xlen’, которое использует ширину регистра x в качестве значения выравнивания, и ‘natural’, которое использует естественное выравнивание. По умолчанию используется ‘xlen’.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/RISC-V-Options.html