From 3bc900871593300b0b203107543770ac1a64dc41 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 21 Apr 2024 08:50:04 +0200 Subject: [PATCH] PPCAnalyst: Prevent discarding registers around breakpoints Fixes https://bugs.dolphin-emu.org/issues/13526. --- Source/Core/Core/PowerPC/PPCAnalyst.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/PowerPC/PPCAnalyst.cpp index b568656968..a0addb56c6 100644 --- a/Source/Core/Core/PowerPC/PPCAnalyst.cpp +++ b/Source/Core/Core/PowerPC/PPCAnalyst.cpp @@ -1003,7 +1003,8 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, const auto ppc_mode = power_pc.GetMode(); 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 opWantsCA = op.wantsCA; @@ -1029,7 +1030,7 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, if (strncmp(op.opinfo->opname, "stfd", 4)) fprInXmm |= op.fregsIn; - if (hle) + if (hle || breakpoint) { gprInUse = BitSet32{}; fprInUse = BitSet32{};