4.4.3. SMULxy 和 SMLAxy

采用 16 位操作数以及 32 位结果和累加器的有符号乘法和乘加。

语法

SMUL<x><y>{cond} {Rd}, Rn, Rm
SMLA<x><y>{cond} Rd, Rn, Rm, Ra

其中:

<x>

BTB 表示使用 Rn 的低 16 位(位 [15:0]),T 表示使用 Rn 的高 16 位(位 [31:16])。

<y>

BTB 表示使用 Rm 的低 16 位(位 [15:0]),T 表示使用 Rm 的高 16 位(位 [31:16])。

cond

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

Rd

是目标寄存器。

Rn, Rm

存放要相乘的值的寄存器。

Ra

是存放要相加的值的寄存器。

用法

不要将 r15 用作 RdRnRmRa

SMULxy 可将从 RnRm 中选择的 16 位有符号整数相乘,并将 32 位结果存入 Rd

SMLAxy 可将从 RnRm 中选择的 16 位有符号整数相乘,并会将 32 位结果与 Ra 中的 32 位值相加,最后将结果存入 Rd

条件标记

这些指令不影响 N、Z、C 或 V 标记。

如果累加时发生溢出,SMLAxy 将设置 Q 标记。 若要读取 Q 标记的状态,请使用 MRS 指令(请参阅MRS)。

Note

SMLAxy 不会清除 Q 标记。 要清除 Q 标记,请使用 MSR 指令(请参阅MSR)。

体系结构

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

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

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

示例

    SMULTBEQ    r8, r7, r9
    SMLABBNE    r0, r2, r1, r10
    SMLABT      r0, r0, r3, r5
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential