4.4.4. SMULWy 和 SMLAWy

有符号扩大乘法和有符号扩大乘加,采用一个 32 位操作数和一个 16 位操作数,结果取高 32 位。

语法

SMULW<y>{cond} {Rd}, Rn, Rm
SMLAW<y>{cond} Rd, Rn, Rm, Ra

其中:

<y>

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

cond

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

Rd

是目标寄存器。

Rn, Rm

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

Ra

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

用法

不要将 r15 用作 RdRnRmRa

SMULWy 可将选自 Rm 的 16 位有符号整数与 Rn 中的有符号整数相乘,并将 48 位结果的高 32 位存入 Rd

SMLAWy 可将选自 Rm 的 16 位有符号整数与 Rn 中的有符号整数相乘,然后将 32 位结果与 Ra 中的 32 位值相加,最后将结果存入 Rd

条件标记

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

如果累加时发生溢出,则 SMLAWy 会设置 Q 标记(请参阅MRS)。

体系结构

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

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

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

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential