Got rid of the multiple inheritance in the Fault classes, and the base MachineCheck and Alignment faults.
--HG-- extra : convert_revision : 4b1429ef5c7a11c25e28f2bc868cc1481a08c5d1
This commit is contained in:
parent
b71f9c801e
commit
6b7d627903
4 changed files with 18 additions and 40 deletions
|
@ -35,11 +35,13 @@
|
||||||
namespace AlphaISA
|
namespace AlphaISA
|
||||||
{
|
{
|
||||||
|
|
||||||
FaultVect AlphaMachineCheckFault::_vect = 0x0401;
|
FaultName MachineCheckFault::_name = "mchk";
|
||||||
FaultStat AlphaMachineCheckFault::_stat;
|
FaultVect MachineCheckFault::_vect = 0x0401;
|
||||||
|
FaultStat MachineCheckFault::_stat;
|
||||||
|
|
||||||
FaultVect AlphaAlignmentFault::_vect = 0x0301;
|
FaultName AlignmentFault::_name = "unalign";
|
||||||
FaultStat AlphaAlignmentFault::_stat;
|
FaultVect AlignmentFault::_vect = 0x0301;
|
||||||
|
FaultStat AlignmentFault::_stat;
|
||||||
|
|
||||||
FaultName ResetFault::_name = "reset";
|
FaultName ResetFault::_name = "reset";
|
||||||
FaultVect ResetFault::_vect = 0x0001;
|
FaultVect ResetFault::_vect = 0x0001;
|
||||||
|
|
|
@ -50,38 +50,40 @@ class AlphaFault : public virtual FaultBase
|
||||||
virtual FaultVect vect() = 0;
|
virtual FaultVect vect() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AlphaMachineCheckFault :
|
class MachineCheckFault : public AlphaFault
|
||||||
public MachineCheckFault,
|
|
||||||
public AlphaFault
|
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
static FaultName _name;
|
||||||
static FaultVect _vect;
|
static FaultVect _vect;
|
||||||
static FaultStat _stat;
|
static FaultStat _stat;
|
||||||
public:
|
public:
|
||||||
|
FaultName name() {return _name;}
|
||||||
FaultVect vect() {return _vect;}
|
FaultVect vect() {return _vect;}
|
||||||
FaultStat & stat() {return _stat;}
|
FaultStat & stat() {return _stat;}
|
||||||
|
bool isMachineCheckFault() {return true;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class AlphaAlignmentFault :
|
class AlignmentFault : public AlphaFault
|
||||||
public AlignmentFault,
|
|
||||||
public AlphaFault
|
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
static FaultName _name;
|
||||||
static FaultVect _vect;
|
static FaultVect _vect;
|
||||||
static FaultStat _stat;
|
static FaultStat _stat;
|
||||||
public:
|
public:
|
||||||
|
FaultName name() {return _name;}
|
||||||
FaultVect vect() {return _vect;}
|
FaultVect vect() {return _vect;}
|
||||||
FaultStat & stat() {return _stat;}
|
FaultStat & stat() {return _stat;}
|
||||||
|
bool isAlignmentFault() {return true;}
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline Fault genMachineCheckFault()
|
static inline Fault genMachineCheckFault()
|
||||||
{
|
{
|
||||||
return new AlphaMachineCheckFault;
|
return new MachineCheckFault;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Fault genAlignmentFault()
|
static inline Fault genAlignmentFault()
|
||||||
{
|
{
|
||||||
return new AlphaAlignmentFault;
|
return new AlignmentFault;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ResetFault : public AlphaFault
|
class ResetFault : public AlphaFault
|
||||||
|
@ -108,7 +110,9 @@ class ArithmeticFault : public AlphaFault
|
||||||
FaultName name() {return _name;}
|
FaultName name() {return _name;}
|
||||||
FaultVect vect() {return _vect;}
|
FaultVect vect() {return _vect;}
|
||||||
FaultStat & stat() {return _stat;}
|
FaultStat & stat() {return _stat;}
|
||||||
|
#if FULL_SYSTEM
|
||||||
void invoke(ExecContext * xc);
|
void invoke(ExecContext * xc);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
class InterruptFault : public AlphaFault
|
class InterruptFault : public AlphaFault
|
||||||
|
|
|
@ -29,9 +29,6 @@
|
||||||
#include "sim/faults.hh"
|
#include "sim/faults.hh"
|
||||||
#include "cpu/exec_context.hh"
|
#include "cpu/exec_context.hh"
|
||||||
|
|
||||||
FaultName MachineCheckFault::_name = "mchk";
|
|
||||||
FaultName AlignmentFault::_name = "unalign";
|
|
||||||
|
|
||||||
#if !FULL_SYSTEM
|
#if !FULL_SYSTEM
|
||||||
void FaultBase::invoke(ExecContext * xc)
|
void FaultBase::invoke(ExecContext * xc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,29 +65,4 @@ class FaultBase : public RefCounted
|
||||||
|
|
||||||
FaultBase * const NoFault = 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 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__
|
#endif // __FAULTS_HH__
|
||||||
|
|
Loading…
Reference in a new issue