PPCAnalyst: Prevent discarding registers around breakpoints

Fixes https://bugs.dolphin-emu.org/issues/13526.
This commit is contained in:
JosJuice 2024-04-21 08:50:04 +02:00
parent f1e40f73bd
commit 3bc9008715
1 changed files with 3 additions and 2 deletions

View File

@ -1003,7 +1003,8 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer,
const auto ppc_mode = power_pc.GetMode(); const auto ppc_mode = power_pc.GetMode();
const bool hle = !!HLE::TryReplaceFunction(ppc_symbol_db, op.address, ppc_mode); const bool hle = !!HLE::TryReplaceFunction(ppc_symbol_db, op.address, ppc_mode);
const bool may_exit_block = hle || op.canEndBlock || op.canCauseException; const bool breakpoint = power_pc.GetBreakPoints().IsAddressBreakPoint(op.address);
const bool may_exit_block = hle || breakpoint || op.canEndBlock || op.canCauseException;
const bool opWantsFPRF = op.wantsFPRF; const bool opWantsFPRF = op.wantsFPRF;
const bool opWantsCA = op.wantsCA; const bool opWantsCA = op.wantsCA;
@ -1029,7 +1030,7 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer,
if (strncmp(op.opinfo->opname, "stfd", 4)) if (strncmp(op.opinfo->opname, "stfd", 4))
fprInXmm |= op.fregsIn; fprInXmm |= op.fregsIn;
if (hle) if (hle || breakpoint)
{ {
gprInUse = BitSet32{}; gprInUse = BitSet32{};
fprInUse = BitSet32{}; fprInUse = BitSet32{};