6.33.30 Атрибуты функций 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, а также смещение адреса таблицы векторов. Банки регистров стекируются в порядке LIFO (последним вошел — первым вышел).
Восстановление из банка выполняется путём выдачи инструкции 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, но он не сохраняет и не восстанавливает все регистры.
Далее: Атрибуты функций SPU, Предыдущее: Атрибуты функций S/390, Вверх: Атрибуты функций [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/SH-Function-Attributes.html