From 82b4cd3bb79c73f7d30fe110b3cc34af721bf726 Mon Sep 17 00:00:00 2001 From: "Skyth (Asilkan)" <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Fri, 21 Mar 2025 17:38:08 +0300 Subject: [PATCH] Fix return value from longjmp getting forgotten after setjmp. (#122) Restoring env to ctx was causing this because the return value was getting assigned to r3 before the if check. --- XenonRecomp/recompiler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/XenonRecomp/recompiler.cpp b/XenonRecomp/recompiler.cpp index 5374797..daa53c2 100644 --- a/XenonRecomp/recompiler.cpp +++ b/XenonRecomp/recompiler.cpp @@ -378,8 +378,9 @@ bool Recompiler::Recompile( else if (address == config.setJmpAddress) { println("\t{} = ctx;", env()); - println("\t{}.s64 = setjmp(*reinterpret_cast(base + {}.u32));", r(3), r(3)); - println("\tif ({}.s64 != 0) ctx = {};", r(3), env()); + println("\t{}.s64 = setjmp(*reinterpret_cast(base + {}.u32));", temp(), r(3)); + println("\tif ({}.s64 != 0) ctx = {};", temp(), env()); + println("\t{} = {};", r(3), temp()); } else {