diff --git a/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp b/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp index 9735bc8df..605721c31 100644 --- a/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp +++ b/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp @@ -14,22 +14,6 @@ #include #include -bool R4300iOp::m_TestTimer = false; -R4300iOpcode R4300iOp::m_Opcode; - -R4300iOp::Func R4300iOp::Jump_Opcode[64]; -R4300iOp::Func R4300iOp::Jump_Special[64]; -R4300iOp::Func R4300iOp::Jump_Regimm[32]; -R4300iOp::Func R4300iOp::Jump_CoP0[32]; -R4300iOp::Func R4300iOp::Jump_CoP0_Function[64]; -R4300iOp::Func R4300iOp::Jump_CoP1[32]; -R4300iOp::Func R4300iOp::Jump_CoP1_BC[32]; -R4300iOp::Func R4300iOp::Jump_CoP1_S[64]; -R4300iOp::Func R4300iOp::Jump_CoP1_D[64]; -R4300iOp::Func R4300iOp::Jump_CoP1_W[64]; -R4300iOp::Func R4300iOp::Jump_CoP1_L[64]; -R4300iOp::Func R4300iOp::Jump_CoP2[32]; - const uint32_t R4300iOp::SWL_MASK[4] = {0x00000000, 0xFF000000, 0xFFFF0000, 0xFFFFFF00}; const uint32_t R4300iOp::SWR_MASK[4] = {0x00FFFFFF, 0x0000FFFF, 0x000000FF, 0x00000000}; const uint32_t R4300iOp::LWL_MASK[4] = {0x00000000, 0x000000FF, 0x0000FFFF, 0x00FFFFFF}; @@ -42,7 +26,7 @@ const int32_t R4300iOp::LWR_SHIFT[4] = {24, 16, 8, 0}; R4300iOp::R4300iOp() { - m_TestTimer = false; + m_Opcode.Value = 0; BuildInterpreter(); } @@ -82,7 +66,7 @@ void R4300iOp::ExecuteCPU() uint32_t & PROGRAM_COUNTER = *_PROGRAM_COUNTER; uint32_t & JumpToLocation = g_System->m_JumpToLocation; uint32_t & JumpDelayLocation = g_System->m_JumpDelayLocation; - bool & TestTimer = m_TestTimer; + bool & TestTimer = g_System->m_TestTimer; const int32_t & bDoSomething = g_SystemEvents->DoSomething(); uint32_t CountPerOp = g_System->CountPerOp(); int32_t & NextTimer = *g_NextTimer; @@ -132,7 +116,7 @@ void R4300iOp::ExecuteCPU() // WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*g_NextTimer,g_SystemTimer->CurrentType()); } */ - Jump_Opcode[m_Opcode.op](); + (this->*Jump_Opcode[m_Opcode.op])(); _GPR[0].DW = 0; // MIPS $zero hard-wired to 0 NextTimer -= CountPerOp; @@ -210,7 +194,7 @@ void R4300iOp::ExecuteOps(int32_t Cycles) PIPELINE_STAGE & PipelineStage = g_System->m_PipelineStage; uint32_t & JumpDelayLocation = g_System->m_JumpDelayLocation; uint32_t & JumpToLocation = g_System->m_JumpToLocation; - bool & TestTimer = R4300iOp::m_TestTimer; + bool & TestTimer = g_System->m_TestTimer; const int32_t & DoSomething = g_SystemEvents->DoSomething(); uint32_t CountPerOp = g_System->CountPerOp(); bool CheckTimer = false; @@ -239,7 +223,7 @@ void R4300iOp::ExecuteOps(int32_t Cycles) //WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s t9: %08X v1: %08X",*_PROGRAM_COUNTER,R4300iInstruction(*_PROGRAM_COUNTER, Opcode.Value).NameAndParam().c_str(),_GPR[0x19].UW[0],_GPR[0x03].UW[0]); //WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*g_NextTimer,g_SystemTimer->CurrentType()); }*/ - Jump_Opcode[Opcode.op](); + (this->*Jump_Opcode[m_Opcode.op])(); _GPR[0].DW = 0; /* MIPS $zero hard-wired to 0 */ Cycles -= CountPerOp; @@ -320,32 +304,32 @@ void R4300iOp::ExecuteOps(int32_t Cycles) void R4300iOp::SPECIAL() { - Jump_Special[m_Opcode.funct](); + (this->*Jump_Special[m_Opcode.funct])(); } void R4300iOp::REGIMM() { - Jump_Regimm[m_Opcode.rt](); + (this->*Jump_Regimm[m_Opcode.rt])(); } void R4300iOp::COP0() { - Jump_CoP0[m_Opcode.rs](); + (this->*Jump_CoP0[m_Opcode.rs])(); } void R4300iOp::COP0_CO() { - Jump_CoP0_Function[m_Opcode.funct](); + (this->*Jump_CoP0_Function[m_Opcode.funct])(); } void R4300iOp::COP1() { - Jump_CoP1[m_Opcode.fmt](); + (this->*Jump_CoP1[m_Opcode.fmt])(); } void R4300iOp::COP2() { - Jump_CoP2[m_Opcode.fmt](); + (this->*Jump_CoP2[m_Opcode.fmt])(); } void R4300iOp::COP3() @@ -355,649 +339,649 @@ void R4300iOp::COP3() void R4300iOp::COP1_BC() { - Jump_CoP1_BC[m_Opcode.ft](); + (this->*Jump_CoP1_BC[m_Opcode.ft])(); } void R4300iOp::COP1_S() { - Jump_CoP1_S[m_Opcode.funct](); + (this->*Jump_CoP1_S[m_Opcode.funct])(); } void R4300iOp::COP1_D() { - Jump_CoP1_D[m_Opcode.funct](); + (this->*Jump_CoP1_D[m_Opcode.funct])(); } void R4300iOp::COP1_W() { - Jump_CoP1_W[m_Opcode.funct](); + (this->*Jump_CoP1_W[m_Opcode.funct])(); } void R4300iOp::COP1_L() { - Jump_CoP1_L[m_Opcode.funct](); + (this->*Jump_CoP1_L[m_Opcode.funct])(); } void R4300iOp::BuildInterpreter() { - Jump_Opcode[0] = SPECIAL; - Jump_Opcode[1] = REGIMM; - Jump_Opcode[2] = J; - Jump_Opcode[3] = JAL; - Jump_Opcode[4] = BEQ; - Jump_Opcode[5] = BNE; - Jump_Opcode[6] = BLEZ; - Jump_Opcode[7] = BGTZ; - Jump_Opcode[8] = ADDI; - Jump_Opcode[9] = ADDIU; - Jump_Opcode[10] = SLTI; - Jump_Opcode[11] = SLTIU; - Jump_Opcode[12] = ANDI; - Jump_Opcode[13] = ORI; - Jump_Opcode[14] = XORI; - Jump_Opcode[15] = LUI; - Jump_Opcode[16] = COP0; - Jump_Opcode[17] = COP1; - Jump_Opcode[18] = COP2; - Jump_Opcode[19] = COP3; - Jump_Opcode[20] = BEQL; - Jump_Opcode[21] = BNEL; - Jump_Opcode[22] = BLEZL; - Jump_Opcode[23] = BGTZL; - Jump_Opcode[24] = DADDI; - Jump_Opcode[25] = DADDIU; - Jump_Opcode[26] = LDL; - Jump_Opcode[27] = LDR; - Jump_Opcode[28] = UnknownOpcode; - Jump_Opcode[29] = UnknownOpcode; - Jump_Opcode[30] = UnknownOpcode; - Jump_Opcode[31] = ReservedInstruction; - Jump_Opcode[32] = LB; - Jump_Opcode[33] = LH; - Jump_Opcode[34] = LWL; - Jump_Opcode[35] = LW; - Jump_Opcode[36] = LBU; - Jump_Opcode[37] = LHU; - Jump_Opcode[38] = LWR; - Jump_Opcode[39] = LWU; - Jump_Opcode[40] = SB; - Jump_Opcode[41] = SH; - Jump_Opcode[42] = SWL; - Jump_Opcode[43] = SW; - Jump_Opcode[44] = SDL; - Jump_Opcode[45] = SDR; - Jump_Opcode[46] = SWR; - Jump_Opcode[47] = CACHE; - Jump_Opcode[48] = LL; - Jump_Opcode[49] = LWC1; - Jump_Opcode[50] = UnknownOpcode; - Jump_Opcode[51] = UnknownOpcode; - Jump_Opcode[52] = LLD; - Jump_Opcode[53] = LDC1; - Jump_Opcode[54] = UnknownOpcode; - Jump_Opcode[55] = LD; - Jump_Opcode[56] = SC; - Jump_Opcode[57] = SWC1; - Jump_Opcode[58] = UnknownOpcode; - Jump_Opcode[59] = UnknownOpcode; - Jump_Opcode[60] = UnknownOpcode; - Jump_Opcode[61] = SDC1; - Jump_Opcode[62] = UnknownOpcode; - Jump_Opcode[63] = SD; + Jump_Opcode[0] = &R4300iOp::SPECIAL; + Jump_Opcode[1] = &R4300iOp::REGIMM; + Jump_Opcode[2] = &R4300iOp::J; + Jump_Opcode[3] = &R4300iOp::JAL; + Jump_Opcode[4] = &R4300iOp::BEQ; + Jump_Opcode[5] = &R4300iOp::BNE; + Jump_Opcode[6] = &R4300iOp::BLEZ; + Jump_Opcode[7] = &R4300iOp::BGTZ; + Jump_Opcode[8] = &R4300iOp::ADDI; + Jump_Opcode[9] = &R4300iOp::ADDIU; + Jump_Opcode[10] = &R4300iOp::SLTI; + Jump_Opcode[11] = &R4300iOp::SLTIU; + Jump_Opcode[12] = &R4300iOp::ANDI; + Jump_Opcode[13] = &R4300iOp::ORI; + Jump_Opcode[14] = &R4300iOp::XORI; + Jump_Opcode[15] = &R4300iOp::LUI; + Jump_Opcode[16] = &R4300iOp::COP0; + Jump_Opcode[17] = &R4300iOp::COP1; + Jump_Opcode[18] = &R4300iOp::COP2; + Jump_Opcode[19] = &R4300iOp::COP3; + Jump_Opcode[20] = &R4300iOp::BEQL; + Jump_Opcode[21] = &R4300iOp::BNEL; + Jump_Opcode[22] = &R4300iOp::BLEZL; + Jump_Opcode[23] = &R4300iOp::BGTZL; + Jump_Opcode[24] = &R4300iOp::DADDI; + Jump_Opcode[25] = &R4300iOp::DADDIU; + Jump_Opcode[26] = &R4300iOp::LDL; + Jump_Opcode[27] = &R4300iOp::LDR; + Jump_Opcode[28] = &R4300iOp::UnknownOpcode; + Jump_Opcode[29] = &R4300iOp::UnknownOpcode; + Jump_Opcode[30] = &R4300iOp::UnknownOpcode; + Jump_Opcode[31] = &R4300iOp::ReservedInstruction; + Jump_Opcode[32] = &R4300iOp::LB; + Jump_Opcode[33] = &R4300iOp::LH; + Jump_Opcode[34] = &R4300iOp::LWL; + Jump_Opcode[35] = &R4300iOp::LW; + Jump_Opcode[36] = &R4300iOp::LBU; + Jump_Opcode[37] = &R4300iOp::LHU; + Jump_Opcode[38] = &R4300iOp::LWR; + Jump_Opcode[39] = &R4300iOp::LWU; + Jump_Opcode[40] = &R4300iOp::SB; + Jump_Opcode[41] = &R4300iOp::SH; + Jump_Opcode[42] = &R4300iOp::SWL; + Jump_Opcode[43] = &R4300iOp::SW; + Jump_Opcode[44] = &R4300iOp::SDL; + Jump_Opcode[45] = &R4300iOp::SDR; + Jump_Opcode[46] = &R4300iOp::SWR; + Jump_Opcode[47] = &R4300iOp::CACHE; + Jump_Opcode[48] = &R4300iOp::LL; + Jump_Opcode[49] = &R4300iOp::LWC1; + Jump_Opcode[50] = &R4300iOp::UnknownOpcode; + Jump_Opcode[51] = &R4300iOp::UnknownOpcode; + Jump_Opcode[52] = &R4300iOp::LLD; + Jump_Opcode[53] = &R4300iOp::LDC1; + Jump_Opcode[54] = &R4300iOp::UnknownOpcode; + Jump_Opcode[55] = &R4300iOp::LD; + Jump_Opcode[56] = &R4300iOp::SC; + Jump_Opcode[57] = &R4300iOp::SWC1; + Jump_Opcode[58] = &R4300iOp::UnknownOpcode; + Jump_Opcode[59] = &R4300iOp::UnknownOpcode; + Jump_Opcode[60] = &R4300iOp::UnknownOpcode; + Jump_Opcode[61] = &R4300iOp::SDC1; + Jump_Opcode[62] = &R4300iOp::UnknownOpcode; + Jump_Opcode[63] = &R4300iOp::SD; - Jump_Special[0] = SPECIAL_SLL; - Jump_Special[1] = UnknownOpcode; - Jump_Special[2] = SPECIAL_SRL; - Jump_Special[3] = SPECIAL_SRA; - Jump_Special[4] = SPECIAL_SLLV; - Jump_Special[5] = UnknownOpcode; - Jump_Special[6] = SPECIAL_SRLV; - Jump_Special[7] = SPECIAL_SRAV; - Jump_Special[8] = SPECIAL_JR; - Jump_Special[9] = SPECIAL_JALR; - Jump_Special[10] = UnknownOpcode; - Jump_Special[11] = UnknownOpcode; - Jump_Special[12] = SPECIAL_SYSCALL; - Jump_Special[13] = SPECIAL_BREAK; - Jump_Special[14] = UnknownOpcode; - Jump_Special[15] = SPECIAL_SYNC; - Jump_Special[16] = SPECIAL_MFHI; - Jump_Special[17] = SPECIAL_MTHI; - Jump_Special[18] = SPECIAL_MFLO; - Jump_Special[19] = SPECIAL_MTLO; - Jump_Special[20] = SPECIAL_DSLLV; - Jump_Special[21] = UnknownOpcode; - Jump_Special[22] = SPECIAL_DSRLV; - Jump_Special[23] = SPECIAL_DSRAV; - Jump_Special[24] = SPECIAL_MULT; - Jump_Special[25] = SPECIAL_MULTU; - Jump_Special[26] = SPECIAL_DIV; - Jump_Special[27] = SPECIAL_DIVU; - Jump_Special[28] = SPECIAL_DMULT; - Jump_Special[29] = SPECIAL_DMULTU; - Jump_Special[30] = SPECIAL_DDIV; - Jump_Special[31] = SPECIAL_DDIVU; - Jump_Special[32] = SPECIAL_ADD; - Jump_Special[33] = SPECIAL_ADDU; - Jump_Special[34] = SPECIAL_SUB; - Jump_Special[35] = SPECIAL_SUBU; - Jump_Special[36] = SPECIAL_AND; - Jump_Special[37] = SPECIAL_OR; - Jump_Special[38] = SPECIAL_XOR; - Jump_Special[39] = SPECIAL_NOR; - Jump_Special[40] = UnknownOpcode; - Jump_Special[41] = UnknownOpcode; - Jump_Special[42] = SPECIAL_SLT; - Jump_Special[43] = SPECIAL_SLTU; - Jump_Special[44] = SPECIAL_DADD; - Jump_Special[45] = SPECIAL_DADDU; - Jump_Special[46] = SPECIAL_DSUB; - Jump_Special[47] = SPECIAL_DSUBU; - Jump_Special[48] = SPECIAL_TGE; - Jump_Special[49] = SPECIAL_TGEU; - Jump_Special[50] = SPECIAL_TLT; - Jump_Special[51] = SPECIAL_TLTU; - Jump_Special[52] = SPECIAL_TEQ; - Jump_Special[53] = UnknownOpcode; - Jump_Special[54] = SPECIAL_TNE; - Jump_Special[55] = UnknownOpcode; - Jump_Special[56] = SPECIAL_DSLL; - Jump_Special[57] = UnknownOpcode; - Jump_Special[58] = SPECIAL_DSRL; - Jump_Special[59] = SPECIAL_DSRA; - Jump_Special[60] = SPECIAL_DSLL32; - Jump_Special[61] = UnknownOpcode; - Jump_Special[62] = SPECIAL_DSRL32; - Jump_Special[63] = SPECIAL_DSRA32; + Jump_Special[0] = &R4300iOp::SPECIAL_SLL; + Jump_Special[1] = &R4300iOp::UnknownOpcode; + Jump_Special[2] = &R4300iOp::SPECIAL_SRL; + Jump_Special[3] = &R4300iOp::SPECIAL_SRA; + Jump_Special[4] = &R4300iOp::SPECIAL_SLLV; + Jump_Special[5] = &R4300iOp::UnknownOpcode; + Jump_Special[6] = &R4300iOp::SPECIAL_SRLV; + Jump_Special[7] = &R4300iOp::SPECIAL_SRAV; + Jump_Special[8] = &R4300iOp::SPECIAL_JR; + Jump_Special[9] = &R4300iOp::SPECIAL_JALR; + Jump_Special[10] = &R4300iOp::UnknownOpcode; + Jump_Special[11] = &R4300iOp::UnknownOpcode; + Jump_Special[12] = &R4300iOp::SPECIAL_SYSCALL; + Jump_Special[13] = &R4300iOp::SPECIAL_BREAK; + Jump_Special[14] = &R4300iOp::UnknownOpcode; + Jump_Special[15] = &R4300iOp::SPECIAL_SYNC; + Jump_Special[16] = &R4300iOp::SPECIAL_MFHI; + Jump_Special[17] = &R4300iOp::SPECIAL_MTHI; + Jump_Special[18] = &R4300iOp::SPECIAL_MFLO; + Jump_Special[19] = &R4300iOp::SPECIAL_MTLO; + Jump_Special[20] = &R4300iOp::SPECIAL_DSLLV; + Jump_Special[21] = &R4300iOp::UnknownOpcode; + Jump_Special[22] = &R4300iOp::SPECIAL_DSRLV; + Jump_Special[23] = &R4300iOp::SPECIAL_DSRAV; + Jump_Special[24] = &R4300iOp::SPECIAL_MULT; + Jump_Special[25] = &R4300iOp::SPECIAL_MULTU; + Jump_Special[26] = &R4300iOp::SPECIAL_DIV; + Jump_Special[27] = &R4300iOp::SPECIAL_DIVU; + Jump_Special[28] = &R4300iOp::SPECIAL_DMULT; + Jump_Special[29] = &R4300iOp::SPECIAL_DMULTU; + Jump_Special[30] = &R4300iOp::SPECIAL_DDIV; + Jump_Special[31] = &R4300iOp::SPECIAL_DDIVU; + Jump_Special[32] = &R4300iOp::SPECIAL_ADD; + Jump_Special[33] = &R4300iOp::SPECIAL_ADDU; + Jump_Special[34] = &R4300iOp::SPECIAL_SUB; + Jump_Special[35] = &R4300iOp::SPECIAL_SUBU; + Jump_Special[36] = &R4300iOp::SPECIAL_AND; + Jump_Special[37] = &R4300iOp::SPECIAL_OR; + Jump_Special[38] = &R4300iOp::SPECIAL_XOR; + Jump_Special[39] = &R4300iOp::SPECIAL_NOR; + Jump_Special[40] = &R4300iOp::UnknownOpcode; + Jump_Special[41] = &R4300iOp::UnknownOpcode; + Jump_Special[42] = &R4300iOp::SPECIAL_SLT; + Jump_Special[43] = &R4300iOp::SPECIAL_SLTU; + Jump_Special[44] = &R4300iOp::SPECIAL_DADD; + Jump_Special[45] = &R4300iOp::SPECIAL_DADDU; + Jump_Special[46] = &R4300iOp::SPECIAL_DSUB; + Jump_Special[47] = &R4300iOp::SPECIAL_DSUBU; + Jump_Special[48] = &R4300iOp::SPECIAL_TGE; + Jump_Special[49] = &R4300iOp::SPECIAL_TGEU; + Jump_Special[50] = &R4300iOp::SPECIAL_TLT; + Jump_Special[51] = &R4300iOp::SPECIAL_TLTU; + Jump_Special[52] = &R4300iOp::SPECIAL_TEQ; + Jump_Special[53] = &R4300iOp::UnknownOpcode; + Jump_Special[54] = &R4300iOp::SPECIAL_TNE; + Jump_Special[55] = &R4300iOp::UnknownOpcode; + Jump_Special[56] = &R4300iOp::SPECIAL_DSLL; + Jump_Special[57] = &R4300iOp::UnknownOpcode; + Jump_Special[58] = &R4300iOp::SPECIAL_DSRL; + Jump_Special[59] = &R4300iOp::SPECIAL_DSRA; + Jump_Special[60] = &R4300iOp::SPECIAL_DSLL32; + Jump_Special[61] = &R4300iOp::UnknownOpcode; + Jump_Special[62] = &R4300iOp::SPECIAL_DSRL32; + Jump_Special[63] = &R4300iOp::SPECIAL_DSRA32; - Jump_Regimm[0] = REGIMM_BLTZ; - Jump_Regimm[1] = REGIMM_BGEZ; - Jump_Regimm[2] = REGIMM_BLTZL; - Jump_Regimm[3] = REGIMM_BGEZL; - Jump_Regimm[4] = UnknownOpcode; - Jump_Regimm[5] = UnknownOpcode; - Jump_Regimm[6] = UnknownOpcode; - Jump_Regimm[7] = UnknownOpcode; - Jump_Regimm[8] = REGIMM_TGEI; - Jump_Regimm[9] = REGIMM_TGEIU; - Jump_Regimm[10] = REGIMM_TLTI; - Jump_Regimm[11] = REGIMM_TLTIU; - Jump_Regimm[12] = REGIMM_TEQI; - Jump_Regimm[13] = UnknownOpcode; - Jump_Regimm[14] = REGIMM_TNEI; - Jump_Regimm[15] = UnknownOpcode; - Jump_Regimm[16] = REGIMM_BLTZAL; - Jump_Regimm[17] = REGIMM_BGEZAL; - Jump_Regimm[18] = UnknownOpcode; - Jump_Regimm[19] = REGIMM_BGEZALL; - Jump_Regimm[20] = UnknownOpcode; - Jump_Regimm[21] = UnknownOpcode; - Jump_Regimm[22] = UnknownOpcode; - Jump_Regimm[23] = UnknownOpcode; - Jump_Regimm[24] = UnknownOpcode; - Jump_Regimm[25] = UnknownOpcode; - Jump_Regimm[26] = UnknownOpcode; - Jump_Regimm[27] = UnknownOpcode; - Jump_Regimm[28] = UnknownOpcode; - Jump_Regimm[29] = UnknownOpcode; - Jump_Regimm[30] = UnknownOpcode; - Jump_Regimm[31] = UnknownOpcode; + Jump_Regimm[0] = &R4300iOp::REGIMM_BLTZ; + Jump_Regimm[1] = &R4300iOp::REGIMM_BGEZ; + Jump_Regimm[2] = &R4300iOp::REGIMM_BLTZL; + Jump_Regimm[3] = &R4300iOp::REGIMM_BGEZL; + Jump_Regimm[4] = &R4300iOp::UnknownOpcode; + Jump_Regimm[5] = &R4300iOp::UnknownOpcode; + Jump_Regimm[6] = &R4300iOp::UnknownOpcode; + Jump_Regimm[7] = &R4300iOp::UnknownOpcode; + Jump_Regimm[8] = &R4300iOp::REGIMM_TGEI; + Jump_Regimm[9] = &R4300iOp::REGIMM_TGEIU; + Jump_Regimm[10] = &R4300iOp::REGIMM_TLTI; + Jump_Regimm[11] = &R4300iOp::REGIMM_TLTIU; + Jump_Regimm[12] = &R4300iOp::REGIMM_TEQI; + Jump_Regimm[13] = &R4300iOp::UnknownOpcode; + Jump_Regimm[14] = &R4300iOp::REGIMM_TNEI; + Jump_Regimm[15] = &R4300iOp::UnknownOpcode; + Jump_Regimm[16] = &R4300iOp::REGIMM_BLTZAL; + Jump_Regimm[17] = &R4300iOp::REGIMM_BGEZAL; + Jump_Regimm[18] = &R4300iOp::UnknownOpcode; + Jump_Regimm[19] = &R4300iOp::REGIMM_BGEZALL; + Jump_Regimm[20] = &R4300iOp::UnknownOpcode; + Jump_Regimm[21] = &R4300iOp::UnknownOpcode; + Jump_Regimm[22] = &R4300iOp::UnknownOpcode; + Jump_Regimm[23] = &R4300iOp::UnknownOpcode; + Jump_Regimm[24] = &R4300iOp::UnknownOpcode; + Jump_Regimm[25] = &R4300iOp::UnknownOpcode; + Jump_Regimm[26] = &R4300iOp::UnknownOpcode; + Jump_Regimm[27] = &R4300iOp::UnknownOpcode; + Jump_Regimm[28] = &R4300iOp::UnknownOpcode; + Jump_Regimm[29] = &R4300iOp::UnknownOpcode; + Jump_Regimm[30] = &R4300iOp::UnknownOpcode; + Jump_Regimm[31] = &R4300iOp::UnknownOpcode; - Jump_CoP0[0] = COP0_MF; - Jump_CoP0[1] = COP0_DMF; - Jump_CoP0[2] = UnknownOpcode; - Jump_CoP0[3] = UnknownOpcode; - Jump_CoP0[4] = COP0_MT; - Jump_CoP0[5] = COP0_DMT; - Jump_CoP0[6] = UnknownOpcode; - Jump_CoP0[7] = UnknownOpcode; - Jump_CoP0[8] = UnknownOpcode; - Jump_CoP0[9] = UnknownOpcode; - Jump_CoP0[10] = UnknownOpcode; - Jump_CoP0[11] = UnknownOpcode; - Jump_CoP0[12] = UnknownOpcode; - Jump_CoP0[13] = UnknownOpcode; - Jump_CoP0[14] = UnknownOpcode; - Jump_CoP0[15] = UnknownOpcode; - Jump_CoP0[16] = COP0_CO; - Jump_CoP0[17] = COP0_CO; - Jump_CoP0[18] = COP0_CO; - Jump_CoP0[19] = COP0_CO; - Jump_CoP0[20] = COP0_CO; - Jump_CoP0[21] = COP0_CO; - Jump_CoP0[22] = COP0_CO; - Jump_CoP0[23] = COP0_CO; - Jump_CoP0[24] = COP0_CO; - Jump_CoP0[25] = COP0_CO; - Jump_CoP0[26] = COP0_CO; - Jump_CoP0[27] = COP0_CO; - Jump_CoP0[28] = COP0_CO; - Jump_CoP0[29] = COP0_CO; - Jump_CoP0[30] = COP0_CO; - Jump_CoP0[31] = COP0_CO; + Jump_CoP0[0] = &R4300iOp::COP0_MF; + Jump_CoP0[1] = &R4300iOp::COP0_DMF; + Jump_CoP0[2] = &R4300iOp::UnknownOpcode; + Jump_CoP0[3] = &R4300iOp::UnknownOpcode; + Jump_CoP0[4] = &R4300iOp::COP0_MT; + Jump_CoP0[5] = &R4300iOp::COP0_DMT; + Jump_CoP0[6] = &R4300iOp::UnknownOpcode; + Jump_CoP0[7] = &R4300iOp::UnknownOpcode; + Jump_CoP0[8] = &R4300iOp::UnknownOpcode; + Jump_CoP0[9] = &R4300iOp::UnknownOpcode; + Jump_CoP0[10] = &R4300iOp::UnknownOpcode; + Jump_CoP0[11] = &R4300iOp::UnknownOpcode; + Jump_CoP0[12] = &R4300iOp::UnknownOpcode; + Jump_CoP0[13] = &R4300iOp::UnknownOpcode; + Jump_CoP0[14] = &R4300iOp::UnknownOpcode; + Jump_CoP0[15] = &R4300iOp::UnknownOpcode; + Jump_CoP0[16] = &R4300iOp::COP0_CO; + Jump_CoP0[17] = &R4300iOp::COP0_CO; + Jump_CoP0[18] = &R4300iOp::COP0_CO; + Jump_CoP0[19] = &R4300iOp::COP0_CO; + Jump_CoP0[20] = &R4300iOp::COP0_CO; + Jump_CoP0[21] = &R4300iOp::COP0_CO; + Jump_CoP0[22] = &R4300iOp::COP0_CO; + Jump_CoP0[23] = &R4300iOp::COP0_CO; + Jump_CoP0[24] = &R4300iOp::COP0_CO; + Jump_CoP0[25] = &R4300iOp::COP0_CO; + Jump_CoP0[26] = &R4300iOp::COP0_CO; + Jump_CoP0[27] = &R4300iOp::COP0_CO; + Jump_CoP0[28] = &R4300iOp::COP0_CO; + Jump_CoP0[29] = &R4300iOp::COP0_CO; + Jump_CoP0[30] = &R4300iOp::COP0_CO; + Jump_CoP0[31] = &R4300iOp::COP0_CO; - Jump_CoP0_Function[0] = UnknownOpcode; - Jump_CoP0_Function[1] = COP0_CO_TLBR; - Jump_CoP0_Function[2] = COP0_CO_TLBWI; - Jump_CoP0_Function[3] = UnknownOpcode; - Jump_CoP0_Function[4] = UnknownOpcode; - Jump_CoP0_Function[5] = UnknownOpcode; - Jump_CoP0_Function[6] = COP0_CO_TLBWR; - Jump_CoP0_Function[7] = UnknownOpcode; - Jump_CoP0_Function[8] = COP0_CO_TLBP; - Jump_CoP0_Function[9] = UnknownOpcode; - Jump_CoP0_Function[10] = UnknownOpcode; - Jump_CoP0_Function[11] = UnknownOpcode; - Jump_CoP0_Function[12] = UnknownOpcode; - Jump_CoP0_Function[13] = UnknownOpcode; - Jump_CoP0_Function[14] = UnknownOpcode; - Jump_CoP0_Function[15] = UnknownOpcode; - Jump_CoP0_Function[16] = UnknownOpcode; - Jump_CoP0_Function[17] = UnknownOpcode; - Jump_CoP0_Function[18] = UnknownOpcode; - Jump_CoP0_Function[19] = UnknownOpcode; - Jump_CoP0_Function[20] = UnknownOpcode; - Jump_CoP0_Function[21] = UnknownOpcode; - Jump_CoP0_Function[22] = UnknownOpcode; - Jump_CoP0_Function[23] = UnknownOpcode; - Jump_CoP0_Function[24] = COP0_CO_ERET; - Jump_CoP0_Function[25] = UnknownOpcode; - Jump_CoP0_Function[26] = UnknownOpcode; - Jump_CoP0_Function[27] = UnknownOpcode; - Jump_CoP0_Function[28] = UnknownOpcode; - Jump_CoP0_Function[29] = UnknownOpcode; - Jump_CoP0_Function[30] = UnknownOpcode; - Jump_CoP0_Function[31] = UnknownOpcode; - Jump_CoP0_Function[32] = UnknownOpcode; - Jump_CoP0_Function[33] = UnknownOpcode; - Jump_CoP0_Function[34] = UnknownOpcode; - Jump_CoP0_Function[35] = UnknownOpcode; - Jump_CoP0_Function[36] = UnknownOpcode; - Jump_CoP0_Function[37] = UnknownOpcode; - Jump_CoP0_Function[38] = UnknownOpcode; - Jump_CoP0_Function[39] = UnknownOpcode; - Jump_CoP0_Function[40] = UnknownOpcode; - Jump_CoP0_Function[41] = UnknownOpcode; - Jump_CoP0_Function[42] = UnknownOpcode; - Jump_CoP0_Function[43] = UnknownOpcode; - Jump_CoP0_Function[44] = UnknownOpcode; - Jump_CoP0_Function[45] = UnknownOpcode; - Jump_CoP0_Function[46] = UnknownOpcode; - Jump_CoP0_Function[47] = UnknownOpcode; - Jump_CoP0_Function[48] = UnknownOpcode; - Jump_CoP0_Function[49] = UnknownOpcode; - Jump_CoP0_Function[50] = UnknownOpcode; - Jump_CoP0_Function[51] = UnknownOpcode; - Jump_CoP0_Function[52] = UnknownOpcode; - Jump_CoP0_Function[53] = UnknownOpcode; - Jump_CoP0_Function[54] = UnknownOpcode; - Jump_CoP0_Function[55] = UnknownOpcode; - Jump_CoP0_Function[56] = UnknownOpcode; - Jump_CoP0_Function[57] = UnknownOpcode; - Jump_CoP0_Function[58] = UnknownOpcode; - Jump_CoP0_Function[59] = UnknownOpcode; - Jump_CoP0_Function[60] = UnknownOpcode; - Jump_CoP0_Function[61] = UnknownOpcode; - Jump_CoP0_Function[62] = UnknownOpcode; - Jump_CoP0_Function[63] = UnknownOpcode; + Jump_CoP0_Function[0] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[1] = &R4300iOp::COP0_CO_TLBR; + Jump_CoP0_Function[2] = &R4300iOp::COP0_CO_TLBWI; + Jump_CoP0_Function[3] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[4] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[5] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[6] = &R4300iOp::COP0_CO_TLBWR; + Jump_CoP0_Function[7] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[8] = &R4300iOp::COP0_CO_TLBP; + Jump_CoP0_Function[9] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[10] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[11] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[12] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[13] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[14] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[15] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[16] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[17] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[18] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[19] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[20] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[21] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[22] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[23] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[24] = &R4300iOp::COP0_CO_ERET; + Jump_CoP0_Function[25] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[26] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[27] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[28] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[29] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[30] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[31] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[32] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[33] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[34] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[35] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[36] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[37] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[38] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[39] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[40] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[41] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[42] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[43] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[44] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[45] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[46] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[47] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[48] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[49] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[50] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[51] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[52] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[53] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[54] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[55] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[56] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[57] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[58] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[59] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[60] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[61] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[62] = &R4300iOp::UnknownOpcode; + Jump_CoP0_Function[63] = &R4300iOp::UnknownOpcode; - Jump_CoP1[0] = COP1_MF; - Jump_CoP1[1] = COP1_DMF; - Jump_CoP1[2] = COP1_CF; - Jump_CoP1[3] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1[4] = COP1_MT; - Jump_CoP1[5] = COP1_DMT; - Jump_CoP1[6] = COP1_CT; - Jump_CoP1[7] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1[8] = COP1_BC; - Jump_CoP1[9] = UnknownOpcode; - Jump_CoP1[10] = UnknownOpcode; - Jump_CoP1[11] = UnknownOpcode; - Jump_CoP1[12] = UnknownOpcode; - Jump_CoP1[13] = UnknownOpcode; - Jump_CoP1[14] = UnknownOpcode; - Jump_CoP1[15] = UnknownOpcode; - Jump_CoP1[16] = COP1_S; - Jump_CoP1[17] = COP1_D; - Jump_CoP1[18] = UnknownOpcode; - Jump_CoP1[19] = UnknownOpcode; - Jump_CoP1[20] = COP1_W; - Jump_CoP1[21] = COP1_L; - Jump_CoP1[22] = UnknownOpcode; - Jump_CoP1[23] = UnknownOpcode; - Jump_CoP1[24] = UnknownOpcode; - Jump_CoP1[25] = UnknownOpcode; - Jump_CoP1[26] = UnknownOpcode; - Jump_CoP1[27] = UnknownOpcode; - Jump_CoP1[28] = UnknownOpcode; - Jump_CoP1[29] = UnknownOpcode; - Jump_CoP1[30] = UnknownOpcode; - Jump_CoP1[31] = UnknownOpcode; + Jump_CoP1[0] = &R4300iOp::COP1_MF; + Jump_CoP1[1] = &R4300iOp::COP1_DMF; + Jump_CoP1[2] = &R4300iOp::COP1_CF; + Jump_CoP1[3] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1[4] = &R4300iOp::COP1_MT; + Jump_CoP1[5] = &R4300iOp::COP1_DMT; + Jump_CoP1[6] = &R4300iOp::COP1_CT; + Jump_CoP1[7] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1[8] = &R4300iOp::COP1_BC; + Jump_CoP1[9] = &R4300iOp::UnknownOpcode; + Jump_CoP1[10] = &R4300iOp::UnknownOpcode; + Jump_CoP1[11] = &R4300iOp::UnknownOpcode; + Jump_CoP1[12] = &R4300iOp::UnknownOpcode; + Jump_CoP1[13] = &R4300iOp::UnknownOpcode; + Jump_CoP1[14] = &R4300iOp::UnknownOpcode; + Jump_CoP1[15] = &R4300iOp::UnknownOpcode; + Jump_CoP1[16] = &R4300iOp::COP1_S; + Jump_CoP1[17] = &R4300iOp::COP1_D; + Jump_CoP1[18] = &R4300iOp::UnknownOpcode; + Jump_CoP1[19] = &R4300iOp::UnknownOpcode; + Jump_CoP1[20] = &R4300iOp::COP1_W; + Jump_CoP1[21] = &R4300iOp::COP1_L; + Jump_CoP1[22] = &R4300iOp::UnknownOpcode; + Jump_CoP1[23] = &R4300iOp::UnknownOpcode; + Jump_CoP1[24] = &R4300iOp::UnknownOpcode; + Jump_CoP1[25] = &R4300iOp::UnknownOpcode; + Jump_CoP1[26] = &R4300iOp::UnknownOpcode; + Jump_CoP1[27] = &R4300iOp::UnknownOpcode; + Jump_CoP1[28] = &R4300iOp::UnknownOpcode; + Jump_CoP1[29] = &R4300iOp::UnknownOpcode; + Jump_CoP1[30] = &R4300iOp::UnknownOpcode; + Jump_CoP1[31] = &R4300iOp::UnknownOpcode; - Jump_CoP1_BC[0] = COP1_BCF; - Jump_CoP1_BC[1] = COP1_BCT; - Jump_CoP1_BC[2] = COP1_BCFL; - Jump_CoP1_BC[3] = COP1_BCTL; - Jump_CoP1_BC[4] = UnknownOpcode; - Jump_CoP1_BC[5] = UnknownOpcode; - Jump_CoP1_BC[6] = UnknownOpcode; - Jump_CoP1_BC[7] = UnknownOpcode; - Jump_CoP1_BC[8] = UnknownOpcode; - Jump_CoP1_BC[9] = UnknownOpcode; - Jump_CoP1_BC[10] = UnknownOpcode; - Jump_CoP1_BC[11] = UnknownOpcode; - Jump_CoP1_BC[12] = UnknownOpcode; - Jump_CoP1_BC[13] = UnknownOpcode; - Jump_CoP1_BC[14] = UnknownOpcode; - Jump_CoP1_BC[15] = UnknownOpcode; - Jump_CoP1_BC[16] = UnknownOpcode; - Jump_CoP1_BC[17] = UnknownOpcode; - Jump_CoP1_BC[18] = UnknownOpcode; - Jump_CoP1_BC[19] = UnknownOpcode; - Jump_CoP1_BC[20] = UnknownOpcode; - Jump_CoP1_BC[21] = UnknownOpcode; - Jump_CoP1_BC[22] = UnknownOpcode; - Jump_CoP1_BC[23] = UnknownOpcode; - Jump_CoP1_BC[24] = UnknownOpcode; - Jump_CoP1_BC[25] = UnknownOpcode; - Jump_CoP1_BC[26] = UnknownOpcode; - Jump_CoP1_BC[27] = UnknownOpcode; - Jump_CoP1_BC[28] = UnknownOpcode; - Jump_CoP1_BC[29] = UnknownOpcode; - Jump_CoP1_BC[30] = UnknownOpcode; - Jump_CoP1_BC[31] = UnknownOpcode; + Jump_CoP1_BC[0] = &R4300iOp::COP1_BCF; + Jump_CoP1_BC[1] = &R4300iOp::COP1_BCT; + Jump_CoP1_BC[2] = &R4300iOp::COP1_BCFL; + Jump_CoP1_BC[3] = &R4300iOp::COP1_BCTL; + Jump_CoP1_BC[4] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[5] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[6] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[7] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[8] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[9] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[10] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[11] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[12] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[13] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[14] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[15] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[16] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[17] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[18] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[19] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[20] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[21] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[22] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[23] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[24] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[25] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[26] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[27] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[28] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[29] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[30] = &R4300iOp::UnknownOpcode; + Jump_CoP1_BC[31] = &R4300iOp::UnknownOpcode; - Jump_CoP1_S[0] = COP1_S_ADD; - Jump_CoP1_S[1] = COP1_S_SUB; - Jump_CoP1_S[2] = COP1_S_MUL; - Jump_CoP1_S[3] = COP1_S_DIV; - Jump_CoP1_S[4] = COP1_S_SQRT; - Jump_CoP1_S[5] = COP1_S_ABS; - Jump_CoP1_S[6] = COP1_S_MOV; - Jump_CoP1_S[7] = COP1_S_NEG; - Jump_CoP1_S[8] = COP1_S_ROUND_L; - Jump_CoP1_S[9] = COP1_S_TRUNC_L; - Jump_CoP1_S[10] = COP1_S_CEIL_L; - Jump_CoP1_S[11] = COP1_S_FLOOR_L; - Jump_CoP1_S[12] = COP1_S_ROUND_W; - Jump_CoP1_S[13] = COP1_S_TRUNC_W; - Jump_CoP1_S[14] = COP1_S_CEIL_W; - Jump_CoP1_S[15] = COP1_S_FLOOR_W; - Jump_CoP1_S[16] = UnknownOpcode; - Jump_CoP1_S[17] = UnknownOpcode; - Jump_CoP1_S[18] = UnknownOpcode; - Jump_CoP1_S[19] = UnknownOpcode; - Jump_CoP1_S[20] = UnknownOpcode; - Jump_CoP1_S[21] = UnknownOpcode; - Jump_CoP1_S[22] = UnknownOpcode; - Jump_CoP1_S[23] = UnknownOpcode; - Jump_CoP1_S[24] = UnknownOpcode; - Jump_CoP1_S[25] = UnknownOpcode; - Jump_CoP1_S[26] = UnknownOpcode; - Jump_CoP1_S[27] = UnknownOpcode; - Jump_CoP1_S[28] = UnknownOpcode; - Jump_CoP1_S[29] = UnknownOpcode; - Jump_CoP1_S[30] = UnknownOpcode; - Jump_CoP1_S[31] = UnknownOpcode; - Jump_CoP1_S[32] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_S[33] = COP1_S_CVT_D; - Jump_CoP1_S[34] = UnknownOpcode; - Jump_CoP1_S[35] = UnknownOpcode; - Jump_CoP1_S[36] = COP1_S_CVT_W; - Jump_CoP1_S[37] = COP1_S_CVT_L; - Jump_CoP1_S[38] = UnknownOpcode; - Jump_CoP1_S[39] = UnknownOpcode; - Jump_CoP1_S[40] = UnknownOpcode; - Jump_CoP1_S[41] = UnknownOpcode; - Jump_CoP1_S[42] = UnknownOpcode; - Jump_CoP1_S[43] = UnknownOpcode; - Jump_CoP1_S[44] = UnknownOpcode; - Jump_CoP1_S[45] = UnknownOpcode; - Jump_CoP1_S[46] = UnknownOpcode; - Jump_CoP1_S[47] = UnknownOpcode; - Jump_CoP1_S[48] = COP1_S_CMP; - Jump_CoP1_S[49] = COP1_S_CMP; - Jump_CoP1_S[50] = COP1_S_CMP; - Jump_CoP1_S[51] = COP1_S_CMP; - Jump_CoP1_S[52] = COP1_S_CMP; - Jump_CoP1_S[53] = COP1_S_CMP; - Jump_CoP1_S[54] = COP1_S_CMP; - Jump_CoP1_S[55] = COP1_S_CMP; - Jump_CoP1_S[56] = COP1_S_CMP; - Jump_CoP1_S[57] = COP1_S_CMP; - Jump_CoP1_S[58] = COP1_S_CMP; - Jump_CoP1_S[59] = COP1_S_CMP; - Jump_CoP1_S[60] = COP1_S_CMP; - Jump_CoP1_S[61] = COP1_S_CMP; - Jump_CoP1_S[62] = COP1_S_CMP; - Jump_CoP1_S[63] = COP1_S_CMP; + Jump_CoP1_S[0] = &R4300iOp::COP1_S_ADD; + Jump_CoP1_S[1] = &R4300iOp::COP1_S_SUB; + Jump_CoP1_S[2] = &R4300iOp::COP1_S_MUL; + Jump_CoP1_S[3] = &R4300iOp::COP1_S_DIV; + Jump_CoP1_S[4] = &R4300iOp::COP1_S_SQRT; + Jump_CoP1_S[5] = &R4300iOp::COP1_S_ABS; + Jump_CoP1_S[6] = &R4300iOp::COP1_S_MOV; + Jump_CoP1_S[7] = &R4300iOp::COP1_S_NEG; + Jump_CoP1_S[8] = &R4300iOp::COP1_S_ROUND_L; + Jump_CoP1_S[9] = &R4300iOp::COP1_S_TRUNC_L; + Jump_CoP1_S[10] = &R4300iOp::COP1_S_CEIL_L; + Jump_CoP1_S[11] = &R4300iOp::COP1_S_FLOOR_L; + Jump_CoP1_S[12] = &R4300iOp::COP1_S_ROUND_W; + Jump_CoP1_S[13] = &R4300iOp::COP1_S_TRUNC_W; + Jump_CoP1_S[14] = &R4300iOp::COP1_S_CEIL_W; + Jump_CoP1_S[15] = &R4300iOp::COP1_S_FLOOR_W; + Jump_CoP1_S[16] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[17] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[18] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[19] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[20] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[21] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[22] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[23] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[24] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[25] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[26] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[27] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[28] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[29] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[30] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[31] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[32] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_S[33] = &R4300iOp::COP1_S_CVT_D; + Jump_CoP1_S[34] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[35] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[36] = &R4300iOp::COP1_S_CVT_W; + Jump_CoP1_S[37] = &R4300iOp::COP1_S_CVT_L; + Jump_CoP1_S[38] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[39] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[40] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[41] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[42] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[43] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[44] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[45] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[46] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[47] = &R4300iOp::UnknownOpcode; + Jump_CoP1_S[48] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[49] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[50] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[51] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[52] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[53] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[54] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[55] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[56] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[57] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[58] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[59] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[60] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[61] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[62] = &R4300iOp::COP1_S_CMP; + Jump_CoP1_S[63] = &R4300iOp::COP1_S_CMP; - Jump_CoP1_D[0] = COP1_D_ADD; - Jump_CoP1_D[1] = COP1_D_SUB; - Jump_CoP1_D[2] = COP1_D_MUL; - Jump_CoP1_D[3] = COP1_D_DIV; - Jump_CoP1_D[4] = COP1_D_SQRT; - Jump_CoP1_D[5] = COP1_D_ABS; - Jump_CoP1_D[6] = COP1_D_MOV; - Jump_CoP1_D[7] = COP1_D_NEG; - Jump_CoP1_D[8] = COP1_D_ROUND_L; - Jump_CoP1_D[9] = COP1_D_TRUNC_L; - Jump_CoP1_D[10] = COP1_D_CEIL_L; - Jump_CoP1_D[11] = COP1_D_FLOOR_L; - Jump_CoP1_D[12] = COP1_D_ROUND_W; - Jump_CoP1_D[13] = COP1_D_TRUNC_W; - Jump_CoP1_D[14] = COP1_D_CEIL_W; - Jump_CoP1_D[15] = COP1_D_FLOOR_W; - Jump_CoP1_D[16] = UnknownOpcode; - Jump_CoP1_D[17] = UnknownOpcode; - Jump_CoP1_D[18] = UnknownOpcode; - Jump_CoP1_D[19] = UnknownOpcode; - Jump_CoP1_D[20] = UnknownOpcode; - Jump_CoP1_D[21] = UnknownOpcode; - Jump_CoP1_D[22] = UnknownOpcode; - Jump_CoP1_D[23] = UnknownOpcode; - Jump_CoP1_D[24] = UnknownOpcode; - Jump_CoP1_D[25] = UnknownOpcode; - Jump_CoP1_D[26] = UnknownOpcode; - Jump_CoP1_D[27] = UnknownOpcode; - Jump_CoP1_D[28] = UnknownOpcode; - Jump_CoP1_D[29] = UnknownOpcode; - Jump_CoP1_D[30] = UnknownOpcode; - Jump_CoP1_D[31] = UnknownOpcode; - Jump_CoP1_D[32] = COP1_D_CVT_S; - Jump_CoP1_D[33] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_D[34] = UnknownOpcode; - Jump_CoP1_D[35] = UnknownOpcode; - Jump_CoP1_D[36] = COP1_D_CVT_W; - Jump_CoP1_D[37] = COP1_D_CVT_L; - Jump_CoP1_D[38] = UnknownOpcode; - Jump_CoP1_D[39] = UnknownOpcode; - Jump_CoP1_D[40] = UnknownOpcode; - Jump_CoP1_D[41] = UnknownOpcode; - Jump_CoP1_D[42] = UnknownOpcode; - Jump_CoP1_D[43] = UnknownOpcode; - Jump_CoP1_D[44] = UnknownOpcode; - Jump_CoP1_D[45] = UnknownOpcode; - Jump_CoP1_D[46] = UnknownOpcode; - Jump_CoP1_D[47] = UnknownOpcode; - Jump_CoP1_D[48] = COP1_D_CMP; - Jump_CoP1_D[49] = COP1_D_CMP; - Jump_CoP1_D[50] = COP1_D_CMP; - Jump_CoP1_D[51] = COP1_D_CMP; - Jump_CoP1_D[52] = COP1_D_CMP; - Jump_CoP1_D[53] = COP1_D_CMP; - Jump_CoP1_D[54] = COP1_D_CMP; - Jump_CoP1_D[55] = COP1_D_CMP; - Jump_CoP1_D[56] = COP1_D_CMP; - Jump_CoP1_D[57] = COP1_D_CMP; - Jump_CoP1_D[58] = COP1_D_CMP; - Jump_CoP1_D[59] = COP1_D_CMP; - Jump_CoP1_D[60] = COP1_D_CMP; - Jump_CoP1_D[61] = COP1_D_CMP; - Jump_CoP1_D[62] = COP1_D_CMP; - Jump_CoP1_D[63] = COP1_D_CMP; + Jump_CoP1_D[0] = &R4300iOp::COP1_D_ADD; + Jump_CoP1_D[1] = &R4300iOp::COP1_D_SUB; + Jump_CoP1_D[2] = &R4300iOp::COP1_D_MUL; + Jump_CoP1_D[3] = &R4300iOp::COP1_D_DIV; + Jump_CoP1_D[4] = &R4300iOp::COP1_D_SQRT; + Jump_CoP1_D[5] = &R4300iOp::COP1_D_ABS; + Jump_CoP1_D[6] = &R4300iOp::COP1_D_MOV; + Jump_CoP1_D[7] = &R4300iOp::COP1_D_NEG; + Jump_CoP1_D[8] = &R4300iOp::COP1_D_ROUND_L; + Jump_CoP1_D[9] = &R4300iOp::COP1_D_TRUNC_L; + Jump_CoP1_D[10] = &R4300iOp::COP1_D_CEIL_L; + Jump_CoP1_D[11] = &R4300iOp::COP1_D_FLOOR_L; + Jump_CoP1_D[12] = &R4300iOp::COP1_D_ROUND_W; + Jump_CoP1_D[13] = &R4300iOp::COP1_D_TRUNC_W; + Jump_CoP1_D[14] = &R4300iOp::COP1_D_CEIL_W; + Jump_CoP1_D[15] = &R4300iOp::COP1_D_FLOOR_W; + Jump_CoP1_D[16] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[17] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[18] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[19] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[20] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[21] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[22] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[23] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[24] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[25] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[26] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[27] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[28] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[29] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[30] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[31] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[32] = &R4300iOp::COP1_D_CVT_S; + Jump_CoP1_D[33] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_D[34] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[35] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[36] = &R4300iOp::COP1_D_CVT_W; + Jump_CoP1_D[37] = &R4300iOp::COP1_D_CVT_L; + Jump_CoP1_D[38] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[39] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[40] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[41] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[42] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[43] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[44] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[45] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[46] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[47] = &R4300iOp::UnknownOpcode; + Jump_CoP1_D[48] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[49] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[50] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[51] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[52] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[53] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[54] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[55] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[56] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[57] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[58] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[59] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[60] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[61] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[62] = &R4300iOp::COP1_D_CMP; + Jump_CoP1_D[63] = &R4300iOp::COP1_D_CMP; - Jump_CoP1_W[0] = UnknownOpcode; - Jump_CoP1_W[1] = UnknownOpcode; - Jump_CoP1_W[2] = UnknownOpcode; - Jump_CoP1_W[3] = UnknownOpcode; - Jump_CoP1_W[4] = UnknownOpcode; - Jump_CoP1_W[5] = UnknownOpcode; - Jump_CoP1_W[6] = UnknownOpcode; - Jump_CoP1_W[7] = UnknownOpcode; - Jump_CoP1_W[8] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[9] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[10] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[11] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[12] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[13] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[14] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[15] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[16] = UnknownOpcode; - Jump_CoP1_W[17] = UnknownOpcode; - Jump_CoP1_W[18] = UnknownOpcode; - Jump_CoP1_W[19] = UnknownOpcode; - Jump_CoP1_W[20] = UnknownOpcode; - Jump_CoP1_W[21] = UnknownOpcode; - Jump_CoP1_W[22] = UnknownOpcode; - Jump_CoP1_W[23] = UnknownOpcode; - Jump_CoP1_W[24] = UnknownOpcode; - Jump_CoP1_W[25] = UnknownOpcode; - Jump_CoP1_W[26] = UnknownOpcode; - Jump_CoP1_W[27] = UnknownOpcode; - Jump_CoP1_W[28] = UnknownOpcode; - Jump_CoP1_W[29] = UnknownOpcode; - Jump_CoP1_W[30] = UnknownOpcode; - Jump_CoP1_W[31] = UnknownOpcode; - Jump_CoP1_W[32] = COP1_W_CVT_S; - Jump_CoP1_W[33] = COP1_W_CVT_D; - Jump_CoP1_W[34] = UnknownOpcode; - Jump_CoP1_W[35] = UnknownOpcode; - Jump_CoP1_W[36] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[37] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_W[38] = UnknownOpcode; - Jump_CoP1_W[39] = UnknownOpcode; - Jump_CoP1_W[40] = UnknownOpcode; - Jump_CoP1_W[41] = UnknownOpcode; - Jump_CoP1_W[42] = UnknownOpcode; - Jump_CoP1_W[43] = UnknownOpcode; - Jump_CoP1_W[44] = UnknownOpcode; - Jump_CoP1_W[45] = UnknownOpcode; - Jump_CoP1_W[46] = UnknownOpcode; - Jump_CoP1_W[47] = UnknownOpcode; - Jump_CoP1_W[48] = UnknownOpcode; - Jump_CoP1_W[49] = UnknownOpcode; - Jump_CoP1_W[50] = UnknownOpcode; - Jump_CoP1_W[51] = UnknownOpcode; - Jump_CoP1_W[52] = UnknownOpcode; - Jump_CoP1_W[53] = UnknownOpcode; - Jump_CoP1_W[54] = UnknownOpcode; - Jump_CoP1_W[55] = UnknownOpcode; - Jump_CoP1_W[56] = UnknownOpcode; - Jump_CoP1_W[57] = UnknownOpcode; - Jump_CoP1_W[58] = UnknownOpcode; - Jump_CoP1_W[59] = UnknownOpcode; - Jump_CoP1_W[60] = UnknownOpcode; - Jump_CoP1_W[61] = UnknownOpcode; - Jump_CoP1_W[62] = UnknownOpcode; - Jump_CoP1_W[63] = UnknownOpcode; + Jump_CoP1_W[0] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[1] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[2] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[3] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[4] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[5] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[6] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[7] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[8] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[9] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[10] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[11] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[12] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[13] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[14] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[15] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[16] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[17] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[18] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[19] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[20] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[21] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[22] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[23] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[24] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[25] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[26] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[27] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[28] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[29] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[30] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[31] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[32] = &R4300iOp::COP1_W_CVT_S; + Jump_CoP1_W[33] = &R4300iOp::COP1_W_CVT_D; + Jump_CoP1_W[34] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[35] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[36] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[37] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_W[38] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[39] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[40] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[41] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[42] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[43] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[44] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[45] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[46] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[47] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[48] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[49] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[50] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[51] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[52] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[53] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[54] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[55] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[56] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[57] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[58] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[59] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[60] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[61] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[62] = &R4300iOp::UnknownOpcode; + Jump_CoP1_W[63] = &R4300iOp::UnknownOpcode; - Jump_CoP1_L[0] = UnknownOpcode; - Jump_CoP1_L[1] = UnknownOpcode; - Jump_CoP1_L[2] = UnknownOpcode; - Jump_CoP1_L[3] = UnknownOpcode; - Jump_CoP1_L[4] = UnknownOpcode; - Jump_CoP1_L[5] = UnknownOpcode; - Jump_CoP1_L[6] = UnknownOpcode; - Jump_CoP1_L[7] = UnknownOpcode; - Jump_CoP1_L[8] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[9] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[10] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[11] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[12] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[13] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[14] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[15] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[16] = UnknownOpcode; - Jump_CoP1_L[17] = UnknownOpcode; - Jump_CoP1_L[18] = UnknownOpcode; - Jump_CoP1_L[19] = UnknownOpcode; - Jump_CoP1_L[20] = UnknownOpcode; - Jump_CoP1_L[21] = UnknownOpcode; - Jump_CoP1_L[22] = UnknownOpcode; - Jump_CoP1_L[23] = UnknownOpcode; - Jump_CoP1_L[24] = UnknownOpcode; - Jump_CoP1_L[25] = UnknownOpcode; - Jump_CoP1_L[26] = UnknownOpcode; - Jump_CoP1_L[27] = UnknownOpcode; - Jump_CoP1_L[28] = UnknownOpcode; - Jump_CoP1_L[29] = UnknownOpcode; - Jump_CoP1_L[30] = UnknownOpcode; - Jump_CoP1_L[31] = UnknownOpcode; - Jump_CoP1_L[32] = COP1_L_CVT_S; - Jump_CoP1_L[33] = COP1_L_CVT_D; - Jump_CoP1_L[34] = UnknownOpcode; - Jump_CoP1_L[35] = UnknownOpcode; - Jump_CoP1_L[36] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[37] = CPO1_UNIMPLEMENTED_OP; - Jump_CoP1_L[38] = UnknownOpcode; - Jump_CoP1_L[39] = UnknownOpcode; - Jump_CoP1_L[40] = UnknownOpcode; - Jump_CoP1_L[41] = UnknownOpcode; - Jump_CoP1_L[42] = UnknownOpcode; - Jump_CoP1_L[43] = UnknownOpcode; - Jump_CoP1_L[44] = UnknownOpcode; - Jump_CoP1_L[45] = UnknownOpcode; - Jump_CoP1_L[46] = UnknownOpcode; - Jump_CoP1_L[47] = UnknownOpcode; - Jump_CoP1_L[48] = UnknownOpcode; - Jump_CoP1_L[49] = UnknownOpcode; - Jump_CoP1_L[50] = UnknownOpcode; - Jump_CoP1_L[51] = UnknownOpcode; - Jump_CoP1_L[52] = UnknownOpcode; - Jump_CoP1_L[53] = UnknownOpcode; - Jump_CoP1_L[54] = UnknownOpcode; - Jump_CoP1_L[55] = UnknownOpcode; - Jump_CoP1_L[56] = UnknownOpcode; - Jump_CoP1_L[57] = UnknownOpcode; - Jump_CoP1_L[58] = UnknownOpcode; - Jump_CoP1_L[59] = UnknownOpcode; - Jump_CoP1_L[60] = UnknownOpcode; - Jump_CoP1_L[61] = UnknownOpcode; - Jump_CoP1_L[62] = UnknownOpcode; - Jump_CoP1_L[63] = UnknownOpcode; + Jump_CoP1_L[0] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[1] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[2] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[3] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[4] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[5] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[6] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[7] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[8] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[9] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[10] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[11] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[12] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[13] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[14] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[15] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[16] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[17] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[18] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[19] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[20] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[21] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[22] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[23] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[24] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[25] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[26] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[27] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[28] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[29] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[30] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[31] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[32] = &R4300iOp::COP1_L_CVT_S; + Jump_CoP1_L[33] = &R4300iOp::COP1_L_CVT_D; + Jump_CoP1_L[34] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[35] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[36] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[37] = &R4300iOp::CPO1_UNIMPLEMENTED_OP; + Jump_CoP1_L[38] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[39] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[40] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[41] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[42] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[43] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[44] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[45] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[46] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[47] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[48] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[49] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[50] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[51] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[52] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[53] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[54] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[55] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[56] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[57] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[58] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[59] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[60] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[61] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[62] = &R4300iOp::UnknownOpcode; + Jump_CoP1_L[63] = &R4300iOp::UnknownOpcode; - Jump_CoP2[0] = COP2_MF; - Jump_CoP2[1] = COP2_DMF; - Jump_CoP2[2] = COP2_CF; - Jump_CoP2[3] = CPO2_INVALID_OP; - Jump_CoP2[4] = COP2_MT; - Jump_CoP2[5] = COP2_DMT; - Jump_CoP2[6] = COP2_CT; - Jump_CoP2[7] = CPO2_INVALID_OP; - Jump_CoP2[8] = CPO2_INVALID_OP; - Jump_CoP2[10] = CPO2_INVALID_OP; - Jump_CoP2[11] = CPO2_INVALID_OP; - Jump_CoP2[12] = CPO2_INVALID_OP; - Jump_CoP2[13] = CPO2_INVALID_OP; - Jump_CoP2[14] = CPO2_INVALID_OP; - Jump_CoP2[15] = CPO2_INVALID_OP; - Jump_CoP2[16] = CPO2_INVALID_OP; - Jump_CoP2[17] = CPO2_INVALID_OP; - Jump_CoP2[18] = CPO2_INVALID_OP; - Jump_CoP2[19] = CPO2_INVALID_OP; - Jump_CoP2[20] = CPO2_INVALID_OP; - Jump_CoP2[21] = CPO2_INVALID_OP; - Jump_CoP2[22] = CPO2_INVALID_OP; - Jump_CoP2[23] = CPO2_INVALID_OP; - Jump_CoP2[24] = CPO2_INVALID_OP; - Jump_CoP2[25] = CPO2_INVALID_OP; - Jump_CoP2[26] = CPO2_INVALID_OP; - Jump_CoP2[27] = CPO2_INVALID_OP; - Jump_CoP2[28] = CPO2_INVALID_OP; - Jump_CoP2[29] = CPO2_INVALID_OP; - Jump_CoP2[30] = CPO2_INVALID_OP; - Jump_CoP2[31] = CPO2_INVALID_OP; + Jump_CoP2[0] = &R4300iOp::COP2_MF; + Jump_CoP2[1] = &R4300iOp::COP2_DMF; + Jump_CoP2[2] = &R4300iOp::COP2_CF; + Jump_CoP2[3] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[4] = &R4300iOp::COP2_MT; + Jump_CoP2[5] = &R4300iOp::COP2_DMT; + Jump_CoP2[6] = &R4300iOp::COP2_CT; + Jump_CoP2[7] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[8] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[10] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[11] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[12] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[13] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[14] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[15] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[16] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[17] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[18] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[19] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[20] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[21] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[22] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[23] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[24] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[25] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[26] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[27] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[28] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[29] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[30] = &R4300iOp::CPO2_INVALID_OP; + Jump_CoP2[31] = &R4300iOp::CPO2_INVALID_OP; } // Opcode functions @@ -1593,14 +1577,14 @@ void R4300iOp::SPECIAL_SRAV() void R4300iOp::SPECIAL_JR() { g_System->DelayedJump(_GPR[m_Opcode.rs].UW[0]); - m_TestTimer = true; + g_System->m_TestTimer = true; } void R4300iOp::SPECIAL_JALR() { g_System->DelayedJump(_GPR[m_Opcode.rs].UW[0]); _GPR[m_Opcode.rd].DW = (int32_t)(g_System->m_PipelineStage == PIPELINE_STAGE_JUMP_DELAY_SLOT ? g_System->m_JumpToLocation + 4 : *_PROGRAM_COUNTER + 8); - m_TestTimer = true; + g_System->m_TestTimer = true; } void R4300iOp::SPECIAL_SYSCALL() @@ -2174,7 +2158,7 @@ void R4300iOp::COP0_CO_ERET() } (*_LLBit) = 0; g_Reg->CheckInterrupts(); - m_TestTimer = true; + g_System->m_TestTimer = true; } // COP1 functions diff --git a/Source/Project64-core/N64System/Interpreter/InterpreterOps.h b/Source/Project64-core/N64System/Interpreter/InterpreterOps.h index bec2446f0..018bacefa 100644 --- a/Source/Project64-core/N64System/Interpreter/InterpreterOps.h +++ b/Source/Project64-core/N64System/Interpreter/InterpreterOps.h @@ -19,223 +19,12 @@ public: void ExecuteCPU(); void ExecuteOps(int32_t Cycles); - static void InPermLoop(); + void InPermLoop(); - typedef void (*Func)(); - - // Opcode functions - static void J(); - static void JAL(); - static void BNE(); - static void BEQ(); - static void BLEZ(); - static void BGTZ(); - static void ADDI(); - static void ADDIU(); - static void SLTI(); - static void SLTIU(); - static void ANDI(); - static void ORI(); - static void XORI(); - static void LUI(); - static void BEQL(); - static void BNEL(); - static void BLEZL(); - static void BGTZL(); - static void DADDI(); - static void DADDIU(); - static void LDL(); - static void LDR(); - static void LB(); - static void LH(); - static void LWL(); - static void LW(); - static void LBU(); - static void LHU(); - static void LWR(); - static void LWU(); - static void SB(); - static void SH(); - static void SWL(); - static void SW(); - static void SDL(); - static void SDR(); - static void SWR(); - static void CACHE(); - static void LL(); - static void LWC1(); - static void LLD(); - static void LDC1(); - static void LD(); - static void SC(); - static void SWC1(); - static void SDC1(); - static void SD(); - - // R4300i opcodes: Special - static void SPECIAL_SLL(); - static void SPECIAL_SRL(); - static void SPECIAL_SRA(); - static void SPECIAL_SLLV(); - static void SPECIAL_SRLV(); - static void SPECIAL_SRAV(); - static void SPECIAL_JR(); - static void SPECIAL_JALR(); - static void SPECIAL_SYSCALL(); - static void SPECIAL_BREAK(); - static void SPECIAL_SYNC(); - static void SPECIAL_MFHI(); - static void SPECIAL_MTHI(); - static void SPECIAL_MFLO(); - static void SPECIAL_MTLO(); - static void SPECIAL_DSLLV(); - static void SPECIAL_DSRLV(); - static void SPECIAL_DSRAV(); - static void SPECIAL_MULT(); - static void SPECIAL_MULTU(); - static void SPECIAL_DIV(); - static void SPECIAL_DIVU(); - static void SPECIAL_DMULT(); - static void SPECIAL_DMULTU(); - static void SPECIAL_DDIV(); - static void SPECIAL_DDIVU(); - static void SPECIAL_ADD(); - static void SPECIAL_ADDU(); - static void SPECIAL_SUB(); - static void SPECIAL_SUBU(); - static void SPECIAL_AND(); - static void SPECIAL_OR(); - static void SPECIAL_XOR(); - static void SPECIAL_NOR(); - static void SPECIAL_SLT(); - static void SPECIAL_SLTU(); - static void SPECIAL_DADD(); - static void SPECIAL_DADDU(); - static void SPECIAL_DSUB(); - static void SPECIAL_DSUBU(); - static void SPECIAL_TGE(); - static void SPECIAL_TGEU(); - static void SPECIAL_TLT(); - static void SPECIAL_TLTU(); - static void SPECIAL_TEQ(); - static void SPECIAL_TNE(); - static void SPECIAL_DSLL(); - static void SPECIAL_DSRL(); - static void SPECIAL_DSRA(); - static void SPECIAL_DSLL32(); - static void SPECIAL_DSRL32(); - static void SPECIAL_DSRA32(); - - // R4300i opcodes: RegImm - static void REGIMM_BLTZ(); - static void REGIMM_BGEZ(); - static void REGIMM_BLTZL(); - static void REGIMM_BGEZL(); - static void REGIMM_BLTZAL(); - static void REGIMM_BGEZAL(); - static void REGIMM_BGEZALL(); - static void REGIMM_TEQI(); - static void REGIMM_TGEI(); - static void REGIMM_TGEIU(); - static void REGIMM_TLTI(); - static void REGIMM_TLTIU(); - static void REGIMM_TNEI(); - - // COP0 functions - static void COP0_MF(); - static void COP0_DMF(); - static void COP0_MT(); - static void COP0_DMT(); - - // COP0 CO functions - static void COP0_CO_TLBR(); - static void COP0_CO_TLBWI(); - static void COP0_CO_TLBWR(); - static void COP0_CO_TLBP(); - static void COP0_CO_ERET(); - - // COP1 functions - static void CPO1_UNIMPLEMENTED_OP(void); - static void COP1_MF(); - static void COP1_DMF(); - static void COP1_CF(); - static void COP1_MT(); - static void COP1_DMT(); - static void COP1_CT(); - - // COP1: BC1 functions - static void COP1_BCF(); - static void COP1_BCT(); - static void COP1_BCFL(); - static void COP1_BCTL(); - - // COP1: S functions - static void COP1_S_ADD(); - static void COP1_S_SUB(); - static void COP1_S_MUL(); - static void COP1_S_DIV(); - static void COP1_S_SQRT(); - static void COP1_S_ABS(); - static void COP1_S_MOV(); - static void COP1_S_NEG(); - static void COP1_S_ROUND_L(); - static void COP1_S_TRUNC_L(); - static void COP1_S_CEIL_L(); - static void COP1_S_FLOOR_L(); - static void COP1_S_ROUND_W(); - static void COP1_S_TRUNC_W(); - static void COP1_S_CEIL_W(); - static void COP1_S_FLOOR_W(); - static void COP1_S_CVT_D(); - static void COP1_S_CVT_W(); - static void COP1_S_CVT_L(); - static void COP1_S_CMP(); - - // COP1: D functions - static void COP1_D_ADD(); - static void COP1_D_SUB(); - static void COP1_D_MUL(); - static void COP1_D_DIV(); - static void COP1_D_SQRT(); - static void COP1_D_ABS(); - static void COP1_D_MOV(); - static void COP1_D_NEG(); - static void COP1_D_ROUND_L(); - static void COP1_D_TRUNC_L(); - static void COP1_D_CEIL_L(); - static void COP1_D_FLOOR_L(); - static void COP1_D_ROUND_W(); - static void COP1_D_TRUNC_W(); - static void COP1_D_CEIL_W(); - static void COP1_D_FLOOR_W(); - static void COP1_D_CVT_S(); - static void COP1_D_CVT_W(); - static void COP1_D_CVT_L(); - static void COP1_D_CMP(); - - // COP1: W functions - static void COP1_W_CVT_S(); - static void COP1_W_CVT_D(); - - // COP1: L functions - static void COP1_L_CVT_S(); - static void COP1_L_CVT_D(); - - // COP2 functions - static void CPO2_INVALID_OP(void); - static void COP2_MF(); - static void COP2_DMF(); - static void COP2_CF(); - static void COP2_MT(); - static void COP2_DMT(); - static void COP2_CT(); - - // Other functions - static void ReservedInstruction(); - static void UnknownOpcode(); - - static bool m_TestTimer; - static R4300iOpcode m_Opcode; + R4300iOpcode Opcode(void) const + { + return m_Opcode; + } private: R4300iOp(const R4300iOp &); @@ -243,31 +32,246 @@ private: void BuildInterpreter(void); - static void SPECIAL(); - static void REGIMM(); - static void COP0(); - static void COP0_CO(); - static void COP1(); - static void COP2(); - static void COP3(); - static void COP1_BC(); - static void COP1_S(); - static void COP1_D(); - static void COP1_W(); - static void COP1_L(); + typedef void (R4300iOp::*Func)(); - static Func Jump_Opcode[64]; - static Func Jump_Special[64]; - static Func Jump_Regimm[32]; - static Func Jump_CoP0[32]; - static Func Jump_CoP0_Function[64]; - static Func Jump_CoP1[32]; - static Func Jump_CoP1_BC[32]; - static Func Jump_CoP1_S[64]; - static Func Jump_CoP1_D[64]; - static Func Jump_CoP1_W[64]; - static Func Jump_CoP1_L[64]; - static Func Jump_CoP2[32]; + void SPECIAL(); + void REGIMM(); + void COP0(); + void COP0_CO(); + void COP1(); + void COP2(); + void COP3(); + void COP1_BC(); + void COP1_S(); + void COP1_D(); + void COP1_W(); + void COP1_L(); + + // Opcode functions + void J(); + void JAL(); + void BNE(); + void BEQ(); + void BLEZ(); + void BGTZ(); + void ADDI(); + void ADDIU(); + void SLTI(); + void SLTIU(); + void ANDI(); + void ORI(); + void XORI(); + void LUI(); + void BEQL(); + void BNEL(); + void BLEZL(); + void BGTZL(); + void DADDI(); + void DADDIU(); + void LDL(); + void LDR(); + void LB(); + void LH(); + void LWL(); + void LW(); + void LBU(); + void LHU(); + void LWR(); + void LWU(); + void SB(); + void SH(); + void SWL(); + void SW(); + void SDL(); + void SDR(); + void SWR(); + void CACHE(); + void LL(); + void LWC1(); + void LLD(); + void LDC1(); + void LD(); + void SC(); + void SWC1(); + void SDC1(); + void SD(); + + // R4300i opcodes: Special + void SPECIAL_SLL(); + void SPECIAL_SRL(); + void SPECIAL_SRA(); + void SPECIAL_SLLV(); + void SPECIAL_SRLV(); + void SPECIAL_SRAV(); + void SPECIAL_JR(); + void SPECIAL_JALR(); + void SPECIAL_SYSCALL(); + void SPECIAL_BREAK(); + void SPECIAL_SYNC(); + void SPECIAL_MFHI(); + void SPECIAL_MTHI(); + void SPECIAL_MFLO(); + void SPECIAL_MTLO(); + void SPECIAL_DSLLV(); + void SPECIAL_DSRLV(); + void SPECIAL_DSRAV(); + void SPECIAL_MULT(); + void SPECIAL_MULTU(); + void SPECIAL_DIV(); + void SPECIAL_DIVU(); + void SPECIAL_DMULT(); + void SPECIAL_DMULTU(); + void SPECIAL_DDIV(); + void SPECIAL_DDIVU(); + void SPECIAL_ADD(); + void SPECIAL_ADDU(); + void SPECIAL_SUB(); + void SPECIAL_SUBU(); + void SPECIAL_AND(); + void SPECIAL_OR(); + void SPECIAL_XOR(); + void SPECIAL_NOR(); + void SPECIAL_SLT(); + void SPECIAL_SLTU(); + void SPECIAL_DADD(); + void SPECIAL_DADDU(); + void SPECIAL_DSUB(); + void SPECIAL_DSUBU(); + void SPECIAL_TGE(); + void SPECIAL_TGEU(); + void SPECIAL_TLT(); + void SPECIAL_TLTU(); + void SPECIAL_TEQ(); + void SPECIAL_TNE(); + void SPECIAL_DSLL(); + void SPECIAL_DSRL(); + void SPECIAL_DSRA(); + void SPECIAL_DSLL32(); + void SPECIAL_DSRL32(); + void SPECIAL_DSRA32(); + + // R4300i opcodes: RegImm + void REGIMM_BLTZ(); + void REGIMM_BGEZ(); + void REGIMM_BLTZL(); + void REGIMM_BGEZL(); + void REGIMM_BLTZAL(); + void REGIMM_BGEZAL(); + void REGIMM_BGEZALL(); + void REGIMM_TEQI(); + void REGIMM_TGEI(); + void REGIMM_TGEIU(); + void REGIMM_TLTI(); + void REGIMM_TLTIU(); + void REGIMM_TNEI(); + + // COP0 functions + void COP0_MF(); + void COP0_DMF(); + void COP0_MT(); + void COP0_DMT(); + + // COP0 CO functions + void COP0_CO_TLBR(); + void COP0_CO_TLBWI(); + void COP0_CO_TLBWR(); + void COP0_CO_TLBP(); + void COP0_CO_ERET(); + + // COP1 functions + void CPO1_UNIMPLEMENTED_OP(void); + void COP1_MF(); + void COP1_DMF(); + void COP1_CF(); + void COP1_MT(); + void COP1_DMT(); + void COP1_CT(); + + // COP1: BC1 functions + void COP1_BCF(); + void COP1_BCT(); + void COP1_BCFL(); + void COP1_BCTL(); + + // COP1: S functions + void COP1_S_ADD(); + void COP1_S_SUB(); + void COP1_S_MUL(); + void COP1_S_DIV(); + void COP1_S_SQRT(); + void COP1_S_ABS(); + void COP1_S_MOV(); + void COP1_S_NEG(); + void COP1_S_ROUND_L(); + void COP1_S_TRUNC_L(); + void COP1_S_CEIL_L(); + void COP1_S_FLOOR_L(); + void COP1_S_ROUND_W(); + void COP1_S_TRUNC_W(); + void COP1_S_CEIL_W(); + void COP1_S_FLOOR_W(); + void COP1_S_CVT_D(); + void COP1_S_CVT_W(); + void COP1_S_CVT_L(); + void COP1_S_CMP(); + + // COP1: D functions + void COP1_D_ADD(); + void COP1_D_SUB(); + void COP1_D_MUL(); + void COP1_D_DIV(); + void COP1_D_SQRT(); + void COP1_D_ABS(); + void COP1_D_MOV(); + void COP1_D_NEG(); + void COP1_D_ROUND_L(); + void COP1_D_TRUNC_L(); + void COP1_D_CEIL_L(); + void COP1_D_FLOOR_L(); + void COP1_D_ROUND_W(); + void COP1_D_TRUNC_W(); + void COP1_D_CEIL_W(); + void COP1_D_FLOOR_W(); + void COP1_D_CVT_S(); + void COP1_D_CVT_W(); + void COP1_D_CVT_L(); + void COP1_D_CMP(); + + // COP1: W functions + void COP1_W_CVT_S(); + void COP1_W_CVT_D(); + + // COP1: L functions + void COP1_L_CVT_S(); + void COP1_L_CVT_D(); + + // COP2 functions + void CPO2_INVALID_OP(void); + void COP2_MF(); + void COP2_DMF(); + void COP2_CF(); + void COP2_MT(); + void COP2_DMT(); + void COP2_CT(); + + // Other functions + void ReservedInstruction(); + void UnknownOpcode(); + + R4300iOpcode m_Opcode; + + Func Jump_Opcode[64]; + Func Jump_Special[64]; + Func Jump_Regimm[32]; + Func Jump_CoP0[32]; + Func Jump_CoP0_Function[64]; + Func Jump_CoP1[32]; + Func Jump_CoP1_BC[32]; + Func Jump_CoP1_S[64]; + Func Jump_CoP1_D[64]; + Func Jump_CoP1_W[64]; + Func Jump_CoP1_L[64]; + Func Jump_CoP2[32]; static bool TestCop1UsableException(void); static bool CheckFPUInput32(const float & Value); diff --git a/Source/Project64-core/N64System/N64System.cpp b/Source/Project64-core/N64System/N64System.cpp index 70a0fa702..c5a100543 100644 --- a/Source/Project64-core/N64System/N64System.cpp +++ b/Source/Project64-core/N64System/N64System.cpp @@ -964,11 +964,6 @@ bool CN64System::SetActiveSystem(bool bActive) { m_Reg.SetAsCurrentSystem(); - if (g_System) - { - g_System->m_TestTimer = R4300iOp::m_TestTimer; - } - g_System = this; if (g_BaseSystem == this) { @@ -986,7 +981,6 @@ bool CN64System::SetActiveSystem(bool bActive) g_TLBLoadAddress = &m_TLBLoadAddress; g_TLBStoreAddress = &m_TLBStoreAddress; g_RecompPos = m_Recomp ? m_Recomp->RecompPos() : nullptr; - R4300iOp::m_TestTimer = m_TestTimer; g_Random = &m_Random; } else @@ -2321,7 +2315,7 @@ void CN64System::DelayedRelativeJump(uint32_t RelativeLocation) if (m_Reg.m_PROGRAM_COUNTER == m_JumpToLocation) { R4300iOpcode DelaySlot; - if (m_MMU_VM.MemoryValue32(m_Reg.m_PROGRAM_COUNTER + 4, DelaySlot.Value) && !R4300iInstruction(m_Reg.m_PROGRAM_COUNTER, R4300iOp::m_Opcode.Value).DelaySlotEffectsCompare(DelaySlot.Value)) + if (m_MMU_VM.MemoryValue32(m_Reg.m_PROGRAM_COUNTER + 4, DelaySlot.Value) && !R4300iInstruction(m_Reg.m_PROGRAM_COUNTER, m_OpCodes.Opcode().Value).DelaySlotEffectsCompare(DelaySlot.Value)) { m_PipelineStage = PIPELINE_STAGE_PERMLOOP_DO_DELAY; } diff --git a/Source/Project64-core/N64System/N64System.h b/Source/Project64-core/N64System/N64System.h index f76d428a1..2516f2f5d 100644 --- a/Source/Project64-core/N64System/N64System.h +++ b/Source/Project64-core/N64System/N64System.h @@ -85,6 +85,10 @@ public: { return m_Limiter.GetBaseSpeed(); } + R4300iOpcode Opcode(void) const + { + return m_OpCodes.Opcode(); + } void Reset(bool bInitReg, bool ClearMenory); void GameReset(); void PluginReset(); diff --git a/Source/Project64-core/N64System/Recompiler/x86/x86RecompilerOps.cpp b/Source/Project64-core/N64System/Recompiler/x86/x86RecompilerOps.cpp index 7860e4dba..42f7c0986 100644 --- a/Source/Project64-core/N64System/Recompiler/x86/x86RecompilerOps.cpp +++ b/Source/Project64-core/N64System/Recompiler/x86/x86RecompilerOps.cpp @@ -78,7 +78,7 @@ void CX86RecompilerOps::x86CompilerBreakPoint() void CX86RecompilerOps::x86BreakPointDelaySlot() { - g_SyncSystem->m_OpCodes.ExecuteOps(g_System->CountPerOp()); + g_System->m_OpCodes.ExecuteOps(g_System->CountPerOp()); if (g_SyncSystem) { g_System->UpdateSyncCPU(g_SyncSystem, g_System->CountPerOp()); @@ -380,51 +380,51 @@ void CX86RecompilerOps::Compile_TrapCompare(RecompilerTrapCompare CompareType) switch (CompareType) { case RecompilerTrapCompare_TEQ: - FunctAddress = (uint32_t)R4300iOp::SPECIAL_TEQ; + FunctAddress = AddressOf(&R4300iOp::SPECIAL_TEQ); FunctName = "R4300iOp::SPECIAL_TEQ"; break; case RecompilerTrapCompare_TNE: - FunctAddress = (uint32_t)R4300iOp::SPECIAL_TNE; + FunctAddress = AddressOf(&R4300iOp::SPECIAL_TNE); FunctName = "R4300iOp::SPECIAL_TNE"; break; case RecompilerTrapCompare_TGE: - FunctAddress = (uint32_t)R4300iOp::SPECIAL_TGE; + FunctAddress = AddressOf(&R4300iOp::SPECIAL_TGE); FunctName = "R4300iOp::SPECIAL_TGE"; break; case RecompilerTrapCompare_TGEU: - FunctAddress = (uint32_t)R4300iOp::SPECIAL_TGEU; + FunctAddress = AddressOf(&R4300iOp::SPECIAL_TGEU); FunctName = "R4300iOp::SPECIAL_TGEU"; break; case RecompilerTrapCompare_TLT: - FunctAddress = (uint32_t)R4300iOp::SPECIAL_TLT; + FunctAddress = AddressOf(&R4300iOp::SPECIAL_TLT); FunctName = "R4300iOp::SPECIAL_TLT"; break; case RecompilerTrapCompare_TLTU: - FunctAddress = (uint32_t)R4300iOp::SPECIAL_TLTU; + FunctAddress = AddressOf(&R4300iOp::SPECIAL_TLTU); FunctName = "R4300iOp::SPECIAL_TLTU"; break; case RecompilerTrapCompare_TEQI: - FunctAddress = (uint32_t)R4300iOp::REGIMM_TEQI; + FunctAddress = AddressOf(&R4300iOp::REGIMM_TEQI); FunctName = "R4300iOp::REGIMM_TEQI"; break; case RecompilerTrapCompare_TNEI: - FunctAddress = (uint32_t)R4300iOp::REGIMM_TNEI; + FunctAddress = AddressOf(&R4300iOp::REGIMM_TNEI); FunctName = "R4300iOp::REGIMM_TNEI"; break; case RecompilerTrapCompare_TGEI: - FunctAddress = (uint32_t)R4300iOp::REGIMM_TGEI; + FunctAddress = AddressOf(&R4300iOp::REGIMM_TGEI); FunctName = "R4300iOp::REGIMM_TGEI"; break; case RecompilerTrapCompare_TGEIU: - FunctAddress = (uint32_t)R4300iOp::REGIMM_TGEIU; + FunctAddress = AddressOf(&R4300iOp::REGIMM_TGEIU); FunctName = "R4300iOp::REGIMM_TGEIU"; break; case RecompilerTrapCompare_TLTI: - FunctAddress = (uint32_t)R4300iOp::REGIMM_TLTI; + FunctAddress = AddressOf(&R4300iOp::REGIMM_TLTI); FunctName = "R4300iOp::REGIMM_TLTI"; break; case RecompilerTrapCompare_TLTIU: - FunctAddress = (uint32_t)R4300iOp::REGIMM_TLTIU; + FunctAddress = AddressOf(&R4300iOp::REGIMM_TLTIU); FunctName = "R4300iOp::REGIMM_TLTIU"; break; default: @@ -442,7 +442,8 @@ void CX86RecompilerOps::Compile_TrapCompare(RecompilerTrapCompare CompareType) m_RegWorkingSet.UnMap_GPR(m_Opcode.rt, true); } m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, FunctAddress, FunctName, 4); m_Assembler.CallFunc(FunctAddress, FunctName); m_RegWorkingSet.AfterCallDirect(); } @@ -2908,8 +2909,8 @@ void CX86RecompilerOps::LDL() } m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::LDL, "R4300iOp::LDL"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::LDL), "R4300iOp::LDL", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -2926,8 +2927,8 @@ void CX86RecompilerOps::LDR() } m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::LDR, "R4300iOp::LDR"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::LDR), "R4300iOp::LDR", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -3943,8 +3944,8 @@ void CX86RecompilerOps::SDL() } m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::SDL, "R4300iOp::SDL"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::SDL), "R4300iOp::SDL", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -3961,8 +3962,8 @@ void CX86RecompilerOps::SDR() } m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::SDR, "R4300iOp::SDR"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::SDR), "R4300iOp::SDR", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -5197,8 +5198,8 @@ void CX86RecompilerOps::SPECIAL_DMULT() } m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::SPECIAL_DMULT, "R4300iOp::SPECIAL_DMULT"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::SPECIAL_DMULT), "R4300iOp::SPECIAL_DMULT", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -5207,8 +5208,8 @@ void CX86RecompilerOps::SPECIAL_DMULTU() m_RegWorkingSet.UnMap_GPR(m_Opcode.rs, true); m_RegWorkingSet.UnMap_GPR(m_Opcode.rt, true); m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::SPECIAL_DMULTU, "R4300iOp::SPECIAL_DMULTU"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::SPECIAL_DMULTU), "R4300iOp::SPECIAL_DMULTU", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -5217,8 +5218,8 @@ void CX86RecompilerOps::SPECIAL_DDIV() m_RegWorkingSet.UnMap_GPR(m_Opcode.rs, true); m_RegWorkingSet.UnMap_GPR(m_Opcode.rt, true); m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::SPECIAL_DDIV, "R4300iOp::SPECIAL_DDIV"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::SPECIAL_DDIV), "R4300iOp::SPECIAL_DDIV", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -5227,8 +5228,8 @@ void CX86RecompilerOps::SPECIAL_DDIVU() m_RegWorkingSet.UnMap_GPR(m_Opcode.rs, true); m_RegWorkingSet.UnMap_GPR(m_Opcode.rt, true); m_RegWorkingSet.BeforeCallDirect(); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::SPECIAL_DDIVU, "R4300iOp::SPECIAL_DDIVU"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::SPECIAL_DDIVU), "R4300iOp::SPECIAL_DDIVU", 4); m_RegWorkingSet.AfterCallDirect(); } @@ -8440,8 +8441,8 @@ void CX86RecompilerOps::UnknownOpcode() } m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp()); - m_Assembler.MoveConstToVariable(&R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); - m_Assembler.CallFunc((uint32_t)R4300iOp::UnknownOpcode, "R4300iOp::UnknownOpcode"); + m_Assembler.MoveConstToVariable(&g_System->m_OpCodes.m_Opcode.Value, "R4300iOp::m_Opcode.Value", m_Opcode.Value); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::UnknownOpcode), "R4300iOp::UnknownOpcode", 4); m_Assembler.ret(); if (m_PipelineStage == PIPELINE_STAGE_NORMAL) { @@ -8688,7 +8689,7 @@ void CX86RecompilerOps::CompileInPermLoop(CRegInfo & RegSet, uint32_t ProgramCou m_Assembler.MoveConstToVariable(&m_Reg.m_PROGRAM_COUNTER, "PROGRAM_COUNTER", ProgramCounter); RegSet.WriteBackRegisters(); UpdateCounters(RegSet, false, true, false); - m_Assembler.CallFunc(AddressOf(R4300iOp::InPermLoop), "R4300iOp::InPermLoop"); + m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::InPermLoop), "R4300iOp::InPermLoop", 4); m_Assembler.CallThis((uint32_t)g_SystemTimer, AddressOf(&CSystemTimer::TimerDone), "CSystemTimer::TimerDone", 4); m_CodeBlock.Log("CompileSystemCheck 3"); CompileSystemCheck((uint32_t)-1, RegSet); @@ -9572,11 +9573,13 @@ void CX86RecompilerOps::OverflowDelaySlot(bool TestTimer) if (TestTimer) { - m_Assembler.MoveConstToVariable(&R4300iOp::m_TestTimer, "R4300iOp::m_TestTimer", TestTimer); + m_Assembler.MoveConstToVariable(&g_System->m_TestTimer, "R4300iOp::m_TestTimer", TestTimer); } m_Assembler.PushImm32("g_System->CountPerOp()", g_System->CountPerOp()); m_Assembler.CallThis((uint32_t)&g_System->m_OpCodes, AddressOf(&R4300iOp::ExecuteOps), "R4300iOp::ExecuteOps", 8); + m_Assembler.AddConstToX86Reg(asmjit::x86::esp, 4); + if (g_System->bFastSP() && g_Recompiler) { m_Assembler.CallThis((uint32_t)g_Recompiler, AddressOf(&CRecompiler::ResetMemoryStackPos), "CRecompiler::ResetMemoryStackPos", 4); diff --git a/Source/Project64/UserInterface/Debugger/CPULog.cpp b/Source/Project64/UserInterface/Debugger/CPULog.cpp index 13f4099ac..0160a77a1 100644 --- a/Source/Project64/UserInterface/Debugger/CPULog.cpp +++ b/Source/Project64/UserInterface/Debugger/CPULog.cpp @@ -54,7 +54,7 @@ void CCPULog::PushState() CPUState * state = &m_Array[m_Index++]; state->pc = g_Reg->m_PROGRAM_COUNTER; - state->opcode = R4300iOp::m_Opcode; + state->opcode = g_System->Opcode(); memcpy(state->gpr, g_Reg->m_GPR, sizeof(g_Reg->m_GPR)); state->gprHi = g_Reg->m_HI; diff --git a/Source/Project64/UserInterface/Debugger/Debugger-ViewMemory.cpp b/Source/Project64/UserInterface/Debugger/Debugger-ViewMemory.cpp index c74cc1622..b8b41477d 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger-ViewMemory.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger-ViewMemory.cpp @@ -746,7 +746,7 @@ LRESULT CDebugMemoryView::OnHxGetByteInfo(LPNMHDR lpNMHDR) if (g_Settings->LoadBool(Debugger_SteppingOps)) { - COpInfo opInfo(R4300iOp::m_Opcode); + COpInfo opInfo(g_System->Opcode()); if (opInfo.IsStoreCommand()) { cpuReadWriteAddress = opInfo.GetLoadStoreAddress(); diff --git a/Source/Project64/UserInterface/Debugger/Debugger.cpp b/Source/Project64/UserInterface/Debugger/Debugger.cpp index 7999efca9..b29b232fb 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger.cpp @@ -562,7 +562,7 @@ have_bp: void CDebuggerUI::HandleCartToRamDMA(void) { - COpInfo opInfo(R4300iOp::m_Opcode); + COpInfo opInfo(g_System->Opcode()); uint32_t dmaRomAddr = g_Reg->PI_CART_ADDR_REG & 0x0FFFFFFF; uint32_t dmaRamAddr = g_Reg->PI_DRAM_ADDR_REG | 0x80000000; @@ -588,7 +588,7 @@ void CDebuggerUI::CPUStepStarted() if (m_Breakpoints->NumMemLocks() > 0) { - COpInfo opInfo(R4300iOp::m_Opcode); + COpInfo opInfo(g_System->Opcode()); bool bStoreOp = opInfo.IsStoreCommand(); if (bStoreOp) @@ -607,7 +607,7 @@ void CDebuggerUI::CPUStepStarted() { JSHookCpuStepEnv hookEnv; hookEnv.pc = g_Reg->m_PROGRAM_COUNTER; - hookEnv.opInfo = COpInfo(R4300iOp::m_Opcode); + hookEnv.opInfo = COpInfo(g_System->Opcode()); if (m_ScriptSystem->HaveCpuExecCallbacks(hookEnv.pc)) { @@ -639,7 +639,7 @@ void CDebuggerUI::CPUStepStarted() if (m_Breakpoints->HaveRegBP()) { - R4300iInstruction opInfo(g_Reg->m_PROGRAM_COUNTER, R4300iOp::m_Opcode.Value); + R4300iInstruction opInfo(g_Reg->m_PROGRAM_COUNTER, g_System->Opcode().Value); if (m_Breakpoints->HaveAnyGPRWriteBP()) { @@ -687,7 +687,7 @@ void CDebuggerUI::CPUStepEnded() return; } - R4300iOpcode Opcode = R4300iOp::m_Opcode; + R4300iOpcode Opcode = g_System->Opcode(); uint32_t op = Opcode.op; uint32_t funct = Opcode.funct;