From: Stanislav S. <ssh...@us...> - 2007-12-04 19:27:21
|
Update of /cvsroot/bochs/bochs/cpu In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv10765 Modified Files: arith16.cc arith32.cc arith64.cc arith8.cc cpu.cc cpu.h lazy_flags.cc lazy_flags.h Log Message: Changes for lazy flags handling -> 1st stap in transition to new lazy flags handling by Darek Mihocka (www.emulators.com) Index: arith16.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/arith16.cc,v retrieving revision 1.58 retrieving revision 1.59 diff -u -d -r1.58 -r1.59 --- arith16.cc 1 Dec 2007 16:45:15 -0000 1.58 +++ arith16.cc 4 Dec 2007 19:27:22 -0000 1.59 @@ -35,13 +35,13 @@ void BX_CPU_C::INC_RX(bxInstruction_c *i) { Bit16u rx = ++BX_READ_16BIT_REG(i->opcodeReg()); - SET_FLAGS_OSZAP_RESULT_16(rx, BX_INSTR_INC16); + SET_FLAGS_OSZAPC_INC_16(rx); } void BX_CPU_C::DEC_RX(bxInstruction_c *i) { Bit16u rx = --BX_READ_16BIT_REG(i->opcodeReg()); - SET_FLAGS_OSZAP_RESULT_16(rx, BX_INSTR_DEC16); + SET_FLAGS_OSZAPC_DEC_16(rx); } void BX_CPU_C::ADD_EwGwM(bxInstruction_c *i) @@ -561,7 +561,7 @@ op1_16++; write_RMW_virtual_word(op1_16); - SET_FLAGS_OSZAP_RESULT_16(op1_16, BX_INSTR_INC16); + SET_FLAGS_OSZAPC_INC_16(op1_16); } void BX_CPU_C::INC_EwR(bxInstruction_c *i) @@ -570,7 +570,7 @@ op1_16++; BX_WRITE_16BIT_REG(i->rm(), op1_16); - SET_FLAGS_OSZAP_RESULT_16(op1_16, BX_INSTR_INC16); + SET_FLAGS_OSZAPC_INC_16(op1_16); } void BX_CPU_C::DEC_EwM(bxInstruction_c *i) @@ -581,7 +581,7 @@ op1_16--; write_RMW_virtual_word(op1_16); - SET_FLAGS_OSZAP_RESULT_16(op1_16, BX_INSTR_DEC16); + SET_FLAGS_OSZAPC_DEC_16(op1_16); } void BX_CPU_C::DEC_EwR(bxInstruction_c *i) @@ -590,7 +590,7 @@ op1_16--; BX_WRITE_16BIT_REG(i->rm(), op1_16); - SET_FLAGS_OSZAP_RESULT_16(op1_16, BX_INSTR_DEC16); + SET_FLAGS_OSZAPC_DEC_16(op1_16); } void BX_CPU_C::CMPXCHG_EwGwM(bxInstruction_c *i) Index: arith32.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/arith32.cc,v retrieving revision 1.65 retrieving revision 1.66 diff -u -d -r1.65 -r1.66 --- arith32.cc 3 Dec 2007 20:48:02 -0000 1.65 +++ arith32.cc 4 Dec 2007 19:27:22 -0000 1.66 @@ -42,14 +42,14 @@ void BX_CPU_C::INC_ERX(bxInstruction_c *i) { Bit32u erx = ++BX_READ_32BIT_REG(i->opcodeReg()); - SET_FLAGS_OSZAP_RESULT_32(erx, BX_INSTR_INC32); + SET_FLAGS_OSZAPC_INC_32(erx); BX_CLEAR_64BIT_HIGH(i->opcodeReg()); } void BX_CPU_C::DEC_ERX(bxInstruction_c *i) { Bit32u erx = --BX_READ_32BIT_REG(i->opcodeReg()); - SET_FLAGS_OSZAP_RESULT_32(erx, BX_INSTR_DEC32); + SET_FLAGS_OSZAPC_DEC_32(erx); BX_CLEAR_64BIT_HIGH(i->opcodeReg()); } @@ -615,7 +615,7 @@ op1_32++; write_RMW_virtual_dword(op1_32); - SET_FLAGS_OSZAP_RESULT_32(op1_32, BX_INSTR_INC32); + SET_FLAGS_OSZAPC_INC_32(op1_32); } void BX_CPU_C::INC_EdR(bxInstruction_c *i) @@ -624,7 +624,7 @@ op1_32++; BX_WRITE_32BIT_REGZ(i->rm(), op1_32); - SET_FLAGS_OSZAP_RESULT_32(op1_32, BX_INSTR_INC32); + SET_FLAGS_OSZAPC_INC_32(op1_32); } void BX_CPU_C::DEC_EdM(bxInstruction_c *i) @@ -635,7 +635,7 @@ op1_32--; write_RMW_virtual_dword(op1_32); - SET_FLAGS_OSZAP_RESULT_32(op1_32, BX_INSTR_DEC32); + SET_FLAGS_OSZAPC_DEC_32(op1_32); } void BX_CPU_C::DEC_EdR(bxInstruction_c *i) @@ -644,7 +644,7 @@ op1_32--; BX_WRITE_32BIT_REGZ(i->rm(), op1_32); - SET_FLAGS_OSZAP_RESULT_32(op1_32, BX_INSTR_DEC32); + SET_FLAGS_OSZAPC_DEC_32(op1_32); } void BX_CPU_C::CMPXCHG_EdGdM(bxInstruction_c *i) Index: arith64.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/arith64.cc,v retrieving revision 1.41 retrieving revision 1.42 diff -u -d -r1.41 -r1.42 --- arith64.cc 3 Dec 2007 20:48:02 -0000 1.41 +++ arith64.cc 4 Dec 2007 19:27:22 -0000 1.42 @@ -597,7 +597,7 @@ op1_64++; write_RMW_virtual_qword(op1_64); - SET_FLAGS_OSZAP_RESULT_64(op1_64, BX_INSTR_INC64); + SET_FLAGS_OSZAPC_INC_64(op1_64); } void BX_CPU_C::INC_EqR(bxInstruction_c *i) @@ -606,7 +606,7 @@ op1_64++; BX_WRITE_64BIT_REG(i->rm(), op1_64); - SET_FLAGS_OSZAP_RESULT_64(op1_64, BX_INSTR_INC64); + SET_FLAGS_OSZAPC_INC_64(op1_64); } void BX_CPU_C::DEC_EqM(bxInstruction_c *i) @@ -618,7 +618,7 @@ op1_64--; write_RMW_virtual_qword(op1_64); - SET_FLAGS_OSZAP_RESULT_64(op1_64, BX_INSTR_DEC64); + SET_FLAGS_OSZAPC_DEC_64(op1_64); } void BX_CPU_C::DEC_EqR(bxInstruction_c *i) @@ -627,7 +627,7 @@ op1_64--; BX_WRITE_64BIT_REG(i->rm(), op1_64); - SET_FLAGS_OSZAP_RESULT_64(op1_64, BX_INSTR_DEC64); + SET_FLAGS_OSZAPC_DEC_64(op1_64); } void BX_CPU_C::CMPXCHG_EqGqM(bxInstruction_c *i) Index: arith8.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/arith8.cc,v retrieving revision 1.49 retrieving revision 1.50 diff -u -d -r1.49 -r1.50 --- arith8.cc 1 Dec 2007 16:45:16 -0000 1.49 +++ arith8.cc 4 Dec 2007 19:27:22 -0000 1.50 @@ -525,22 +525,22 @@ void BX_CPU_C::INC_EbM(bxInstruction_c *i) { - Bit8u op1; + Bit8u op1_8; - read_RMW_virtual_byte(i->seg(), RMAddr(i), &op1); - op1++; - write_RMW_virtual_byte(op1); + read_RMW_virtual_byte(i->seg(), RMAddr(i), &op1_8); + op1_8++; + write_RMW_virtual_byte(op1_8); - SET_FLAGS_OSZAP_RESULT_8(op1, BX_INSTR_INC8); + SET_FLAGS_OSZAPC_INC_8(op1_8); } void BX_CPU_C::INC_EbR(bxInstruction_c *i) { - Bit8u op1 = BX_READ_8BIT_REGx(i->rm(), i->extend8bitL()); - op1++; - BX_WRITE_8BIT_REGx(i->rm(), i->extend8bitL(), op1); + Bit8u op1_8 = BX_READ_8BIT_REGx(i->rm(), i->extend8bitL()); + op1_8++; + BX_WRITE_8BIT_REGx(i->rm(), i->extend8bitL(), op1_8); - SET_FLAGS_OSZAP_RESULT_8(op1, BX_INSTR_INC8); + SET_FLAGS_OSZAPC_INC_8(op1_8); } void BX_CPU_C::DEC_EbM(bxInstruction_c *i) @@ -551,7 +551,7 @@ op1_8--; write_RMW_virtual_byte(op1_8); - SET_FLAGS_OSZAP_RESULT_8(op1_8, BX_INSTR_DEC8); + SET_FLAGS_OSZAPC_DEC_8(op1_8); } void BX_CPU_C::DEC_EbR(bxInstruction_c *i) @@ -560,7 +560,7 @@ op1_8--; BX_WRITE_8BIT_REGx(i->rm(), i->extend8bitL(), op1_8); - SET_FLAGS_OSZAP_RESULT_8(op1_8, BX_INSTR_DEC8); + SET_FLAGS_OSZAPC_DEC_8(op1_8); } void BX_CPU_C::CMPXCHG_EbGbM(bxInstruction_c *i) Index: cpu.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/cpu.cc,v retrieving revision 1.185 retrieving revision 1.186 diff -u -d -r1.185 -r1.186 --- cpu.cc 3 Dec 2007 21:43:14 -0000 1.185 +++ cpu.cc 4 Dec 2007 19:27:22 -0000 1.186 @@ -60,16 +60,16 @@ #define InstrumentICACHE 0 #if InstrumentICACHE -static unsigned iCacheLookups=0; -static unsigned iCacheMisses=0; +static Bit32u iCacheLookups=0; +static Bit32u iCacheMisses=0; -#define InstrICache_StatsMask 0xffffff +#define InstrICache_StatsMask 0xfffffff #define InstrICache_Stats() {\ if ((iCacheLookups & InstrICache_StatsMask) == 0) { \ BX_INFO(("ICACHE lookups: %u, misses: %u, hit rate = %6.2f%% ", \ - iCacheLookups, \ - iCacheMisses, \ + (unsigned) iCacheLookups, \ + (unsigned) iCacheMisses, \ (iCacheLookups-iCacheMisses) * 100.0 / iCacheLookups)); \ iCacheLookups = iCacheMisses = 0; \ } \ @@ -86,7 +86,6 @@ // Make code more tidy with a few macros. #if BX_SUPPORT_X86_64==0 #define RIP EIP -#define RSP ESP #define RCX ECX #endif Index: cpu.h =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/cpu.h,v retrieving revision 1.380 retrieving revision 1.381 diff -u -d -r1.380 -r1.381 --- cpu.h 3 Dec 2007 20:49:24 -0000 1.380 +++ cpu.h 4 Dec 2007 19:27:22 -0000 1.381 @@ -1093,11 +1093,9 @@ bx_eip_reg_t eip_reg; // status and control flags register set - Bit32u lf_flags_status; bx_flags_reg_t eflags; - + Bit32u lf_flags_status; bx_lf_flags_entry oszapc; - bx_lf_flags_entry oszap; // so that we can back up when handling faults, exceptions, etc. // we need to store the value of the instruction pointer, before @@ -1282,13 +1280,6 @@ BX_SMF void setEFlags(Bit32u val) BX_CPP_AttrRegparmN(1); -#define lfMaskCF 0x0000000f -#define lfMaskPF 0x000000f0 -#define lfMaskAF 0x00000f00 -#define lfMaskZF 0x0000f000 -#define lfMaskSF 0x000f0000 -#define lfMaskOF 0x00f00000 - #define ArithmeticalFlag(flag, lfMask, eflagsBitShift) \ BX_SMF bx_bool get_##flag##Lazy(void); \ BX_SMF bx_bool getB_##flag(void) { \ @@ -1299,30 +1290,35 @@ } \ BX_SMF bx_bool get_##flag(void) { \ if ( (BX_CPU_THIS_PTR lf_flags_status & (lfMask)) == 0) \ - return BX_CPU_THIS_PTR eflags.val32 & (1<<eflagsBitShift); \ + return BX_CPU_THIS_PTR eflags.val32 & (lfMask); \ else \ return get_##flag##Lazy(); \ } \ BX_SMF void set_##flag(bx_bool val) { \ BX_CPU_THIS_PTR lf_flags_status &= ~(lfMask); \ - BX_CPU_THIS_PTR eflags.val32 &= ~(1<<eflagsBitShift); \ + BX_CPU_THIS_PTR eflags.val32 &= ~(lfMask); \ BX_CPU_THIS_PTR eflags.val32 |= ((val)<<eflagsBitShift); \ } \ BX_SMF void clear_##flag(void) { \ BX_CPU_THIS_PTR lf_flags_status &= ~(lfMask); \ - BX_CPU_THIS_PTR eflags.val32 &= ~(1<<eflagsBitShift); \ + BX_CPU_THIS_PTR eflags.val32 &= ~(lfMask); \ } \ BX_SMF void assert_##flag(void) { \ BX_CPU_THIS_PTR lf_flags_status &= ~(lfMask); \ - BX_CPU_THIS_PTR eflags.val32 |= (1<<eflagsBitShift); \ + BX_CPU_THIS_PTR eflags.val32 |= (lfMask); \ + } \ + BX_SMF void force_##flag(void) { \ + if ( (BX_CPU_THIS_PTR lf_flags_status & (lfMask)) != 0) { \ + set_##flag(!!get_##flag##Lazy()); \ + } \ } - ArithmeticalFlag(OF, lfMaskOF, 11); - ArithmeticalFlag(SF, lfMaskSF, 7); - ArithmeticalFlag(ZF, lfMaskZF, 6); - ArithmeticalFlag(AF, lfMaskAF, 4); - ArithmeticalFlag(PF, lfMaskPF, 2); - ArithmeticalFlag(CF, lfMaskCF, 0); + ArithmeticalFlag(OF, EFlagsOFMask, 11); + ArithmeticalFlag(SF, EFlagsSFMask, 7); + ArithmeticalFlag(ZF, EFlagsZFMask, 6); + ArithmeticalFlag(AF, EFlagsAFMask, 4); + ArithmeticalFlag(PF, EFlagsPFMask, 2); + ArithmeticalFlag(CF, EFlagsCFMask, 0); BX_SMF BX_CPP_INLINE void set_PF_base(Bit8u val); @@ -3532,7 +3528,7 @@ BX_CPU_THIS_PTR oszapc.op2##size = lf_op2; \ BX_CPU_THIS_PTR oszapc.result##size = lf_result; \ BX_CPU_THIS_PTR oszapc.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = BX_LF_MASK_OSZAPC; \ + BX_CPU_THIS_PTR lf_flags_status = EFlagsOSZAPCMask; \ } #define SET_FLAGS_OSZAPC_8(op1, op2, result, ins) \ @@ -3551,7 +3547,7 @@ BX_CPU_THIS_PTR oszapc.op1##size = lf_op1; \ BX_CPU_THIS_PTR oszapc.result##size = lf_result; \ BX_CPU_THIS_PTR oszapc.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = BX_LF_MASK_OSZAPC; \ + BX_CPU_THIS_PTR lf_flags_status = EFlagsOSZAPCMask; \ } #define SET_FLAGS_OSZAPC_S1_8(op1, result, ins) \ @@ -3570,7 +3566,7 @@ BX_CPU_THIS_PTR oszapc.op2##size = lf_op2; \ BX_CPU_THIS_PTR oszapc.result##size = lf_result; \ BX_CPU_THIS_PTR oszapc.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = BX_LF_MASK_OSZAPC; \ + BX_CPU_THIS_PTR lf_flags_status = EFlagsOSZAPCMask; \ } #define SET_FLAGS_OSZAPC_S2_8(op2, result, ins) \ @@ -3589,7 +3585,7 @@ BX_CPU_THIS_PTR oszapc.op1##size = lf_op1; \ BX_CPU_THIS_PTR oszapc.op2##size = lf_op2; \ BX_CPU_THIS_PTR oszapc.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = BX_LF_MASK_OSZAPC; \ + BX_CPU_THIS_PTR lf_flags_status = EFlagsOSZAPCMask; \ } #define SET_FLAGS_OSZAPC_S1S2_8(op1, op2, ins) \ @@ -3607,7 +3603,7 @@ #define SET_FLAGS_OSZAPC_RESULT_SIZE(size, lf_result, ins) { \ BX_CPU_THIS_PTR oszapc.result##size = lf_result; \ BX_CPU_THIS_PTR oszapc.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = BX_LF_MASK_OSZAPC; \ + BX_CPU_THIS_PTR lf_flags_status = EFlagsOSZAPCMask; \ } #define SET_FLAGS_OSZAPC_RESULT_8(result, ins) \ @@ -3625,31 +3621,12 @@ // OSZAP // ******************* -/* op1, op2, result */ -#define SET_FLAGS_OSZAP_SIZE(size, lf_op1, lf_op2, lf_result, ins) { \ - BX_CPU_THIS_PTR oszap.op1##size = lf_op1; \ - BX_CPU_THIS_PTR oszap.op2##size = lf_op2; \ - BX_CPU_THIS_PTR oszap.result##size = lf_result; \ - BX_CPU_THIS_PTR oszap.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = (BX_CPU_THIS_PTR lf_flags_status & 0x00000f) | BX_LF_MASK_OSZAP; \ -} - -#define SET_FLAGS_OSZAP_8(op1, op2, result, ins) \ - SET_FLAGS_OSZAP_SIZE(_8, op1, op2, result, ins) -#define SET_FLAGS_OSZAP_16(op1, op2, result, ins) \ - SET_FLAGS_OSZAP_SIZE(_16, op1, op2, result, ins) -#define SET_FLAGS_OSZAP_32(op1, op2, result, ins) \ - SET_FLAGS_OSZAP_SIZE(_32, op1, op2, result, ins) -#if BX_SUPPORT_X86_64 -#define SET_FLAGS_OSZAP_64(op1, op2, result, ins) \ - SET_FLAGS_OSZAP_SIZE(_64, op1, op2, result, ins) -#endif - /* result only */ #define SET_FLAGS_OSZAP_RESULT_SIZE(size, lf_result, ins) { \ - BX_CPU_THIS_PTR oszap.result##size = lf_result; \ - BX_CPU_THIS_PTR oszap.instr = ins; \ - BX_CPU_THIS_PTR lf_flags_status = (BX_CPU_THIS_PTR lf_flags_status & 0x00000f) | BX_LF_MASK_OSZAP; \ + force_CF(); \ + BX_CPU_THIS_PTR oszapc.result##size = lf_result; \ + BX_CPU_THIS_PTR oszapc.instr = ins; \ + BX_CPU_THIS_PTR lf_flags_status = EFlagsOSZAPMask; \ } #define SET_FLAGS_OSZAP_RESULT_8(result, ins) \ @@ -3663,6 +3640,7 @@ SET_FLAGS_OSZAP_RESULT_SIZE(_64, result, ins) #endif +// transition to new lazy flags code #define SET_FLAGS_OSZAPC_LOGIC_8(result_8) \ SET_FLAGS_OSZAPC_RESULT_8((result_8), BX_INSTR_LOGIC8) #define SET_FLAGS_OSZAPC_LOGIC_16(result_16) \ @@ -3696,6 +3674,28 @@ SET_FLAGS_OSZAPC_64((op1_64), (op2_64), (diff_64), BX_INSTR_SUB64) #endif +#define SET_FLAGS_OSZAPC_INC_8(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_8, (result), BX_INSTR_INC8) +#define SET_FLAGS_OSZAPC_INC_16(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_16, (result), BX_INSTR_INC16) +#define SET_FLAGS_OSZAPC_INC_32(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_32, (result), BX_INSTR_INC32) +#if BX_SUPPORT_X86_64 +#define SET_FLAGS_OSZAPC_INC_64(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_64, (result), BX_INSTR_INC64) +#endif + +#define SET_FLAGS_OSZAPC_DEC_8(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_8, (result), BX_INSTR_DEC8) +#define SET_FLAGS_OSZAPC_DEC_16(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_16, (result), BX_INSTR_DEC16) +#define SET_FLAGS_OSZAPC_DEC_32(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_32, (result), BX_INSTR_DEC32) +#if BX_SUPPORT_X86_64 +#define SET_FLAGS_OSZAPC_DEC_64(result) \ + SET_FLAGS_OSZAP_RESULT_SIZE(_64, (result), BX_INSTR_DEC64) +#endif + IMPLEMENT_EFLAG_ACCESSOR (ID, 21) IMPLEMENT_EFLAG_ACCESSOR (VIP, 20) IMPLEMENT_EFLAG_ACCESSOR (VIF, 19) @@ -3782,12 +3782,6 @@ BX_CPU_THIS_PTR lf_flags_status = 0; \ } -#define SET_FLAGS_OxxxxC(new_of, new_cf) { \ - BX_CPU_THIS_PTR eflags.val32 &= ~((1<<11) | (1<<0)); \ - BX_CPU_THIS_PTR eflags.val32 |= ((!!new_of)<<11) | ((!!new_cf)<<0); \ - BX_CPU_THIS_PTR lf_flags_status &= 0x0ffff0; \ -} - #define ASSERT_FLAGS_OxxxxC() { \ BX_CPU_THIS_PTR eflags.val32 |= (EFlagsOFMask | EFlagsCFMask); \ BX_CPU_THIS_PTR lf_flags_status &= ~(EFlagsOFMask | EFlagsCFMask); \ Index: lazy_flags.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/lazy_flags.cc,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- lazy_flags.cc 29 Nov 2007 21:52:16 -0000 1.38 +++ lazy_flags.cc 4 Dec 2007 19:27:23 -0000 1.39 @@ -61,8 +61,6 @@ { unsigned cf; - BX_ASSERT((BX_CPU_THIS_PTR lf_flags_status & 0x00000f) == BX_LF_INDEX_OSZAPC); - switch (BX_CPU_THIS_PTR oszapc.instr) { case BX_INSTR_ADD8: cf = (BX_CPU_THIS_PTR oszapc.result_8 < @@ -282,7 +280,7 @@ } [...1276 lines suppressed...] + default: + pf = 0; // Keep compiler quiet. + BX_PANIC(("get_PF: OSZAPC: unknown instr")); + } #if UPDATE_EFLAGS_LAZY - BX_CPU_THIS_PTR lf_flags_status &= 0xffff0f; - BX_CPU_THIS_PTR eflags.val32 &= ~(1<<2); - BX_CPU_THIS_PTR eflags.val32 |= (pf)<<2; // pf is always 0 or 1 here + BX_CPU_THIS_PTR lf_flags_status &= ~EFlagsPFMask; + BX_CPU_THIS_PTR eflags.val32 &= ~(1<<2); + BX_CPU_THIS_PTR eflags.val32 |= (pf)<<2; // pf is always 0 or 1 here #endif - return(pf); - - default: - BX_PANIC(("get_PF: unknown case")); - return(0); - } + return(pf); } Index: lazy_flags.h =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/lazy_flags.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- lazy_flags.h 29 Nov 2007 21:52:16 -0000 1.25 +++ lazy_flags.h 4 Dec 2007 19:27:23 -0000 1.26 @@ -109,11 +109,13 @@ #define BX_INSTR_IMUL32 55 #define BX_INSTR_IMUL64 56 -#define BX_LF_INDEX_OSZAPC 1 -#define BX_LF_INDEX_OSZAP 2 - -#define BX_LF_MASK_OSZAPC 0x111111 -#define BX_LF_MASK_OSZAP 0x222220 +#if BX_SUPPORT_X86_64 + #define BX_LF_SIGN_BIT 63 + #define BX_LF_SIGN_MASK BX_CONST64(0x8000000000000000) +#else + #define BX_LF_SIGN_BIT 31 + #define BX_LF_SIGN_MASK 0x80000000 +#endif typedef struct { Bit8u op1_8; |