4.4.7. SMMUL、SMMLA 和 SMMLS

有符号高字乘法、有符号高字乘加和有符号高字乘减。 这些指令的操作数为 32 位,结果仅取高 32 位。

语法

SMMUL{R}{cond} {Rd}, Rn, Rm
SMMLA{R}{cond} Rd, Rn, Rm, Ra
SMMLS{R}{cond} Rd, Rn, Rm, Ra

其中:

R

是一个可选的参数。 如果存在 R,则对结果进行舍入,否则将其截断。

cond

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

Rd

是目标寄存器。

Rn, Rm

是存放操作数的寄存器。

Ra

存放被加数和被减数的寄存器。

不要将 r15 用作 RdRnRmRa

操作

SMMUL 可将 RnRm 中的值相乘,然后将 64 位结果的高 32 位存入 Rd

SMMLA 可将 RnRm 中的值相乘,然后将 Ra 中的值与乘积的高 32 位相加,将结果存入 Rd

SMMLS 可将 RnRm 中的值相乘,接着将 Ra 中的值左移 32 位,从移位后的值中减去乘积,最后将差的高 32 位存入 Rd

如果指定了可选参数 R,则在截取结果的高 32 位前,会先加上 0x80000000。 这对结果的舍入有影响。

条件标记

这些指令不更改标记。

体系结构

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

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

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

示例

    SMMULGE     r6, r4, r3
    SMMULR      r2, r2, r2
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential