4.5.8. SMLAD 和 SMLSD

两次 16 位有符号乘法,然后将乘积相加或相减,32 位累加。

语法

op{X}{cond} Rd, Rn, Rm, Ra

其中:

op

为下列项之一:

SMLAD

两次乘法,累加乘积的和。

SMLSD

两次乘法,累加乘积的差。

cond

是一个可选的条件代码(请参阅条件执行)。

X

是一个可选的参数。 如果有 X,则在相乘之前,会先交换第二个操作数的高半字和低半字。

Rd

是目标寄存器。

Rn, Rm

是存放操作数的寄存器。

Ra

是存放累加操作数的寄存器。

不能将 r15 用作 RdRnRmRa

操作

SMLAD 可将 Rn 的低半字与 Rm 的低半字相乘,将 Rn 的高半字与 Rm 的高半字相乘。 然后,将两个乘积与 Ra 中的值相加,并将和存入 Rd

SMLSD 可将 Rn 的低半字与 Rm 的低半字相乘,将 Rn 的高半字与 Rm 的高半字相乘。 然后,从第一个乘积中减去第二个乘积,接着将所得的差与 Ra 中的值相加,最后将结果存入 Rd

条件标记

这些指令不更改标记。

体系结构

这些指令可用于 ARMv6 及更高版本,以及 ARMv5 的 E 变体。

这些 32 位 Thumb 指令可用于 ARMv6T2 和 ARMv7,但 ARMv7-M 架构要除外。

这些指令均无 16 位 Thumb 版本。

示例


    SMLSD       r1, r2, r0, r7

    SMLSDX      r11, r10, r2, r3

    SMLADLT     r1, r2, r4, r1

Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0204HC
Non-Confidential