Spec-Zone.ru › GCC 15

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

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

naked

Этот атрибут позволяет компилятору создать необходимое объявление функции, оставляя тело функции написанным на языке ассемблера. Для указанной функции компилятор не генерирует последовательности пролога и эпилога. В функциях без пролога и эпилога безопасно использовать только операторы базового asm (см. Базовый Asm — инструкции ассемблера без операндов). Хотя использование расширенного asm или сочетание базового asm с кодом C может казаться работоспособным, полагаться на их надёжную работу нельзя, и они не поддерживаются.

interrupt

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

Можно указать тип обрабатываемого прерывания, добавив необязательный параметр к атрибуту 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-15.3.0/gcc/RISC_002dV-Function-Attributes.html

Spec-Zone.ru

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