3.19.42 Параметры 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. По умолчанию они используются, если указанная архитектура имеет эти инструкции.
-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’, ‘size’, и все допустимые значения для -mcpu=.
Если -mtune= не указан, используется значение из -mcpu, по умолчанию — ‘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-
Использовать или не использовать более короткий, но более медленный код пролога и эпилога, использующий вызовы функций библиотеки. По умолчанию используются быстрые встроенные прологи и эпилоги.
-mshorten-memrefs-mno-shorten-memrefs-
Попытаться использовать более эффективно сжатые инструкции загрузки/хранения, заменив загрузку/хранение «базового регистра + большого смещения» новой загрузкой/хранением «нового базового + небольшого смещения». Если новый базовый регистр помещается в сжатый регистр, то новая загрузка/хранение может быть сжата. В настоящее время поддерживается только для целочисленных загрузки/хранения 32 бита.
-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-
Управление тем, как GCC выравнивает переменные и константы типов массива, структуры или объединения. Допустимые значения для type — ‘xlen’, которое использует ширину x-регистра в качестве значения выравнивания, и ‘natural’, которое использует естественное выравнивание. ‘xlen’ используется по умолчанию.
-mbig-endian-
Генерировать код большого эндиана. Это значение по умолчанию, когда GCC настроен для цели ‘riscv64be-*-*’ или ‘riscv32be-*-*’.
-mlittle-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.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/RISC-V-Options.html