From 07bc77c7e7aead75c5a71a1e6f63c6d03090b716 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 13 Feb 2026 16:10:09 +0100 Subject: [PATCH] [dynarmic] Fix Sonic X shadow regression due to aggresive const prop discarding NZCV side ffects (#3534) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3534 Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-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);