Merge pull request #7032 from unknownbrackets/jit-minor

jit: Fix partial invalidation of larger blocks
This commit is contained in:
Henrik Rydgård committed 2014-10-28 08:28:10 +01:00
commit bc5bec2e5c
4 files changed
+7 -3

No files matched your search

+1 -1
View File
@@ -317,7 +317,7 @@ const u8 *Jit::DoJit(u32 em_address, JitBlock *b)
#endif
// Safety check, in case we get a bunch of really large jit ops without a lot of branching.
if (GetSpaceLeft() < 0x800)
if (GetSpaceLeft() < 0x800 || js.numInstructions >= JitBlockCache::MAX_BLOCK_INSTRUCTIONS)
{
FlushAll();
WriteExit(js.compilerPC, js.nextExit++);
+1 -1
View File
@@ -600,7 +600,7 @@ void JitBlockCache::InvalidateICache(u32 address, const u32 length) {
do {
restart:
auto next = block_map_.lower_bound(std::make_pair(pAddr, 0));
auto last = block_map_.upper_bound(std::make_pair(pEnd, 0));
auto last = block_map_.upper_bound(std::make_pair(pEnd + MAX_BLOCK_INSTRUCTIONS, 0));
// Note that if next is end(), last will be end() too (equal.)
for (; next != last; ++next) {
const u32 blockStart = next->first.second;
+4
View File
@@ -143,6 +143,10 @@ public:
static int GetBlockExitSize();
enum {
MAX_BLOCK_INSTRUCTIONS = 0x4000,
};
private:
void LinkBlockExits(int i);
void LinkBlock(int i);
+1 -1
View File
@@ -455,7 +455,7 @@ const u8 *Jit::DoJit(u32 em_address, JitBlock *b)
js.numInstructions++;
// Safety check, in case we get a bunch of really large jit ops without a lot of branching.
if (GetSpaceLeft() < 0x800)
if (GetSpaceLeft() < 0x800 || js.numInstructions >= JitBlockCache::MAX_BLOCK_INSTRUCTIONS)
{
FlushAll();
WriteExit(js.compilerPC, js.nextExit++);