Вопрос из "спортивного интереса", почему не делают "оптимизирующий
компилятор с нарушением ABI" для обработчиков прерываний? Сохранять
в стеке только те int/FPU регистры, которые затронуты при
обработке. Код, естественно, раздувается, вплоть до появления двух одинаковых функций, использующих разные регистры.
Геморроя для компиляторописателей много, согласен. Но ведь можно же?
Или ABI это священная корова?
Помнится, в armcc были SVC обработчики прерываний с нарушением ABI, в которых результат работы прерывания передавался через регистры общего назначения, а не через стек.