[prev in list] [next in list] [prev in thread] [next in thread]
List: bochs-cvs
Subject: [Bochs-cvs] CVS: bochs/cpu fetchdecode64.cc, 1.98, 1.99 proc_ctrl.cc,
From: Stanislav Shwartsman <sshwarts () users ! sourceforge ! net>
Date: 2006-06-26 21:07:46
Message-ID: E1FuyJ8-0007Yy-KW () 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-serv28967
Modified Files:
fetchdecode64.cc proc_ctrl.cc
Log Message:
Fixed DR registers handling in x86-64 mode
Index: fetchdecode64.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/cpu/fetchdecode64.cc,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -d -r1.98 -r1.99
--- fetchdecode64.cc 9 Jun 2006 22:29:07 -0000 1.98
+++ fetchdecode64.cc 26 Jun 2006 21:07:44 -0000 1.99
@@ -848,9 +848,9 @@
/* 0F 1E */ { 0, &BX_CPU_C::BxError },
/* 0F 1F */ { BxAnother, &BX_CPU_C::NOP }, // multi-byte NOP
/* 0F 20 */ { BxAnother, &BX_CPU_C::MOV_RqCq },
- /* 0F 21 */ { BxAnother, &BX_CPU_C::MOV_RdDd },
+ /* 0F 21 */ { BxAnother, &BX_CPU_C::MOV_RqDq },
/* 0F 22 */ { BxAnother, &BX_CPU_C::MOV_CqRq },
- /* 0F 23 */ { BxAnother, &BX_CPU_C::MOV_DdRd },
+ /* 0F 23 */ { BxAnother, &BX_CPU_C::MOV_DqRq },
/* 0F 24 */ { 0, &BX_CPU_C::BxError },
/* 0F 25 */ { 0, &BX_CPU_C::BxError },
/* 0F 26 */ { 0, &BX_CPU_C::BxError },
@@ -1377,9 +1377,9 @@
/* 0F 1E */ { 0, &BX_CPU_C::BxError },
/* 0F 1F */ { BxAnother, &BX_CPU_C::NOP }, // multi-byte NOP
/* 0F 20 */ { BxAnother, &BX_CPU_C::MOV_RqCq },
- /* 0F 21 */ { BxAnother, &BX_CPU_C::MOV_RdDd },
+ /* 0F 21 */ { BxAnother, &BX_CPU_C::MOV_RqDq },
/* 0F 22 */ { BxAnother, &BX_CPU_C::MOV_CqRq },
- /* 0F 23 */ { BxAnother, &BX_CPU_C::MOV_DdRd },
+ /* 0F 23 */ { BxAnother, &BX_CPU_C::MOV_DqRq },
/* 0F 24 */ { 0, &BX_CPU_C::BxError },
/* 0F 25 */ { 0, &BX_CPU_C::BxError },
/* 0F 26 */ { 0, &BX_CPU_C::BxError },
Index: proc_ctrl.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/cpu/proc_ctrl.cc,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -d -r1.154 -r1.155
--- proc_ctrl.cc 14 Jun 2006 16:44:33 -0000 1.154
+++ proc_ctrl.cc 26 Jun 2006 21:07:44 -0000 1.155
@@ -208,7 +208,7 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_DdRd(): rm field not a register!"));
+ BX_PANIC(("MOV_DdRd(): rm field not a register!"));
invalidate_prefetch_q();
@@ -337,7 +337,7 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_RdDd(): rm field not a register!"));
+ BX_PANIC(("MOV_RdDd(): rm field not a register!"));
/* #GP(0) if CPL is not 0 */
if (protected_mode() && (CPL!=0)) {
@@ -402,12 +402,7 @@
#if BX_SUPPORT_X86_64
void BX_CPU_C::MOV_DqRq(bxInstruction_c *i)
{
- Bit64u val_64;
-
- if (v8086_mode()) {
- BX_INFO(("MOV_DqRq: v8086 mode causes #GP(0)"));
- exception(BX_GP_EXCEPTION, 0, 0);
- }
+ BX_ASSERT(protected_mode());
/* NOTES:
* 64bit operands always used
@@ -419,20 +414,19 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_DqRq(): rm field not a register!"));
+ BX_PANIC(("MOV_DqRq(): rm field not a register!"));
invalidate_prefetch_q();
/* #GP(0) if CPL is not 0 */
- if (protected_mode() && CPL!=0) {
- BX_INFO(("MOV_DqRq: #GP(0) if CPL is not 0"));
+ if (CPL != 0) {
+ BX_ERROR(("MOV_DqRq: #GP(0) if CPL is not 0"));
exception(BX_GP_EXCEPTION, 0, 0);
}
- val_64 = BX_READ_64BIT_REG(i->rm());
+ Bit64u val_64 = BX_READ_64BIT_REG(i->rm());
if (bx_dbg.dreg)
- BX_INFO(("MOV_DqRq: DR[%u]=%08xh unhandled",
- (unsigned) i->nnn(), (unsigned) val_64));
+ BX_INFO(("MOV_DqRq: DR[%u]=%08xh unhandled", i->nnn(), (unsigned) val_64));
switch (i->nnn()) {
case 0: // DR0
@@ -526,20 +520,17 @@
{
Bit64u val_64;
- if (v8086_mode()) {
- BX_INFO(("MOV_RqDq: v8086 mode causes #GP(0)"));
- exception(BX_GP_EXCEPTION, 0, 0);
- }
+ BX_ASSERT(protected_mode());
/* This instruction is always treated as a register-to-register,
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_RqDq(): rm field not a register!"));
+ BX_PANIC(("MOV_RqDq(): rm field not a register!"));
/* #GP(0) if CPL is not 0 */
- if (protected_mode() && (CPL!=0)) {
- BX_INFO(("MOV_RqDq: #GP(0) if CPL is not 0"));
+ if (CPL != 0) {
+ BX_ERROR(("MOV_RqDq: #GP(0) if CPL is not 0"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@@ -614,7 +605,7 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_CdRd(): rm field not a register!"));
+ BX_PANIC(("MOV_CdRd(): rm field not a register!"));
invalidate_prefetch_q();
@@ -681,7 +672,7 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_RdCd(): rm field not a register!"));
+ BX_PANIC(("MOV_RdCd(): rm field not a register!"));
/* #GP(0) if CPL is not 0 */
if (protected_mode() && CPL!=0) {
@@ -728,11 +719,7 @@
// mov general register data to control register
Bit64u val_64;
- if (v8086_mode())
- {
- BX_INFO(("MOV_CqRq: v8086 mode causes #GP(0)"));
- exception(BX_GP_EXCEPTION, 0, 0);
- }
+ BX_ASSERT(protected_mode());
/* NOTES:
* 64bit operands always used
@@ -744,13 +731,13 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_CqRq(): rm field not a register!"));
+ BX_PANIC(("MOV_CqRq(): rm field not a register!"));
invalidate_prefetch_q();
/* #GP(0) if CPL is not 0 */
- if (protected_mode() && CPL!=0) {
- BX_INFO(("MOV_CqRq: #GP(0) if CPL is not 0"));
+ if (CPL!=0) {
+ BX_ERROR(("MOV_CqRq: #GP(0) if CPL is not 0"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@@ -804,10 +791,7 @@
// mov control register data to register
Bit64u val_64;
- if (v8086_mode()) {
- BX_INFO(("MOV_RqCq: v8086 mode causes #GP(0)"));
- exception(BX_GP_EXCEPTION, 0, 0);
- }
+ BX_ASSERT(protected_mode());
/* NOTES:
* 64bit operands always used
@@ -819,11 +803,11 @@
* regardless of the encoding of the MOD field in the MODRM byte.
*/
if (!i->modC0())
- BX_INFO(("MOV_RqCq(): rm field not a register!"));
+ BX_PANIC(("MOV_RqCq(): rm field not a register!"));
/* #GP(0) if CPL is not 0 */
- if (protected_mode() && CPL!=0) {
- BX_INFO(("MOV_RqCq: #GP(0) if CPL is not 0"));
+ if (CPL!=0) {
+ BX_ERROR(("MOV_RqCq: #GP(0) if CPL is not 0"));
exception(BX_GP_EXCEPTION, 0, 0);
}
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
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