/* Automatically generated by parse-opcodes */
-switch(opcode)
+switch((insn.bits >> 0x19) & 0x7f)
{
- case 0:
+ case 0x0:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- switch(funct)
- {
- case 0:
- {
- #include "insns/unimp.h"
- }
- break;
- case 1:
- {
- #include "insns/sll.h"
- }
- break;
- case 2:
- {
- #include "insns/srl.h"
- }
- break;
- case 3:
- {
- #include "insns/sra.h"
- }
- break;
- case 5:
- {
- #include "insns/sllv.h"
- }
- break;
- case 6:
- {
- #include "insns/srlv.h"
- }
- break;
- case 7:
- {
- #include "insns/srav.h"
- }
- break;
- case 9:
- {
- #include "insns/jalr.h"
- }
- break;
- case 10:
- {
- #include "insns/movz.h"
- }
- break;
- case 11:
- {
- #include "insns/movn.h"
- }
- break;
- case 12:
- {
- #include "insns/syscall.h"
- }
- break;
- case 13:
- {
- #include "insns/break.h"
- }
- break;
- case 14:
- {
- #include "insns/rdhwr.h"
- }
- break;
- case 15:
- {
- #include "insns/sync.h"
- }
- break;
- case 17:
- {
- #include "insns/dsll.h"
- }
- break;
- case 18:
- {
- #include "insns/dsrl.h"
- }
- break;
- case 19:
- {
- #include "insns/dsra.h"
- }
- break;
- case 21:
- {
- #include "insns/dsllv.h"
- }
- break;
- case 22:
- {
- #include "insns/dsrlv.h"
- }
- break;
- case 23:
- {
- #include "insns/dsrav.h"
- }
- break;
- case 25:
- {
- #include "insns/dsll32.h"
- }
- break;
- case 26:
- {
- #include "insns/dsrl32.h"
- }
- break;
- case 27:
- {
- #include "insns/dsra32.h"
- }
- break;
- case 32:
- {
- #include "insns/add.h"
- }
- break;
- case 33:
- {
- #include "insns/sub.h"
- }
- break;
- case 34:
- {
- #include "insns/slt.h"
- }
- break;
- case 35:
- {
- #include "insns/sltu.h"
- }
- break;
- case 36:
- {
- #include "insns/and.h"
- }
- break;
- case 37:
- {
- #include "insns/or.h"
- }
- break;
- case 38:
- {
- #include "insns/xor.h"
- }
- break;
- case 39:
- {
- #include "insns/nor.h"
- }
- break;
- case 40:
- {
- #include "insns/mul.h"
- }
- break;
- case 48:
- {
- #include "insns/dadd.h"
- }
- break;
- case 49:
- {
- #include "insns/dsub.h"
- }
- break;
- case 56:
- {
- #include "insns/dmul.h"
- }
- break;
- default:
- {
- #include "insns/unimp.h"
- }
+ case 0x0:
+ {
+ if((insn.bits & 0xffffffff) == 0x0)
+ {
+ #include "insns/unimp.h"
break;
}
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 1:
- {
- #include "insns/synci.h"
- }
- break;
- case 2:
- {
- #include "insns/j.h"
- }
- break;
- case 3:
- {
- #include "insns/jal.h"
- }
- break;
- case 4:
- {
- #include "insns/beq.h"
- }
- break;
- case 5:
- {
- #include "insns/bne.h"
- }
+ }
+ case 0x60:
+ {
+ #include "insns/j.h"
break;
- case 8:
- {
- #include "insns/addi.h"
- }
+ }
+ case 0x61:
+ {
+ #include "insns/j.h"
break;
- case 10:
- {
- #include "insns/slti.h"
- }
+ }
+ case 0x62:
+ {
+ #include "insns/j.h"
break;
- case 11:
- {
- #include "insns/sltiu.h"
- }
+ }
+ case 0x63:
+ {
+ #include "insns/j.h"
break;
- case 12:
- {
- #include "insns/andi.h"
- }
+ }
+ case 0x64:
+ {
+ #include "insns/jal.h"
break;
- case 13:
- {
- #include "insns/ori.h"
- }
+ }
+ case 0x65:
+ {
+ #include "insns/jal.h"
break;
- case 14:
- {
- #include "insns/xori.h"
- }
+ }
+ case 0x66:
+ {
+ #include "insns/jal.h"
break;
- case 15:
- {
- #include "insns/lui.h"
- }
+ }
+ case 0x67:
+ {
+ #include "insns/jal.h"
break;
- case 16:
+ }
+ case 0x68:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- switch(funct)
+ case 0x0:
{
- case 0:
- {
- #include "insns/ei.h"
- }
+ if((insn.bits & 0xfe007c00) == 0xd0000000)
+ {
+ #include "insns/add_fmt.h"
break;
- case 1:
- {
- #include "insns/di.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd0001000)
+ {
+ #include "insns/sub_fmt.h"
break;
- case 2:
- {
- #include "insns/eret.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd0002000)
+ {
+ #include "insns/mul_fmt.h"
break;
- case 24:
- {
- #include "insns/mfc0.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x3:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd0003000)
+ {
+ #include "insns/div_fmt.h"
break;
- case 25:
- {
- #include "insns/dmfc0.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd0004000)
+ {
+ #include "insns/sqrt_fmt.h"
break;
- case 28:
- {
- #include "insns/mtc0.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd0005000)
+ {
+ #include "insns/abs_fmt.h"
break;
- case 29:
- {
- #include "insns/dmtc0.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd0006000)
+ {
+ #include "insns/mov_fmt.h"
break;
- default:
- {
- #include "insns/unimp.h"
- }
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd0007000)
+ {
+ #include "insns/neg_fmt.h"
break;
}
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 17:
+ }
+ case 0x69:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- switch(funct)
- {
- case 0:
- {
- #include "insns/add_fmt.h"
- }
- break;
- case 1:
- {
- #include "insns/sub_fmt.h"
- }
- break;
- case 2:
- {
- #include "insns/mul_fmt.h"
- }
- break;
- case 3:
- {
- #include "insns/div_fmt.h"
- }
- break;
- case 4:
- {
- #include "insns/sqrt_fmt.h"
- }
- break;
- case 5:
- {
- #include "insns/abs_fmt.h"
- }
- break;
- case 6:
- {
- #include "insns/mov_fmt.h"
- }
- break;
- case 7:
- {
- #include "insns/neg_fmt.h"
- }
- break;
- case 8:
- {
- #include "insns/round_l_fmt.h"
- }
- break;
- case 9:
- {
- #include "insns/trunc_l_fmt.h"
- }
- break;
- case 10:
- {
- #include "insns/ceil_l_fmt.h"
- }
- break;
- case 11:
- {
- #include "insns/floor_l_fmt.h"
- }
- break;
- case 12:
- {
- #include "insns/round_w_fmt.h"
- }
- break;
- case 13:
- {
- #include "insns/trunc_w_fmt.h"
- }
- break;
- case 14:
- {
- #include "insns/ceil_w_fmt.h"
- }
- break;
- case 15:
- {
- #include "insns/floor_w_fmt.h"
- }
- break;
- case 24:
- {
- #include "insns/mfc1.h"
- }
- break;
- case 25:
- {
- #include "insns/dmfc1.h"
- }
- break;
- case 26:
- {
- #include "insns/cfc1.h"
- }
- break;
- case 27:
- {
- #include "insns/mfhc1.h"
- }
- break;
- case 28:
- {
- #include "insns/mtc1.h"
- }
- break;
- case 29:
- {
- #include "insns/dmtc1.h"
- }
- break;
- case 30:
- {
- #include "insns/ctc1.h"
- }
- break;
- case 31:
- {
- #include "insns/mthc1.h"
- }
- break;
- case 32:
- {
- #include "insns/cvt_s_fmt.h"
- }
- break;
- case 33:
- {
- #include "insns/cvt_d_fmt.h"
- }
- break;
- case 36:
- {
- #include "insns/cvt_w_fmt.h"
- }
- break;
- case 37:
- {
- #include "insns/cvt_l_fmt.h"
- }
- break;
- case 48:
- {
- #include "insns/c_f_fmt.h"
- }
- break;
- case 49:
- {
- #include "insns/c_un_fmt.h"
- }
- break;
- case 50:
- {
- #include "insns/c_eq_fmt.h"
- }
- break;
- case 51:
- {
- #include "insns/c_ueq_fmt.h"
- }
- break;
- case 52:
- {
- #include "insns/c_olt_fmt.h"
- }
- break;
- case 53:
- {
- #include "insns/c_ult_fmt.h"
- }
- break;
- case 54:
- {
- #include "insns/c_ole_fmt.h"
- }
- break;
- case 55:
- {
- #include "insns/c_ule_fmt.h"
- }
- break;
- case 56:
- {
- #include "insns/c_sf_fmt.h"
- }
- break;
- case 57:
- {
- #include "insns/c_ngle_fmt.h"
- }
- break;
- case 58:
- {
- #include "insns/c_seq_fmt.h"
- }
- break;
- case 59:
- {
- #include "insns/c_ngl_fmt.h"
- }
- break;
- case 60:
- {
- #include "insns/c_lt_fmt.h"
- }
- break;
- case 61:
- {
- #include "insns/c_nge_fmt.h"
- }
- break;
- case 62:
- {
- #include "insns/c_le_fmt.h"
- }
- break;
- case 63:
- {
- #include "insns/c_ngt_fmt.h"
- }
- break;
- default:
- {
- #include "insns/unimp.h"
- }
+ case 0x0:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2000000)
+ {
+ #include "insns/round_l_fmt.h"
break;
}
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2001000)
+ {
+ #include "insns/trunc_l_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2002000)
+ {
+ #include "insns/ceil_l_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x3:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2003000)
+ {
+ #include "insns/floor_l_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2004000)
+ {
+ #include "insns/round_w_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2005000)
+ {
+ #include "insns/trunc_w_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2006000)
+ {
+ #include "insns/ceil_w_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd2007000)
+ {
+ #include "insns/floor_w_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 20:
- {
- #include "insns/blt.h"
- }
- break;
- case 21:
- {
- #include "insns/bltu.h"
- }
- break;
- case 22:
- {
- #include "insns/ble.h"
- }
- break;
- case 23:
- {
- #include "insns/bleu.h"
- }
- break;
- case 24:
- {
- #include "insns/daddi.h"
- }
- break;
- case 32:
- {
- #include "insns/lb.h"
- }
- break;
- case 33:
+ }
+ case 0x6a:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/lh.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4000000)
+ {
+ #include "insns/mfc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4001000)
+ {
+ #include "insns/dmfc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4002000)
+ {
+ #include "insns/cfc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x3:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4003000)
+ {
+ #include "insns/mfhc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4004000)
+ {
+ #include "insns/mtc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4005000)
+ {
+ #include "insns/dmtc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4006000)
+ {
+ #include "insns/ctc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfe007fff) == 0xd4007000)
+ {
+ #include "insns/mthc1.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 35:
+ }
+ case 0x6b:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/lw.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd6000000)
+ {
+ #include "insns/cvt_s_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd6001000)
+ {
+ #include "insns/cvt_d_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd6004000)
+ {
+ #include "insns/cvt_w_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe0ffc00) == 0xd6005000)
+ {
+ #include "insns/cvt_l_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 36:
+ }
+ case 0x6c:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/lbu.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8000000)
+ {
+ #include "insns/c_f_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8001000)
+ {
+ #include "insns/c_un_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8002000)
+ {
+ #include "insns/c_eq_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x3:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8003000)
+ {
+ #include "insns/c_ueq_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8004000)
+ {
+ #include "insns/c_olt_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8005000)
+ {
+ #include "insns/c_ult_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8006000)
+ {
+ #include "insns/c_ole_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfe007c00) == 0xd8007000)
+ {
+ #include "insns/c_ule_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 37:
+ }
+ case 0x6d:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/lhu.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda000000)
+ {
+ #include "insns/c_sf_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda001000)
+ {
+ #include "insns/c_ngle_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda002000)
+ {
+ #include "insns/c_seq_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x3:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda003000)
+ {
+ #include "insns/c_ngl_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda004000)
+ {
+ #include "insns/c_lt_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda005000)
+ {
+ #include "insns/c_nge_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda006000)
+ {
+ #include "insns/c_le_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfe007c00) == 0xda007000)
+ {
+ #include "insns/c_ngt_fmt.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 39:
- {
- #include "insns/lwu.h"
- }
+ }
+ case 0x71:
+ {
+ #include "insns/lui.h"
break;
- case 40:
- {
- #include "insns/sb.h"
- }
+ }
+ case 0x72:
+ {
+ #include "insns/slori.h"
break;
- case 41:
+ }
+ case 0x73:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/sh.h"
+ case 0x0:
+ {
+ #include "insns/beq.h"
+ break;
+ }
+ case 0x1:
+ {
+ #include "insns/bne.h"
+ break;
+ }
+ case 0x2:
+ {
+ #include "insns/blt.h"
+ break;
+ }
+ case 0x3:
+ {
+ #include "insns/bltu.h"
+ break;
+ }
+ case 0x4:
+ {
+ #include "insns/ble.h"
+ break;
+ }
+ case 0x5:
+ {
+ #include "insns/bleu.h"
+ break;
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 43:
+ }
+ case 0x74:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/sw.h"
+ case 0x0:
+ {
+ #include "insns/addi.h"
+ break;
+ }
+ case 0x1:
+ {
+ #include "insns/daddi.h"
+ break;
+ }
+ case 0x2:
+ {
+ #include "insns/slti.h"
+ break;
+ }
+ case 0x3:
+ {
+ #include "insns/sltiu.h"
+ break;
+ }
+ case 0x4:
+ {
+ #include "insns/andi.h"
+ break;
+ }
+ case 0x5:
+ {
+ #include "insns/ori.h"
+ break;
+ }
+ case 0x6:
+ {
+ #include "insns/xori.h"
+ break;
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 49:
+ }
+ case 0x75:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/l_s.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe007fe0) == 0xea0000e0)
+ {
+ #include "insns/nor.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea000060)
+ {
+ #include "insns/sltu.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea0000c0)
+ {
+ #include "insns/xor.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea000020)
+ {
+ #include "insns/sub.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea0000a0)
+ {
+ #include "insns/or.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea000000)
+ {
+ #include "insns/add.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea000040)
+ {
+ #include "insns/slt.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea000080)
+ {
+ #include "insns/and.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe007fe0) == 0xea001000)
+ {
+ #include "insns/mul.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea001080)
+ {
+ #include "insns/div.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea0010c0)
+ {
+ #include "insns/rem.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea001040)
+ {
+ #include "insns/mulh.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea0010e0)
+ {
+ #include "insns/remu.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea001060)
+ {
+ #include "insns/mulhu.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea0010a0)
+ {
+ #include "insns/divu.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe007fe0) == 0xea004040)
+ {
+ #include "insns/srlv.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea004020)
+ {
+ #include "insns/sllv.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xea004060)
+ {
+ #include "insns/srav.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfff07c00) == 0xea005000)
+ {
+ #include "insns/sll.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfff07c00) == 0xea006000)
+ {
+ #include "insns/srl.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfff07c00) == 0xea007000)
+ {
+ #include "insns/sra.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 53:
+ }
+ case 0x76:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/l_d.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe007fe0) == 0xec000020)
+ {
+ #include "insns/dsub.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec000000)
+ {
+ #include "insns/dadd.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe007fe0) == 0xec0010e0)
+ {
+ #include "insns/dremu.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec001080)
+ {
+ #include "insns/ddiv.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec0010c0)
+ {
+ #include "insns/drem.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec001060)
+ {
+ #include "insns/dmulhu.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec001000)
+ {
+ #include "insns/dmul.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec001040)
+ {
+ #include "insns/dmulh.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec0010a0)
+ {
+ #include "insns/ddivu.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe007fe0) == 0xec004020)
+ {
+ #include "insns/dsllv.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec004060)
+ {
+ #include "insns/dsrav.h"
+ break;
+ }
+ if((insn.bits & 0xfe007fe0) == 0xec004040)
+ {
+ #include "insns/dsrlv.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfff07c00) == 0xec005000)
+ {
+ #include "insns/dsll.h"
+ break;
+ }
+ if((insn.bits & 0xfff07c00) == 0xec005400)
+ {
+ #include "insns/dsll32.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfff07c00) == 0xec006400)
+ {
+ #include "insns/dsrl32.h"
+ break;
+ }
+ if((insn.bits & 0xfff07c00) == 0xec006000)
+ {
+ #include "insns/dsrl.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfff07c00) == 0xec007400)
+ {
+ #include "insns/dsra32.h"
+ break;
+ }
+ if((insn.bits & 0xfff07c00) == 0xec007000)
+ {
+ #include "insns/dsra.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 55:
+ }
+ case 0x78:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/ld.h"
+ case 0x0:
+ {
+ #include "insns/lb.h"
+ break;
+ }
+ case 0x1:
+ {
+ #include "insns/lh.h"
+ break;
+ }
+ case 0x2:
+ {
+ #include "insns/lw.h"
+ break;
+ }
+ case 0x3:
+ {
+ #include "insns/ld.h"
+ break;
+ }
+ case 0x4:
+ {
+ #include "insns/lbu.h"
+ break;
+ }
+ case 0x5:
+ {
+ #include "insns/lhu.h"
+ break;
+ }
+ case 0x6:
+ {
+ #include "insns/lwu.h"
+ break;
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfff07000) == 0xf0007000)
+ {
+ #include "insns/synci.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 57:
+ }
+ case 0x79:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/s_s.h"
+ case 0x0:
+ {
+ #include "insns/sb.h"
+ break;
+ }
+ case 0x1:
+ {
+ #include "insns/sh.h"
+ break;
+ }
+ case 0x2:
+ {
+ #include "insns/sw.h"
+ break;
+ }
+ case 0x3:
+ {
+ #include "insns/sd.h"
+ break;
+ }
+ case 0x4:
+ {
+ #include "insns/l_s.h"
+ break;
+ }
+ case 0x5:
+ {
+ #include "insns/l_d.h"
+ break;
+ }
+ case 0x6:
+ {
+ #include "insns/s_s.h"
+ break;
+ }
+ case 0x7:
+ {
+ #include "insns/s_d.h"
+ break;
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 61:
+ }
+ case 0x7b:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/s_d.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe0fffe0) == 0xf6000000)
+ {
+ #include "insns/jalr_c.h"
+ break;
+ }
+ if((insn.bits & 0xfe0fffe0) == 0xf6000040)
+ {
+ #include "insns/jalr_j.h"
+ break;
+ }
+ if((insn.bits & 0xfe0fffe0) == 0xf6000020)
+ {
+ #include "insns/jalr_r.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xffffffe0) == 0xf6001000)
+ {
+ #include "insns/rdpc.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xfe0fffe0) == 0xf6002000)
+ {
+ #include "insns/rdhwr.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x3:
+ {
+ if((insn.bits & 0xffffffff) == 0xf6003000)
+ {
+ #include "insns/sync.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xffffffff) == 0xf6004000)
+ {
+ #include "insns/syscall.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xffffffff) == 0xf6005000)
+ {
+ #include "insns/break.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
- case 63:
+ }
+ case 0x7e:
+ {
+ switch((insn.bits >> 0xc) & 0x7)
{
- #include "insns/sd.h"
+ case 0x0:
+ {
+ if((insn.bits & 0xfe0fffff) == 0xfc000000)
+ {
+ #include "insns/ei.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x1:
+ {
+ if((insn.bits & 0xfe0fffff) == 0xfc001000)
+ {
+ #include "insns/di.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x2:
+ {
+ if((insn.bits & 0xffffffff) == 0xfc002000)
+ {
+ #include "insns/eret.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x4:
+ {
+ if((insn.bits & 0xfe007fff) == 0xfc004000)
+ {
+ #include "insns/mfc0.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x5:
+ {
+ if((insn.bits & 0xfe007fff) == 0xfc005000)
+ {
+ #include "insns/dmfc0.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x6:
+ {
+ if((insn.bits & 0xfe007fff) == 0xfc006000)
+ {
+ #include "insns/mtc0.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ case 0x7:
+ {
+ if((insn.bits & 0xfe007fff) == 0xfc007000)
+ {
+ #include "insns/dmtc0.h"
+ break;
+ }
+ #include "insns/unimp.h"
+ }
+ default:
+ {
+ #include "insns/unimp.h"
+ }
}
break;
+ }
default:
- {
- #include "insns/unimp.h"
- }
- break;
+ {
+ #include "insns/unimp.h"
}
+}