[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