114
SAM4CP [DATASHEET]
43051E–ATPL–08/14
The SHSAX instruction:
1.
2.
Subtracts the bottom halfword of the second operand from the top highword of the first operand.
Writes the halfword result of the addition to the bottom halfword of the destination register, shifted by one bit to the
right causing a divide by two, or halving.
Adds the bottom halfword of the first operand with the top halfword of the second operand.
Writes the halfword result of the division in the top halfword of the destination register, shifted by one bit to the right
causing a divide by two, or halving.
Restrictions
3.
4.
Do not use SP and do not use PC
.
Condition Flags
These instructions do not affect the condition code flags.
Examples
SHASX R7, R4, R2 ; Adds top halfword of R4 to bottom halfword of R2
; and writes halved result to top halfword of R7
; Subtracts top halfword of R2 from bottom halfword of
; R4 and writes halved result to bottom halfword of R7
SHSAX R0, R3, R5 ; Subtracts bottom halfword of R5 from top halfword
; of R3 and writes halved result to top halfword of R0
; Adds top halfword of R5 to bottom halfword of R3 and
; writes halved result to bottom halfword of R0.
12.6.5.12 SHSUB16 and SHSUB8
Signed Halving Subtract 16 and Signed Halving Subtract 8
Syntax
op
{
cond
}{
Rd
,}
Rn
,
Rm
where:
op
is any of:
SHSUB16 Signed Halving Subtract 16.
SHSUB8 Signed Halving Subtract 8.
cond
is an optional condition code, see
“Conditional Execution”
.
Rd
is the destination register.
Rn
is the first operand register.
Rm
is the second operand register.
Operation
Use these instructions to add 16-bit and 8-bit data and then to halve the result before writing the result to the destination
register:
The
SHSUB16
instruction:
1.
2.
3.
Subtracts each halfword of the second operand from the corresponding halfwords of the first operand.
Shuffles the result by one bit to the right, halving the data.
Writes the halved halfword results in the destination register.
The
SHSUB8 instruction:
1.
2.
3.
Subtracts each byte of the second operand from the corresponding byte of the first operand.
Shuffles the result by one bit to the right, halving the data.
Writes the corresponding signed byte results in the destination register.