From eb306381c8b012dc7a9f2f3e559dc748fa9c5186 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 10 Feb 2026 03:14:48 +0000 Subject: [PATCH] fix cmpxchg16b --- .../dynarmic/backend/x64/emit_x64_memory.cpp.inc | 8 ++++---- .../src/dynarmic/backend/x64/emit_x64_memory.h | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc index aaed8b43f2..c3a4e3c667 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc @@ -473,19 +473,19 @@ void AxxEmitX64::EmitExclusiveWriteMemoryInline(AxxEmitContext& ctx, IR::Inst* i break; case 16: code.lock(); - code.cmpxchg(word[dest_ptr], value.cvt16()); + code.cmpxchg(code.word[dest_ptr], value.cvt16()); break; case 32: code.lock(); - code.cmpxchg(dword[dest_ptr], value.cvt32()); + code.cmpxchg(code.dword[dest_ptr], value.cvt32()); break; case 64: code.lock(); - code.cmpxchg(qword[dest_ptr], value.cvt64()); + code.cmpxchg(code.qword[dest_ptr], value.cvt64()); break; case 128: code.lock(); - code.cmpxchg16b(ptr[dest_ptr]); + code.cmpxchg16b(code.ptr[dest_ptr]); //#226 bug with xbyak break; default: UNREACHABLE(); diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h index 732063d6bb..7cadff35af 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h @@ -222,19 +222,19 @@ const void* EmitReadMemoryMov(BlockOfCode& code, int value_idx, const Xbyak::Reg break; case 16: code.lock(); - code.xadd(word[addr], Xbyak::Reg64(value_idx).cvt16()); + code.xadd(code.word[addr], Xbyak::Reg64(value_idx).cvt16()); break; case 32: code.lock(); - code.xadd(dword[addr], Xbyak::Reg64(value_idx).cvt32()); + code.xadd(code.dword[addr], Xbyak::Reg64(value_idx).cvt32()); break; case 64: code.lock(); - code.xadd(qword[addr], Xbyak::Reg64(value_idx)); + code.xadd(code.qword[addr], Xbyak::Reg64(value_idx)); break; case 128: code.lock(); - code.cmpxchg16b(xword[addr]); + code.cmpxchg16b(code.ptr[addr]); //#226 bug with xbyak if (code.HasHostFeature(HostFeature::SSE41)) { code.movq(Xbyak::Xmm(value_idx), rax); code.pinsrq(Xbyak::Xmm(value_idx), rdx, 1); @@ -296,19 +296,19 @@ const void* EmitWriteMemoryMov(BlockOfCode& code, const Xbyak::RegExp& addr, int code.xchg(code.byte[addr], Xbyak::Reg64(value_idx).cvt8()); break; case 16: - code.xchg(word[addr], Xbyak::Reg64(value_idx).cvt16()); + code.xchg(code.word[addr], Xbyak::Reg64(value_idx).cvt16()); break; case 32: - code.xchg(dword[addr], Xbyak::Reg64(value_idx).cvt32()); + code.xchg(code.dword[addr], Xbyak::Reg64(value_idx).cvt32()); break; case 64: - code.xchg(qword[addr], Xbyak::Reg64(value_idx)); + code.xchg(code.qword[addr], Xbyak::Reg64(value_idx)); break; case 128: { Xbyak::Label loop; code.L(loop); code.lock(); - code.cmpxchg16b(xword[addr]); + code.cmpxchg16b(code.ptr[addr]); //#226 bug with xbyak code.jnz(loop, code.T_NEAR); break; }