small optimisation: eliminate more register-to-register moves