{a32,a64}_interface: Clear exclusive state during an exceptional exit

This is normally done by the ERET instruction during a service call.
This commit is contained in:
MerryMage 2021-04-02 19:33:28 +01:00
parent c788bcdf17
commit 9ab83180db
2 changed files with 2 additions and 0 deletions

View file

@ -90,6 +90,7 @@ struct Jit::Impl {
} }
void ExceptionalExit() { void ExceptionalExit() {
ClearExclusiveState();
if (!conf.wall_clock_cntpct) { if (!conf.wall_clock_cntpct) {
const s64 ticks = jit_state.cycles_to_run - jit_state.cycles_remaining; const s64 ticks = jit_state.cycles_to_run - jit_state.cycles_remaining;
conf.callbacks->AddTicks(ticks); conf.callbacks->AddTicks(ticks);

View file

@ -88,6 +88,7 @@ public:
} }
void ExceptionalExit() { void ExceptionalExit() {
ClearExclusiveState();
if (!conf.wall_clock_cntpct) { if (!conf.wall_clock_cntpct) {
const s64 ticks = jit_state.cycles_to_run - jit_state.cycles_remaining; const s64 ticks = jit_state.cycles_to_run - jit_state.cycles_remaining;
conf.callbacks->AddTicks(ticks); conf.callbacks->AddTicks(ticks);