Use SEI and CLI macros to set and clear interrupt status for optimal instruction choice and user mode compatibility (with different implementation of the macros, for Linux port or running on CPUs without privileged AArch32).
Remove unneeded restoring of interrupt state at the end of SWI routine as the SWI exit handler does so.
Remove unneeded preserving of CPU mode where existing mode known, or change of mode okay.
Optimise vectored SWIs and upcalls. (Is this actually faster?)