Сегодня "совершенно случайно" обнаружил, что каждый вызов каждой функции сопровождается сохранением регистров r4 и r5.
Зачем?
Код
00004c0c <InitSound>:
    4c0c:    05 12           push    r5    ;
    4c0e:    04 12           push    r4    ;
    4c10:    e2 d3 31 00     bis.b    #2,    &0x0031;r3 As==10
    4c14:    e2 c3 33 00     bic.b    #2,    &0x0033;r3 As==10
    4c18:    e2 d3 32 00     bis.b    #2,    &0x0032;r3 As==10
    4c1c:    34 41           pop    r4    ;
    4c1e:    35 41           pop    r5    ;
    4c20:    30 41           ret

Как бороться?
можно конечно все мелкие функции собрать в кучу и объявить static inline,
но может другие способы есть?

Просто inline и __inline__ почему-то игнорирует.
Вроде бы мелочь, но как-то нерационально расходуются байты и микросекунды...