Merge pull request #6532 from lioncash/interp

Interpreter: Remove static state within SingleStepInner()
This commit is contained in:
Léo Lam 2018-03-26 18:50:26 +02:00 committed by GitHub
commit 674ab6a8ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 9 deletions

View File

@ -101,7 +101,6 @@ static void Trace(UGeckoInstruction& inst)
int Interpreter::SingleStepInner() int Interpreter::SingleStepInner()
{ {
static UGeckoInstruction instCode;
u32 function = HLE::GetFirstFunctionIndex(PC); u32 function = HLE::GetFirstFunctionIndex(PC);
if (function != 0) if (function != 0)
{ {
@ -138,7 +137,7 @@ int Interpreter::SingleStepInner()
#endif #endif
NPC = PC + sizeof(UGeckoInstruction); NPC = PC + sizeof(UGeckoInstruction);
instCode.hex = PowerPC::Read_Opcode(PC); m_prev_inst.hex = PowerPC::Read_Opcode(PC);
// Uncomment to trace the interpreter // Uncomment to trace the interpreter
// if ((PC & 0xffffff)>=0x0ab54c && (PC & 0xffffff)<=0x0ab624) // if ((PC & 0xffffff)>=0x0ab54c && (PC & 0xffffff)<=0x0ab624)
@ -148,15 +147,15 @@ int Interpreter::SingleStepInner()
if (startTrace) if (startTrace)
{ {
Trace(instCode); Trace(m_prev_inst);
} }
if (instCode.hex != 0) if (m_prev_inst.hex != 0)
{ {
UReg_MSR& msr = (UReg_MSR&)MSR; const UReg_MSR msr{MSR};
if (msr.FP) // If FPU is enabled, just execute if (msr.FP) // If FPU is enabled, just execute
{ {
m_op_table[instCode.OPCD](instCode); m_op_table[m_prev_inst.OPCD](m_prev_inst);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
{ {
PowerPC::CheckExceptions(); PowerPC::CheckExceptions();
@ -166,9 +165,9 @@ int Interpreter::SingleStepInner()
else else
{ {
// check if we have to generate a FPU unavailable exception // check if we have to generate a FPU unavailable exception
if (!PPCTables::UsesFPU(instCode)) if (!PPCTables::UsesFPU(m_prev_inst))
{ {
m_op_table[instCode.OPCD](instCode); m_op_table[m_prev_inst.OPCD](m_prev_inst);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
{ {
PowerPC::CheckExceptions(); PowerPC::CheckExceptions();
@ -193,7 +192,7 @@ int Interpreter::SingleStepInner()
last_pc = PC; last_pc = PC;
PC = NPC; PC = NPC;
const GekkoOPInfo* opinfo = PPCTables::GetOpInfo(instCode); const GekkoOPInfo* opinfo = PPCTables::GetOpInfo(m_prev_inst);
return opinfo->numCycles; return opinfo->numCycles;
} }

View File

@ -304,6 +304,8 @@ private:
static void Helper_FloatCompareOrdered(UGeckoInstruction inst, double a, double b); static void Helper_FloatCompareOrdered(UGeckoInstruction inst, double a, double b);
static void Helper_FloatCompareUnordered(UGeckoInstruction inst, double a, double b); static void Helper_FloatCompareUnordered(UGeckoInstruction inst, double a, double b);
UGeckoInstruction m_prev_inst{};
static bool m_end_block; static bool m_end_block;
// TODO: These should really be in the save state, although it's unlikely to matter much. // TODO: These should really be in the save state, although it's unlikely to matter much.