fill instruction descriptor array

This commit is contained in:
angie 2022-06-03 18:02:25 -04:00
parent d610dab8e1
commit eea923cb26

View File

@ -4,5 +4,303 @@
#include "instructions/RabbitizerInstrDescriptor.h"
const RabbitizerInstrDescriptor RabbitizerInstrDescriptor_Descriptors[] = {
[RABBITIZER_INSTR_CPU_ID_INVALID] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_INVALID] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
// OP rs
[RABBITIZER_INSTR_CPU_ID_jr] = {.operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true},
[RABBITIZER_INSTR_CPU_ID_mthi] = {.operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_mtlo] = {.operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_jalr] = {.operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true},
// OP rd, rs
[RABBITIZER_INSTR_CPU_ID_jalr_rd] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true},
// OP rd
[RABBITIZER_INSTR_CPU_ID_mfhi] = {.operands={RABBITIZER_REGISTER_TYPE_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_mflo] = {.operands={RABBITIZER_REGISTER_TYPE_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
// OP rs, rt
[RABBITIZER_INSTR_CPU_ID_mult] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_multu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_dmult] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_dmultu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_tge] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tgeu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tlt] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tltu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_teq] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tne] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true},
// OP rd, rs, rt
[RABBITIZER_INSTR_CPU_ID_movz] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_movn] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_div] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_divu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_sn64_div] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_sn64_divu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_ddiv] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_ddivu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
// [RABBITIZER_INSTR_CPU_ID_ddiv] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
// [RABBITIZER_INSTR_CPU_ID_ddivu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_add] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_addu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_sub] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_subu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_and] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_or] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_xor] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_nor] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_slt] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_sltu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dadd] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_daddu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsub] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsubu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
// OP code
[RABBITIZER_INSTR_CPU_ID_syscall] = {.operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_break] = {.operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R},
[RABBITIZER_INSTR_CPU_ID_sync] = {.operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R},
// OP rd, rt, rs
[RABBITIZER_INSTR_CPU_ID_dsllv] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsrlv] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsrav] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_sllv] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_srlv] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_srav] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
// OP rd, rt, sa
[RABBITIZER_INSTR_CPU_ID_sll] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_srl] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_sra] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsll] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsrl] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsra] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsll32] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsrl32] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_dsra32] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
// OP rs, IMM
[RABBITIZER_INSTR_CPU_ID_bltz] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bgez] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bltzl] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_bgezl] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_tgei] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tgeiu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tlti] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tltiu] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_bltzal] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bgezal] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bltzall] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_bgezall] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_teqi] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true},
[RABBITIZER_INSTR_CPU_ID_tnei] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true},
// OP LABEL
[RABBITIZER_INSTR_CPU_ID_j] = {.operands={RABBITIZER_REGISTER_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true},
[RABBITIZER_INSTR_CPU_ID_jal] = {.operands={RABBITIZER_REGISTER_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true},
// OP rs, rt, IMM
[RABBITIZER_INSTR_CPU_ID_beq] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bne] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_beql] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_bnel] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
// OP rs, IMM
[RABBITIZER_INSTR_CPU_ID_blez] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bgtz] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_blezl] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_bgtzl] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true},
// OP rt, IMM
[RABBITIZER_INSTR_CPU_ID_lui] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true},
// OP rt, rs, IMM
[RABBITIZER_INSTR_CPU_ID_andi] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_ori] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_xori] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_addi] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_addiu] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_daddi] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_daddiu] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_slti] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_sltiu] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
// OP rt, IMM(base)
[RABBITIZER_INSTR_CPU_ID_ldl] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_ldr] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lb] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lh] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lwl] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lw] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lbu] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lhu] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lwr] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lwu] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_sb] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_sh] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_swl] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_sw] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_sdl] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_sdr] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_swr] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_ll] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_pref] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_lld] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_ld] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_sc] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_scd] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_sd] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_cache] = {.operands={RABBITIZER_REGISTER_TYPE_op, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
// OP ft, IMM(base)
[RABBITIZER_INSTR_CPU_ID_lwc1] = {.operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_ldc1] = {.operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_swc1] = {.operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_sdc1] = {.operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true},
// OP cop2t, IMM(base)
[RABBITIZER_INSTR_CPU_ID_lwc2] = {.operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_ldc2] = {.operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_swc2] = {.operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
[RABBITIZER_INSTR_CPU_ID_sdc2] = {.operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I},
// OP rt, cop0d
[RABBITIZER_INSTR_CPU_ID_mfc0] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_dmfc0] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_cfc0] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_mtc0] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_dmtc0] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_ctc0] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
// OP
[RABBITIZER_INSTR_CPU_ID_tlbr] = {.operands={}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_tlbwi] = {.operands={}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_tlbwr] = {.operands={}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_tlbp] = {.operands={}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
[RABBITIZER_INSTR_CPU_ID_eret] = {.operands={}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN},
// OP IMM
[RABBITIZER_INSTR_CPU_ID_bc0t] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bc0f] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bc0tl] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_bc0fl] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true},
// OP rt, fs
[RABBITIZER_INSTR_CPU_ID_mfc1] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_dmfc1] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_cfc1] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true},
[RABBITIZER_INSTR_CPU_ID_mtc1] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_dmtc1] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_ctc1] = {.operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
// OP IMM
[RABBITIZER_INSTR_CPU_ID_bc1f] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bc1t] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bc1fl] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true},
[RABBITIZER_INSTR_CPU_ID_bc1tl] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true},
// OP fd, fs, ft
[RABBITIZER_INSTR_CPU_ID_add_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_sub_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_mul_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_div_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_add_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_sub_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_mul_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_div_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
// OP fd, fs
[RABBITIZER_INSTR_CPU_ID_sqrt_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_abs_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_mov_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_neg_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_sqrt_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_abs_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_mov_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_neg_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_round_l_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_trunc_l_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_ceil_l_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_floor_l_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_round_l_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_trunc_l_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_ceil_l_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_floor_l_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_round_w_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_trunc_w_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_ceil_w_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_floor_w_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_round_w_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_trunc_w_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_ceil_w_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_floor_w_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
// OP fs, ft
[RABBITIZER_INSTR_CPU_ID_c_f_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_un_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_eq_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ueq_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_olt_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ult_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ole_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ule_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_f_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_un_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_eq_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ueq_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_olt_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ult_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ole_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ule_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_sf_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ngle_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_seq_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ngl_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_lt_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_nge_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_le_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_ngt_s] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_c_sf_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ngle_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_seq_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ngl_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_lt_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_nge_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_le_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_c_ngt_d] = {.operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
// OP fd, fs
[RABBITIZER_INSTR_CPU_ID_cvt_s_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_cvt_s_w] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_cvt_s_l] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_cvt_d_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_cvt_d_w] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_cvt_d_l] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_cvt_w_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_cvt_w_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
[RABBITIZER_INSTR_CPU_ID_cvt_l_s] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true},
[RABBITIZER_INSTR_CPU_ID_cvt_l_d] = {.operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true},
// Pseudo-Instruction Unique IDs
// OP rs, IMM
[RABBITIZER_INSTR_CPU_ID_beqz] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
[RABBITIZER_INSTR_CPU_ID_bnez] = {.operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
// OP IMM
[RABBITIZER_INSTR_CPU_ID_b] = {.operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true},
// OP
[RABBITIZER_INSTR_CPU_ID_nop] = {.operands={}, .instrType=RABBITIZER_INSTR_TYPE_R},
// OP rd, rs
[RABBITIZER_INSTR_CPU_ID_move] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
[RABBITIZER_INSTR_CPU_ID_not] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
// OP rd, rt
[RABBITIZER_INSTR_CPU_ID_negu] = {.operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true},
// TODO: add RSP instructions
};