summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2016-08-06 14:15:11 +0200
committerdegasus <wickmarkus@web.de>2016-08-06 14:16:13 +0200
commit85affe995e9620d96be34c8a4cf195e2a8a977e7 (patch)
treeba48c29caac00ede84307f4358ba33201e44237e /Source/Core
parent814f29b25b9e6ea6a55ddcb1fe7d02f7627dec65 (diff)
JitCache: Do not use block 0.
This ID is reserved for invalid blocks. So this block can't be invalidated.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/JitCommon/JitCache.cpp6
-rw-r--r--Source/Core/Core/PowerPC/JitCommon/JitCache.h3
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<JitBlock, MAX_NUM_BLOCKS> 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);