From 13de8233b08df42c4126bd79bd0e023647b0c690 Mon Sep 17 00:00:00 2001 From: Elad <18193363+elad335@users.noreply.github.com> Date: Thu, 2 Apr 2026 21:00:25 +0300 Subject: [PATCH] SPU Analyzer: Fix register origin for Reduced Loop --- rpcs3/Emu/Cell/SPUCommonRecompiler.cpp | 8 +++++++- rpcs3/Emu/Cell/SPURecompiler.h | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUCommonRecompiler.cpp b/rpcs3/Emu/Cell/SPUCommonRecompiler.cpp index d5791c30dd..1b7c37dc51 100644 --- a/rpcs3/Emu/Cell/SPUCommonRecompiler.cpp +++ b/rpcs3/Emu/Cell/SPUCommonRecompiler.cpp @@ -6194,7 +6194,7 @@ spu_program spu_recompiler_base::analyse(const be_t* ls, u32 entry_point, s { const auto arg = reduced_loop->find_reg(reg); - if (arg && reg != op_rt) + if (arg && arg->regs.count() != 0) { if (reg_first == reg) { @@ -6217,6 +6217,12 @@ spu_program spu_recompiler_base::analyse(const be_t* ls, u32 entry_point, s } } + if (type & spu_itype::memory || type == spu_itype::RDCH || type == spu_itype::RCHCNT) + { + // Register external origin + org.add_register_origin(s_reg_max); + } + *ensure(reduced_loop->find_reg(op_rt)) = org; } diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 54ddcb2f1e..13a868448a 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -364,7 +364,7 @@ public: struct origin_t { - std::bitset regs{}; + std::bitset regs{}; u32 modified = 0; spu_itype_t mod1_type = spu_itype::UNK; spu_itype_t mod2_type = spu_itype::UNK;