¿Qué registros guardar en la convención de llamadas ARM C?

Ha pasado un tiempo desde la última vez que codifiqué el ensamblador de brazos y estoy un poco oxidado en los detalles. Si llamo a una función C desde el brazo, solo tengo que preocuparme por guardar r0-r3 y lr, ¿verdad?

Si la función C utiliza algún otro registro, ¿es responsable de guardarlos en la pila y restaurarlos? En otras palabras, el compilador generaría código para hacer esto para las funciones de C.

Por ejemplo, si uso r10 en una función de ensamblador, no tengo que insertar su valor en la pila o en la memoria, y abrirlo / restaurarlo después de una llamada en C, ¿verdad?

Esto es para arm-eabi-gcc 4.3.0.

Respuestas a la pregunta(5)

Su respuesta a la pregunta