### 16.2.3. Multiply instructions

The ARM multiply instructions include `MLA`, `MUL`, `SLMAxy`, `SMLAD`, `SMLAL`, `SMLALxy`, `SMLALD`, `SMLAWy`, `SMLD`, `SMLSLD`, `SMMLA`, `SMMLS`, `SMMUL`, `SMUAD`, `SMULxy`, `SMULL`, `SMULW`, `SMUSD`, UMAAL, `UMLAL`, `UMULL`.

Table 16.4 shows the operation of multiply instructions.

Table 16.4. Multiply instructions

Multiply typeCyclesSource1Source2Source3Source4Result1Result2
Normal: `MUL`2`Rm:E1``Rs:E1``[Rd:E3]``{Rn:E4}`[1]`Rd:E5`-
Long: `SMULL`, `UMULL`3`Rm:E1``Rs:E1``{[RdLo:E3]}``{[RdHi:E3]}``RdLo:E5``RdHi:E5`
Long: `SMLAL`, `UMLAL`, `UMAAL`3`Rm:E1``Rs:E1``{[RdLo:E2]}``{[RdHi:E1]}``RdLo:E5``RdHi:E5`

Halfword: `SMLAxy`,

`SMULxy`

2`Rm:E1``Rs:E1``[Rd:E2]``{Rn:E4}`a`Rd:E5`-

Halfword: `SMLALxy`

2`Rm:E1``Rs:E1``{[RdLo:E1]}``{[RdHi:E2]}``RdLo:E5``RdHi:E5`
Word-halfword: `SMULWy`1`Rm:E1``Rs:E1``[Rd:E2]`-`Rd:E5`-
Word-halfword: `SMLAWy`2`Rm:E1``Rs:E1``[Rd:E2]``Rn:E4`a`Rd:E5`-
Most significant word2`Rm:E1``Rs:E1``[Rd:E3]``{Rn:E4}`a`Rd:E5`-

Dual halfword: `SMUAD`,

`SMUSD`

1`Rm:E1``Rs:E1``[Rd:E2]`-`Rd:E5`-

Dual halfword: `SMLAD`, `SMLSD`

2`Rm:E1``Rs:E1`[`Rd:E2]``{Rn:E4}`a`Rd:E5`-

Dual halfword:

`SMLALD`, `SMLSLD`

2`Rm:E1``Rs:E1``{[RdLo:E1]}``{[RdHi:E2]}``RdLo:E5``RdHi:E5`

[1] A multiply that is followed by a MAC with a dependency on the accumulator, Rn register, triggers a special accumulator forwarding. This enables both instructions to issue back-to-back because Rn is required as a source in E4. If this accumulator forwarding is not used, Rn is required in E2.