Spec-Zone.ru › GCC 10

Далее: Атрибуты функций MSP430, Предыдущее: Атрибуты функций Microsoft Windows, Выше: Объявление атрибутов функций [Оглавление][Индекс]

6.33.21 Атрибуты функций MIPS ¶

Эти атрибуты функций поддерживаются задней частью MIPS:

interrupt

Используйте этот атрибут, чтобы указать, что указанная функция является обработчиком прерываний. Компилятор генерирует последовательности входа и выхода из функции, подходящие для использования в обработчике прерываний, когда этот атрибут присутствует. Поддерживается необязательный аргумент для атрибута прерывания, который позволяет описать режим прерывания. По умолчанию GCC предполагает, что используется режим внешнего контроллера прерываний (EIC), это можно явно установить, используя eic. Когда прерывания не замаскированы, запрашиваемый уровень приоритета прерывания (IPL) копируется в текущий IPL, что приводит к включению только прерываний более высокого приоритета. Для использования векторного режима прерывания используйте аргумент vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5], это изменит поведение поддержки незамаскированных прерываний, и GCC обеспечит маскирование всех прерываний от sw0 до и включая указанный вектор прерывания.

Вы можете использовать следующие атрибуты для изменения поведения обработчика прерываний:

use_shadow_register_set

Предполагается, что обработчик использует набор теневых регистров вместо основных регистров общего назначения. Поддерживается необязательный аргумент intstack для указания того, что набор теневых регистров содержит действительный указатель стека.

keep_interrupts_masked

Поддерживать прерывания замаскированными для всей функции. Без этого атрибута GCC пытается повторно включить прерывания для большей части функции, насколько это возможно.

use_debug_exception_return

Возвращение с помощью инструкции deret. Обработчики прерываний, у которых нет этого атрибута, возвращаются с помощью инструкции eret вместо этого.

Вы можете использовать любую комбинацию этих атрибутов, как показано ниже:

void __attribute__ ((interrupt)) v0 ();
void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
void __attribute__ ((interrupt, use_shadow_register_set,
                     keep_interrupts_masked)) v4 ();
void __attribute__ ((interrupt, use_shadow_register_set,
                     use_debug_exception_return)) v5 ();
void __attribute__ ((interrupt, keep_interrupts_masked,
                     use_debug_exception_return)) v6 ();
void __attribute__ ((interrupt, use_shadow_register_set,
                     keep_interrupts_masked,
                     use_debug_exception_return)) v7 ();
void __attribute__ ((interrupt("eic"))) v8 ();
void __attribute__ ((interrupt("vector=hw3"))) v9 ();
long_call
short_call
near
far

Эти атрибуты задают, как конкретная функция вызывается на MIPS. Атрибуты переопределяют переключатель командной строки -mlong-calls (см. Параметры MIPS). Атрибуты long_call и far являются синонимами и заставляют компилятор всегда вызывать функцию, сначала загрузив ее адрес в регистр, а затем используя содержимое этого регистра. Атрибуты short_call и near являются синонимами и имеют обратный эффект; они задают, что вызовы non-PIC должны выполняться с использованием более эффективной инструкции jal.

mips16
nomips16

В целевых системах MIPS вы можете использовать атрибуты функций mips16 и nomips16 для локального выбора или отключения генерации кода MIPS16. Функция с атрибутом mips16 генерируется как код MIPS16, в то время как генерация кода MIPS16 отключается для функций с атрибутом nomips16. Эти атрибуты переопределяют опции -mips16 и -mno-mips16 в командной строке (см. Параметры MIPS).

При компиляции файлов, содержащих смешанный код MIPS16 и non-MIPS16, препроцессорная переменная __mips16 отражает значение в командной строке, а не в отдельных функциях. Смешанный код MIPS16 и non-MIPS16 может плохо взаимодействовать с некоторыми расширениями GCC, такими как __builtin_apply (см. Создание вызовов функций).

micromips, MIPS
nomicromips, MIPS

В целевых системах MIPS вы можете использовать атрибуты функций micromips и nomicromips для локального выбора или отключения генерации кода microMIPS. Функция с атрибутом micromips генерируется как код microMIPS, в то время как генерация кода microMIPS отключается для функций с атрибутом nomicromips. Эти атрибуты переопределяют опции -mmicromips и -mno-micromips в командной строке (см. Параметры MIPS).

При компиляции файлов, содержащих смешанный код microMIPS и non-microMIPS, препроцессорная переменная __mips_micromips отражает значение в командной строке, а не в отдельных функциях. Смешанный код microMIPS и non-microMIPS может плохо взаимодействовать с некоторыми расширениями GCC, такими как __builtin_apply (см. Создание вызовов функций).

nocompression

В целевых системах MIPS вы можете использовать атрибут функции nocompression для локального отключения генерации кода MIPS16 и microMIPS. Этот атрибут переопределяет опции -mips16 и -mmicromips в командной строке (см. Параметры MIPS).

Далее: Атрибуты функций MSP430, Предыдущее: Атрибуты функций Microsoft Windows, Выше: Объявление атрибутов функций [Оглавление][Индекс]

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

Spec-Zone.ru

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