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
•
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
To read the state of the Q flag, use the MRS instruction, see
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.