Spec-Zone.ru › GCC 14

6.33.25 Атрибуты функций RISC-V

Эти атрибуты функций поддерживаются бэкэндом RISC-V:

naked

Этот атрибут позволяет компилятору сконструировать необходимую декларацию функции, позволяя при этом использовать ассемблерный код в теле функции. Указанная функция не будет иметь пролога/эпилога, сгенерированных компилятором. В голой функции (naked function) могут безопасно включаться только базовые asm инструкции (см. Основные ассемблерные инструкции без операндов). Использование расширенных asm инструкций или смешанного использования базовых asm инструкций и кода C может казаться работоспособным, но нельзя гарантировать его надежную работу, и такая практика не поддерживается.

interrupt

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

Вы можете указать тип прерывания, обрабатываемого функцией, добавив необязательный параметр к атрибуту прерывания, например:

void f (void) __attribute__ ((interrupt ("user")));

Допустимые значения для этого параметра — user, supervisor, и machine. Если параметр отсутствует, используется значение по умолчанию — machine.

riscv_vector_cc

Используйте этот атрибут для принудительного использования варианта векторной соглашения вызова функции.

void foo() __attribute__((riscv_vector_cc));
[[riscv::vector_cc]] void foo(); // For C++11 and C23

Для целевой архитектуры RISC-V доступны следующие атрибуты функций. В основном, эти параметры дублируют поведение аналогичных параметров командной строки (см. Параметры RISC-V), но на уровне отдельных функций.

arch=

Указывает версию архитектуры и архитектурные расширения, которые следует использовать для этой функции. Поведение и допустимые аргументы такие же, как для параметра командной строки -march=, кроме того, он также поддерживает список включения расширений, список имён расширений с префиксом +, например, arch=+zba означает включение расширения zba. Несколько расширений можно включать, разделяя их запятыми. Например: arch=+zba,+zbb.

tune=

Указывает ядро, для которого следует настраивать производительность этой функции. Поведение и допустимые аргументы такие же, как для параметра командной строки -mtune=.

cpu=

Указывает ядро, для которого следует настраивать производительность этой функции, а также архитектурные особенности, которые следует использовать. Поведение и допустимые аргументы такие же, как для параметра командной строки -mcpu=.

Вышеперечисленные целевые атрибуты могут быть указаны следующим образом:

__attribute__((target("attr-string")))
int
f (int a)
{
  return a + 5;
}

где attr-string — одна из указанных выше строк атрибутов.

Несколько целевых атрибутов функций можно указать, разделяя их точкой с запятой. Например:

__attribute__((target("arch=+zba,+zbb;tune=rocket")))
int
foo (int a)
{
  return a + 5;
}

является допустимым и компилирует функцию foo с расширениями zba и zbb и настраивает её для rocket.

© 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-Function-Attributes.html

Spec-Zone.ru

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