From: Stanislav S. <ssh...@us...> - 2010-01-31 18:06:57
|
Update of /cvsroot/bochs/bochs/cpu In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv3051/cpu Modified Files: ctrl_xfer_pro.cc fetchdecode.cc fetchdecode64.cc proc_ctrl.cc tasking.cc vmx.cc Log Message: comment out CS.LIMIT demotion fix - it causes too big slowdown. Need to think about better solution + small optimization Index: ctrl_xfer_pro.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/ctrl_xfer_pro.cc,v retrieving revision 1.81 retrieving revision 1.82 diff -u -d -r1.81 -r1.82 --- ctrl_xfer_pro.cc 19 Jan 2010 14:43:47 -0000 1.81 +++ ctrl_xfer_pro.cc 31 Jan 2010 18:06:44 -0000 1.82 @@ -92,7 +92,7 @@ touch_segment(selector, descriptor); -#if BX_SUPPORT_TRACE_CACHE +#ifdef BX_SUPPORT_CS_LIMIT_DEMOTION // Handle special case of CS.LIMIT demotion (new descriptor limit is // smaller than current one) if (BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled > descriptor->u.segment.limit_scaled) Index: fetchdecode.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/fetchdecode.cc,v retrieving revision 1.242 retrieving revision 1.243 diff -u -d -r1.242 -r1.243 --- fetchdecode.cc 31 Jan 2010 09:45:27 -0000 1.242 +++ fetchdecode.cc 31 Jan 2010 18:06:44 -0000 1.243 @@ -141,17 +141,6 @@ }; // decoding instructions; accessing seg reg's by index -static unsigned sreg_mod01or10_rm32[8] = { - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_NULL, // escape to SIB-byte - BX_SEG_REG_SS, - BX_SEG_REG_DS, - BX_SEG_REG_DS -}; - static unsigned sreg_mod0_base32[8] = { BX_SEG_REG_DS, BX_SEG_REG_DS, @@ -2612,7 +2601,7 @@ // mod==00b, rm!=4, rm!=5 goto modrm_done; } - seg = sreg_mod01or10_rm32[rm]; + seg = sreg_mod1or2_base32[rm]; if (mod == 0x40) { // mod == 01b if (ilen < remain) { // 8 sign extended to 32 Index: fetchdecode64.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/fetchdecode64.cc,v retrieving revision 1.244 retrieving revision 1.245 diff -u -d -r1.244 -r1.245 --- fetchdecode64.cc 31 Jan 2010 09:45:27 -0000 1.244 +++ fetchdecode64.cc 31 Jan 2010 18:06:44 -0000 1.245 @@ -106,25 +106,6 @@ // In 64-bit mode the CS, DS, ES, and SS segment overrides are ignored. // decoding instructions; accessing seg reg's by index -static unsigned sreg_mod01or10_rm32[16] = { - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_NULL, // escape to SIB-byte - BX_SEG_REG_SS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_NULL, // escape to SIB-byte - BX_SEG_REG_DS, - BX_SEG_REG_DS, - BX_SEG_REG_DS, -}; - static unsigned sreg_mod0_base32[16] = { BX_SEG_REG_DS, BX_SEG_REG_DS, @@ -3543,7 +3524,7 @@ // mod==00b, rm!=4, rm!=5 goto modrm_done; } - seg = sreg_mod01or10_rm32[rm]; + seg = sreg_mod1or2_base32[rm]; if (mod == 0x40) { // mod == 01b get_8bit_displ: if (ilen < remain) { @@ -3605,7 +3586,7 @@ // mod==00b, rm!=4, rm!=5 goto modrm_done; } - seg = sreg_mod01or10_rm32[rm]; + seg = sreg_mod1or2_base32[rm]; if (mod == 0x40) // mod == 01b goto get_8bit_displ; // (mod == 0x80) mod == 10b Index: proc_ctrl.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/proc_ctrl.cc,v retrieving revision 1.309 retrieving revision 1.310 diff -u -d -r1.309 -r1.310 --- proc_ctrl.cc 4 Dec 2009 16:53:12 -0000 1.309 +++ proc_ctrl.cc 31 Jan 2010 18:06:44 -0000 1.310 @@ -1274,14 +1274,14 @@ if (BX_CPU_THIS_PTR alignment_check_mask == 0) { BX_CPU_THIS_PTR alignment_check_mask = 0xF; BX_INFO(("Enable alignment check (#AC exception)")); - BX_CPU_THIS_PTR iCache.flushICacheEntries(); +// BX_CPU_THIS_PTR iCache.flushICacheEntries(); } } else { if (BX_CPU_THIS_PTR alignment_check_mask != 0) { BX_CPU_THIS_PTR alignment_check_mask = 0; BX_INFO(("Disable alignment check (#AC exception)")); - BX_CPU_THIS_PTR iCache.flushICacheEntries(); +// BX_CPU_THIS_PTR iCache.flushICacheEntries(); } } } Index: tasking.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/tasking.cc,v retrieving revision 1.78 retrieving revision 1.79 diff -u -d -r1.78 -r1.79 --- tasking.cc 17 Dec 2009 11:11:58 -0000 1.78 +++ tasking.cc 31 Jan 2010 18:06:45 -0000 1.79 @@ -647,7 +647,7 @@ touch_segment(&cs_selector, &cs_descriptor); -#if BX_SUPPORT_TRACE_CACHE +#ifdef BX_SUPPORT_CS_LIMIT_DEMOTION // Handle special case of CS.LIMIT demotion (new descriptor limit is // smaller than current one) if (BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled > cs_descriptor.u.segment.limit_scaled) Index: vmx.cc =================================================================== RCS file: /cvsroot/bochs/bochs/cpu/vmx.cc,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- vmx.cc 17 Dec 2009 11:11:58 -0000 1.28 +++ vmx.cc 31 Jan 2010 18:06:45 -0000 1.29 @@ -1298,7 +1298,7 @@ BX_CPU_THIS_PTR eflags = (Bit32u) guest.rflags; BX_CPU_THIS_PTR lf_flags_status = 0; // OSZAPC flags are known. -#if BX_SUPPORT_TRACE_CACHE +#ifdef BX_SUPPORT_CS_LIMIT_DEMOTION // Handle special case of CS.LIMIT demotion (new descriptor limit is // smaller than current one) if (BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled > guest.sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled) |