I noticed that r1 is the zero register which means it is always zero.
1. When I was writing my fixed-point division routines, I noticed r1 is used as a loop counter for 32bit division (the comment says it's ok since it's zero at the end of the loop) Is this really safe.. what if an interrupt occurs? Can you not depend on it being zero in interrupts?
2. Isn't r1 a poor choice for the zero register since it is used by multiplication? If the zero register were say r2 instead of r1, it would be nice because then r1 wouldn't have to be cleared after every multiplication operation which would increase performance and reduce code size. I would prefer having r0 and r1 both be scratch registers, and r2 be the zero register.