Studying the ARM Thumb instruction set, I noticed that while the general-purpose registers and Link Register are pushed (most of the time) onto the stack, the status register (CPSR) is not. This surprised me, as the status register is part of the program state that needs to be recovered after the ending of a subroutine. Is there a reason the status register is not saved?
I used thumb2 in college to write part of an OS. There will be a time you see the CSPR pushed onto the stack, when you move from handler mode to unprivileged thread mode or vice versa. Almost all registers are popped/pushed onto the stack when switching modes.
It is not in ARM convention to maintain it when returning from subroutines in the same mode, but the flags of the last transaction can be manually saved and referenced.