POOL32A 000000 |
rt |
rs |
rd |
0 |
MUL 0000011000 |
POOL32A 000000 |
rt |
rs |
rd |
0 |
MUH 0001011000 |
POOL32A 000000 |
rt |
rs |
rd |
0 |
MULU 0010011000 |
POOL32A 000000 |
rt |
rs |
rd |
0 |
MUHU 0011011000 |
6 |
5 |
5 |
5 |
1 |
10 |
POOL32S 010110 |
rt |
rs |
rd |
00 |
DMUL 000011000 |
POOL32S 010110 |
rt |
rs |
rd |
00 |
DMUH 001011000 |
POOL32S 010110 |
rt |
rs |
rd |
00 |
DMULU 010011000 |
POOL32S 010110 |
rt |
rs |
rd |
00 |
DMUHU 011011000 |
6 |
5 |
5 |
5 |
2 |
9 |
MUL MUH MULU MUHU DMUL DMUH DMULU DMUHU |
Multiply Words Signed, Low Word | |
MUL rd,rs,rt |
microMIPS32 Release 6 |
Multiply Words Signed, Low Word |
MUH rd,rs,rt |
microMIPS32 Release 6 |
Multiply Words Signed, High Word |
MULU rd,rs,rt |
microMIPS32 Release 6 |
Multiply Words Unsigned, Low Word |
MUHU rd,rs,rt |
microMIPS32 Release 6 |
Multiply Words Unsigned, High Word |
DMUL rd,rs,rt |
microMIPS64 Release 6 |
Multiply Doublewords Signed, Low Doubleword |
DMUH rd,rs,rt |
microMIPS64 Release 6 |
Multiply Doublewords Signed, High Doubleword |
DMULU rd,rs,rt |
microMIPS64 Release 6 |
Multiply Doublewords Unsigned, Low Doubleword |
DMUHU rd,rs,rt |
microMIPS64 Release 6 |
Multiply Doublewords Unsigned, High Doubleword |
Multiply Integers (with result to GPR)
MUL: Multiply Words Signed, Low Word
MUH: Multiply Words Signed, High Word
MULU: Multiply Words Unsigned, Low Word
MUHU: Multiply Words Unsigned, High Word
DMUL: Multiply Doublewords Signed, Low Doubleword
DMUH: Multiply Doublewords Signed, High Doubleword
DMULU: Multiply Doublewords Unsigned, Low Doubleword
DMUHU: Multiply Doublewords Unsigned, High Doubleword
MUL: GPR[rd] = sign_extend.32( lo_word( multiply.signed( GPR[rs] <= GPR[rt] ) ) ) MUH: GPR[rd] = sign_extend.32( hi_word( multiply.signed( GPR[rs] <= GPR[rt] ) ) ) MULU: GPR[rd] = sign_extend.32( lo_word( multiply.unsigned( GPR[rs] <= GPR[rt] ) ) ) MUHU: GPR[rd] = sign_extend.32( hi_word( multiply.unsigned( GPR[rs] <= GPR[rt] ) ) ) DMUL: GPR[rd] = lo_doubleword( multiply.signed( GPR[rs] <= GPR[rt] ) ) DMUH: GPR[rd] = hi_doubleword( multiply.signed( GPR[rs] <= GPR[rt] ) ) DMULU: GPR[rd] = lo_doubleword( multiply.unsigned( GPR[rs] <= GPR[rt] ) ) DMUHU: GPR[rd] = hi_doubleword( multiply.unsigned( GPR[rs] <= GPR[rt] ) )
The Release 6 multiply instructions multiply the operands in GPR[rs] and GPR[rd], and place the specified high or low part of the result, of the same width, in GPR[rd].
MUL performs a signed 32-bit integer multiplication, and places the low 32 bits of the result in the destination register.
MUH performs a signed 32-bit integer multiplication, and places the high 32 bits of the result in the destination register.
MULU performs an unsigned 32-bit integer multiplication, and places the low 32 bits of the result in the destination register.
MUHU performs an unsigned 32-bit integer multiplication, and places the high 32 bits of the result in the destination register.
DMUL performs a signed 64-bit integer multiplication, and places the low 64 bits of the result in the destination register.
DMUH performs a signed 64-bit integer multiplication, and places the high 64 bits of the result in the destination register.
DMULU performs an unsigned 64-bit integer multiplication, and places the low 64 bits of the result in the destination register.
DMUHU performs an unsigned 64-bit integer multiplication, and places the high 64 bits of the result in the destination register.
On a 64-bit CPU, MUH is UNPREDICTABLE if its inputs are not signed extended 32-bit integers.
MUL behaves correctly even if its inputs are not sign extended 32-bit integers. Bits 32-63 of its inputs do not affect the result.
On a 64-bit CPU, MUHU is UNPREDICTABLE if its inputs are not zero or sign extended 32-bit integers.
MULU behaves correctly even if its inputs are not zero or sign extended 32-bit integers. Bits 32-63 of its inputs do not affect the result.
On a 64-bit CPU, the 32-bit multiplications, both signed and unsigned, sign extend the result as if it is a 32-bit signed integer.
DMUL DMUH DMULU DMUHU: Reserved Instruction exception if 64-bit instructions are not enabled.
These instructions are introduced by and required as of Release 6.
The low half of the integer multiplication result is identical for signed and unsigned. Nevertheless, there are distinct instructions MUL MULU DMUL DMULU. Implementations may choose to optimize a multiply that produces the low half followed by a multiply that produces the upper half. Programmers are recommended to use matching lower and upper half multiplications.
The Release 6 MUL instruction has the same opcode mnemonic as the pre-Release 6 MUL instruction. The semantics of these instructions are almost identical: both produce the low 32-bits of the 32<=32=64 product; but the pre-Release
6 MUL is unpredictable if its inputs are not properly sign extended 32-bit values on a 64 bit machine, and is defined to render the HI and LO registers unpredictable, whereas the Release 6 version ignores bits 32-63 of the input, and there are no HI/LO registers in Release 6 to be affected.
MUH: if NotWordValue(GPR[rs]) then UNPREDICTABLE endif MUH: if NotWordValue(GPR[rt]) then UNPREDICTABLE endif MUHU: if NotWordValue(GPR[rs]) then UNPREDICTABLE endif MUHU: if NotWordValue(GPR[rt]) then UNPREDICTABLE endif /* recommended implementation: ignore bits 32-63 for MUL, MUH, MULU, MUHU */ MUL, MUH: s1 = signed_word(GPR[rs]) s2 = signed_word(GPR[rt]) MULU, MUHU: s1 = unsigned_word(GPR[rs]) s2 = unsigned_word(GPR[rt]) DMUL, DMUH: s1 = signed_doubleword(GPR[rs]) s2 = signed_doubleword(GPR[rt]) DMULU, DMUHU: s1 = unsigned_doubleword(GPR[rs]) s2 = unsigned_doubleword(GPR[rt]) product = s1 <= s2 /* product is twice the width of sources */ MUL: GPR[rd] = sign_extend.32( lo_word( product ) ) MUH: GPR[rd] = sign_extend.32( hi_word( product ) ) MULU: GPR[rd] = sign_extend.32( lo_word( product ) ) MUHU: GPR[rd] = sign_extend.32( hi_word( product ) ) DMUL: GPR[rd] = lo_doubleword( product ) DMUH: GPR[rd] = hi_doubleword( product ) DMULU: GPR[rd] = lo_doubleword( product ) DMUHU: GPR[rd] = hi_doubleword( product )
MUL MUH MULU MUHU: None
DMUL DMUH DMULU DMUHU: Reserved Instruction