--- np2/i386c/ia32/cpu_mem.c 2011/01/15 17:17:23 1.23 +++ np2/i386c/ia32/cpu_mem.c 2012/01/08 08:05:47 1.26 @@ -218,7 +218,7 @@ exc: EXCEPTION(e, 0); } -void +void MEMCALL cpu_stack_push_check(UINT16 s, descriptor_t *sdp, UINT32 sp, UINT len) { UINT32 limit; @@ -238,9 +238,11 @@ cpu_stack_push_check(UINT16 s, descripto len--; start = sp - len; limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff; + VERBOSE(("cpu_stack_push_check: start=0x%08x, limit=0x%08x", start, limit)); if (SEG_IS_EXPANDDOWN_DATA(sdp)) { /* expand-down stack */ + VERBOSE(("cpu_stack_push_check: expand-down stack")); if (!SEG_IS_32BIT(sdp)) { if (sp > limit) { /* [*] */ goto exc; @@ -285,6 +287,7 @@ cpu_stack_push_check(UINT16 s, descripto } } else { /* expand-up stack */ + VERBOSE(("cpu_stack_push_check: expand-up stack")); if (sdp->u.seg.limit == limit) { /* * 32bit 16bit @@ -329,14 +332,14 @@ cpu_stack_push_check(UINT16 s, descripto exc: VERBOSE(("cpu_stack_push_check: check failure.")); - VERBOSE(("s = 0x%04x, sp = 0x%08x, len = %d", s, sp, len)); + VERBOSE(("cpu_stack_push_check: selector = %04x, sp = 0x%08x, len = %d", s, sp, len + 1)); #if defined(DEBUG) segdesc_dump(sdp); #endif EXCEPTION(SS_EXCEPTION, s & 0xfffc); } -void +void MEMCALL cpu_stack_pop_check(UINT16 s, descriptor_t *sdp, UINT32 sp, UINT len) { @@ -397,21 +400,17 @@ cpu_codefetch(UINT32 offset) { descriptor_t *sdp; UINT32 addr; -#if defined(IA32_SUPPORT_TLB) TLB_ENTRY_T *ep; -#endif sdp = &CPU_CS_DESC; if (offset <= sdp->u.seg.limit) { addr = sdp->u.seg.segbase + offset; if (!CPU_STAT_PAGING) return cpu_memoryread(addr); -#if defined(IA32_SUPPORT_TLB) ep = tlb_lookup(addr, ucrw); if (ep != NULL && ep->memp != NULL) { return ep->memp[addr & 0xfff]; } -#endif return cpu_linear_memory_read_b(addr, ucrw); } EXCEPTION(GP_EXCEPTION, 0); @@ -423,17 +422,14 @@ cpu_codefetch_w(UINT32 offset) { descriptor_t *sdp; UINT32 addr; -#if defined(IA32_SUPPORT_TLB) TLB_ENTRY_T *ep; UINT16 value; -#endif sdp = &CPU_CS_DESC; if (offset <= sdp->u.seg.limit - 1) { addr = sdp->u.seg.segbase + offset; if (!CPU_STAT_PAGING) return cpu_memoryread_w(addr); -#if defined(IA32_SUPPORT_TLB) ep = tlb_lookup(addr, ucrw); if (ep != NULL && ep->memp != NULL) { if ((addr + 1) & 0x00000fff) { @@ -446,7 +442,6 @@ cpu_codefetch_w(UINT32 offset) return value; } } -#endif return cpu_linear_memory_read_w(addr, ucrw); } EXCEPTION(GP_EXCEPTION, 0); @@ -458,18 +453,15 @@ cpu_codefetch_d(UINT32 offset) { descriptor_t *sdp; UINT32 addr; -#if defined(IA32_SUPPORT_TLB) TLB_ENTRY_T *ep[2]; UINT32 value; UINT remain; -#endif sdp = &CPU_CS_DESC; if (offset <= sdp->u.seg.limit - 3) { addr = sdp->u.seg.segbase + offset; if (!CPU_STAT_PAGING) return cpu_memoryread_d(addr); -#if defined(IA32_SUPPORT_TLB) ep[0] = tlb_lookup(addr, ucrw); if (ep[0] != NULL && ep[0]->memp != NULL) { remain = 0x1000 - (addr & 0xfff); @@ -503,7 +495,6 @@ cpu_codefetch_d(UINT32 offset) return value; } } -#endif return cpu_linear_memory_read_d(addr, ucrw); } EXCEPTION(GP_EXCEPTION, 0);