44c44
< class MipsFault : public FaultBase
---
> class MipsFaultBase : public FaultBase
49a50,56
> struct FaultVals
> {
> const FaultName name;
> const FaultVect vect;
> FaultStat count;
> };
>
62,63d68
< virtual FaultVect vect() = 0;
< virtual FaultStat & countStat() = 0;
66c71,72
< class MachineCheckFault : public MipsFault
---
> template <typename T>
> class MipsFault : public MipsFaultBase
68,71c74,75
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
---
> protected:
> static FaultVals vals;
73,75c77,84
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
---
> FaultName name() const { return vals.name; }
> FaultVect vect() const { return vals.vect; }
> FaultStat & countStat() { return vals.count; }
> };
>
> class MachineCheckFault : public MipsFault<MachineCheckFault>
> {
> public:
79c88
< class NonMaskableInterrupt : public MipsFault
---
> class NonMaskableInterrupt : public MipsFault<NonMaskableInterrupt>
81,84d89
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
86,88d90
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
92c94
< class AlignmentFault : public MipsFault
---
> class AlignmentFault : public MipsFault<AlignmentFault>
94,97d95
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
99,101d96
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
105c100
< class AddressErrorFault : public MipsFault
---
> class AddressErrorFault : public MipsFault<AddressErrorFault>
107,110d101
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
112,114d102
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
122c110
< class StoreAddressErrorFault : public MipsFault
---
> class StoreAddressErrorFault : public MipsFault<StoreAddressErrorFault>
124,127d111
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
129,131d112
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
138,148c119
< class UnimplementedOpcodeFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
---
> class UnimplementedOpcodeFault : public MipsFault<UnimplementedOpcodeFault> {};
150,151c121
<
< class TLBRefillIFetchFault : public MipsFault
---
> class TLBRefillIFetchFault : public MipsFault<TLBRefillIFetchFault>
153,157d122
< private:
< Addr vaddr;
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
159,161d123
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
166c128
< class TLBInvalidIFetchFault : public MipsFault
---
> class TLBInvalidIFetchFault : public MipsFault<TLBInvalidIFetchFault>
168,172d129
< private:
< Addr vaddr;
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
174,176d130
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
181,191c135,138
< class NDtbMissFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
---
> class NDtbMissFault : public MipsFault<NDtbMissFault> {};
> class PDtbMissFault : public MipsFault<PDtbMissFault> {};
> class DtbPageFault : public MipsFault<DtbPageFault> {};
> class DtbAcvFault : public MipsFault<DtbAcvFault> {};
193,229d139
< class PDtbMissFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
<
< class DtbPageFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
<
< class DtbAcvFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
<
<
240c150
< class ResetFault : public MipsFault
---
> class ResetFault : public MipsFault<ResetFault>
242,245d151
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
247,249d152
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
255c158
< class SystemCallFault : public MipsFault
---
> class SystemCallFault : public MipsFault<SystemCallFault>
257,260d159
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
262,264d160
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
271c167
< class SoftResetFault : public MipsFault
---
> class SoftResetFault : public MipsFault<SoftResetFault>
273,276d168
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
278,280d169
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
285c174
< class DebugSingleStep : public MipsFault
---
> class DebugSingleStep : public MipsFault<DebugSingleStep>
287,290d175
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
292,294d176
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
299c181
< class DebugInterrupt : public MipsFault
---
> class DebugInterrupt : public MipsFault<DebugInterrupt>
301,304d182
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
306,308d183
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
313c188
< class CoprocessorUnusableFault : public MipsFault
---
> class CoprocessorUnusableFault : public MipsFault<CoprocessorUnusableFault>
315,318c190
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
---
> protected:
321,323c193,195
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
---
> CoprocessorUnusableFault(int _procid) : coProcID(_procid)
> {}
>
326d197
< CoprocessorUnusableFault(int _procid){ coProcID = _procid;}
329c200
< class ReservedInstructionFault : public MipsFault
---
> class ReservedInstructionFault : public MipsFault<ReservedInstructionFault>
331,334d201
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
336,338d202
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
343c207
< class ThreadFault : public MipsFault
---
> class ThreadFault : public MipsFault<ThreadFault>
345,348d208
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
350,352d209
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
357c214
< class ArithmeticFault : public MipsFault
---
> class ArithmeticFault : public MipsFault<ArithmeticFault>
361,364d217
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
366,368d218
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
375c225
< class InterruptFault : public MipsFault
---
> class InterruptFault : public MipsFault<InterruptFault>
379,382d228
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
384,387d229
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
<
394c236
< class TrapFault : public MipsFault
---
> class TrapFault : public MipsFault<TrapFault>
396,399d237
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
401,403d238
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
410c245
< class BreakpointFault : public MipsFault
---
> class BreakpointFault : public MipsFault<BreakpointFault>
412,415d246
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
417,419d247
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
426c254
< class ItbRefillFault : public MipsFault
---
> class ItbRefillFault : public MipsFault<ItbRefillFault>
428,431d255
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
433,435d256
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
442c263
< class DtbRefillFault : public MipsFault
---
> class DtbRefillFault : public MipsFault<DtbRefillFault>
444,447d264
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
449,451d265
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
458c272
< class ItbPageFault : public MipsFault
---
> class ItbPageFault : public MipsFault<ItbPageFault>
460,463d273
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
465,467d274
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
474c281
< class ItbInvalidFault : public MipsFault
---
> class ItbInvalidFault : public MipsFault<ItbInvalidFault>
476,479d282
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
481,483d283
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
490c290
< class TLBModifiedFault : public MipsFault
---
> class TLBModifiedFault : public MipsFault<TLBModifiedFault>
492,495d291
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
497,499d292
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
506c299
< class DtbInvalidFault : public MipsFault
---
> class DtbInvalidFault : public MipsFault<DtbInvalidFault>
508,511d300
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
513,515d301
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
522,532c308,311
< class FloatEnableFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
---
> class FloatEnableFault : public MipsFault<FloatEnableFault> {};
> class ItbMissFault : public MipsFault<ItbMissFault> {};
> class ItbAcvFault : public MipsFault<ItbAcvFault> {};
> class IntegerOverflowFault : public MipsFault<IntegerOverflowFault> {};
534c313
< class ItbMissFault : public MipsFault
---
> class DspStateDisabledFault : public MipsFault<DspStateDisabledFault>
536,539d314
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
541,579d315
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
<
< class ItbAcvFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
<
< class IntegerOverflowFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}
< };
<
< class DspStateDisabledFault : public MipsFault
< {
< private:
< static FaultName _name;
< static FaultVect _vect;
< static FaultStat _count;
< public:
< FaultName name() const {return _name;}
< FaultVect vect() {return _vect;}
< FaultStat & countStat() {return _count;}