[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bochs-cvs
Subject:    [Bochs-cvs] CVS: bochs/cpu ctrl_xfer16.cc, 1.43, 1.44 ctrl_xfer32.cc,
From:       Stanislav Shwartsman <sshwarts () users ! sourceforge ! net>
Date:       2007-11-24 15:28:42
Message-ID: E1Ivwvy-0006xu-5i () sc8-pr-cvs3 ! sourceforge ! net
[Download RAW message or body]

Update of /cvsroot/bochs/bochs/cpu
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv26416/cpu

Modified Files:
	ctrl_xfer16.cc ctrl_xfer32.cc ctrl_xfer64.cc stack64.cc 
Log Message:
make some functions RSP safe so it is not needed to save/restore RSP for the anymore


Index: ctrl_xfer16.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/cpu/ctrl_xfer16.cc,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- ctrl_xfer16.cc	24 Nov 2007 14:22:33 -0000	1.43
+++ ctrl_xfer16.cc	24 Nov 2007 15:27:27 -0000	1.44
@@ -566,9 +566,7 @@
   read_virtual_word(i->seg(), RMAddr(i), &op1_16);
   read_virtual_word(i->seg(), RMAddr(i)+2, &cs_raw);
 
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
+  // jump_protected doesn't affect RSP so it is RSP safe
   if (protected_mode()) {
     BX_CPU_THIS_PTR jump_protected(i, cs_raw, op1_16);
     goto done;
@@ -578,8 +576,6 @@
   EIP = op1_16;
 
 done:
-  BX_CPU_THIS_PTR speculative_rsp = 0;
-
   BX_INSTR_FAR_BRANCH(BX_CPU_ID, BX_INSTR_IS_JMP,
                       BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, EIP);
 }

Index: ctrl_xfer32.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/cpu/ctrl_xfer32.cc,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -d -r1.55 -r1.56
--- ctrl_xfer32.cc	24 Nov 2007 14:22:33 -0000	1.55
+++ ctrl_xfer32.cc	24 Nov 2007 15:27:39 -0000	1.56
@@ -514,9 +514,7 @@
   }
   cs_raw = i->Iw2();
 
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
+  // jump_protected doesn't affect RSP so it is RSP safe
   if (protected_mode()) {
     BX_CPU_THIS_PTR jump_protected(i, cs_raw, disp32);
   }
@@ -525,8 +523,6 @@
     EIP = disp32;
   }
 
-  BX_CPU_THIS_PTR speculative_rsp = 0;
-
   BX_INSTR_FAR_BRANCH(BX_CPU_ID, BX_INSTR_IS_JMP,
                       BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, EIP);
 }
@@ -561,9 +557,7 @@
   read_virtual_dword(i->seg(), RMAddr(i), &op1_32);
   read_virtual_word(i->seg(), RMAddr(i)+4, &cs_raw);
 
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
+  // jump_protected doesn't affect RSP so it is RSP safe
   if (protected_mode()) {
     BX_CPU_THIS_PTR jump_protected(i, cs_raw, op1_32);
   }
@@ -572,8 +566,6 @@
     EIP = op1_32;
   }
 
-  BX_CPU_THIS_PTR speculative_rsp = 0;
-
   BX_INSTR_FAR_BRANCH(BX_CPU_ID, BX_INSTR_IS_JMP,
                       BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, EIP);
 }

Index: ctrl_xfer64.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/cpu/ctrl_xfer64.cc,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- ctrl_xfer64.cc	24 Nov 2007 14:22:33 -0000	1.54
+++ ctrl_xfer64.cc	24 Nov 2007 15:27:47 -0000	1.55
@@ -455,14 +455,8 @@
 
   BX_ASSERT(protected_mode());
 
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
-  // jump_protected is nto RSP safe
   jump_protected(i, cs_raw, op1_32);
 
-  BX_CPU_THIS_PTR speculative_rsp = 0;
-
   BX_INSTR_FAR_BRANCH(BX_CPU_ID, BX_INSTR_IS_JMP,
                       BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, RIP);
 }

Index: stack64.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/cpu/stack64.cc,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- stack64.cc	24 Nov 2007 14:22:34 -0000	1.29
+++ stack64.cc	24 Nov 2007 15:27:55 -0000	1.30
@@ -85,27 +85,19 @@
 void BX_CPU_C::POP64_FS(bxInstruction_c *i)
 {
   Bit64u fs;
-
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
-  pop_64(&fs);
+  // this way is faster and RSP safe
+  read_virtual_qword(BX_SEG_REG_SS, RSP, &fs);
   load_seg_reg(&BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS], (Bit16u) fs);
-
-  BX_CPU_THIS_PTR speculative_rsp = 0;
+  RSP += 8;
 }
 
 void BX_CPU_C::POP64_GS(bxInstruction_c *i)
 {
   Bit64u gs;
-
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
-  pop_64(&gs);
+  // this way is faster and RSP safe
+  read_virtual_qword(BX_SEG_REG_SS, RSP, &gs);
   load_seg_reg(&BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS], (Bit16u) gs);
-
-  BX_CPU_THIS_PTR speculative_rsp = 0;
+  RSP += 8;
 }
 
 void BX_CPU_C::PUSH64_Id(bxInstruction_c *i)
@@ -166,18 +158,11 @@
 
 void BX_CPU_C::LEAVE64(bxInstruction_c *i)
 {
-  BX_CPU_THIS_PTR speculative_rsp = 1;
-  BX_CPU_THIS_PTR prev_rsp = RSP;
-
-  // delete frame
-  RSP = RBP;
-
-  // restore frame pointer
   Bit64u temp64;
-  pop_64(&temp64);
+  // restore frame pointer
+  read_virtual_qword(BX_SEG_REG_SS, RBP, &temp64);
+  RSP = RBP + 8;
   RBP = temp64;
-
-  BX_CPU_THIS_PTR speculative_rsp = 0;
 }
 
 #endif /* if BX_SUPPORT_X86_64 */


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bochs-cvs mailing list
Bochs-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bochs-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic