Какой __attribute__ надо указать функции, чтобы она сохраняла используемые регистры VFP и восстанавливала при выходе? Я понимаю, что все float и double передаются в функцию через обычные регистры или стек (как написано в abi), но мне этот атрибут нужен для функции (ничего не принимающей и ничего не возвращающей), вызываемой из IRQ.
Если IRQ использует любой регистр VFP, то любые расчёты используя VFP вне прерывания могут быть неправильны (что у меня и произошло).
Очевидный путь -- самому написать ассемблерные функции для сохранения состояния VFP до вызова моей функции и восстановления состояния после вызова. Неизящно, придётся все 16 double регистров сохранять плюс статусный регистр, хотя моя функция использует всего 1 регистр.
Использую ARM C/C++ compiler
Да, кстати, ядро Cortex-R4F, для ядер Cortex-MxF всё проще: процессор сам записывает в стек состояние VFP (но не всё) при возникновении IRQ