diff --git a/src/backend/core/interpreter/decode.cpp b/src/backend/core/interpreter/decode.cpp index 9809dbe8..f943c51f 100644 --- a/src/backend/core/interpreter/decode.cpp +++ b/src/backend/core/interpreter/decode.cpp @@ -301,7 +301,7 @@ void Interpreter::Exec(const u32 instr) { lui(instr); break; case COP0: - regs.cop0.decode(*this, instr); + regs.cop0.decode(instr); break; case COP1: { diff --git a/src/backend/core/jit/decode.cpp b/src/backend/core/jit/decode.cpp index 2532cf74..8007db20 100644 --- a/src/backend/core/jit/decode.cpp +++ b/src/backend/core/jit/decode.cpp @@ -270,7 +270,7 @@ void JIT::Emit(const u32 instr) { lui(instr); break; case COP0: - regs.cop0.decode(*this, instr); + Util::panic("[JIT]: Unimplemented Cop0 decode"); break; case COP1: { diff --git a/src/backend/core/registers/Cop0.cpp b/src/backend/core/registers/Cop0.cpp index f3b94bb1..c6ddc0cd 100644 --- a/src/backend/core/registers/Cop0.cpp +++ b/src/backend/core/registers/Cop0.cpp @@ -451,18 +451,7 @@ ExceptionCode Cop0::GetTLBExceptionCode(const TLBError error, const TLBAccessTyp } } -template -void Cop0::decode(T &cpu, u32 instr) { - if constexpr (std::is_same_v) { - decodeInterp(instr); - } else { - Util::panic("What the fuck did you just give me?!!"); - } -} - -template void Cop0::decode(Interpreter &, u32); - -void Cop0::decodeInterp(const u32 instr) { +void Cop0::decode(const u32 instr) { const u8 mask_cop = instr >> 21 & 0x1F; const u8 mask_cop2 = instr & 0x3F; switch (mask_cop) { diff --git a/src/backend/core/registers/Cop0.hpp b/src/backend/core/registers/Cop0.hpp index 862c504a..24d8625b 100644 --- a/src/backend/core/registers/Cop0.hpp +++ b/src/backend/core/registers/Cop0.hpp @@ -229,8 +229,7 @@ struct Cop0 { TLBEntry tlb[32]{}; TLBError tlbError = NONE; s64 openbus{}; - template - void decode(T &, u32); + [[nodiscard]] FORCE_INLINE u32 GetRandom() const { u32 val = rand(); const auto wired_ = GetWired(); @@ -270,13 +269,13 @@ struct Cop0 { TLBEntry *TLBTryMatch(u64 vaddr) const; void HandleTLBException(u64 vaddr) const; static ExceptionCode GetTLBExceptionCode(TLBError error, TLBAccessType accessType); + void decode(u32); private: Registers ®s; [[nodiscard]] FORCE_INLINE u32 GetWired() const { return wired & 0x3F; } [[nodiscard]] FORCE_INLINE u32 GetCount() const { return u32(u64(count >> 1)); } - void decodeInterp(u32); void mtc0(u32); void dmtc0(u32); void mfc0(u32);