131
SAM4CP [DATASHEET]
43051E–ATPL–08/14
The SMLALD and SMLALDX instructions interpret the values from
Rn
and
Rm
as four halfword two’s complement signed
16-bit integers. These instructions:
If
X
is not present, multiply the top signed halfword value of
Rn
with the top signed halfword of
Rm
and the bottom
signed halfword values of
Rn
with the bottom signed halfword of
Rm
.
Or if
X
is present, multiply the top signed halfword value of
Rn
with the bottom signed halfword of
Rm
and the
bottom signed halfword values of
Rn
with the top signed halfword of
Rm
.
Add the two multiplication results to the signed 64-bit value in
RdLo
and
RdHi
to create the resulting 64-bit product.
Write the 64-bit product in
RdLo
and
RdHi
.
Restrictions
In these instructions:
Do not use SP and do not use PC.
RdHi
and
RdLo
must be different registers.
Condition Flags
These instructions do not affect the condition code flags.
Examples
SMLAL R4, R5, R3, R8 ; Multiplies R3 and R8, adds R5:R4 and writes to
; R5:R4
SMLALBT R2, R1, R6, R7 ; Multiplies bottom halfword of R6 with top
; halfword of R7, sign extends to 32-bit, adds
; R1:R2 and writes to R1:R2
SMLALTB R2, R1, R6, R7 ; Multiplies top halfword of R6 with bottom
; halfword of R7,sign extends to 32-bit, adds R1:R2
; and writes to R1:R2
SMLALD R6, R8, R5, R1 ; Multiplies top halfwords in R5 and R1 and bottom
; halfwords of R5 and R1, adds R8:R6 and writes to
; R8:R6
SMLALDX R6, R8, R5, R1 ; Multiplies top halfword in R5 with bottom
; halfword of R1, and bottom halfword of R5 with
; top halfword of R1, adds R8:R6 and writes to
; R8:R6.
12.6.6.6 SMLSD and SMLSLD
Signed Multiply Subtract Dual and Signed Multiply Subtract Long Dual
Syntax
op
{
X
}{
cond
}
Rd
,
Rn
,
Rm
,
Ra
where:
op
is one of:
SMLSD Signed Multiply Subtract Dual.
SMLSDX Signed Multiply Subtract Dual Reversed.
SMLSLD Signed Multiply Subtract Long Dual.
SMLSLDX Signed Multiply Subtract Long Dual Reversed.
SMLAW Signed Multiply Accumulate (word by halfword).
If
X
is present, the multiplications are bottom × top and top × bottom.
If the
X
is omitted, the multiplications are bottom × bottom and top × top.
cond
is an optional condition code, see
“Conditional Execution”
.
Rd
is the destination register.
Rn, Rm
are registers holding the first and second operands.
Ra
is the register holding the accumulate value.