mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-10 13:06:24 +02:00
Merge pull request #7032 from unknownbrackets/jit-minor
jit: Fix partial invalidation of larger blocks
This commit is contained in:
commit
bc5bec2e5c
4 files changed
+7
-3
No files matched your search
@@ -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++);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -143,6 +143,10 @@ public:
|
||||
|
||||
static int GetBlockExitSize();
|
||||
|
||||
enum {
|
||||
MAX_BLOCK_INSTRUCTIONS = 0x4000,
|
||||
};
|
||||
|
||||
private:
|
||||
void LinkBlockExits(int i);
|
||||
void LinkBlock(int i);
|
||||
|
||||
@@ -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++);
|
||||
|
||||
Reference in new issue
Block a user