Changes to support automatic renaming of the shadow registers at decode time. This...
[gem5.git] / arch / alpha / faults.hh
index 2bb929a1e67ce66b5e6f7cf72ca77fbafbac2b53..156faa8fbe706d3f78564e09dd12272a0ccb5e1e 100644 (file)
 #define __ALPHA_FAULTS_HH__
 
 #include "sim/faults.hh"
-#include "arch/isa_traits.hh" //For the Addr type
 
-class AlphaFault : public Fault
+// The design of the "name" and "vect" functions is in sim/faults.hh
+
+namespace AlphaISA
+{
+
+typedef const Addr FaultVect;
+
+class AlphaFault : public virtual FaultBase
+{
+  public:
+#if FULL_SYSTEM
+    void ev5_trap(ExecContext * xc);
+#endif
+    virtual FaultVect vect() = 0;
+};
+
+class AlphaMachineCheckFault :
+    public MachineCheckFault,
+    public AlphaFault
 {
-public:
-        AlphaFault(char * newName, int newId, Addr newVect) : Fault(newName, newId), vect(newVect) {;}
-        TheISA::Addr vect;
+  private:
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+#if FULL_SYSTEM
+    void ev5_trap(ExecContext * xc);
+#endif
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
 };
 
-extern class ResetFaultType : public AlphaFault
+class AlphaAlignmentFault :
+    public AlignmentFault,
+    public AlphaFault
+{
+  private:
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+#if FULL_SYSTEM
+    void ev5_trap(ExecContext * xc);
+#endif
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
+
+static inline Fault genMachineCheckFault()
+{
+    return new AlphaMachineCheckFault;
+}
+
+static inline Fault genAlignmentFault()
+{
+    return new AlphaAlignmentFault;
+}
+
+class ResetFault : public AlphaFault
 {
-public:
-        ResetFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * ResetFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class ArithmeticFaultType : public AlphaFault
+class ArithmeticFault : public AlphaFault
 {
-public:
-        ArithmeticFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * ArithmeticFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class InterruptFaultType : public AlphaFault
+class InterruptFault : public AlphaFault
 {
-public:
-        InterruptFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * InterruptFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class NDtbMissFaultType : public AlphaFault
+class NDtbMissFault : public AlphaFault
 {
-public:
-        NDtbMissFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * NDtbMissFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class PDtbMissFaultType : public AlphaFault
+class PDtbMissFault : public AlphaFault
 {
-public:
-        PDtbMissFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * PDtbMissFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class DtbPageFaultType : public AlphaFault
+class DtbPageFault : public AlphaFault
 {
-public:
-        DtbPageFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * DtbPageFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class DtbAcvFaultType : public AlphaFault
+class DtbAcvFault : public AlphaFault
 {
-public:
-        DtbAcvFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * DtbAcvFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class ItbMissFaultType : public AlphaFault
+class ItbMissFault : public AlphaFault
 {
-public:
-        ItbMissFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * ItbMissFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class ItbPageFaultType : public AlphaFault
+class ItbPageFault : public AlphaFault
 {
-public:
-        ItbPageFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * ItbPageFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class ItbAcvFaultType : public AlphaFault
+class ItbAcvFault : public AlphaFault
 {
-public:
-        ItbAcvFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * ItbAcvFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class UnimplementedOpcodeFaultType : public AlphaFault
+class UnimplementedOpcodeFault : public AlphaFault
 {
-public:
-        UnimplementedOpcodeFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * UnimplementedOpcodeFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class FloatEnableFaultType : public AlphaFault
+class FloatEnableFault : public AlphaFault
 {
-public:
-        FloatEnableFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * FloatEnableFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class PalFaultType : public AlphaFault
+class PalFault : public AlphaFault
 {
-public:
-        PalFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * PalFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern class IntegerOverflowFaultType : public AlphaFault
+class IntegerOverflowFault : public AlphaFault
 {
-public:
-        IntegerOverflowFaultType(char * newName, int newId, Addr newVect) : AlphaFault(newName, newId, newVect) {;}
-} * IntegerOverflowFault;
+  private:
+    static FaultName _name;
+    static FaultVect _vect;
+    static FaultStat _stat;
+  public:
+    FaultName name() {return _name;}
+    FaultVect vect() {return _vect;}
+    FaultStat & stat() {return _stat;}
+};
 
-extern Fault ** ListOfFaults[];
-extern int NumFaults;
+} // AlphaISA namespace
 
 #endif // __FAULTS_HH__