From 85affe995e9620d96be34c8a4cf195e2a8a977e7 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 6 Aug 2016 14:15:11 +0200 Subject: [PATCH] JitCache: Do not use block 0. This ID is reserved for invalid blocks. So this block can't be invalidated. --- Source/Core/Core/PowerPC/JitCommon/JitCache.cpp | 6 +++--- Source/Core/Core/PowerPC/JitCommon/JitCache.h | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp b/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp index d3c0be127b..6f345b9636 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp +++ b/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp @@ -42,7 +42,7 @@ void JitBaseBlockCache::Init() void JitBaseBlockCache::Shutdown() { - num_blocks = 0; + num_blocks = 1; JitRegister::Shutdown(); } @@ -59,7 +59,7 @@ void JitBaseBlockCache::Clear() #endif jit->js.fifoWriteAddresses.clear(); jit->js.pairedQuantizeAddresses.clear(); - for (int i = 0; i < num_blocks; i++) + for (int i = 1; i < num_blocks; i++) { DestroyBlock(i, false); } @@ -68,7 +68,7 @@ void JitBaseBlockCache::Clear() valid_block.ClearAll(); - num_blocks = 0; + num_blocks = 1; blocks[0].msrBits = 0xFFFFFFFF; blocks[0].invalid = true; } diff --git a/Source/Core/Core/PowerPC/JitCommon/JitCache.h b/Source/Core/Core/PowerPC/JitCommon/JitCache.h index aeae78e696..842e723ee9 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitCache.h +++ b/Source/Core/Core/PowerPC/JitCommon/JitCache.h @@ -114,6 +114,7 @@ public: private: // We store the metadata of all blocks in a linear way within this array. + // Note: blocks[0] must not be used as it is referenced as invalid block in iCache. std::array blocks; // number -> JitBlock int num_blocks; @@ -152,7 +153,7 @@ private: virtual void WriteLinkBlock(const JitBlock::LinkData& source, const JitBlock* dest) = 0; virtual void WriteDestroyBlock(const JitBlock& block) {} public: - JitBaseBlockCache() : num_blocks(0) {} + JitBaseBlockCache() : num_blocks(1) {} virtual ~JitBaseBlockCache() {} int AllocateBlock(u32 em_address); void FinalizeBlock(int block_num, bool block_link, const u8* code_ptr);