From 89b197be438c6175ba19e58b73ea304cdccd5908 Mon Sep 17 00:00:00 2001 From: zilmar Date: Sun, 15 Nov 2015 09:08:30 +1100 Subject: [PATCH] [Project64] Clean up Interpreter CPU --- .../Interpreter/Interpreter CPU.cpp | 69 +++++----- .../N64 System/Interpreter/Interpreter CPU.h | 18 +-- .../Interpreter/Interpreter Ops 32.cpp | 2 +- .../Interpreter/Interpreter Ops 32.h | 126 +++++++++--------- .../Interpreter/Interpreter Ops.cpp | 20 +-- 5 files changed, 118 insertions(+), 117 deletions(-) diff --git a/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp b/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp index c56be2342..0bcc3b9d5 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp @@ -271,8 +271,8 @@ void CInterpreterCPU::ExecuteCPU() const int32_t & bDoSomething = g_SystemEvents->DoSomething(); uint32_t CountPerOp = g_System->CountPerOp(); int32_t & NextTimer = *g_NextTimer; - - __try + + __try { while (!Done) { @@ -301,24 +301,24 @@ void CInterpreterCPU::ExecuteCPU() PROGRAM_COUNTER += 4; break; case JUMP: + { + bool CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer); + PROGRAM_COUNTER = JumpToLocation; + R4300iOp::m_NextInstruction = NORMAL; + if (CheckTimer) { - bool CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer); - PROGRAM_COUNTER = JumpToLocation; - R4300iOp::m_NextInstruction = NORMAL; - if (CheckTimer) + TestTimer = false; + if (NextTimer < 0) { - TestTimer = false; - if (NextTimer < 0) - { - g_SystemTimer->TimerDone(); - } - if (bDoSomething) - { - g_SystemEvents->ExecuteEvents(); - } + g_SystemTimer->TimerDone(); + } + if (bDoSomething) + { + g_SystemEvents->ExecuteEvents(); } } - break; + } + break; case PERMLOOP_DELAY_DONE: PROGRAM_COUNTER = JumpToLocation; R4300iOp::m_NextInstruction = NORMAL; @@ -339,7 +339,8 @@ void CInterpreterCPU::ExecuteCPU() R4300iOp::m_NextInstruction = NORMAL; } } - } __except( g_MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) + } + __except (g_MMU->MemoryFilter(GetExceptionCode(), GetExceptionInformation())) { g_Notify->FatalError(GS(MSG_UNKNOWN_MEM_ACTION)); } @@ -355,7 +356,7 @@ void CInterpreterCPU::ExecuteOps(int32_t Cycles) const int32_t & DoSomething = g_SystemEvents->DoSomething(); uint32_t CountPerOp = g_System->CountPerOp(); - __try + __try { while (!Done) { @@ -409,24 +410,24 @@ void CInterpreterCPU::ExecuteOps(int32_t Cycles) PROGRAM_COUNTER += 4; break; case JUMP: + { + bool CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer); + PROGRAM_COUNTER = JumpToLocation; + R4300iOp::m_NextInstruction = NORMAL; + if (CheckTimer) { - bool CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer); - PROGRAM_COUNTER = JumpToLocation; - R4300iOp::m_NextInstruction = NORMAL; - if (CheckTimer) + TestTimer = false; + if (*g_NextTimer < 0) { - TestTimer = false; - if (*g_NextTimer < 0) - { - g_SystemTimer->TimerDone(); - } - if (DoSomething) - { - g_SystemEvents->ExecuteEvents(); - } + g_SystemTimer->TimerDone(); + } + if (DoSomething) + { + g_SystemEvents->ExecuteEvents(); } } - break; + } + break; case PERMLOOP_DELAY_DONE: PROGRAM_COUNTER = JumpToLocation; R4300iOp::m_NextInstruction = NORMAL; @@ -448,8 +449,8 @@ void CInterpreterCPU::ExecuteOps(int32_t Cycles) } } } - __except( g_MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) + __except (g_MMU->MemoryFilter(GetExceptionCode(), GetExceptionInformation())) { g_Notify->FatalError(GS(MSG_UNKNOWN_MEM_ACTION)); } -} +} \ No newline at end of file diff --git a/Source/Project64/N64 System/Interpreter/Interpreter CPU.h b/Source/Project64/N64 System/Interpreter/Interpreter CPU.h index 196c60612..752a08429 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter CPU.h +++ b/Source/Project64/N64 System/Interpreter/Interpreter CPU.h @@ -11,18 +11,18 @@ #pragma once class CInterpreterCPU : - private R4300iOp + private R4300iOp { public: - static void BuildCPU(); - static void ExecuteCPU(); - static void ExecuteOps(int Cycles); - static void InPermLoop(); + static void BuildCPU(); + static void ExecuteCPU(); + static void ExecuteOps(int Cycles); + static void InPermLoop(); private: - CInterpreterCPU(); // Disable default constructor - CInterpreterCPU(const CInterpreterCPU&); // Disable copy constructor - CInterpreterCPU& operator=(const CInterpreterCPU&); // Disable assignment + CInterpreterCPU(); // Disable default constructor + CInterpreterCPU(const CInterpreterCPU&); // Disable copy constructor + CInterpreterCPU& operator=(const CInterpreterCPU&); // Disable assignment - static R4300iOp::Func * m_R4300i_Opcode; + static R4300iOp::Func * m_R4300i_Opcode; }; diff --git a/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp b/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp index 1b8e37aa3..60586c971 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp @@ -26,7 +26,7 @@ bool DelaySlotEffectsCompare(uint32_t PC, uint32_t Reg1, uint32_t Reg2); m_NextInstruction = JUMP;\ m_JumpToLocation = (*_PROGRAM_COUNTER);\ return;\ - } + } #define TLB_READ_EXCEPTION(Address) \ g_Reg->DoTLBReadMiss(m_NextInstruction == JUMP,Address);\ diff --git a/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.h b/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.h index f92d229ef..ef520c17c 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.h +++ b/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.h @@ -11,74 +11,74 @@ #pragma once class R4300iOp32 : - public R4300iOp + public R4300iOp { public: - /************************* OpCode functions *************************/ - static void JAL(); - static void BEQ(); - static void BNE(); - 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 LB(); - static void LH(); - static void LWL(); - static void LW(); - static void LBU(); - static void LHU(); - static void LWR(); - static void LWU(); - static void LL(); + /************************* OpCode functions *************************/ + static void JAL(); + static void BEQ(); + static void BNE(); + 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 LB(); + static void LH(); + static void LWL(); + static void LW(); + static void LBU(); + static void LHU(); + static void LWR(); + static void LWU(); + static void LL(); - /********************** 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_JALR(); - 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_NOR(); - static void SPECIAL_SLT(); - static void SPECIAL_SLTU(); - static void SPECIAL_TEQ(); - static void SPECIAL_DSRL32(); - static void SPECIAL_DSRA32(); + /********************** 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_JALR(); + 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_NOR(); + static void SPECIAL_SLT(); + static void SPECIAL_SLTU(); + static void SPECIAL_TEQ(); + 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(); + /********************** 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(); - /************************** COP0 functions **************************/ - static void COP0_MF(); - static void COP0_MT(); + /************************** COP0 functions **************************/ + static void COP0_MF(); + static void COP0_MT(); - /************************** COP1 functions **************************/ - static void COP1_MF(); - static void COP1_CF(); - static void COP1_DMT(); + /************************** COP1 functions **************************/ + static void COP1_MF(); + static void COP1_CF(); + static void COP1_DMT(); - static Func* BuildInterpreter(); + static Func* BuildInterpreter(); }; diff --git a/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp b/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp index c3c2e7240..e077a3751 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp @@ -54,7 +54,7 @@ const int32_t R4300iOp::LWR_SHIFT[4] = { 24, 16, 8, 0 }; m_NextInstruction = JUMP;\ m_JumpToLocation = (*_PROGRAM_COUNTER);\ return;\ - } + } #define TLB_READ_EXCEPTION(Address) \ g_Reg->DoTLBReadMiss(m_NextInstruction == JUMP,Address);\ @@ -902,7 +902,7 @@ void R4300iOp::LUI() if (m_Opcode.rt == 29) { StackValue = _GPR[m_Opcode.rt].W[0]; -} + } #endif } @@ -1866,7 +1866,7 @@ void R4300iOp::SPECIAL_OR() if (m_Opcode.rd == 29) { StackValue = _GPR[m_Opcode.rd].W[0]; -} + } #endif } @@ -2363,7 +2363,7 @@ __inline void Float_RoundToInteger32(int32_t * Dest, float * Source) xmm = _mm_load_ss(Source); *(Dest) = _mm_cvt_ss2si(xmm); #endif - } +} __inline void Float_RoundToInteger64(int64_t * Dest, float * Source) { @@ -2381,7 +2381,7 @@ __inline void Float_RoundToInteger64(int64_t * Dest, float * Source) xmm = _mm_load_ss(Source); *(Dest) = _mm_cvtss_si64(xmm); #endif - } +} void R4300iOp::COP1_S_ADD() { @@ -2436,7 +2436,7 @@ void R4300iOp::COP1_S_SQRT() xmm = _mm_sqrt_ss(xmm); *(Dest) = _mm_cvtss_f32(xmm); #endif - } +} void R4300iOp::COP1_S_ABS() { @@ -2594,7 +2594,7 @@ __inline void Double_RoundToInteger32(uint32_t * Dest, double * Source) xmm = _mm_load_sd(Source); *(Dest) = _mm_cvtsd_si32(xmm); #endif - } +} __inline void Double_RoundToInteger64(uint64_t * Dest, double * Source) { @@ -2612,7 +2612,7 @@ __inline void Double_RoundToInteger64(uint64_t * Dest, double * Source) xmm = _mm_load_sd(Source); *(Dest) = _mm_cvtsd_si64(xmm); #endif - } +} void R4300iOp::COP1_D_ADD() { @@ -2825,7 +2825,7 @@ void R4300iOp::UnknownOpcode() R4300iOpcodeName(m_Opcode.Hex, (*_PROGRAM_COUNTER))).ToUTF16().c_str()); g_System->m_EndEmulation = true; - g_Notify->BreakPoint(__FILEW__,__LINE__); + g_Notify->BreakPoint(__FILEW__, __LINE__); #ifdef tofix if (HaveDebugger && !inFullScreen) { @@ -2839,6 +2839,6 @@ void R4300iOp::UnknownOpcode() Enter_R4300i_Commands_Window (); } ExitThread(0); -} + } #endif } \ No newline at end of file