summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2024-01-01 22:09:05 +0100
committerGitHub <noreply@github.com>2024-01-01 22:09:05 +0100
commit6e3a2324a4b018bc052aedebd149dc46afbc5699 (patch)
tree5056a3f431fb56f03755ebd100d77094a6de321f /Source/Core
parent043d868841affc0d2baff57e96c43e3551d0c6fe (diff)
parent8fcf9969ebd53d6e5e13fa70e5d034ccb13af6ad (diff)
Merge pull request #12464 from JosJuice/jit-isi-membase
Jit: Reload RMEM/MEM_REG on ISI exception
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/Jit64/JitAsm.cpp3
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/JitAsm.cpp5
2 files changed, 8 insertions, 0 deletions
diff --git a/Source/Core/Core/PowerPC/Jit64/JitAsm.cpp b/Source/Core/Core/PowerPC/Jit64/JitAsm.cpp
index 525d65cf70..7b0e3e8242 100644
--- a/Source/Core/Core/PowerPC/Jit64/JitAsm.cpp
+++ b/Source/Core/Core/PowerPC/Jit64/JitAsm.cpp
@@ -221,6 +221,9 @@ void Jit64AsmRoutineManager::Generate()
ABI_CallFunction(JitTrampoline);
ABI_PopRegistersAndAdjustStack({}, 0);
+ // If jitting triggered an ISI exception, MSR.DR may have changed
+ MOV(64, R(RMEM), PPCSTATE(mem_ptr));
+
JMP(dispatcher_no_check, Jump::Near);
SetJumpTarget(bail);
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitAsm.cpp b/Source/Core/Core/PowerPC/JitArm64/JitAsm.cpp
index 87f8f3ae2e..cd93fccebf 100644
--- a/Source/Core/Core/PowerPC/JitArm64/JitAsm.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/JitAsm.cpp
@@ -177,7 +177,12 @@ void JitArm64::GenerateAsm()
// Call JIT
ResetStack();
ABI_CallFunction(&JitTrampoline, this, DISPATCHER_PC);
+
LDR(IndexType::Unsigned, DISPATCHER_PC, PPC_REG, PPCSTATE_OFF(pc));
+
+ // If jitting triggered an ISI exception, MSR.DR may have changed
+ EmitUpdateMembase();
+
B(dispatcher_no_check);
SetJumpTarget(bail);