This is because a fresh interrupt could occur at any time, which would cause the core to store the return address of the new interrupt and overwrite the original interrupt. When the original interrupt attempts to return to the main program, it will cause the system to fail. The nested handler must change into an alternative kernel mode before re-enabling interrupts in order to prevent this.
according to the context, the main reason is that new-coming irq would overwrite R14(LR), so that the first irq cannot return to main program.
In my understanding, to solve this problem, I just need to push R14(LR_irq), SPSR_irq to R13(SP_irq) before next irq raising.
There is no need for nested handler to switch to alternative mode before re-enabling interrupts.
Thank you!