diff --git a/core/rec-x64/rec_x64.cpp b/core/rec-x64/rec_x64.cpp index 37b66e578..44f9d1556 100644 --- a/core/rec-x64/rec_x64.cpp +++ b/core/rec-x64/rec_x64.cpp @@ -1124,14 +1124,14 @@ public: if (!mmu_enabled()) GenCall(ReadMem8); else - GenCall(ReadMemNoEx); + GenCall(ReadMemNoEx, true); movsx(ecx, al); break; case 2: if (!mmu_enabled()) GenCall(ReadMem16); else - GenCall(ReadMemNoEx); + GenCall(ReadMemNoEx, true); movsx(ecx, ax); break; @@ -1139,14 +1139,14 @@ public: if (!mmu_enabled()) GenCall(ReadMem32); else - GenCall(ReadMemNoEx); + GenCall(ReadMemNoEx, true); mov(ecx, eax); break; case 8: if (!mmu_enabled()) GenCall(ReadMem64); else - GenCall(ReadMemNoEx); + GenCall(ReadMemNoEx, true); mov(rcx, rax); break; default: @@ -1177,25 +1177,25 @@ public: if (!mmu_enabled()) GenCall(WriteMem8); else - GenCall(WriteMemNoEx); + GenCall(WriteMemNoEx, true); break; case 2: if (!mmu_enabled()) GenCall(WriteMem16); else - GenCall(WriteMemNoEx); + GenCall(WriteMemNoEx, true); break; case 4: if (!mmu_enabled()) GenCall(WriteMem32); else - GenCall(WriteMemNoEx); + GenCall(WriteMemNoEx, true); break; case 8: if (!mmu_enabled()) GenCall(WriteMem64); else - GenCall(WriteMemNoEx); + GenCall(WriteMemNoEx, true); break; default: die("1..8 bytes"); @@ -1611,13 +1611,13 @@ private: } template - void GenCall(Ret(*function)(Params...)) + void GenCall(Ret(*function)(Params...), bool skip_floats = false) { #ifndef _WIN32 - bool xmm8_mapped = current_opid != -1 && regalloc.IsMapped(xmm8, current_opid); - bool xmm9_mapped = current_opid != -1 && regalloc.IsMapped(xmm9, current_opid); - bool xmm10_mapped = current_opid != -1 && regalloc.IsMapped(xmm10, current_opid); - bool xmm11_mapped = current_opid != -1 && regalloc.IsMapped(xmm11, current_opid); + bool xmm8_mapped = !skip_floats && current_opid != -1 && regalloc.IsMapped(xmm8, current_opid); + bool xmm9_mapped = !skip_floats && current_opid != -1 && regalloc.IsMapped(xmm9, current_opid); + bool xmm10_mapped = !skip_floats && current_opid != -1 && regalloc.IsMapped(xmm10, current_opid); + bool xmm11_mapped = !skip_floats && current_opid != -1 && regalloc.IsMapped(xmm11, current_opid); // Need to save xmm registers as they are not preserved in linux/mach int offset = 0;