Spec-Zone.ru › GCC 7

6.31.27 Атрибуты функций 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-7.5.0/gcc/SH-Function-Attributes.html

Spec-Zone.ru

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