| |||
| Home > The Cortex-M3 Instruction Set > Multiply and divide instructions > UMULL, UMLAL, SMULL, and SMLAL | |||
Signed and Unsigned Long Multiply, with optional Accumulate, using 32-bit operands and producing a 64-bit result.
op{cond}RdLo,RdHi,Rn,Rm
where:
opIs one of:
UMULLUnsigned Long Multiply.
UMLALUnsigned Long Multiply, with Accumulate.
SMULLSigned Long Multiply.
SMLALSigned Long Multiply, with Accumulate.
condIs an optional condition code, see Conditional execution.
RdHi, RdLoAre the destination registers. For UMLAL and SMLAL they
also hold the accumulating value.
Rn, RmAre registers holding the operands.
The UMULL instruction interprets the values from and Rn as
unsigned integers. It multiplies these integers and places the least
significant 32 bits of the result in Rm,
and the most significant 32 bits of the result in RdLo.RdHi
The UMLAL instruction interprets the values from and Rn as
unsigned integers. It multiplies these integers, adds the 64-bit
result to the 64-bit unsigned integer contained in Rm and RdHi, and
writes the result back to RdLo and RdHi.RdLo
The SMULL instruction interprets the values from and Rn as
two’s complement signed integers. It multiplies these integers and
places the least significant 32 bits of the result in Rm,
and the most significant 32 bits of the result in RdLo.RdHi
The SMLAL instruction interprets the values from and Rn as
two’s complement signed integers. It multiplies these integers,
adds the 64-bit result to the 64-bit signed integer contained in Rm and RdHi,
and writes the result back to RdLo and RdHi.RdLo
In these instructions:
do not use SP and do not use PC
and RdHi must
be different registers.RdLo