From 6f38d1baa1d6c735ae12b571dd341cd431f6ba73 Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 15 Jul 2015 08:53:05 +0200 Subject: [PATCH] CodeBlock: Add a shared IsAlmostFull function This function shall keep care about the low watermark of code space. If we ran out of space, the JITs shall clear their block cache. --- Source/Core/Common/CodeBlock.h | 6 ++++++ Source/Core/Core/PowerPC/Jit64/Jit.cpp | 4 +--- Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp | 2 +- Source/Core/Core/PowerPC/JitArm64/Jit.cpp | 3 +-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Source/Core/Common/CodeBlock.h b/Source/Core/Common/CodeBlock.h index 972fc707d6..5699fc5385 100644 --- a/Source/Core/Common/CodeBlock.h +++ b/Source/Core/Common/CodeBlock.h @@ -72,5 +72,11 @@ public: { return region_size - (T::GetCodePtr() - region); } + + bool IsAlmostFull() const + { + // This should be bigger than the biggest block ever. + return GetSpaceLeft() < 0x10000; + } }; diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/PowerPC/Jit64/Jit.cpp index 65227a07f4..723d237315 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit.cpp @@ -490,9 +490,7 @@ void Jit64::Trace() void Jit64::Jit(u32 em_address) { - if (GetSpaceLeft() < 0x10000 || - farcode.GetSpaceLeft() < 0x10000 || - trampolines.GetSpaceLeft() < 0x10000 || + if (IsAlmostFull() || farcode.IsAlmostFull() || trampolines.IsAlmostFull() || blocks.IsFull() || SConfig::GetInstance().bJITNoBlockCache || m_clear_cache_asap) diff --git a/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp index 0c82b234a7..d457f6e766 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp @@ -473,7 +473,7 @@ void JitIL::Trace() void JitIL::Jit(u32 em_address) { - if (GetSpaceLeft() < 0x10000 || farcode.GetSpaceLeft() < 0x10000 || blocks.IsFull() || + if (IsAlmostFull() || farcode.IsAlmostFull() || blocks.IsFull() || SConfig::GetInstance().bJITNoBlockCache) { ClearCache(); diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp index edc8fb8b14..9836e0b70a 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp @@ -279,8 +279,7 @@ void JitArm64::SingleStep() void JitArm64::Jit(u32) { - if (GetSpaceLeft() < 0x10000 || farcode.GetSpaceLeft() < 0x10000 || blocks.IsFull() || - SConfig::GetInstance().bJITNoBlockCache) + if (IsAlmostFull() || farcode.IsAlmostFull() || blocks.IsFull() || SConfig::GetInstance().bJITNoBlockCache) { ClearCache(); }