diff --git a/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp b/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp index 35e46edc9..ec4835eb0 100644 --- a/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp +++ b/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp @@ -4095,22 +4095,25 @@ void *JITCore::CompileCode([[maybe_unused]] FEXCore::IR::IRListView const mov(MemReg, Memory); add(MemReg, GetSrc(Op->Header.Args[0].ID())); } - lock(); switch (Op->Size) { case 1: mov(GetDst(Node), GetSrc(Op->Header.Args[1].ID())); + lock(); xchg(byte [MemReg], GetDst(Node)); break; case 2: mov(GetDst(Node), GetSrc(Op->Header.Args[1].ID())); + lock(); xchg(word [MemReg], GetDst(Node)); break; case 4: mov(GetDst(Node), GetSrc(Op->Header.Args[1].ID())); + lock(); xchg(dword [MemReg], GetDst(Node)); break; case 8: mov(GetDst(Node), GetSrc(Op->Header.Args[1].ID())); + lock(); xchg(qword [MemReg], GetDst(Node)); break; default: LogMan::Msg::A("Unhandled AtomicAdd size: %d", Op->Size);