Cortex-M3 Processor (Reference Material)
UG0331 User Guide Revision 15.0 79
3.6.7.1.1 Syntax
op{cond} Rd, #n, Rm {, shift #s}
where:
• op is one of:
•
SSAT
: Saturates a signed value to a signed range.
•
USAT
: Saturates a signed value to an unsigned range.
• cond is an optional condition code, see Conditional Execution, page 55.
• Rd is the destination register.
• n specifies the bit position to saturate to:
•
n
ranges from 1 to 32 for
SSAT
•
n
ranges from 0 to 31 for
USAT
.
• Rm is the register containing the value to saturate.
• shift #s is an optional shift applied to
Rm
before saturating. It must be one of the following:
•
ASR #s
where
s
is in the range 1 to 31
•
LSL #s
where
s
is in the range 0 to 31
3.6.7.1.2 Operation
These instructions saturate to a signed or unsigned
n
-bit value.
The
SSAT
instruction applies the specified shift, then saturates to the signed range -2
n–1
x 2
n–1
-1.
The
USAT
instruction applies the specified shift, then saturates to the unsigned range 0 x 2
n
-1.
For signed n-bit saturation using
SSAT
, this means that:
• if the value to be saturated is less than -2
n-1
, the result returned is -2
n-1
• if the value to be saturated is greater than 2
n-1
-1, the result returned is 2
n-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 2
n
-1, the result returned is 2
n
-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, page 92.
To read the state of the Q flag, use the
MRS
instruction, see MRS, page 91.
3.6.7.1.3 Restrictions
Do not use SP and do not use PC
.
3.6.7.1.4 Condition Flags
These instructions do not affect the condition code flags.
If saturation occurs, these instructions set the Q flag to 1.
Examples
SSAT R7, #16, R7, LSL #4 ; Logical shift left value in R7 by 4, then
; saturate it as a signed 16-bit value and
; write it back to R7
USATNE R0, #7, R5 ; Conditionally saturate value in R5 as an
; unsigned 7 bit value and write it to R0.