
 130
SAM4CP [DATASHEET]
43051E–ATPL–08/14
Examples
SMLAD   R10, R2, R1, R5 ; Multiplies two halfword values in R2 with
                        ; corresponding halfwords in R1, adds R5 and
                        ; writes to R10
SMLALDX R0, R2, R4, R6  ; Multiplies top halfword of R2 with bottom
                        ; halfword of R4, multiplies bottom halfword of R2
                        ; with top halfword of R4, adds R6 and writes to
                        ; R0.
12.6.6.5 SMLAL and SMLALD
Signed Multiply Accumulate Long, Signed Multiply Accumulate Long (halfwords) and Signed Multiply Accumulate Long
Dual.
Syntax
op
{
cond
} 
RdLo
, 
RdHi
, 
Rn
, 
Rm
op
{XY}{
cond
} 
RdLo
, 
RdHi
, 
Rn
, 
Rm
op
{
X
}{
cond
} 
RdLo
, 
RdHi
, 
Rn
, 
Rm
where:
op
is one of:
MLAL Signed Multiply Accumulate Long.
SMLAL Signed Multiply Accumulate Long (halfwords, X and Y).
X and Y specify which halfword of the source registers 
Rn
 and 
Rm
 are used as the first and second
multiply operand:
If 
X
 is B, then the bottom halfword, bits [15:0], of 
Rn
 is used. 
If 
X
 is T, then the top halfword, bits [31:16], of 
Rn
 is used.
If 
Y
 is B, then the bottom halfword, bits [15:0], of 
Rm
 is used. 
If 
Y
 is T, then the top halfword, bits [31:16], of 
Rm
 is used.
SMLALD Signed Multiply Accumulate Long Dual.
SMLALDX Signed Multiply Accumulate Long Dual Reversed.
If the 
X
 is omitted, the multiplications are bottom × bottom and top × top.
If 
X
 is present, the multiplications are bottom × top and top × bottom.
cond
is an optional condition code, see 
“Conditional Execution”
.
RdHi, RdLo
are the destination registers. 
RdLo
 is the lower 32 bits and 
RdHi
 is the upper 32 bits of the 64-bit integer.
For SMLAL, SMLALBB, SMLALBT, SMLALTB, SMLALTT, SMLALD and SMLALDX, they also hold the
accumulating value.
Rn, Rm
are registers holding the first and second operands.
Operation
The SMLAL instruction:
Multiplies the two’s complement signed word values from 
Rn
 and 
Rm
.
Adds the 64-bit value in 
RdLo
 and 
RdHi
 to the resulting 64-bit product.
Writes the 64-bit result of the multiplication and addition in 
RdLo
 and 
RdHi
.
The SMLALBB, SMLALBT, SMLALTB and SMLALTT instructions:
Multiplies the specified signed halfword, Top or Bottom, values from 
Rn
 and 
Rm
.
Adds the resulting sign-extended 32-bit product to the 64-bit value in 
RdLo 
and 
RdHi
.
Writes the 64-bit result of the multiplication and addition in 
RdLo 
and 
RdHi
.
The non-specified halfwords of the source registers are ignored.