In particular, use r8 to hold the old process, and r7 for medium-term scratch, saving r0-r3 for things we don't need saved over function calls. This gets rid of five register-to-register MOVs.