From 2abf91603ec80e4c28c3f7e0b3336f483feb097f Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Wed, 15 Oct 2025 11:57:49 +0900 Subject: [PATCH] [x64/Linux] Ensure EmitHostToGuestThunk saves rsi --- src/xenia/cpu/backend/x64/x64_backend.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/xenia/cpu/backend/x64/x64_backend.cc b/src/xenia/cpu/backend/x64/x64_backend.cc index e979df258..4b7d0e089 100644 --- a/src/xenia/cpu/backend/x64/x64_backend.cc +++ b/src/xenia/cpu/backend/x64/x64_backend.cc @@ -693,10 +693,14 @@ HostToGuestThunk X64HelperEmitter::EmitHostToGuestThunk() { EmitSaveNonvolatileRegs(); mov(rax, rdi); - // mov(rsi, rsi); // context + // Save context register (RSI is volatile on Linux/Mac System V ABI, but we + // need it preserved) + mov(qword[rsp + offsetof(StackLayout::Thunk, xmm[0])], rsi); mov(rdi, ptr[rsi + offsetof(ppc::PPCContext, virtual_membase)]); // membase mov(rcx, rdx); // return address call(rax); + // Restore context register + mov(rsi, qword[rsp + offsetof(StackLayout::Thunk, xmm[0])]); EmitLoadNonvolatileRegs();