From 7660da49098e3c08f629175ddd6db95c6c45f713 Mon Sep 17 00:00:00 2001 From: Merry Date: Mon, 5 Dec 2022 21:11:51 +0000 Subject: [PATCH] backend/arm64: Fix exclusive writes --- src/dynarmic/backend/arm64/emit_arm64_a32_memory.cpp | 1 + src/dynarmic/backend/arm64/emit_arm64_a64_memory.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/dynarmic/backend/arm64/emit_arm64_a32_memory.cpp b/src/dynarmic/backend/arm64/emit_arm64_a32_memory.cpp index 8d72dd19..ef961d57 100644 --- a/src/dynarmic/backend/arm64/emit_arm64_a32_memory.cpp +++ b/src/dynarmic/backend/arm64/emit_arm64_a32_memory.cpp @@ -73,6 +73,7 @@ static void EmitExclusiveWriteMemory(oaknut::CodeGenerator& code, EmitContext& c if (ordered) { code.DMB(oaknut::BarrierOp::ISH); } + code.MOV(W0, 1); code.LDRB(Wscratch0, Xstate, offsetof(A32JitState, exclusive_state)); code.CBZ(Wscratch0, end); code.STRB(WZR, Xstate, offsetof(A32JitState, exclusive_state)); diff --git a/src/dynarmic/backend/arm64/emit_arm64_a64_memory.cpp b/src/dynarmic/backend/arm64/emit_arm64_a64_memory.cpp index bf378605..2bab7845 100644 --- a/src/dynarmic/backend/arm64/emit_arm64_a64_memory.cpp +++ b/src/dynarmic/backend/arm64/emit_arm64_a64_memory.cpp @@ -101,6 +101,7 @@ static void EmitExclusiveWriteMemory(oaknut::CodeGenerator& code, EmitContext& c if (ordered) { code.DMB(oaknut::BarrierOp::ISH); } + code.MOV(W0, 1); code.LDRB(Wscratch0, Xstate, offsetof(A64JitState, exclusive_state)); code.CBZ(Wscratch0, end); code.STRB(WZR, Xstate, offsetof(A64JitState, exclusive_state));