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