From 8f475371b96266e99737276b549ccc6d0c2c6fc6 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Wed, 23 Dec 2020 17:21:25 +0100 Subject: [PATCH] JitArm64: Call UpdatePerformanceMonitor --- Source/Core/Core/PowerPC/JitArm64/Jit.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp index 43b9462600..38e6ae8ed3 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp @@ -244,6 +244,16 @@ void JitArm64::Cleanup() BLR(X0); SetJumpTarget(exit); } + + // SPEED HACK: MMCR0/MMCR1 should be checked at run-time, not at compile time. + if (MMCR0.Hex || MMCR1.Hex) + { + MOVP2R(X30, &PowerPC::UpdatePerformanceMonitor); + MOVI2R(X0, js.downcountAmount); + MOVI2R(X1, js.numLoadStoreInst); + MOVI2R(X2, js.numFloatingPointInst); + BLR(X30); + } } void JitArm64::DoDownCount() @@ -620,6 +630,8 @@ void JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC) js.skipInstructions = 0; js.curBlock = b; js.carryFlagSet = false; + js.numLoadStoreInst = 0; + js.numFloatingPointInst = 0; u8* const start = GetWritableCodePtr(); b->checkedEntry = start; @@ -807,6 +819,12 @@ void JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC) // If we have a register that will never be used again, flush it. gpr.StoreRegisters(~op.gprInUse); fpr.StoreRegisters(~op.fprInUse); + + if (opinfo->flags & FL_LOADSTORE) + ++js.numLoadStoreInst; + + if (opinfo->flags & FL_USE_FPU) + ++js.numFloatingPointInst; } i += js.skipInstructions;