title: What registers to save in the ARM C calling convention?
body: <p>It's been a while since I last coded arm assembler and I'm a little rusty on the details. If I call a C function from arm,  I only have to worry about saving r0-r3 and lr, right?</p>
  
  <p>If the C function uses any other registers, is it responsible for saving those on the stack and restoring them? In other words, the compiler would generate code to do this for C functions. </p>
  
  <p>For example if I use r10 in an assembler function, I don't have to push its value on the stack, or to memory, and pop/restore it after a C call, do I?</p>
  
  <p>This is for arm-eabi-gcc 4.3.0.</p>