| |||
Home > ARM and Thumb Instructions > Multiply instructions > SMLALxy | |||
Signed Multiply-Accumulate with 16-bit operands and a 64-bit accumulator.
SMLAL<x><y>{cond}RdLo,RdHi,Rm,Rs
where:
<x>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
<y>is either B or T. B means
use the bottom half (bits [15:0]) of , RsT means use
the top half (bits [31:16]) of .Rs
condis an optional condition code (see Conditional execution).
RdHi, RdLoare the destination registers. They also hold the accumulate value.
Rm, Rsare the registers holding the values to be multiplied.
Do not use r15 for , RdHi, RdLo,
or Rm.Rs
and RdHi must
be different registers.RdLo
SMLALxy multiplies the signed integer from the
selected half of by
the signed integer from the selected half of Rs,
and adds the 32-bit result to the 64-bit value in Rm and RdHi.RdLo
This instruction does not change the flags.
SMLALxy cannot raise an exception. If overflow
occurs on this instruction, the result wraps round without any warning.
This ARM instruction is available in ARMv6 and above, and E variants of ARMv5.
This 32-bit Thumb-2 instruction is available in T2 variants of ARMv6 and above.
There is no 16-bit Thumb version of this instruction.