From a8cbfd9af4f3f3cdad6efcd067e76edec76c1338 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Tue, 1 Feb 2022 14:32:11 +0100 Subject: [PATCH] X86_Backend: set fences correctly for memory barriers and synchronization. --- src/dynarmic/backend/x64/a32_emit_x64.cpp | 3 ++- src/dynarmic/backend/x64/a64_emit_x64.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/dynarmic/backend/x64/a32_emit_x64.cpp b/src/dynarmic/backend/x64/a32_emit_x64.cpp index e8ddbce6..4f819825 100644 --- a/src/dynarmic/backend/x64/a32_emit_x64.cpp +++ b/src/dynarmic/backend/x64/a32_emit_x64.cpp @@ -715,10 +715,11 @@ void A32EmitX64::EmitA32SetGEFlagsCompressed(A32EmitContext& ctx, IR::Inst* inst void A32EmitX64::EmitA32DataSynchronizationBarrier(A32EmitContext&, IR::Inst*) { code.mfence(); + code.lfence(); } void A32EmitX64::EmitA32DataMemoryBarrier(A32EmitContext&, IR::Inst*) { - code.lfence(); + code.mfence(); } void A32EmitX64::EmitA32InstructionSynchronizationBarrier(A32EmitContext& ctx, IR::Inst*) { diff --git a/src/dynarmic/backend/x64/a64_emit_x64.cpp b/src/dynarmic/backend/x64/a64_emit_x64.cpp index de54a444..8de3ee5f 100644 --- a/src/dynarmic/backend/x64/a64_emit_x64.cpp +++ b/src/dynarmic/backend/x64/a64_emit_x64.cpp @@ -668,10 +668,11 @@ void A64EmitX64::EmitA64InstructionCacheOperationRaised(A64EmitContext& ctx, IR: void A64EmitX64::EmitA64DataSynchronizationBarrier(A64EmitContext&, IR::Inst*) { code.mfence(); + code.lfence(); } void A64EmitX64::EmitA64DataMemoryBarrier(A64EmitContext&, IR::Inst*) { - code.lfence(); + code.mfence(); } void A64EmitX64::EmitA64InstructionSynchronizationBarrier(A64EmitContext& ctx, IR::Inst*) {