--- np2/i386c/ia32/ia32.c 2004/03/09 14:14:05 1.12 +++ np2/i386c/ia32/ia32.c 2004/03/12 14:33:06 1.14 @@ -1,4 +1,4 @@ -/* $Id: ia32.c,v 1.12 2004/03/09 14:14:05 monaka Exp $ */ +/* $Id: ia32.c,v 1.14 2004/03/12 14:33:06 monaka Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -153,6 +153,7 @@ change_vm(BOOL onoff) CPU_STAT_VM86 = onoff; if (onoff) { for (i = 0; i < CPU_SEGREG_NUM; i++) { + CPU_STAT_SREGLIMIT(i) = 0xffff; CPU_SET_SEGREG(i, CPU_REGS_SREG(i)); } CPU_INST_OP32 = CPU_INST_AS32 = @@ -166,6 +167,7 @@ change_vm(BOOL onoff) } } +#if !defined(IA32_DONT_USE_SET_EFLAGS_FUNCTION) /* * flags */ @@ -176,15 +178,17 @@ modify_eflags(UINT32 new_flags, UINT32 m new_flags &= ALL_EFLAG; mask &= ALL_EFLAG; - CPU_EFLAG = (REAL_EFLAGREG & ~mask) | (new_flags & mask) | 0x2; + CPU_EFLAG = (REAL_EFLAGREG & ~mask) | (new_flags & mask); CPU_OV = CPU_FLAG & O_FLAG; CPU_TRAP = (CPU_FLAG & (I_FLAG|T_FLAG)) == (I_FLAG|T_FLAG); - if ((orig ^ CPU_EFLAG) & VM_FLAG) { - if (CPU_EFLAG & VM_FLAG) { - change_vm(1); - } else { - change_vm(0); + if (CPU_STAT_PM) { + if ((orig ^ CPU_EFLAG) & VM_FLAG) { + if (CPU_EFLAG & VM_FLAG) { + change_vm(1); + } else { + change_vm(0); + } } } } @@ -194,7 +198,7 @@ set_flags(UINT16 new_flags, UINT16 mask) { mask &= I_FLAG|IOPL_FLAG; - mask |= (SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG); + mask |= SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG; modify_eflags(new_flags, mask); } @@ -207,3 +211,4 @@ set_eflags(UINT32 new_flags, UINT32 mask mask |= AC_FLAG|ID_FLAG; modify_eflags(new_flags, mask); } +#endif /* !IA32_DONT_USE_SET_EFLAGS_FUNCTION */