4.4.5. SMLALxy

有符号乘加,采用 16 位操作数和 64 位累加器。

语法

SMLAL<x><y>{cond} RdLo, RdHi, Rn, Rm

其中:

<x>

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

<y>

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

cond

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

RdHi, RdLo

是目标寄存器。 它们也存放累加值。 RdHiRdLo 必须为不同的寄存器。

Rn, Rm

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

不要将 r15 用作 RdHiRdLoRnRm

用法

SMLALxy 可将选自 Rm 的 16 位有符号整数与选自 Rn 的 16 位有符号整数相乘,然后将 32 位乘积结果与 RdHiRdLo 中的 64 位值相加。

条件标记

此指令不更改标记。

Note

SMLALxy 不会产生异常。 如果此指令发生溢出,则将不返回结果,且不发出警告。

体系结构

此 ARM 指令可用于 ARMv6 及更高版本和 ARMv5 的 E 变体中。

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

此指令无 16 位 Thumb 版本。

示例

    SMLALTB     r2, r3, r7, r1
    SMLALBTVS   r0, r1, r9, r2
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential