JitCache: Move implementation details into the cpp file
This commit is contained in:
parent
cf18aeb1eb
commit
2b8ede8dc6
|
@ -35,6 +35,9 @@ static void ClearCacheThreadSafe(u64 userdata, s64 cyclesdata)
|
||||||
JitInterface::ClearCache();
|
JitInterface::ClearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JitBaseBlockCache::JitBaseBlockCache() = default;
|
||||||
|
JitBaseBlockCache::~JitBaseBlockCache() = default;
|
||||||
|
|
||||||
void JitBaseBlockCache::Init()
|
void JitBaseBlockCache::Init()
|
||||||
{
|
{
|
||||||
s_clear_jit_cache_thread_safe = CoreTiming::RegisterEvent("clearJitCache", ClearCacheThreadSafe);
|
s_clear_jit_cache_thread_safe = CoreTiming::RegisterEvent("clearJitCache", ClearCacheThreadSafe);
|
||||||
|
@ -98,11 +101,21 @@ JitBlock* JitBaseBlockCache::GetBlock(int no)
|
||||||
return &blocks[no];
|
return &blocks[no];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JitBlock* JitBaseBlockCache::GetBlocks()
|
||||||
|
{
|
||||||
|
return blocks.data();
|
||||||
|
}
|
||||||
|
|
||||||
int JitBaseBlockCache::GetNumBlocks() const
|
int JitBaseBlockCache::GetNumBlocks() const
|
||||||
{
|
{
|
||||||
return num_blocks;
|
return num_blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int* JitBaseBlockCache::GetICache()
|
||||||
|
{
|
||||||
|
return iCache.data();
|
||||||
|
}
|
||||||
|
|
||||||
int JitBaseBlockCache::AllocateBlock(u32 em_address)
|
int JitBaseBlockCache::AllocateBlock(u32 em_address)
|
||||||
{
|
{
|
||||||
JitBlock& b = blocks[num_blocks];
|
JitBlock& b = blocks[num_blocks];
|
||||||
|
@ -238,6 +251,11 @@ void JitBaseBlockCache::InvalidateICache(u32 address, const u32 length, bool for
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32* JitBaseBlockCache::GetBlockBitSet() const
|
||||||
|
{
|
||||||
|
return valid_block.m_valid_block.get();
|
||||||
|
}
|
||||||
|
|
||||||
void JitBaseBlockCache::WriteDestroyBlock(const JitBlock& block)
|
void JitBaseBlockCache::WriteDestroyBlock(const JitBlock& block)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -356,3 +374,8 @@ void JitBaseBlockCache::MoveBlockIntoFastCache(u32 addr, u32 msr)
|
||||||
LinkBlock(block_num);
|
LinkBlock(block_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int& JitBaseBlockCache::FastLookupEntryForAddress(u32 address)
|
||||||
|
{
|
||||||
|
return iCache[(address >> 2) & iCache_Mask];
|
||||||
|
}
|
||||||
|
|
|
@ -112,8 +112,9 @@ public:
|
||||||
static constexpr u32 iCache_Num_Elements = 0x10000;
|
static constexpr u32 iCache_Num_Elements = 0x10000;
|
||||||
static constexpr u32 iCache_Mask = iCache_Num_Elements - 1;
|
static constexpr u32 iCache_Mask = iCache_Num_Elements - 1;
|
||||||
|
|
||||||
JitBaseBlockCache() : num_blocks(1) {}
|
JitBaseBlockCache();
|
||||||
virtual ~JitBaseBlockCache() {}
|
virtual ~JitBaseBlockCache();
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
void Clear();
|
void Clear();
|
||||||
|
@ -124,9 +125,9 @@ public:
|
||||||
|
|
||||||
// Code Cache
|
// Code Cache
|
||||||
JitBlock* GetBlock(int block_num);
|
JitBlock* GetBlock(int block_num);
|
||||||
JitBlock* GetBlocks() { return blocks.data(); }
|
JitBlock* GetBlocks();
|
||||||
int GetNumBlocks() const;
|
int GetNumBlocks() const;
|
||||||
int* GetICache() { return iCache.data(); }
|
int* GetICache();
|
||||||
|
|
||||||
int AllocateBlock(u32 em_address);
|
int AllocateBlock(u32 em_address);
|
||||||
void FinalizeBlock(int block_num, bool block_link, const u8* code_ptr);
|
void FinalizeBlock(int block_num, bool block_link, const u8* code_ptr);
|
||||||
|
@ -143,7 +144,7 @@ public:
|
||||||
|
|
||||||
void InvalidateICache(u32 address, const u32 length, bool forced);
|
void InvalidateICache(u32 address, const u32 length, bool forced);
|
||||||
|
|
||||||
u32* GetBlockBitSet() const { return valid_block.m_valid_block.get(); }
|
u32* GetBlockBitSet() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void WriteLinkBlock(const JitBlock::LinkData& source, const JitBlock* dest) = 0;
|
virtual void WriteLinkBlock(const JitBlock::LinkData& source, const JitBlock* dest) = 0;
|
||||||
|
@ -157,12 +158,12 @@ private:
|
||||||
void MoveBlockIntoFastCache(u32 em_address, u32 msr);
|
void MoveBlockIntoFastCache(u32 em_address, u32 msr);
|
||||||
|
|
||||||
// Fast but risky block lookup based on iCache.
|
// Fast but risky block lookup based on iCache.
|
||||||
int& FastLookupEntryForAddress(u32 address) { return iCache[(address >> 2) & iCache_Mask]; }
|
int& FastLookupEntryForAddress(u32 address);
|
||||||
|
|
||||||
// We store the metadata of all blocks in a linear way within this array.
|
// 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.
|
// 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
|
std::array<JitBlock, MAX_NUM_BLOCKS> blocks; // number -> JitBlock
|
||||||
int num_blocks;
|
int num_blocks = 1;
|
||||||
|
|
||||||
// links_to hold all exit points of all valid blocks in a reverse way.
|
// links_to hold all exit points of all valid blocks in a reverse way.
|
||||||
// It is used to query all blocks which links to an address.
|
// It is used to query all blocks which links to an address.
|
||||||
|
|
Loading…
Reference in New Issue