1. Update changes

2. Fix lazy_flags duplicate instruction patterns
This commit is contained in:
Stanislav Shwartsman 2004-08-16 20:18:01 +00:00
parent f06b1bf577
commit 231cd533c6
8 changed files with 114 additions and 144 deletions

@ -36,7 +36,6 @@ Changes to next release:
! Unmasked underflow/overflow should correct the result
by magic number for all operations, including float32
and float64.
! improve performance of transcendential instructions.
- Disassembler
- fixed MOV opcode 0x88, had exchanged the operands (h.johansson)
@ -111,6 +110,35 @@ Changes to next release:
[869822] a real SVGA implementation by m_suzu
- these S.F. bugs were closed
#522111 Host os SIGILL, booting grub from hd
#1005052 DMA Controller Model Problem
#552939 Bochs window doesn't resize when win311
#989478 I-Cache and undefined Instructions
#661008 make install fails
#845691 Workaround: Ne2k and Windows 2000 not working
#923662 BIOS diskette motor countdown byte broken
#848141 VGA problems running Scitech Display Driver on Win95
#799370 Problem booting ReactOS 0.1.3
#670143 No rule to make config.h
#653444 with vbe/lgpl bios, scrn updates broken
#655696 quickstart broken?
#659350 FDC
#620853 Ne2000 ethernet card *NOT* supported
#607611 Numlock
#543476 Sound card does not work in Windows 95
#529554 unsupported VBE features DISPI update
#487316 Access violation on Win32
#576253 RTC too fast
#489748 io read from address 000003c0, len=2
#656861 Gentoo Linux panics in VGA code
#787184 Video BIOS's don't checksum correctly
#988529 textconfig [Save options to] function output obsolete option
#987293 Cannot accesss header/toolbar
#988246 floppy read error
#933199 speedup Bochs compilation 4x -> suggestion
#979106 Incorrect disassembly table entry
#658374 FPU incorrect emulation
#706933 Problem with the F12-Key
#477043 math_abort panic in RH 7.1
#634371 Floating point problems
#681138 // is not valid in C

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: arith16.cc,v 1.34 2004-08-14 20:44:48 sshwarts Exp $
// $Id: arith16.cc,v 1.35 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -395,7 +395,7 @@ BX_CPU_C::CMP_EwGw(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit16u diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMP16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
}
@ -420,7 +420,7 @@ BX_CPU_C::CMP_GwEw(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit16u diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMP16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
}
@ -439,7 +439,7 @@ BX_CPU_C::CMP_AXIw(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit16u diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMP16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
}
@ -626,7 +626,7 @@ BX_CPU_C::CMP_EwIw(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit16u diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMP16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
}
@ -718,7 +718,7 @@ BX_CPU_C::CMPXCHG_EwGw(bxInstruction_c *i)
diff_16 = AX - op1_16;
SET_FLAGS_OSZAPC_16(AX, op1_16, diff_16, BX_INSTR_CMP16);
SET_FLAGS_OSZAPC_16(AX, op1_16, diff_16, BX_INSTR_COMPARE16);
if (diff_16 == 0) { // if accumulator == dest
// ZF = 1

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: arith32.cc,v 1.37 2004-08-14 20:44:48 sshwarts Exp $
// $Id: arith32.cc,v 1.38 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -393,7 +393,7 @@ BX_CPU_C::CMP_EdGd(bxInstruction_c *i)
#else
Bit32u diff_32;
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMP32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
#endif
}
@ -419,7 +419,7 @@ BX_CPU_C::CMP_GdEd(bxInstruction_c *i)
#else
Bit32u diff_32;
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMP32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
#endif
}
@ -439,7 +439,7 @@ BX_CPU_C::CMP_EAXId(bxInstruction_c *i)
#else
Bit32u diff_32;
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMP32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
#endif
}
@ -640,7 +640,7 @@ BX_CPU_C::CMP_EdId(bxInstruction_c *i)
#else
Bit32u diff_32;
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMP32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
#endif
}
@ -719,7 +719,7 @@ BX_CPU_C::CMPXCHG_EdGd(bxInstruction_c *i)
diff_32 = EAX - op1_32;
SET_FLAGS_OSZAPC_32(EAX, op1_32, diff_32, BX_INSTR_CMP32);
SET_FLAGS_OSZAPC_32(EAX, op1_32, diff_32, BX_INSTR_COMPARE32);
if (diff_32 == 0) { // if accumulator == dest
// ZF = 1

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: arith64.cc,v 1.20 2004-08-14 20:44:48 sshwarts Exp $
// $Id: arith64.cc,v 1.21 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -391,7 +391,7 @@ BX_CPU_C::CMP_EqGq(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_CMP64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
}
void
@ -414,7 +414,7 @@ BX_CPU_C::CMP_GqEq(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_CMP64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
}
void
@ -427,7 +427,7 @@ BX_CPU_C::CMP_RAXId(bxInstruction_c *i)
op2_64 = (Bit32s) i->Id();
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_CMP64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
}
void
@ -603,7 +603,7 @@ BX_CPU_C::CMP_EqId(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_CMP64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
}
void
@ -704,7 +704,7 @@ BX_CPU_C::CMPXCHG_EqGq(bxInstruction_c *i)
diff_64 = RAX - op1_64;
SET_FLAGS_OSZAPC_64(RAX, op1_64, diff_64, BX_INSTR_CMP64);
SET_FLAGS_OSZAPC_64(RAX, op1_64, diff_64, BX_INSTR_COMPARE64);
if (diff_64 == 0) { // if accumulator == dest
// ZF = 1

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: arith8.cc,v 1.30 2004-08-14 20:44:48 sshwarts Exp $
// $Id: arith8.cc,v 1.31 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -314,7 +314,7 @@ BX_CPU_C::CMP_EbGb(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit8u diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMP8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
}
@ -339,7 +339,7 @@ BX_CPU_C::CMP_GbEb(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit8u diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMP8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
}
@ -358,7 +358,7 @@ BX_CPU_C::CMP_ALIb(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit8u diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMP8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
}
@ -486,7 +486,7 @@ BX_CPU_C::CMP_EbIb(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit8u diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMP8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
}
@ -562,7 +562,7 @@ BX_CPU_C::CMPXCHG_EbGb(bxInstruction_c *i)
diff_8 = AL - op1_8;
SET_FLAGS_OSZAPC_8(AL, op1_8, diff_8, BX_INSTR_CMP8);
SET_FLAGS_OSZAPC_8(AL, op1_8, diff_8, BX_INSTR_COMPARE8);
if (diff_8 == 0) { // if accumulator == dest
// ZF = 1

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: lazy_flags.cc,v 1.18 2004-08-15 20:31:27 sshwarts Exp $
// $Id: lazy_flags.cc,v 1.19 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -92,31 +92,23 @@ bx_bool BX_CPU_C::get_CFLazy(void)
break;
#endif
case BX_INSTR_SUB8:
case BX_INSTR_CMP8:
case BX_INSTR_CMPS8:
case BX_INSTR_SCAS8:
case BX_INSTR_COMPARE8:
cf = (BX_CPU_THIS_PTR oszapc.op1_8 <
BX_CPU_THIS_PTR oszapc.op2_8);
break;
case BX_INSTR_SUB16:
case BX_INSTR_CMP16:
case BX_INSTR_CMPS16:
case BX_INSTR_SCAS16:
case BX_INSTR_COMPARE16:
cf = (BX_CPU_THIS_PTR oszapc.op1_16 <
BX_CPU_THIS_PTR oszapc.op2_16);
break;
case BX_INSTR_SUB32:
case BX_INSTR_CMP32:
case BX_INSTR_CMPS32:
case BX_INSTR_SCAS32:
case BX_INSTR_COMPARE32:
cf = (BX_CPU_THIS_PTR oszapc.op1_32 <
BX_CPU_THIS_PTR oszapc.op2_32);
break;
#if BX_SUPPORT_X86_64
case BX_INSTR_SUB64:
case BX_INSTR_CMP64:
case BX_INSTR_CMPS64:
case BX_INSTR_SCAS64:
case BX_INSTR_COMPARE64:
cf = (BX_CPU_THIS_PTR oszapc.op1_64 <
BX_CPU_THIS_PTR oszapc.op2_64);
break;
@ -275,50 +267,42 @@ bx_bool BX_CPU_C::get_AFLazy(void)
switch ( (BX_CPU_THIS_PTR lf_flags_status>>8) & 0x00000f ) {
case BX_LF_INDEX_OSZAPC:
switch (BX_CPU_THIS_PTR oszapc.instr) {
case BX_INSTR_COMPARE8:
case BX_INSTR_ADD8:
case BX_INSTR_ADC8:
case BX_INSTR_SUB8:
case BX_INSTR_SBB8:
case BX_INSTR_CMP8:
case BX_INSTR_CMPS8:
case BX_INSTR_SCAS8:
af =
((BX_CPU_THIS_PTR oszapc.op1_8 ^
BX_CPU_THIS_PTR oszapc.op2_8) ^
BX_CPU_THIS_PTR oszapc.result_8) & 0x10;
break;
case BX_INSTR_COMPARE16:
case BX_INSTR_ADD16:
case BX_INSTR_ADC16:
case BX_INSTR_SUB16:
case BX_INSTR_SBB16:
case BX_INSTR_CMP16:
case BX_INSTR_CMPS16:
case BX_INSTR_SCAS16:
af =
((BX_CPU_THIS_PTR oszapc.op1_16 ^
BX_CPU_THIS_PTR oszapc.op2_16) ^
BX_CPU_THIS_PTR oszapc.result_16) & 0x10;
break;
case BX_INSTR_COMPARE32:
case BX_INSTR_ADD32:
case BX_INSTR_ADC32:
case BX_INSTR_SUB32:
case BX_INSTR_SBB32:
case BX_INSTR_CMP32:
case BX_INSTR_CMPS32:
case BX_INSTR_SCAS32:
af =
((BX_CPU_THIS_PTR oszapc.op1_32 ^
BX_CPU_THIS_PTR oszapc.op2_32) ^
BX_CPU_THIS_PTR oszapc.result_32) & 0x10;
break;
#if BX_SUPPORT_X86_64
case BX_INSTR_COMPARE64:
case BX_INSTR_ADD64:
case BX_INSTR_ADC64:
case BX_INSTR_SUB64:
case BX_INSTR_SBB64:
case BX_INSTR_CMP64:
case BX_INSTR_CMPS64:
case BX_INSTR_SCAS64:
af =
((BX_CPU_THIS_PTR oszapc.op1_64 ^
BX_CPU_THIS_PTR oszapc.op2_64) ^
@ -430,10 +414,8 @@ bx_bool BX_CPU_C::get_ZFLazy(void)
case BX_INSTR_ADC8:
case BX_INSTR_SUB8:
case BX_INSTR_SBB8:
case BX_INSTR_CMP8:
case BX_INSTR_COMPARE8:
case BX_INSTR_NEG8:
case BX_INSTR_CMPS8:
case BX_INSTR_SCAS8:
case BX_INSTR_SAR8:
case BX_INSTR_SHR8:
case BX_INSTR_SHL8:
@ -444,10 +426,8 @@ bx_bool BX_CPU_C::get_ZFLazy(void)
case BX_INSTR_ADC16:
case BX_INSTR_SUB16:
case BX_INSTR_SBB16:
case BX_INSTR_CMP16:
case BX_INSTR_COMPARE16:
case BX_INSTR_NEG16:
case BX_INSTR_CMPS16:
case BX_INSTR_SCAS16:
case BX_INSTR_SAR16:
case BX_INSTR_SHR16:
case BX_INSTR_SHL16:
@ -458,10 +438,8 @@ bx_bool BX_CPU_C::get_ZFLazy(void)
case BX_INSTR_ADC32:
case BX_INSTR_SUB32:
case BX_INSTR_SBB32:
case BX_INSTR_CMP32:
case BX_INSTR_COMPARE32:
case BX_INSTR_NEG32:
case BX_INSTR_CMPS32:
case BX_INSTR_SCAS32:
case BX_INSTR_SAR32:
case BX_INSTR_SHR32:
case BX_INSTR_SHL32:
@ -473,10 +451,8 @@ bx_bool BX_CPU_C::get_ZFLazy(void)
case BX_INSTR_ADC64:
case BX_INSTR_SUB64:
case BX_INSTR_SBB64:
case BX_INSTR_CMP64:
case BX_INSTR_COMPARE64:
case BX_INSTR_NEG64:
case BX_INSTR_CMPS64:
case BX_INSTR_SCAS64:
case BX_INSTR_SAR64:
case BX_INSTR_SHR64:
case BX_INSTR_SHL64:
@ -546,10 +522,8 @@ bx_bool BX_CPU_C::get_SFLazy(void)
case BX_INSTR_ADC8:
case BX_INSTR_SUB8:
case BX_INSTR_SBB8:
case BX_INSTR_CMP8:
case BX_INSTR_COMPARE8:
case BX_INSTR_NEG8:
case BX_INSTR_CMPS8:
case BX_INSTR_SCAS8:
case BX_INSTR_SAR8:
case BX_INSTR_SHR8:
case BX_INSTR_SHL8:
@ -560,10 +534,8 @@ bx_bool BX_CPU_C::get_SFLazy(void)
case BX_INSTR_ADC16:
case BX_INSTR_SUB16:
case BX_INSTR_SBB16:
case BX_INSTR_CMP16:
case BX_INSTR_COMPARE16:
case BX_INSTR_NEG16:
case BX_INSTR_CMPS16:
case BX_INSTR_SCAS16:
case BX_INSTR_SAR16:
case BX_INSTR_SHR16:
case BX_INSTR_SHL16:
@ -575,10 +547,8 @@ bx_bool BX_CPU_C::get_SFLazy(void)
case BX_INSTR_ADC32:
case BX_INSTR_SUB32:
case BX_INSTR_SBB32:
case BX_INSTR_CMP32:
case BX_INSTR_COMPARE32:
case BX_INSTR_NEG32:
case BX_INSTR_CMPS32:
case BX_INSTR_SCAS32:
case BX_INSTR_SAR32:
case BX_INSTR_SHR32:
case BX_INSTR_SHL32:
@ -591,10 +561,8 @@ bx_bool BX_CPU_C::get_SFLazy(void)
case BX_INSTR_ADC64:
case BX_INSTR_SUB64:
case BX_INSTR_SBB64:
case BX_INSTR_CMP64:
case BX_INSTR_COMPARE64:
case BX_INSTR_NEG64:
case BX_INSTR_CMPS64:
case BX_INSTR_SCAS64:
case BX_INSTR_SAR64:
case BX_INSTR_SHR64:
case BX_INSTR_SHL64:
@ -691,9 +659,7 @@ bx_bool BX_CPU_C::get_OFLazy(void)
#endif
case BX_INSTR_SUB8:
case BX_INSTR_SBB8:
case BX_INSTR_CMP8:
case BX_INSTR_CMPS8:
case BX_INSTR_SCAS8:
case BX_INSTR_COMPARE8:
op1_b7 = BX_CPU_THIS_PTR oszapc.op1_8 & 0x80;
op2_b7 = BX_CPU_THIS_PTR oszapc.op2_8 & 0x80;
result_b7 = BX_CPU_THIS_PTR oszapc.result_8 & 0x80;
@ -701,9 +667,7 @@ bx_bool BX_CPU_C::get_OFLazy(void)
break;
case BX_INSTR_SUB16:
case BX_INSTR_SBB16:
case BX_INSTR_CMP16:
case BX_INSTR_CMPS16:
case BX_INSTR_SCAS16:
case BX_INSTR_COMPARE16:
op1_b15 = BX_CPU_THIS_PTR oszapc.op1_16 & 0x8000;
op2_b15 = BX_CPU_THIS_PTR oszapc.op2_16 & 0x8000;
result_b15 = BX_CPU_THIS_PTR oszapc.result_16 & 0x8000;
@ -711,9 +675,7 @@ bx_bool BX_CPU_C::get_OFLazy(void)
break;
case BX_INSTR_SUB32:
case BX_INSTR_SBB32:
case BX_INSTR_CMP32:
case BX_INSTR_CMPS32:
case BX_INSTR_SCAS32:
case BX_INSTR_COMPARE32:
op1_b31 = BX_CPU_THIS_PTR oszapc.op1_32 & 0x80000000;
op2_b31 = BX_CPU_THIS_PTR oszapc.op2_32 & 0x80000000;
result_b31 = BX_CPU_THIS_PTR oszapc.result_32 & 0x80000000;
@ -722,9 +684,7 @@ bx_bool BX_CPU_C::get_OFLazy(void)
#if BX_SUPPORT_X86_64
case BX_INSTR_SUB64:
case BX_INSTR_SBB64:
case BX_INSTR_CMP64:
case BX_INSTR_CMPS64:
case BX_INSTR_SCAS64:
case BX_INSTR_COMPARE64:
op1_b63 = BX_CPU_THIS_PTR oszapc.op1_64 & BX_CONST64(0x8000000000000000);
op2_b63 = BX_CPU_THIS_PTR oszapc.op2_64 & BX_CONST64(0x8000000000000000);
result_b63 = BX_CPU_THIS_PTR oszapc.result_64 & BX_CONST64(0x8000000000000000);
@ -882,10 +842,8 @@ bx_bool BX_CPU_C::get_PFLazy(void)
case BX_INSTR_ADC8:
case BX_INSTR_SUB8:
case BX_INSTR_SBB8:
case BX_INSTR_CMP8:
case BX_INSTR_COMPARE8:
case BX_INSTR_NEG8:
case BX_INSTR_CMPS8:
case BX_INSTR_SCAS8:
case BX_INSTR_SAR8:
case BX_INSTR_SHR8:
case BX_INSTR_SHL8:
@ -896,10 +854,8 @@ bx_bool BX_CPU_C::get_PFLazy(void)
case BX_INSTR_ADC16:
case BX_INSTR_SUB16:
case BX_INSTR_SBB16:
case BX_INSTR_CMP16:
case BX_INSTR_COMPARE16:
case BX_INSTR_NEG16:
case BX_INSTR_CMPS16:
case BX_INSTR_SCAS16:
case BX_INSTR_SAR16:
case BX_INSTR_SHR16:
case BX_INSTR_SHL16:
@ -911,10 +867,8 @@ bx_bool BX_CPU_C::get_PFLazy(void)
case BX_INSTR_ADC32:
case BX_INSTR_SUB32:
case BX_INSTR_SBB32:
case BX_INSTR_CMP32:
case BX_INSTR_COMPARE32:
case BX_INSTR_NEG32:
case BX_INSTR_CMPS32:
case BX_INSTR_SCAS32:
case BX_INSTR_SAR32:
case BX_INSTR_SHR32:
case BX_INSTR_SHL32:
@ -927,10 +881,8 @@ bx_bool BX_CPU_C::get_PFLazy(void)
case BX_INSTR_ADC64:
case BX_INSTR_SUB64:
case BX_INSTR_SBB64:
case BX_INSTR_CMP64:
case BX_INSTR_COMPARE64:
case BX_INSTR_NEG64:
case BX_INSTR_CMPS64:
case BX_INSTR_SCAS64:
case BX_INSTR_SAR64:
case BX_INSTR_SHR64:
case BX_INSTR_SHL64:

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: lazy_flags.h,v 1.12 2004-08-15 20:12:05 sshwarts Exp $
// $Id: lazy_flags.h,v 1.13 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -47,10 +47,10 @@
#define BX_INSTR_SBB32 15
#define BX_INSTR_SBB64 16
#define BX_INSTR_CMP8 17
#define BX_INSTR_CMP16 18
#define BX_INSTR_CMP32 19
#define BX_INSTR_CMP64 20
#define BX_INSTR_COMPARE8 17
#define BX_INSTR_COMPARE16 18
#define BX_INSTR_COMPARE32 19
#define BX_INSTR_COMPARE64 20
#define BX_INSTR_INC8 21
#define BX_INSTR_INC16 22
@ -72,15 +72,15 @@
#define BX_INSTR_LOGIC32 35
#define BX_INSTR_LOGIC64 36
#define BX_INSTR_CMPS8 37
#define BX_INSTR_CMPS16 38
#define BX_INSTR_CMPS32 39
#define BX_INSTR_CMPS64 40
// BX_INSTR_BITSCAN8 not exists, leave number for alignment
#define BX_INSTR_BITSCAN16 38
#define BX_INSTR_BITSCAN32 39
#define BX_INSTR_BITSCAN64 40
#define BX_INSTR_SCAS8 41
#define BX_INSTR_SCAS16 42
#define BX_INSTR_SCAS32 43
#define BX_INSTR_SCAS64 44
#define BX_INSTR_SHL8 41
#define BX_INSTR_SHL16 42
#define BX_INSTR_SHL32 43
#define BX_INSTR_SHL64 44
#define BX_INSTR_SHR8 45
#define BX_INSTR_SHR16 46
@ -92,16 +92,6 @@
#define BX_INSTR_SAR32 51
#define BX_INSTR_SAR64 52
#define BX_INSTR_SHL8 53
#define BX_INSTR_SHL16 54
#define BX_INSTR_SHL32 55
#define BX_INSTR_SHL64 56
// BX_INSTR_BITSCAN8 not exists, leave number for alignment
#define BX_INSTR_BITSCAN16 58
#define BX_INSTR_BITSCAN32 59
#define BX_INSTR_BITSCAN64 60
#define BX_LF_INDEX_OSZAPC 1
#define BX_LF_INDEX_OSZAP 2

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: string.cc,v 1.23 2004-08-14 20:44:48 sshwarts Exp $
// $Id: string.cc,v 1.24 2004-08-16 20:18:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -929,7 +929,7 @@ BX_CPU_C::CMPSB_XbYb(bxInstruction_c *i)
diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMPS8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement RSI */
@ -959,7 +959,7 @@ BX_CPU_C::CMPSB_XbYb(bxInstruction_c *i)
diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMPS8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -997,7 +997,7 @@ BX_CPU_C::CMPSB_XbYb(bxInstruction_c *i)
#else
diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_CMPS8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {
@ -1047,7 +1047,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_CMPS64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1070,7 +1070,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMPS32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1092,7 +1092,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMPS16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1128,7 +1128,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_CMPS64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1151,7 +1151,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMPS32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1177,7 +1177,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
#else
Bit16u diff_16;
diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMPS16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {
@ -1214,7 +1214,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_CMPS32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1244,7 +1244,7 @@ BX_CPU_C::CMPSW_XvYv(bxInstruction_c *i)
Bit16u diff_16;
diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_CMPS16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {
@ -1282,7 +1282,7 @@ BX_CPU_C::SCASB_ALXb(bxInstruction_c *i)
diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_SCAS8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1311,7 +1311,7 @@ BX_CPU_C::SCASB_ALXb(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit8u diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_SCAS8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {
@ -1342,7 +1342,7 @@ BX_CPU_C::SCASB_ALXb(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit8u diff_8 = op1_8 - op2_8;
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_SCAS8);
SET_FLAGS_OSZAPC_8(op1_8, op2_8, diff_8, BX_INSTR_COMPARE8);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {
@ -1374,7 +1374,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_SCAS64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement EDI */
@ -1394,7 +1394,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_SCAS32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement EDI */
@ -1413,7 +1413,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_SCAS16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1441,7 +1441,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
diff_64 = op1_64 - op2_64;
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_SCAS64);
SET_FLAGS_OSZAPC_64(op1_64, op2_64, diff_64, BX_INSTR_COMPARE64);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1462,7 +1462,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_SCAS32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1485,7 +1485,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit16u diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_SCAS16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {
@ -1516,7 +1516,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
diff_32 = op1_32 - op2_32;
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_SCAS32);
SET_FLAGS_OSZAPC_32(op1_32, op2_32, diff_32, BX_INSTR_COMPARE32);
if (BX_CPU_THIS_PTR get_DF ()) {
/* decrement ESI */
@ -1541,7 +1541,7 @@ BX_CPU_C::SCASW_eAXXv(bxInstruction_c *i)
setEFlagsOSZAPC(flags32);
#else
Bit16u diff_16 = op1_16 - op2_16;
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_SCAS16);
SET_FLAGS_OSZAPC_16(op1_16, op2_16, diff_16, BX_INSTR_COMPARE16);
#endif
if (BX_CPU_THIS_PTR get_DF ()) {