Recompiled code blocks are no longer allowed to cross pages.
Recompiling of blocks is aborted if the code page becomes dirty. Fixes Windows 98 setup.
This commit is contained in:
parent
4855071ead
commit
00f6271ec8
1 changed files with 12 additions and 2 deletions
|
|
@ -1296,6 +1296,8 @@ inrecomp=0;
|
||||||
}
|
}
|
||||||
else if (!abrt)
|
else if (!abrt)
|
||||||
{
|
{
|
||||||
|
uint32_t start_page = pc >> 12;
|
||||||
|
|
||||||
// pclog("Hash %08x %i\n", codeblock_hash_pc[HASH(cs + pc)], codeblock_page_dirty[(cs + pc) >> 12]);
|
// pclog("Hash %08x %i\n", codeblock_hash_pc[HASH(cs + pc)], codeblock_page_dirty[(cs + pc) >> 12]);
|
||||||
cpu_block_end = 0;
|
cpu_block_end = 0;
|
||||||
|
|
||||||
|
|
@ -1338,6 +1340,9 @@ inrecomp=0;
|
||||||
|
|
||||||
if (((cs + pc) >> 12) != pccache)
|
if (((cs + pc) >> 12) != pccache)
|
||||||
CPU_BLOCK_END();
|
CPU_BLOCK_END();
|
||||||
|
|
||||||
|
if ((pc >> 12) != start_page)
|
||||||
|
CPU_BLOCK_END();
|
||||||
|
|
||||||
pc++;
|
pc++;
|
||||||
/* if (opcode == 0xf2 || opcode == 0xf3 || ((opcode & ~7) == 0xd8)*/
|
/* if (opcode == 0xf2 || opcode == 0xf3 || ((opcode & ~7) == 0xd8)*/
|
||||||
|
|
@ -1352,6 +1357,11 @@ inrecomp=0;
|
||||||
|
|
||||||
if (((cs + pc) >> 12) != pccache)
|
if (((cs + pc) >> 12) != pccache)
|
||||||
CPU_BLOCK_END();
|
CPU_BLOCK_END();
|
||||||
|
|
||||||
|
if (codeblock_page_dirty[phys_addr >> 12])
|
||||||
|
CPU_BLOCK_END();
|
||||||
|
|
||||||
|
|
||||||
//pclog("cpu_block_end=%d %p\n", cpu_block_end, (void *)&cpu_block_end);
|
//pclog("cpu_block_end=%d %p\n", cpu_block_end, (void *)&cpu_block_end);
|
||||||
/* if (ssegs)
|
/* if (ssegs)
|
||||||
{
|
{
|
||||||
|
|
@ -1361,7 +1371,7 @@ inrecomp=0;
|
||||||
codegen_generate_seg_restore();
|
codegen_generate_seg_restore();
|
||||||
}*/
|
}*/
|
||||||
//codegen_check_abrt();
|
//codegen_check_abrt();
|
||||||
if (abrt)
|
if (abrt || codeblock_page_dirty[phys_addr >> 12])
|
||||||
{
|
{
|
||||||
codegen_block_remove();
|
codegen_block_remove();
|
||||||
CPU_BLOCK_END();
|
CPU_BLOCK_END();
|
||||||
|
|
@ -1372,7 +1382,7 @@ inrecomp=0;
|
||||||
insc++;
|
insc++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!abrt)
|
if (!abrt && !codeblock_page_dirty[phys_addr >> 12])
|
||||||
codegen_block_end();
|
codegen_block_end();
|
||||||
// output &= ~2;
|
// output &= ~2;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue