6.31.4 Атрибуты функций ARM
Эти атрибуты функций поддерживаются для целей ARM:
interrupt-
Используйте этот атрибут, чтобы указать, что указанная функция является обработчиком прерывания. Компилятор генерирует последовательности входа и выхода функции, подходящие для использования в обработчике прерываний, когда этот атрибут присутствует.
Вы можете указать тип прерывания, которое должно обрабатываться, добавив необязательный параметр к атрибуту прерывания, например:
void f () __attribute__ ((interrupt ("IRQ")));Допустимые значения для этого параметра:
IRQ,FIQ,SWI,ABORTиUNDEF.В ARMv7-M тип прерывания игнорируется, и атрибут означает, что функция может быть вызвана со значением указателя стека, выровненным по слову.
isr-
Используйте этот атрибут в ARM для написания процедур обработки прерываний. Это псевдоним для атрибута
interruptвыше. long_callshort_call-
Эти атрибуты указывают, как вызывается конкретная функция. Эти атрибуты переопределяют переключатель командной строки -mlong-calls (см. Опции ARM) и
#pragma long_callsнастройки. Для ARM атрибутlong_callуказывает, что функция может находиться далеко от места вызова и потребовать другой (более дорогой) последовательности вызова. Атрибутshort_callвсегда помещает смещение функции от места вызова в инструкцию «BL» непосредственно. 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-7.5.0/gcc/ARM-Function-Attributes.html