SRS
Store Return State onto a stack.
Syntax
SRS
{
}{addr_mode
}
sp{!}, #cond
modenum
SRS
{
}{addr_mode
}
#cond
{!} ; This is pre-UAL syntax modenum
where:
addr_mode
is any one of the following:
IA
Increment address After each transfer
IB
Increment address Before each transfer (A32 only)
DA
Decrement address After each transfer (A32 only)
DB
Decrement address Before each transfer (Full Descending stack).
If
is omitted, it defaults to Increment After. You can also use stack oriented addressing mode suffixes, for example, when implementing stacks.addr_mode
cond
is an optional condition code.
Note
is permitted only in T32 code, using a precedingcond
IT
instruction, but this is deprecated in ARMv8. This is an unconditional instruction in A32.!
is an optional suffix. If ! is present, the final address is written back into the SP of the mode specified by
.modenum
modenum
specifies the number of the mode whose banked SP is used as the base register. You must use only the defined mode numbers.
Operation
SRS
stores the LR and the SPSR
of the current mode, at the address contained in SP of the mode specified
by
, and the following word
respectively. Optionally updates SP of the mode specified by modenum
.
This is compatible with the normal use of the modenum
STM
instruction
for stack accesses.
Note
For full descending stack, you must useSRSFD
or SRSDB
.Usage
You can use SRS
to store return
state for an exception handler on a different stack from the one automatically
selected.
Notes
Where addresses are not word-aligned, SRS
ignores
the least significant two bits of the specified address.
The time order of the accesses to individual words of memory
generated by SRS
is not architecturally
defined. Do not use this instruction on memory-mapped I/O locations
where access order matters.
Do not use SRS
in User and System
modes because these modes do not have a SPSR.
SRS
is not permitted in a non-secure state if
specifies monitor mode.modenum
Availability
This 32-bit instruction is available in A32 and T32.
There is no 16-bit version of this instruction in T32.
Example
R13_usr EQU 16 SRSFD sp,#R13_usr