IR[31:26] Mnemonic d Effect Data Transfer, mem = M[RS1 + Sext(imm)] 100000 0x20 lb 1 RD = Sext(mem) 100001 0x21 lh 2 RD = Sext(mem) 100011 0x23 lw 4 RD = mem 100100 0x24 lbu 1 RD = 024mem 100101 0x25 lhu 2 RD = 016mem 101000 0x28 sb 1 mem = RD[7:0] 101001 0x29 sh 2 mem = RD[15:0] 101011 0x2b sw 4 mem = RD Arithmetic, Logical Operation 001000 0x08 addi RD = RS1 + Sext(imm) 001001 0x09 addiu RD = RS1 + Sext(imm) (no overflow) 001010 0x10 subi RD = RS1 - Sext(imm) 001011 0x11 subiu RD = RS1 - Sext(imm) (no overflow) 001100 0x12 andi RD = RS1 Ù Sext(imm) 001101 0x13 ori RD = RS1 Ú Sext(imm) 001110 0x14 xori RD = RS1 Å Sext(imm) 001111 0x15 lhgi RD = imm016 Test Set Operation 011000 0x18 clri RD = (false ? 1 : 0) 011001 0x19 sgri RD = (RS1 > Sext(imm) ? 1 : 0) 011010 0x1a seqi RD = (RS1 = Sext(imm) ? 1 : 0) 011011 0x1b sgei RD = (RS1 ³ Sext(imm) ? 1 : 0) 011100 0x1c slsi RD = (RS1 < Sext(imm) ? 1 : 0) 011101 0x1d snei RD = (RS1 ¹ Sext(imm) ? 1 : 0) 011110 0x1e slei RD = (RS1 £ Sext(imm) ? 1 : 0) 011111 0x1f seti RD = ( true ? 1 : 0) Control Operation 000100 0x04 beqz PC = PC + 4 + (RS1 = 0 ? Sext(imm) : 0) 000101 0x05 bnez PC = PC + 4 + (RS1 ¹ 0 ? Sext(imm) : 0) 000110 0x16 jr PC = RS1 000111 0x17 jalr R31 = PC + 4; PC = RS1
IR[31:26] IR[5:0] Mnemonic Effect Shift Operation 000000 0x00 000000 0x00 slli RD = RS1 << SA 000000 0x00 000001 0x01 slai RD = RS1 << SA (arith.) 000000 0x00 000010 0x02 srli RD = RS1 >> SA 000000 0x00 000011 0x03 srai RD = RS1 >> SA (arith.) 000000 0x00 000100 0x04 sll RD = RS1 << RS2[4:0] 000000 0x00 000101 0x05 sla RD = RS1 << RS2[4:0] (arith.) 000000 0x00 000110 0x06 srl RD = RS1 >> RS2[4:0] 000000 0x00 000111 0x07 sra RD = RS1 >> RS2[4:0] (arith.) Data Transfer 000000 0x00 010000 0x10 movs2i RD = SA 000000 0x00 010001 0x11 movi2s SA = RS1 Arithmetic, Logical Operation 000000 0x00 100000 0x20 add RD = RS1 + RS2 000000 0x00 100001 0x21 addu RD = RS1 + RS2 (no overflow) 000000 0x00 100010 0x22 sub RD = RS1 - RS2 000000 0x00 100011 0x23 subu RD = RS1 - RS2 (no overflow) 000000 0x00 100100 0x24 and RD = RS1 Ù RS2 000000 0x00 100101 0x25 or RD = RS1 Ú RS2 000000 0x00 100110 0x26 xor RD = RS1 Å RS2 000000 0x00 100111 0x27 lhg RD = RS2[15:0] 016 Test Set Operation 000000 0x00 101000 0x28 clr RD = ( false ? 1 : 0) 000000 0x00 101001 0x29 sgr RD = (RS1 > RS2 ? 1 : 0) 000000 0x00 101010 0x2a seq RD = (RS1 = RS2 ? 1 : 0) 000000 0x00 101011 0x2b sge RD = (RS1 ³ RS2 ? 1 : 0) 000000 0x00 101100 0x2c sls RD = (RS1 < RS2 ? 1 : 0) 000000 0x00 101101 0x2d sne RD = (RS1 ¹ RS2 ? 1 : 0) 000000 0x00 101110 0x2e sle RD = (RS1 £ RS2 ? 1 : 0) 000000 0x00 101111 0x2f set RD = ( true ? 1 : 0)
IR[31:26] Mnemonic Effect Control Operation 000010 0x02 j PC = PC + 4 + Sext(imm) 000011 0x03 jal R31 = PC + 4; PC = PC + 4 + Sext(imm) 111110 0x3e trap trap = 1; EPC = PC; PC = SISR; ESR = SR; ECA = masked CA; SR = 0; EDATA = Sext(imm); clear CA but catch new interrupt events 111111 0x3f rfe SR = ESR; PC = EPC
IR[31:26] Mnemonic d Effect Load, Store 110001 0x31 load.s 4 FD[31:0] = mem 110101 0x35 load.d 8 FD[63:0] = mem 111001 0x39 store.s 4 m = FD[31:0] 111101 0x3d store.d 8 m = FD[63:0] Control Operation 000110 0x06 fbeqz PC = PC + 4 + (FCC = 0 ? Sext(imm) : 0) 000111 0x07 fbnez PC = PC + 4 + (FCC ¹ 0 ? Sext(imm) : 0)
IR[31:26] IR[5:0] Fmt Mnemonic Effect Arithmetic and Compare Operations 010001 0x11 000000 0x00 fadd [.s, .d] FD = FS1 + FS2 010001 0x11 000001 0x01 fsub [.s, .d] FD = FS1 - FS2 010001 0x11 000010 0x02 fmul [.s, .d] FD = FS1 * FS2 010001 0x11 000011 0x03 fdiv [.s, .d] FD = FS1 / FS2 010001 0x11 000100 0x04 fneg [.s, .d] FD = - FS1 010001 0x11 000101 0x05 fabs [.s, .d] FD = abs(FS1) 010001 0x11 000110 0x06 fsqt [.s, .d] FD = sqrt(FS1) 010001 0x11 000111 0x07 frem [.s, .d] FD = rem(FS1, FS2) 010001 0x11 11c3 c2 c1 c0 fc.cond [.s, .d] FCC = (FS1 cond FS2) Data Transfer 010001 0x11 001000 0x08 000 fmov.s FD[31:0] = FS1[31:0] 010001 0x11 001000 0x08 001 fmov.d FD[63:0] = FS1[63:0] 010001 0x11 001001 0x09 mf2i RS = FS1[31:0] 010001 0x11 001010 0x0a mi2f FD[31:0] = RS Conversion 010001 0x11 100000 0x20 001 cvt.s.d FD = cvt(FS1, s, d) 010001 0x11 100000 0x20 100 cvt.s.i FD = cvt(FS1, s, i) 010001 0x11 100001 0x21 000 cvt.d.s FD = cvt(FS1, d, s) 010001 0x11 100001 0x21 100 cvt.d.i FD = cvt(FS1, d, i) 010001 0x11 100100 0x24 000 cvt.i.s FD = cvt(FS1, i, s) 010001 0x11 100100 0x24 001 cvt.i.d FD = cvt(FS1, i, d)
RM Symbol Rounding Mode 00 RZ toward zero 01 RNE to next even 10 RPI toward +¥ 11 RMI toward -¥
Bit Symbol Purpose 0 OVF overflow 1 UNF underflow 2 INX inexact result 3 DBZ divide by zero 4 INV invalid operation