6.33.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-13.3.0/gcc/SH-Function-Attributes.html