From 2f1514d3b280679fde202964bfa01131c64299fe Mon Sep 17 00:00:00 2001 From: SarahW Date: Mon, 27 Nov 2017 21:09:42 +0000 Subject: [PATCH] Dynarec now jumps straight to GPF handler if it hits a NULL selector instead of relying on interpreter code to detect the GPF. Fixes hang in Windows 98 SE upgrade setup. --- src/codegen_ops_x86-64.h | 8 ++++---- src/codegen_ops_x86.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/codegen_ops_x86-64.h b/src/codegen_ops_x86-64.h index 423a33d..9501a5f 100644 --- a/src/codegen_ops_x86-64.h +++ b/src/codegen_ops_x86-64.h @@ -889,9 +889,9 @@ static inline void CHECK_SEG_READ(x86seg *seg) addbyte(0xe8 | REG_ESI); addbyte(0xff); } - addbyte(0x0f); /*JE end*/ + addbyte(0x0f); /*JE BLOCK_GPF_OFFSET*/ addbyte(0x84); - addlong(BLOCK_EXIT_OFFSET - (block_pos + 4)); + addlong(BLOCK_GPF_OFFSET - (block_pos + 4)); seg->checked = 1; } @@ -925,9 +925,9 @@ static inline void CHECK_SEG_WRITE(x86seg *seg) addbyte(0xe8 | REG_ESI); addbyte(0xff); } - addbyte(0x0f); /*JE end*/ + addbyte(0x0f); /*JE BLOCK_GPF_OFFSET*/ addbyte(0x84); - addlong(BLOCK_EXIT_OFFSET - (block_pos + 4)); + addlong(BLOCK_GPF_OFFSET - (block_pos + 4)); seg->checked = 1; } diff --git a/src/codegen_ops_x86.h b/src/codegen_ops_x86.h index e6ba9b5..4066482 100644 --- a/src/codegen_ops_x86.h +++ b/src/codegen_ops_x86.h @@ -626,8 +626,8 @@ static inline void CHECK_SEG_READ(x86seg *seg) addlong((uint32_t)&seg->base); addbyte(-1); addbyte(0x0f); - addbyte(0x84); /*JE end*/ - addlong(BLOCK_EXIT_OFFSET - (block_pos + 4)); + addbyte(0x84); /*JE BLOCK_GPF_OFFSET*/ + addlong(BLOCK_GPF_OFFSET - (block_pos + 4)); seg->checked = 1; } @@ -649,8 +649,8 @@ static inline void CHECK_SEG_WRITE(x86seg *seg) addlong((uint32_t)&seg->base); addbyte(-1); addbyte(0x0f); - addbyte(0x84); /*JE end*/ - addlong(BLOCK_EXIT_OFFSET - (block_pos + 4)); + addbyte(0x84); /*JE BLOCK_GPF_OFFSET*/ + addlong(BLOCK_GPF_OFFSET - (block_pos + 4)); seg->checked = 1; }