O que registra para salvar na convenção de chamada do ARM C?

Faz um tempo desde a última vez que codifiquei o montador de braço e estou um pouco enferrujado nos detalhes. Se eu chamar uma função C do braço, só preciso me preocupar em salvar r0-r3 e lr, certo?

Se a função C usa outros registros, é responsável por salvá-los na pilha e restaurá-los? Em outras palavras, o compilador geraria código para fazer isso para funções C.

Por exemplo, se eu usar r10 em uma função assembler, não preciso colocar seu valor na pilha ou na memória e pop / restaurá-lo após uma chamada C, não é?

Isto é para o arm-eabi-gcc 4.3.0.

questionAnswers(5)

yourAnswerToTheQuestion