Spec-Zone.ru › GCC 6

6.31.4 Атрибуты функций ARM

Эти атрибуты функций поддерживаются для целевых платформ ARM:

interrupt

Используйте этот атрибут, чтобы указать, что указанная функция является обработчиком прерываний. Компилятор генерирует последовательности входа и выхода из функции, подходящие для использования в обработчике прерываний, когда этот атрибут присутствует.

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

void f () __attribute__ ((interrupt ("IRQ")));

Допустимые значения для этого параметра: IRQ, FIQ, SWI, ABORT и UNDEF.

В ARMv7-M тип прерывания игнорируется, и атрибут означает, что функция может вызываться со значением указателя стека, выровненным по слову.

isr

Используйте этот атрибут в ARM для написания обработчиков прерываний. Это псевдоним для атрибута interrupt выше.

long_call
short_call

Эти атрибуты определяют, как вызывается конкретная функция. Эти атрибуты переопределяют переключатель командной строки -mlong-calls (см. Опции ARM) и параметры #pragma long_calls. Для ARM атрибут long_call указывает, что функция может находиться далеко от места вызова и потребовать другой (более дорогой) последовательности вызова. Атрибут short_call всегда помещает смещение функции от места вызова в инструкцию «BL» непосредственно.

naked

Этот атрибут позволяет компилятору создать требуемое объявление функции, при этом позволяя телу функции быть ассемблерным кодом. Указанная функция не будет иметь пролога/эпилога, сгенерированных компилятором. В функциях «naked» могут безопасно включаться только базовые asm инструкции (см. Базовый ассемблер). Использование расширенных asm или смешанного кода из базовых asm и C-кода может, по-видимому, работать, но не гарантирует надёжности работы и не поддерживается.

pcs

Атрибут pcs может использоваться для управления соглашениями о вызовах функций в ARM. Атрибут принимает аргумент, который указывает используемое соглашение о вызовах.

При компиляции с использованием ABI AAPCS (или его варианта) допустимыми значениями аргумента являются "aapcs" и "aapcs-vfp". Для использования варианта, отличного от "aapcs", компилятору необходимо разрешить использование соответствующих регистров сопроцессора (т. е. регистры VFP должны быть доступны для использования "aapcs-vfp"). Например,

/* Argument passed in r0, and result returned in r0+r1.  */
double f2d (float) __attribute__((pcs("aapcs")));

Переменные функции всегда используют соглашение о вызове "aapcs" и компилятор отклоняет попытки указать альтернативу.

target (options)

Как обсуждалось в Общие атрибуты функций, этот атрибут позволяет задавать целевые варианты компиляции.

В ARM разрешены следующие варианты:

‘thumb’

Принудительное генерирование кода в ISA Thumb (T16/T32), в зависимости от уровня архитектуры.

‘arm’

Принудительное генерирование кода в ISA ARM (A32).

Функции из разных режимов могут быть встроены в режиме вызывающей функции.

‘fpu=’

Указывает FPU, для которого настраивается производительность этой функции. Поведение и допустимые аргументы такие же, как у опции командной строки -mfpu=.

Далее: Атрибуты функций AVR, Предыдущее: Атрибуты функций ARC, Вверх: Атрибуты функций [Содержание][Индекс]

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

Spec-Zone.ru

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