I think what you missing is that these steps (CPSR -> SPSR_irq, updating the CPSR and branching to the vectors) are ALL AUTOMATIC. That is the hardware does it for you when it recognizes the IRQ exception. So you are correct - the User mode software would not be able to perform these steps. But that does not matter, as it is the hardware that is taking care of it.