Permalink
Browse files

Merge pull request #7109 from degasus/cached_interpreter

CachedInterpreter: Implement breakpoints.
  • Loading branch information...
lioncash committed Jun 21, 2018
2 parents 5f7dc31 + 03c88c8 commit 8b68a7d88a34ecb1f6f2c6ead1962449b1dbff9b
Showing with 21 additions and 1 deletion.
  1. +21 −1 Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp
@@ -109,6 +109,7 @@ void CachedInterpreter::ExecuteOneBlock()
void CachedInterpreter::Run()
{
const CPU::State* state_ptr = CPU::GetStatePtr();
while (CPU::GetState() == CPU::State::Running)
{
// Start new timing slice
@@ -118,7 +119,7 @@ void CachedInterpreter::Run()
do
{
ExecuteOneBlock();
} while (PowerPC::ppcState.downcount > 0);
} while (PowerPC::ppcState.downcount > 0 && *state_ptr == CPU::State::Running);
}
}
@@ -169,6 +170,17 @@ static bool CheckDSI(u32 data)
return false;
}
static bool CheckBreakpoint(u32 data)
{
PowerPC::CheckBreakPoints();
if (CPU::GetState() != CPU::State::Running)
{
PowerPC::ppcState.downcount -= data;
return true;
}
return false;
}
bool CachedInterpreter::HandleFunctionHooking(u32 address)
{
return HLE::ReplaceFunctionIfPossible(address, [&](u32 function, HLE::HookType type) {
@@ -225,10 +237,18 @@ void CachedInterpreter::Jit(u32 address)
if (!op.skip)
{
const bool breakpoint = SConfig::GetInstance().bEnableDebugging &&
PowerPC::breakpoints.IsAddressBreakPoint(op.address);
const bool check_fpu = (op.opinfo->flags & FL_USE_FPU) && !js.firstFPInstructionFound;
const bool endblock = (op.opinfo->flags & FL_ENDBLOCK) != 0;
const bool memcheck = (op.opinfo->flags & FL_LOADSTORE) && jo.memcheck;
if (breakpoint)
{
m_code.emplace_back(WritePC, op.address);
m_code.emplace_back(CheckBreakpoint, js.downcountAmount);
}
if (check_fpu)
{
m_code.emplace_back(WritePC, op.address);

0 comments on commit 8b68a7d

Please sign in to comment.