a64_emit_x64_memory: Fix bug in 128 bit exclusive write fallback

This commit is contained in:
Merry 2022-02-28 19:53:43 +00:00
parent 5ea2b49ef0
commit 0fd32c5fa4

View file

@ -167,7 +167,7 @@ void A64EmitX64::GenFastmemFallbacks() {
code.align(); code.align();
exclusive_write_fallbacks[std::make_tuple(128, vaddr_idx, value_idx)] = code.getCurr<void (*)()>(); exclusive_write_fallbacks[std::make_tuple(128, vaddr_idx, value_idx)] = code.getCurr<void (*)()>();
ABI_PushCallerSaveRegistersAndAdjustStack(code); ABI_PushCallerSaveRegistersAndAdjustStackExcept(code, HostLoc::RAX);
if (value_idx != 1) { if (value_idx != 1) {
code.movaps(xmm1, Xbyak::Xmm{value_idx}); code.movaps(xmm1, Xbyak::Xmm{value_idx});
} }
@ -183,7 +183,7 @@ void A64EmitX64::GenFastmemFallbacks() {
code.mov(code.ABI_PARAM2, Xbyak::Reg64{vaddr_idx}); code.mov(code.ABI_PARAM2, Xbyak::Reg64{vaddr_idx});
} }
code.call(memory_exclusive_write_128); code.call(memory_exclusive_write_128);
ABI_PopCallerSaveRegistersAndAdjustStack(code); ABI_PopCallerSaveRegistersAndAdjustStackExcept(code, HostLoc::RAX);
code.ret(); code.ret();
PerfMapRegister(exclusive_write_fallbacks[std::make_tuple(128, vaddr_idx, value_idx)], code.getCurr(), "a64_write_fallback_128"); PerfMapRegister(exclusive_write_fallbacks[std::make_tuple(128, vaddr_idx, value_idx)], code.getCurr(), "a64_write_fallback_128");