MacOS Arm64 汇编 part 5 - MacOS Arm64 Assembly part 5

  • Multiply, Divide, and Accumulate
  • Floating-Point Operations
  • Neon Coprocessor

Multiplication

1
MUL Xd, Xn, Xm

其中 Xd = Xn * Xm

  • Xd 是乘法结果的 lower 64 bits 对应于 X 版本,而 W 版本则为保留 lower 32 bits
  • mul 无后缀 s 版本,无法检测溢出
  • 所有操作数均为寄存器,无立即数
  • 不存在独立的有无符号版本的乘法,乘法无补码

为了克服这些限制,因此有下面四个版本

1
2
3
4
SMULH   Xd, Xn, Xm
SMULL Xd, Wn, Wm
UMULH Xd, Xn, Xm
UMULL Xd, Wn, Wm
  • SMULLUMULL 允许我们计算两个 32 bits 数的 64 bits 乘积
  • SMULLSMULH 用于带符号数
  • UMULLUMULH 用于无符号数

SMULHUMULH 给我们 higher 64 bits 的乘法结果,SMULHMUL 连用即可获得完整的 128 bits 的带符号数乘法结果,而 UMULHMUL 连用即可获得完整的 128 bits 的无符号数乘法结果

下面几个指令计算乘法的相反数

1
2
3
MNEG    Xd, Xn, Xm
SMNEGL Xd, Wn, Wm
UMNEGL Xd, Wn, Wm