mulhu

mulhu

RISC-V 汇编 参考

lyszt.net 更详细地介绍了 mulhu 和其他 RISC-V 指令。

编码格式

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

描述

MUL 对 rs1 与 rs2 执行 XLEN 位×XLEN 位乘法,并将乘积的低 XLEN 位放入目标寄存器。MULH、MULHU 和 MULHSU 执行相同的乘法,但分别针对有符号×有符号、无符号×无符号以及 rs1×无符号 rs2 乘法,返回完整 2×XLEN 位乘积的高 XLEN 位。如果需要同一乘积的高位和低位,推荐的代码序列为:MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2(源寄存器说明符必须顺序相同,且 rdh 不能与 rs1 或 rs2 相同)。随后微架构可以将这些融合为单次乘法操作,而不是执行两次单独的乘法。

ℹ
MULHSU 用于多字有符号乘法中,将被乘数的最高有效字(包含符号位)与乘数的较低有效字(无符号)相乘。

MULW 是 RV64 指令,对源寄存器的低 32 位进行乘法,并将结果低 32 位的符号扩展放入目标寄存器。

ℹ
在 RV64 中,MUL 可用于获取 64 位乘积的高 32 位,但有符号参数必须是正确的 32 位有符号值,而无符号参数的高 32 位必须清零。如果无法确定参数是符号扩展还是零扩展,另一种方法是将两个参数左移 32 位,然后使用 MULH[[S]U]。