4.4.9. SMLALD 和 SMLSLD

两次 16 位有符号乘法,对乘积相加或相减并进行 64 位累加。

语法

op{X}{cond} RdLo, RdHi, Rn, Rm

其中:

op

是下列项之一:

SMLALD

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

SMLSLD

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

X

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

cond

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

RdLo, RdHi

是存放 64 位结果的目标寄存器。 它们还要存放 64 位累加操作数。 RdHiRdLo 必须为不同的寄存器。

Rn, Rm

是存放操作数的寄存器。

不要将 r15 用作 RdLoRdHiRnRm

操作

SMLALD 可将 Rn 的低半字与 Rm 的低半字相乘,将 Rn 的高半字与 Rm 的高半字相乘。 然后,将两个乘积与 RdLoRdHi 中的值相加,并将所得的和存入 RdLoRdHi 中。

SMLSLD 可将 Rn 的低半字与 Rm 的低半字相乘,将 Rn 的高半字与 Rm 的高半字相乘。 然后,从第一个乘积中减去第二个乘积,将所得的差与 RdLoRdHi 中的值相加,并把结果存入 RdLoRdHi

条件标记

这些指令不更改标记。

体系结构

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

这些 32 位 Thumb 指令可用于 ARMv6T2 及更高版本(ARMv7-M 架构除外)。

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

示例

    SMLALD      r10, r11, r5, r1
    SMLSLD      r3, r0, r5, r1
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential