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 bitsmul无后缀s版本,无法检测溢出- 所有操作数均为寄存器,无立即数
- 不存在独立的有无符号版本的乘法,乘法无补码
为了克服这些限制,因此有下面四个版本
1 | SMULH Xd, Xn, Xm |
SMULL与UMULL允许我们计算两个 32 bits 数的 64 bits 乘积SMULL与SMULH用于带符号数UMULL与UMULH用于无符号数
SMULH 和 UMULH 给我们 higher 64 bits
的乘法结果,SMULH 与 MUL 连用即可获得完整的
128 bits 的带符号数乘法结果,而 UMULH 与 MUL
连用即可获得完整的 128 bits 的无符号数乘法结果
下面几个指令计算乘法的相反数
1 | MNEG Xd, Xn, Xm |