| |||
| Home > ARM and Thumb Instructions > Multiply instructions > SMULWy and SMLAWy | |||
Signed Multiply Wide and Signed Multiply-Accumulate Wide, with one 32-bit and one 16-bit operand, providing the top 32-bits of the result.
SMULW<y>{cond} {Rd},Rn,Rm
SMLAW<y>{cond}Rd,Rn,Rm,Ra
where:
<y>is either B or T. B means
use the bottom half (bits [15:0]) of , RmT means
use the top half (bits [31:16]) of .Rm
condis an optional condition code.
Rdis the destination register.
Rn, Rmare the registers holding the values to be multiplied.
Rais the register holding the value to be added.
SMULWy multiplies the signed integer from the
selected half of by
the signed integer from Rm, and
places the upper 32-bits of the 48-bit result in Rn.Rd
SMLAWy multiplies the signed integer from the
selected half of by
the signed integer from Rm, adds
the 32-bit result to the 32-bit value in Rn,
and places the result in Ra.Rd
You cannot use PC for any register.
You can use SP in ARM instructions but these are deprecated in ARMv6T2 and above. You cannot use SP in Thumb instructions.
These instructions do not affect the N, Z, C, or V flags.
If overflow occurs in the accumulation, SMLAWy sets
the Q flag.
These ARM instructions are available in ARMv6 and above, and E variants of ARMv5T.
These 32-bit Thumb instructions are available in ARMv6T2 and above. For the ARMv7-M architecture, they are only available in an ARMv7E-M implementation.
There are no 16-bit Thumb versions of these instructions.