--- np2/i386c/ia32/instructions/ctrl_trans.c 2003/12/08 00:55:32 1.1 +++ np2/i386c/ia32/instructions/ctrl_trans.c 2003/12/25 19:58:24 1.3 @@ -1,4 +1,4 @@ -/* $Id: ctrl_trans.c,v 1.1 2003/12/08 00:55:32 yui Exp $ */ +/* $Id: ctrl_trans.c,v 1.3 2003/12/25 19:58:24 yui Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -34,6 +34,9 @@ #include "ctrl_trans.h" +#include "pccore.h" +#include "iocore.h" + /* * JMP @@ -857,15 +860,13 @@ CALL_Ew(DWORD op) if (op >= 0xc0) { CPU_WORKCLOCK(7); new_ip = *(reg16_b20[op]); - PUSH0_16(CPU_IP); - SET_EIP(new_ip); } else { CPU_WORKCLOCK(11); madr = calc_ea_dst(op); new_ip = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - PUSH0_16(CPU_IP); - SET_EIP(new_ip); } + PUSH0_16(CPU_IP); + SET_EIP(new_ip); } void @@ -877,15 +878,13 @@ CALL_Ed(DWORD op) if (op >= 0xc0) { CPU_WORKCLOCK(7); new_ip = *(reg32_b20[op]); - PUSH0_32(CPU_EIP); - SET_EIP(new_ip); } else { CPU_WORKCLOCK(11); madr = calc_ea_dst(op); new_ip = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - PUSH0_32(CPU_EIP); - SET_EIP(new_ip); } + PUSH0_32(CPU_EIP); + SET_EIP(new_ip); } void @@ -1130,6 +1129,7 @@ IRET(void) WORD flag; WORD new_cs; + extirq_pop(); CPU_WORKCLOCK(31); if (!CPU_STAT_PM) { /* Real mode */ @@ -1157,6 +1157,7 @@ IRETD(void) DWORD flag; WORD new_cs; + extirq_pop(); CPU_WORKCLOCK(31); if (!CPU_STAT_PM) { /* Real mode */