mul
Signed multiply
This instruction is defined by:
Synopsis
MUL performs an XLEN-bitxXLEN-bit multiplication of rs1
by rs2
and places the lower
XLEN bits in the destination register.
Any overflow is thrown away.
If both the high and low bits of the same product are required, then the recommended code sequence is: MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2 (source register specifiers must be in same order and rdh cannot be the same as rs1 or rs2). Microarchitectures can then fuse these into a single multiply operation instead of performing two separate multiplies. |
Decode Variables
Bits<5> rs2 = $encoding[24:20];
Bits<5> rs1 = $encoding[19:15];
Bits<5> rd = $encoding[11:7];
Execution
-
Pruned, XLEN == 64
-
Original
XReg src1 = X[rs1];
XReg src2 = X[rs2];
X[rd] = (src1 * src2)[63:0];
if (implemented?(ExtensionName::M) && (CSR[misa].M == 1'b0)) {
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
}
XReg src1 = X[rs1];
XReg src2 = X[rs2];
X[rd] = (src1 * src2)[XLEN - 1:0];