Spec-Zone.ru › GCC 15

6.4.1.29 Атрибуты функций SH

На семействе процессоров SH поддерживаются следующие атрибуты функций:

function_vector

Для целевых платформ SH2A этот атрибут объявляет, что функция вызывается с использованием режима относительной адресации TBR. Аргументом этого атрибута является номер записи той же функции в таблице векторов, содержащей все функции, адресуемые относительно TBR. Для корректной работы до вызова любой функции с этим атрибутом необходимо настроить TBR так, чтобы он указывал на начало таблицы векторов. Обычно инициализацию удобно выполнять в процедуре запуска. Таблица векторов, адресуемая относительно TBR, может содержать не более 256 записей функций. Переходы к этим функциям генерируются с помощью специфичной для SH2A инструкции перехода без задержки JSR/N @(disp8,TBR). Для корректной работы этого атрибута необходимо использовать GAS и GLD из GNU binutils версии 2.7 или новее.

В приложении для функции, вызываемой один раз, этот атрибут экономит не менее 8 байт кода; при последующих вызовах той же функции он экономит по 2 байта кода на каждый такой вызов.

interrupt_handler

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

nosave_low_regs

Используйте этот атрибут на целевых платформах SH, чтобы указать, что функция interrupt_handler не должна сохранять и восстанавливать регистры R0..R7. Его можно использовать на целевых платформах SH3* и SH4*, имеющих второй банк регистров R0..R7 для нерекурсивных обработчиков прерываний.

renesas

На целевых платформах SH этот атрибут указывает, что функция или структура соответствует ABI Renesas.

resbank

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

В банк регистров сохраняются девятнадцать 32-разрядных регистров: регистры общего назначения R0–R14, управляющий регистр GBR, системные регистры MACH, MACL и PR, а также смещение адреса таблицы векторов. Банки регистров помещаются в стек в порядке «первым пришел — последним вышел» (FILO). Восстановление из банка выполняется инструкцией RESBANK.

sp_switch

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

void *alt_stack;
void f () __attribute__ ((interrupt_handler,
                          sp_switch ("alt_stack")));
trap_exit

Используйте этот атрибут на SH, чтобы interrupt_handler возвращалась с помощью trapa вместо rte. Этот атрибут принимает целочисленный аргумент, задающий используемый номер ловушки.

trapa_handler

На целевых платформах SH этот атрибут функции аналогичен interrupt_handler, но не сохраняет и не восстанавливает все регистры.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/SH-Function-Attributes.html

Spec-Zone.ru

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