Applied mainline PCem commit e9268fe: Recompiler now only recompiles a block after seeing it twice. Improves performance on stuff that uses self modifying code - eg Doom, Duke Nukem 3D, Windows 95 idle

This commit is contained in:
OBattler
2016-07-31 20:22:14 +02:00
parent cd3fd7e726
commit d50a7e9449
4 changed files with 301 additions and 132 deletions

View File

@@ -55,6 +55,8 @@ typedef struct codeblock_t
int ins;
uint64_t page_mask, page_mask2;
int was_recompiled;
uint8_t data[2048];
} codeblock_t;
@@ -233,6 +235,8 @@ void codegen_init();
void codegen_reset();
void codegen_block_init(uint32_t phys_addr);
void codegen_block_remove();
void codegen_block_start_recompile(codeblock_t *block);
void codegen_block_end_recompile(codeblock_t *block);
void codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_pc, uint32_t old_pc);
void codegen_generate_seg_restore();
void codegen_check_abrt();
@@ -241,6 +245,7 @@ void codegen_flush();
void codegen_check_flush(struct page_t *page, uint64_t mask, uint32_t phys_addr);
extern int cpu_block_end;
extern uint32_t codegen_endpc;
extern int cpu_recomp_blocks, cpu_recomp_ins, cpu_recomp_full_ins, cpu_new_blocks;
extern int cpu_recomp_blocks_latched, cpu_recomp_ins_latched, cpu_recomp_full_ins_latched, cpu_new_blocks_latched;