| |||
| Home > The Cortex-M3 Instruction Set > Saturating instructions > SSAT and USAT | |||
Signed Saturate and Unsigned Saturate to any bit position, with optional shift before saturating.
op{cond}Rd, #n,Rm{,shift#s}
where:
opIs one of:
SSATSaturates a signed value to a signed range.
USATSaturates a signed value to an unsigned range.
condIs an optional condition code, see Conditional execution.
RdSpecifies the destination register.
nspecifies the bit position to saturate to:
ranges
from 1 to 32 for nSSAT
ranges
from 0 to 31 for nUSAT.
RmSpecifies the register containing the value to saturate.
shift #sIs an optional shift applied to before
saturating. It must be one of the following:Rm
ASR #swhere is
in the range 1 to 31s
LSL #swhere is
in the range 0 to 31.s
These instructions saturate to a signed or unsigned -bit
value. n
The SSAT instruction applies the specified shift,
then saturates to the signed range −2n-1 ≤ x ≤ 2n-1−1.
The USAT instruction applies the specified shift,
then saturates to the unsigned range 0 ≤ x ≤ 2n−1.
For signed n-bit saturation using SSAT,
this means that:
if
the value to be saturated is less than −2n−1,
the result returned is −2n-1
if the value to be saturated is greater than 2n−1−1,
the result returned is 2n-1−1
otherwise, the result returned is the same as the value to be saturated.
For unsigned n-bit saturation using USAT,
this means that:
if the value to be saturated is less than 0, the result returned is 0
if the value to be saturated is greater than 2n−1,
the result returned is 2n−1
otherwise, the result returned is the same as the value to be saturated.
If the returned result is different from the value to be saturated,
it is called saturation. If saturation occurs,
the instruction sets the Q flag to 1 in the APSR. Otherwise, it
leaves the Q flag unchanged. To clear the Q flag to 0, you must
use the MSR instruction, see MSR.
To read the state of the Q flag, use the MRS instruction,
see MRS.
These instructions do not affect the condition code flags.
If saturation occurs, these instructions set the Q flag to 1.