Spec-Zone.ru › GCC 8

6.31.28 Атрибуты функций 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, но он не сохраняет и не восстанавливает все регистры.

Далее: Атрибуты функций SPU, Предыдущее: Атрибуты функций S/390, Вверх: Атрибуты функций [Оглавление][Индекс]

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

Spec-Zone.ru

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