mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-09 15:49:25 +01:00
JitArm64: Implement memcheck for lXX/stX without update
This commit is contained in:
parent
8c905e152a
commit
ab1ceee16f
@ -15,6 +15,7 @@
|
||||
#include "Common/Swap.h"
|
||||
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/PowerPC/Gekko.h"
|
||||
#include "Core/PowerPC/JitArm64/Jit.h"
|
||||
#include "Core/PowerPC/JitArm64/Jit_Util.h"
|
||||
#include "Core/PowerPC/JitArmCommon/BackPatch.h"
|
||||
@ -120,6 +121,8 @@ void JitArm64::EmitBackpatchRoutine(u32 flags, bool fastmem, bool do_farcode, AR
|
||||
|
||||
if (!fastmem || do_farcode)
|
||||
{
|
||||
const bool memcheck = jo.memcheck && !emitting_routine;
|
||||
|
||||
if (fastmem && do_farcode)
|
||||
{
|
||||
in_far_code = true;
|
||||
@ -223,6 +226,9 @@ void JitArm64::EmitBackpatchRoutine(u32 flags, bool fastmem, bool do_farcode, AR
|
||||
|
||||
m_float_emit.ABI_PopRegisters(fprs_to_push, ARM64Reg::X30);
|
||||
ABI_PopRegisters(gprs_to_push);
|
||||
|
||||
if (memcheck)
|
||||
WriteConditionalExceptionExit(EXCEPTION_DSI, ARM64Reg::W0);
|
||||
}
|
||||
|
||||
if (in_far_code)
|
||||
|
@ -306,7 +306,6 @@ void JitArm64::lXX(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
JITDISABLE(bJITLoadStoreOff);
|
||||
FALLBACK_IF(jo.memcheck);
|
||||
|
||||
u32 a = inst.RA, b = inst.RB, d = inst.RD;
|
||||
s32 offset = inst.SIMM_16;
|
||||
@ -378,6 +377,8 @@ void JitArm64::lXX(UGeckoInstruction inst)
|
||||
break;
|
||||
}
|
||||
|
||||
FALLBACK_IF(jo.memcheck && update);
|
||||
|
||||
SafeLoadToReg(d, update ? a : (a ? a : -1), offsetReg, flags, offset, update);
|
||||
}
|
||||
|
||||
@ -385,7 +386,6 @@ void JitArm64::stX(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
JITDISABLE(bJITLoadStoreOff);
|
||||
FALLBACK_IF(jo.memcheck);
|
||||
|
||||
u32 a = inst.RA, b = inst.RB, s = inst.RS;
|
||||
s32 offset = inst.SIMM_16;
|
||||
@ -444,6 +444,8 @@ void JitArm64::stX(UGeckoInstruction inst)
|
||||
break;
|
||||
}
|
||||
|
||||
FALLBACK_IF(jo.memcheck && update);
|
||||
|
||||
SafeStoreFromReg(update ? a : (a ? a : -1), s, regOffset, flags, offset);
|
||||
|
||||
if (update)
|
||||
|
Loading…
x
Reference in New Issue
Block a user