The Cortex-M4 Instruction Set
ARM DUI 0553A
Copyright © 2010 ARM. All rights reserved.
3-81
ID121610
Non-Confidential
3.6.4
SMLAD
Signed Multiply Accumulate Long Dual.
Syntax
op{
X
}{
cond
}
Rd
,
Rn
,
Rm
,
Ra
;
where:
op
Is one of:
SMLAD
Signed Multiply Accumulate Dual
SMLADX
Signed Multiply Accumulate Dual Reverse
X specifies which halfword of the source register
Rn
is used as the multiply
operand. If
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
.
Rd
Specifies the destination register.
Rn
Specifies the first operand register holding the values to be multiplied.
Rm
Specifies the second operand register.
Ra
Specifies the accumulate value.
Operation
The
SMLAD
and
SMLADX
instructions regard the two operands as four halfword 16-bit values. The
SMLAD
and
SMLADX
instructions:
•
If
X
is not present, multiply the top signed halfword value in
Rn
with the top signed
halfword of
Rm
and the bottom signed halfword values in
Rn
with the bottom signed
halfword of
Rm
.
•
Or if
X
is present, multiply the top signed halfword value in
Rn
with the bottom signed
halfword of
Rm
and the bottom signed halfword values in
Rn
with the top signed halfword
of
Rm
.
•
Add both multiplication results to the signed 32-bit value in
Ra
.
•
Writes the 32-bit signed result of the multiplication and addition to
Rd
.
Restrictions
Do not use SP and do not use PC
.
Condition flags
These instructions do not change the flags.
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.