d.h. imEndefekt GCC die Registerberwaltung überlassen), damit man nicht irgendwelche Registerinhalte zerstört.
Eins vorneweg, ich progge nicht mit GCC.

Da aber alle Compiler im Endeffekt Maschinencode erzeugen seh ich das nur bedingt so.
Als Register kann man natürlich nur solche verwenden die GCC nicht während eines Interrupts verändert - das ist klar.
Aber alle anderen Register sollten mit dieser Methode nutzbar sein.

z.B.
PUSH r16
IN r16,SREG
PUSH r16
....
POP r16
OUT SREG,r16
POP r16
RETI

sollte die verwendeten Register genauso wieder zurücklassen, wie Sie vor dem Aufruf waren.
Während eines Interrupts kann ohnehin kein zweiter Interrupt aufgerufen werden (Es sei denn GCC gibt das explizit frei ?! ).
Bei einem "normalen" Unterprogramm muss man halt gucken welche Register nutzbar sind, sprich durch GCC nicht selbstständig in Interruptroutinen verändert werden.