Changed GPF handled on the 64-bit old recompiler.

This commit is contained in:
OBattler
2022-10-27 03:24:02 +02:00
parent acd4eb5d68
commit 47604db6b1
2 changed files with 10 additions and 7 deletions

View File

@@ -267,6 +267,7 @@ void codegen_block_init(uint32_t phys_addr)
void codegen_block_start_recompile(codeblock_t *block)
{
page_t *page = &pages[block->phys >> 12];
uintptr_t rip_rel;
if (!page->block[(block->phys >> 10) & 3])
mem_flush_write_page(block->phys, cs+cpu_state.pc);
@@ -298,15 +299,17 @@ void codegen_block_start_recompile(codeblock_t *block)
while (block_pos < BLOCK_EXIT_OFFSET)
addbyte(0x90); /*NOP*/
#else
addbyte(0xc6); /* mov byte ptr[&(cpu_state.abrt)],ABRT_GPF */
addbyte(0x05);
addlong((uint32_t) (uintptr_t) &(cpu_state.abrt));
addbyte(0xC6); /*MOVB ABRT_GPF,(abrt)*/
addbyte(0x45);
addbyte((uint8_t)cpu_state_offset(abrt));
addbyte(ABRT_GPF);
addbyte(0x31); /* xor eax,eax */
addbyte(0xc0);
addbyte(0x67); /* mov [&(abrt_error)],eax */
addbyte(0xa3);
addlong((uint32_t) (uintptr_t) &(abrt_error));
addbyte(0x89); /*MOVB eax,(abrt_error)*/
addbyte(0x05);
rip_rel = (uintptr_t) &(codeblock[block_current].data[block_pos]);
rip_rel = ((uintptr_t) &(abrt_error)) - rip_rel;
addlong((uint32_t) rip_rel);
#endif
block_pos = BLOCK_EXIT_OFFSET; /*Exit code*/
addbyte(0x48); /*ADDL $40,%rsp*/

View File

@@ -11,7 +11,7 @@
#ifdef OLD_GPF
#define BLOCK_GPF_OFFSET (BLOCK_EXIT_OFFSET - 20)
#else
#define BLOCK_GPF_OFFSET (BLOCK_EXIT_OFFSET - 15)
#define BLOCK_GPF_OFFSET (BLOCK_EXIT_OFFSET - 12)
#endif
#define BLOCK_MAX 1620