Added isMachineCheckFault and isAlignmentFault virtual functions to the fault base...
authorGabe Black <gblack@eecs.umich.edu>
Mon, 27 Feb 2006 09:02:45 +0000 (04:02 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Mon, 27 Feb 2006 09:02:45 +0000 (04:02 -0500)
arch/alpha/ev5.cc:
cpu/simple/cpu.cc:
    Changed from the isA templated function to isMachineCheckFault and isAlignmentFault
sim/faults.hh:
    Added isMachineCheckFault and isAlignmentFault virtual functions to the fault base class.

--HG--
extra : convert_revision : 3bf3a4369bc24a039648ee4f2a9c1663362ff2e2

arch/alpha/ev5.cc
cpu/simple/cpu.cc
sim/faults.hh

index 34b328a39f8846f37e6fd1680f3b9e4aaab9d147..b89a6d10d4f217e374be5996741731928845d958 100644 (file)
@@ -92,8 +92,8 @@ AlphaISA::fault_addr(Fault fault)
 {
         //Check for the system wide faults
         if(fault == NoFault) return 0x0000;
-        else if(fault->isA<MachineCheckFault>()) return 0x0401;
-        else if(fault->isA<AlignmentFault>()) return 0x0301;
+        else if(fault->isMachineCheckFault()) return 0x0401;
+        else if(fault->isAlignmentFault()) return 0x0301;
         //Deal with the alpha specific faults
         return ((AlphaFault *)(fault.get()))->vect();
 };
index a0a37f45a8b59f23abf725e444ff7a6860bfcbb5..4693c78c9ba020467173feb3e541d3e8076d4072 100644 (file)
@@ -347,7 +347,7 @@ SimpleCPU::copySrcTranslate(Addr src)
     // translate to physical address
     Fault fault = xc->translateDataReadReq(memReq);
 
-    assert(!fault->isA<AlignmentFault>());
+    assert(!fault->isAlignmentFault());
 
     if (fault == NoFault) {
         xc->copySrcAddr = src;
@@ -382,7 +382,7 @@ SimpleCPU::copy(Addr dest)
     // translate to physical address
     Fault fault = xc->translateDataWriteReq(memReq);
 
-    assert(!fault->isA<AlignmentFault>());
+    assert(!fault->isAlignmentFault());
 
     if (fault == NoFault) {
         Addr dest_addr = memReq->paddr + offset;
index ea2e21a7d0844a255b72f80112af6485f83b8489..e4880f8208f69c37199f8d650f9938c540a7e55d 100644 (file)
@@ -55,9 +55,17 @@ class FaultBase : public RefCounted
     virtual FaultStat & stat() = 0;
     template<typename T>
     bool isA() {return dynamic_cast<T *>(this);}
+    virtual bool isMachineCheckFault() {return false;}
+    virtual bool isAlignmentFault() {return false;}
 };
 
-static FaultBase * const NoFault __attribute__ ((unused)) = 0;
+FaultBase * const NoFault = 0;
+
+//The ISAs are each responsible for providing a genMachineCheckFault and a
+//genAlignmentFault functions, which return faults to use in the case of a
+//machine check fault or an alignment fault, respectively. Base classes which
+//provide the name() function, and the isMachineCheckFault and isAlignmentFault
+//functions are provided below.
 
 class MachineCheckFault : public FaultBase
 {
@@ -67,6 +75,7 @@ class MachineCheckFault : public FaultBase
   public:
     FaultName name() {return _name;}
     FaultStat & stat() {return _stat;}
+    bool isMachineCheckFault() {return true;}
 };
 
 class AlignmentFault : public FaultBase
@@ -77,6 +86,7 @@ class AlignmentFault : public FaultBase
   public:
     FaultName name() {return _name;}
     FaultStat & stat() {return _stat;}
+    bool isAlignmentFault() {return true;}
 };