Got rid of the multiple inheritance in the Fault classes, and the base MachineCheck...
authorGabe Black <gblack@eecs.umich.edu>
Thu, 2 Mar 2006 00:03:42 +0000 (19:03 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 2 Mar 2006 00:03:42 +0000 (19:03 -0500)
--HG--
extra : convert_revision : 4b1429ef5c7a11c25e28f2bc868cc1481a08c5d1

arch/alpha/faults.cc
arch/alpha/faults.hh
sim/faults.cc
sim/faults.hh

index 7cdcc9bab3ec5565788a1669431023cdf5bd9153..0a836363c07e9beaf640b144ff18692c92173b21 100644 (file)
 namespace AlphaISA
 {
 
-FaultVect AlphaMachineCheckFault::_vect = 0x0401;
-FaultStat AlphaMachineCheckFault::_stat;
+FaultName MachineCheckFault::_name = "mchk";
+FaultVect MachineCheckFault::_vect = 0x0401;
+FaultStat MachineCheckFault::_stat;
 
-FaultVect AlphaAlignmentFault::_vect = 0x0301;
-FaultStat AlphaAlignmentFault::_stat;
+FaultName AlignmentFault::_name = "unalign";
+FaultVect AlignmentFault::_vect = 0x0301;
+FaultStat AlignmentFault::_stat;
 
 FaultName ResetFault::_name = "reset";
 FaultVect ResetFault::_vect = 0x0001;
index b9573905ae4fe5f238491cdf3b22f5ce640ee144..c4a72e07c3a362c6608ff54993b5c24a2161947c 100644 (file)
@@ -50,38 +50,40 @@ class AlphaFault : public virtual FaultBase
     virtual FaultVect vect() = 0;
 };
 
-class AlphaMachineCheckFault :
-    public MachineCheckFault,
-    public AlphaFault
+class MachineCheckFault : public AlphaFault
 {
   private:
+    static FaultName _name;
     static FaultVect _vect;
     static FaultStat _stat;
   public:
+    FaultName name() {return _name;}
     FaultVect vect() {return _vect;}
     FaultStat & stat() {return _stat;}
+    bool isMachineCheckFault() {return true;}
 };
 
-class AlphaAlignmentFault :
-    public AlignmentFault,
-    public AlphaFault
+class AlignmentFault : public AlphaFault
 {
   private:
+    static FaultName _name;
     static FaultVect _vect;
     static FaultStat _stat;
   public:
+    FaultName name() {return _name;}
     FaultVect vect() {return _vect;}
     FaultStat & stat() {return _stat;}
+    bool isAlignmentFault() {return true;}
 };
 
 static inline Fault genMachineCheckFault()
 {
-    return new AlphaMachineCheckFault;
+    return new MachineCheckFault;
 }
 
 static inline Fault genAlignmentFault()
 {
-    return new AlphaAlignmentFault;
+    return new AlignmentFault;
 }
 
 class ResetFault : public AlphaFault
@@ -108,7 +110,9 @@ class ArithmeticFault : public AlphaFault
     FaultName name() {return _name;}
     FaultVect vect() {return _vect;}
     FaultStat & stat() {return _stat;}
+#if FULL_SYSTEM
     void invoke(ExecContext * xc);
+#endif
 };
 
 class InterruptFault : public AlphaFault
index 68df2b785123ce34aa2eb45d8ca5b11b016034cb..9b4a0ea7f46b5f3a10ba6ad07c3fc18ee0637a2c 100644 (file)
@@ -29,9 +29,6 @@
 #include "sim/faults.hh"
 #include "cpu/exec_context.hh"
 
-FaultName MachineCheckFault::_name = "mchk";
-FaultName AlignmentFault::_name = "unalign";
-
 #if !FULL_SYSTEM
 void FaultBase::invoke(ExecContext * xc)
 {
index 1e43bfb8253d6005b4bb052e566220e3a53fde97..9e8d224cde846e476b9dbd88590ec66ffc9553bf 100644 (file)
@@ -65,29 +65,4 @@ class FaultBase : public RefCounted
 
 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 virtual FaultBase
-{
-  private:
-    static FaultName _name;
-  public:
-    FaultName name() {return _name;}
-    bool isMachineCheckFault() {return true;}
-};
-
-class AlignmentFault : public virtual FaultBase
-{
-  private:
-    static FaultName _name;
-  public:
-    FaultName name() {return _name;}
-    bool isAlignmentFault() {return true;}
-};
-
-
 #endif // __FAULTS_HH__