Welche Register müssen in der ARM C-Aufrufkonvention gespeichert werden?

Es ist schon eine Weile her, seit ich den Arm Assembler zuletzt codiert habe und ich bin ein bisschen verrostet bei den Details. Wenn ich eine C-Funktion von arm aus aufrufe, muss ich mich nur um das Speichern von r0-r3 und lr kümmern, oder?

Wenn die C-Funktion andere Register verwendet, ist sie dafür verantwortlich, diese auf dem Stapel zu speichern und wiederherzustellen? Mit anderen Worten, der Compiler generiert dazu Code für C-Funktionen.

Wenn ich zum Beispiel r10 in einer Assembler-Funktion verwende, muss ich seinen Wert nicht auf den Stack oder in den Speicher verschieben und ihn nach einem C-Aufruf einfügen / wiederherstellen, oder?

Dies ist für arm-eabi-gcc 4.3.0.