| |||
| Home > ARM and Thumb Instructions > Multiply instructions > SMMUL, SMMLA, and SMMLS | |||
Signed Most significant word Multiply, with optional Accumulation or Subtraction, with 32-bit operands and producing only the most significant 32-bits of the result.
op{R}{cond}Rd,Rm,Rs,Rn
where:
opis one of:
SMMULMultiply, and truncate or round.
SMMLAMultiply, accumulate, and truncate or round.
SMMLSMultiply,
subtract from ,
and truncate or round.Rn
Ris
an optional parameter. If R is present, the
result is rounded, otherwise it is truncated.
condis an optional condition code (see Conditional execution).
Rdis the destination register.
Rm, Rsare the registers holding the operands.
Rnis a register holding the value to be added or subtracted from.
SMMUL multiplies the values from and Rm,
and stores the most significant 32 bits of the 64-bit result to Rs.Rd
SMMLA multiplies the values from and Rm,
adds the value in Rs to
the most significant 32 bits of the product, and stores the result
in Rn.Rd
SMMLS multiplies the values from and Rm,
subtracts the product from the value in Rs shifted
left by 32 bits, and stores the most significant 32 bits of the
result in Rn.Rd
If the optional R parameter is specified, 0x80000000 is
added before extracting the most significant 32 bits. This has the
effect of rounding the result.
These ARM instructions are available in ARMv6 and above, and E variants of ARMv5.
These 32-bit Thumb-2 instructions are available in T2 variants of ARMv6 and above.
There are no 16-bit Thumb versions of these instructions.