From f5b2b9fba2b643c08745228288a790da65b2d15e Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 13 Feb 2026 11:00:31 +0000 Subject: [PATCH] [dynarmic] Fix Sonic X shadow regression due to aggresive const prop discarding NZCV side ffects Signed-off-by: lizzie --- src/dynarmic/src/dynarmic/ir/opt_passes.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/dynarmic/src/dynarmic/ir/opt_passes.cpp b/src/dynarmic/src/dynarmic/ir/opt_passes.cpp index 15edc05bec..ee68a0bcfc 100644 --- a/src/dynarmic/src/dynarmic/ir/opt_passes.cpp +++ b/src/dynarmic/src/dynarmic/ir/opt_passes.cpp @@ -1042,6 +1042,11 @@ static void FoldZeroExtendXToLong(IR::Inst& inst) { static void ConstantPropagation(IR::Block& block) { for (auto& inst : block.instructions) { auto const opcode = inst.GetOpcode(); + // skip NZCV so we dont end up discarding side effects :) + // TODO(lizzie): hey stupid maybe fix the A64 codegen for folded constants AND + // redirect the mfer properly?!??! just saying :) + if (IR::MayGetNZCVFromOp(opcode) && inst.GetAssociatedPseudoOperation(IR::Opcode::GetNZCVFromOp)) + continue; switch (opcode) { case Op::LeastSignificantWord: FoldLeastSignificantWord(inst);