some small general fixes to make everythign work nicely with other ISAs, now we can...
authorLisa Hsu <hsul@eecs.umich.edu>
Fri, 15 Dec 2006 18:05:46 +0000 (13:05 -0500)
committerLisa Hsu <hsul@eecs.umich.edu>
Fri, 15 Dec 2006 18:05:46 +0000 (13:05 -0500)
exetrace.cc:
wrap this variable between FULL_SYSTEM #ifs
mmaped_ipr.hh:
fix for build
miscregfile.cc:
fixes for HPSTATE access during SE mode

src/arch/sparc/miscregfile.cc:
    fixes for HPSTATE access during SE mode
src/arch/mips/mmaped_ipr.hh:
    fix for build
src/cpu/exetrace.cc:
    wrap this variable between FULL_SYSTEM #ifs

--HG--
extra : convert_revision : c5b9d56ab99018a91d04de47ba1d5ca7768590bb

src/arch/mips/mmaped_ipr.hh
src/arch/sparc/miscregfile.cc
src/cpu/exetrace.cc

index 041c76fdc5c4f6f45297497b0fc329a425699146..fa82a645c32bed95f6757595a2ce352be950d6e6 100644 (file)
  * ISA-specific helper functions for memory mapped IPR accesses.
  */
 
+#include "base/misc.hh"
 #include "mem/packet.hh"
 
+class ThreadContext;
 
 namespace MipsISA
 {
@@ -48,7 +50,6 @@ handleIprRead(ThreadContext *xc, Packet *pkt)
     panic("No implementation for handleIprRead in MIPS\n");
 }
 
-
 inline Tick
 handleIprWrite(ThreadContext *xc, Packet *pkt)
 {
index 5bc11aae62c49de114fcbdf63eb4e789c1ff7386..53559c072e9c35b7c36d03028147637720c89a12 100644 (file)
@@ -341,7 +341,6 @@ MiscReg MiscRegFile::readRegWithEffect(int miscReg, ThreadContext * tc)
       case MISCREG_SOFTINT:
       case MISCREG_TICK_CMPR:
       case MISCREG_STICK_CMPR:
-      case MISCREG_HPSTATE:
       case MISCREG_HINTP:
       case MISCREG_HTSTATE:
       case MISCREG_HTBA:
@@ -357,9 +356,16 @@ MiscReg MiscRegFile::readRegWithEffect(int miscReg, ThreadContext * tc)
       case MISCREG_QUEUE_NRES_ERROR_HEAD:
       case MISCREG_QUEUE_NRES_ERROR_TAIL:
 #if FULL_SYSTEM
+      case MISCREG_HPSTATE:
         return readFSRegWithEffect(miscReg, tc);
 #else
-        panic("Accessing Fullsystem register is SE mode\n");
+      case MISCREG_HPSTATE:
+        //HPSTATE is special because because sometimes in privilege checks for instructions
+        //it will read HPSTATE to make sure the priv. level is ok
+        //So, we'll just have to tell it it isn't, instead of panicing.
+        return 0;
+
+      panic("Accessing Fullsystem register %s in SE mode\n",getMiscRegName(miscReg));
 #endif
 
     }
@@ -633,7 +639,6 @@ void MiscRegFile::setRegWithEffect(int miscReg,
       case MISCREG_SOFTINT:
       case MISCREG_TICK_CMPR:
       case MISCREG_STICK_CMPR:
-      case MISCREG_HPSTATE:
       case MISCREG_HINTP:
       case MISCREG_HTSTATE:
       case MISCREG_HTBA:
@@ -649,10 +654,15 @@ void MiscRegFile::setRegWithEffect(int miscReg,
       case MISCREG_QUEUE_NRES_ERROR_HEAD:
       case MISCREG_QUEUE_NRES_ERROR_TAIL:
 #if FULL_SYSTEM
+      case MISCREG_HPSTATE:
         setFSRegWithEffect(miscReg, val, tc);
         return;
 #else
-        panic("Accessing Fullsystem register is SE mode\n");
+      case MISCREG_HPSTATE:
+        //HPSTATE is special because normal trap processing saves HPSTATE when
+        //it goes into a trap, and restores it when it returns.
+        return;
+      panic("Accessing Fullsystem register %s to %#x in SE mode\n", getMiscRegName(miscReg), val);
 #endif
     }
     setReg(miscReg, val);
index 316716540db94f90f72171f6b8118f8bc62cc18f..3fe40b4c167513ae20b6ecaa1be9be081f328b0d 100644 (file)
@@ -57,7 +57,9 @@
 using namespace std;
 using namespace TheISA;
 
+#if THE_ISA == SPARC_ISA && FULL_SYSTEM
 static int diffcount = 0;
+#endif
 
 namespace Trace {
 SharedData *shared_data = NULL;