faults.hh revision 6379:75d4aaf7dd54
12SN/A/*
29235Sandreas.hansson@arm.com * Copyright (c) 2003-2005 The Regents of The University of Michigan
39235Sandreas.hansson@arm.com * Copyright (c) 2007 MIPS Technologies, Inc.
49235Sandreas.hansson@arm.com * All rights reserved.
59235Sandreas.hansson@arm.com *
69235Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without
79235Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are
89235Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright
99235Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer;
109235Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright
119235Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the
129235Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution;
139235Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its
141762SN/A * contributors may be used to endorse or promote products derived from
152SN/A * this software without specific prior written permission.
162SN/A *
172SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
182SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
192SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
202SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
212SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
222SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
232SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
242SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
252SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
262SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
272SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
282SN/A *
292SN/A * Authors: Gabe Black
302SN/A *          Korey Sewell
312SN/A *          Jaidev Patwardhan
322SN/A */
332SN/A
342SN/A#ifndef __MIPS_FAULTS_HH__
352SN/A#define __MIPS_FAULTS_HH__
362SN/A
372SN/A#include "sim/faults.hh"
382SN/A
392665SN/Anamespace MipsISA
402665SN/A{
412665SN/A
429235Sandreas.hansson@arm.comtypedef const Addr FaultVect;
432SN/A
442SN/Aclass MipsFault : public FaultBase
459235Sandreas.hansson@arm.com{
469235Sandreas.hansson@arm.com  protected:
472SN/A    virtual bool skipFaultingInstruction() {return false;}
4810481Sandreas.hansson@arm.com    virtual bool setRestartAddress() {return true;}
499412Sandreas.hansson@arm.com  public:
509412Sandreas.hansson@arm.com    Addr badVAddr;
519411Sandreas.hansson@arm.com    Addr entryHiAsid;
529405Sandreas.hansson@arm.com    Addr entryHiVPN2;
539411Sandreas.hansson@arm.com    Addr entryHiVPN2X;
549235Sandreas.hansson@arm.com    Addr contextBadVPN2;
559235Sandreas.hansson@arm.com#if FULL_SYSTEM
569235Sandreas.hansson@arm.com    void invoke(ThreadContext * tc) {};
572SN/A    void setExceptionState(ThreadContext *, uint8_t);
582SN/A    void setHandlerPC(Addr, ThreadContext *);
599405Sandreas.hansson@arm.com#endif
609405Sandreas.hansson@arm.com    virtual FaultVect vect() = 0;
619411Sandreas.hansson@arm.com    virtual FaultStat & countStat() = 0;
6210435Snilay@cs.wisc.edu};
639405Sandreas.hansson@arm.com
649405Sandreas.hansson@arm.comclass MachineCheckFault : public MipsFault
659405Sandreas.hansson@arm.com{
669411Sandreas.hansson@arm.com  private:
679411Sandreas.hansson@arm.com    static FaultName _name;
689411Sandreas.hansson@arm.com    static FaultVect _vect;
699411Sandreas.hansson@arm.com    static FaultStat _count;
709411Sandreas.hansson@arm.com  public:
719411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
729411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
739411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
749411Sandreas.hansson@arm.com    bool isMachineCheckFault() {return true;}
759411Sandreas.hansson@arm.com};
769235Sandreas.hansson@arm.com
772SN/Aclass NonMaskableInterrupt : public MipsFault
789235Sandreas.hansson@arm.com{
799411Sandreas.hansson@arm.com  private:
809411Sandreas.hansson@arm.com    static FaultName _name;
819411Sandreas.hansson@arm.com    static FaultVect _vect;
829411Sandreas.hansson@arm.com    static FaultStat _count;
839411Sandreas.hansson@arm.com  public:
849411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
859411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
869235Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
879235Sandreas.hansson@arm.com    bool isNonMaskableInterrupt() {return true;}
889235Sandreas.hansson@arm.com};
899411Sandreas.hansson@arm.com
909411Sandreas.hansson@arm.comclass AlignmentFault : public MipsFault
919235Sandreas.hansson@arm.com{
929235Sandreas.hansson@arm.com  private:
939405Sandreas.hansson@arm.com    static FaultName _name;
949412Sandreas.hansson@arm.com    static FaultVect _vect;
959412Sandreas.hansson@arm.com    static FaultStat _count;
969412Sandreas.hansson@arm.com  public:
979412Sandreas.hansson@arm.com    FaultName name() const {return _name;}
989412Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
999412Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1009412Sandreas.hansson@arm.com    bool isAlignmentFault() {return true;}
1019412Sandreas.hansson@arm.com};
1029412Sandreas.hansson@arm.com
1039412Sandreas.hansson@arm.comclass AddressErrorFault : public MipsFault
1049412Sandreas.hansson@arm.com{
1059412Sandreas.hansson@arm.com  private:
1069412Sandreas.hansson@arm.com    static FaultName _name;
1079412Sandreas.hansson@arm.com    static FaultVect _vect;
1089412Sandreas.hansson@arm.com    static FaultStat _count;
1099412Sandreas.hansson@arm.com  public:
1109412Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1119412Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
1129412Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1139412Sandreas.hansson@arm.com#if FULL_SYSTEM
1149412Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
1159412Sandreas.hansson@arm.com#endif
1169412Sandreas.hansson@arm.com
1179412Sandreas.hansson@arm.com};
1189412Sandreas.hansson@arm.com
1199412Sandreas.hansson@arm.comclass StoreAddressErrorFault : public MipsFault
1209412Sandreas.hansson@arm.com{
1219412Sandreas.hansson@arm.com  private:
1229412Sandreas.hansson@arm.com    static FaultName _name;
1239412Sandreas.hansson@arm.com    static FaultVect _vect;
1249412Sandreas.hansson@arm.com    static FaultStat _count;
1259412Sandreas.hansson@arm.com  public:
1269412Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1279412Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
1289412Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1299412Sandreas.hansson@arm.com#if FULL_SYSTEM
1309412Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
1319412Sandreas.hansson@arm.com#endif
1329412Sandreas.hansson@arm.com};
1339412Sandreas.hansson@arm.com
1349411Sandreas.hansson@arm.comclass UnimplementedOpcodeFault : public MipsFault
1359411Sandreas.hansson@arm.com{
1369411Sandreas.hansson@arm.com  private:
1379411Sandreas.hansson@arm.com    static FaultName _name;
1389411Sandreas.hansson@arm.com    static FaultVect _vect;
1399411Sandreas.hansson@arm.com    static FaultStat _count;
1409411Sandreas.hansson@arm.com  public:
1419411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1429411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
1439411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1449411Sandreas.hansson@arm.com};
1459581Sandreas.hansson@arm.com
1469581Sandreas.hansson@arm.com
1479780Sandreas.hansson@arm.comclass TLBRefillIFetchFault : public MipsFault
1489581Sandreas.hansson@arm.com{
1499411Sandreas.hansson@arm.com  private:
1509411Sandreas.hansson@arm.com    Addr vaddr;
1519411Sandreas.hansson@arm.com    static FaultName _name;
1529411Sandreas.hansson@arm.com    static FaultVect _vect;
1539411Sandreas.hansson@arm.com    static FaultStat _count;
1549411Sandreas.hansson@arm.com  public:
1559411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1569411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
1579411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1589411Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
1599405Sandreas.hansson@arm.com};
1609411Sandreas.hansson@arm.com
1619411Sandreas.hansson@arm.comclass TLBInvalidIFetchFault : public MipsFault
1629405Sandreas.hansson@arm.com{
1639411Sandreas.hansson@arm.com  private:
1649411Sandreas.hansson@arm.com    Addr vaddr;
1659411Sandreas.hansson@arm.com    static FaultName _name;
1669411Sandreas.hansson@arm.com    static FaultVect _vect;
167532SN/A    static FaultStat _count;
1689405Sandreas.hansson@arm.com  public:
1699405Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1709405Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
17110435Snilay@cs.wisc.edu    FaultStat & countStat() {return _count;}
1729405Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
1739405Sandreas.hansson@arm.com};
1749405Sandreas.hansson@arm.com
1759405Sandreas.hansson@arm.comclass NDtbMissFault : public MipsFault
1769405Sandreas.hansson@arm.com{
1779405Sandreas.hansson@arm.com  private:
1789405Sandreas.hansson@arm.com    static FaultName _name;
1799405Sandreas.hansson@arm.com    static FaultVect _vect;
1809405Sandreas.hansson@arm.com    static FaultStat _count;
1819405Sandreas.hansson@arm.com  public:
1829405Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1839405Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
1849405Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1859411Sandreas.hansson@arm.com};
1869411Sandreas.hansson@arm.com
1879411Sandreas.hansson@arm.comclass PDtbMissFault : public MipsFault
1889411Sandreas.hansson@arm.com{
1899411Sandreas.hansson@arm.com  private:
1909411Sandreas.hansson@arm.com    static FaultName _name;
1919411Sandreas.hansson@arm.com    static FaultVect _vect;
1929411Sandreas.hansson@arm.com    static FaultStat _count;
1939411Sandreas.hansson@arm.com  public:
1949411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
1959411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
1969411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
1979411Sandreas.hansson@arm.com};
1989411Sandreas.hansson@arm.com
1999411Sandreas.hansson@arm.comclass DtbPageFault : public MipsFault
2009411Sandreas.hansson@arm.com{
2019411Sandreas.hansson@arm.com  private:
2029411Sandreas.hansson@arm.com    static FaultName _name;
2039411Sandreas.hansson@arm.com    static FaultVect _vect;
2049411Sandreas.hansson@arm.com    static FaultStat _count;
2059411Sandreas.hansson@arm.com  public:
2069405Sandreas.hansson@arm.com    FaultName name() const {return _name;}
2079279Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
2089279Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
2099279Sandreas.hansson@arm.com};
2109279Sandreas.hansson@arm.com
2119279Sandreas.hansson@arm.comclass DtbAcvFault : public MipsFault
2129279Sandreas.hansson@arm.com{
2139279Sandreas.hansson@arm.com  private:
2149279Sandreas.hansson@arm.com    static FaultName _name;
2159279Sandreas.hansson@arm.com    static FaultVect _vect;
2169279Sandreas.hansson@arm.com    static FaultStat _count;
2179279Sandreas.hansson@arm.com  public:
2189411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
2199411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
2209411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
2219411Sandreas.hansson@arm.com};
2229411Sandreas.hansson@arm.com
2239411Sandreas.hansson@arm.comclass CacheErrorFault : public MipsFault
2249411Sandreas.hansson@arm.com{
2259411Sandreas.hansson@arm.com  private:
2269411Sandreas.hansson@arm.com    Addr vaddr;
2279411Sandreas.hansson@arm.com    static FaultName _name;
2289411Sandreas.hansson@arm.com    static FaultVect _vect;
2299411Sandreas.hansson@arm.com    static FaultStat _count;
2309411Sandreas.hansson@arm.com  public:
2319411Sandreas.hansson@arm.com    FaultName name() const {return _name;}
2329411Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
2339411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
2349411Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
2359411Sandreas.hansson@arm.com};
2369411Sandreas.hansson@arm.com
2379411Sandreas.hansson@arm.com
2389279Sandreas.hansson@arm.com
2399279Sandreas.hansson@arm.com
2409279Sandreas.hansson@arm.comstatic inline Fault genMachineCheckFault()
2419279Sandreas.hansson@arm.com{
2429279Sandreas.hansson@arm.com    return new MachineCheckFault;
2439279Sandreas.hansson@arm.com}
2449279Sandreas.hansson@arm.com
2459279Sandreas.hansson@arm.comstatic inline Fault genAlignmentFault()
2469279Sandreas.hansson@arm.com{
2479279Sandreas.hansson@arm.com    return new AlignmentFault;
2489279Sandreas.hansson@arm.com}
2499279Sandreas.hansson@arm.com
2509411Sandreas.hansson@arm.comclass ResetFault : public MipsFault
2519411Sandreas.hansson@arm.com{
2529405Sandreas.hansson@arm.com  private:
2539279Sandreas.hansson@arm.com    static FaultName _name;
2549405Sandreas.hansson@arm.com    static FaultVect _vect;
2559405Sandreas.hansson@arm.com    static FaultStat _count;
2569405Sandreas.hansson@arm.com  public:
2579405Sandreas.hansson@arm.com    FaultName name() const {return _name;}
2589405Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
2599405Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
2609405Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
2619405Sandreas.hansson@arm.com
2629405Sandreas.hansson@arm.com};
2639411Sandreas.hansson@arm.com
2649411Sandreas.hansson@arm.comclass SystemCallFault : public MipsFault
2659411Sandreas.hansson@arm.com{
2669411Sandreas.hansson@arm.com  private:
2679541Sandreas.hansson@arm.com    static FaultName _name;
2689411Sandreas.hansson@arm.com    static FaultVect _vect;
2699411Sandreas.hansson@arm.com    static FaultStat _count;
2709405Sandreas.hansson@arm.com  public:
2712SN/A    FaultName name() const {return _name;}
272531SN/A    FaultVect vect() {return _vect;}
2739235Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
274531SN/A    void invoke(ThreadContext * tc);
2759235Sandreas.hansson@arm.com};
2762SN/A
2779405Sandreas.hansson@arm.comclass SoftResetFault : public MipsFault
2789405Sandreas.hansson@arm.com{
2799405Sandreas.hansson@arm.com  private:
2809405Sandreas.hansson@arm.com    static FaultName _name;
2819405Sandreas.hansson@arm.com    static FaultVect _vect;
2829405Sandreas.hansson@arm.com    static FaultStat _count;
2839405Sandreas.hansson@arm.com  public:
2849405Sandreas.hansson@arm.com    FaultName name() const {return _name;}
2859405Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
2869411Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
2879411Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
2889411Sandreas.hansson@arm.com};
2899411Sandreas.hansson@arm.com
2909411Sandreas.hansson@arm.comclass DebugSingleStep : public MipsFault
2919411Sandreas.hansson@arm.com{
2929405Sandreas.hansson@arm.com  private:
293531SN/A    static FaultName _name;
2949405Sandreas.hansson@arm.com    static FaultVect _vect;
2959405Sandreas.hansson@arm.com    static FaultStat _count;
2962SN/A  public:
29710481Sandreas.hansson@arm.com    FaultName name() const {return _name;}
29810481Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
29910481Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
30010481Sandreas.hansson@arm.com    void invoke(ThreadContext * tc);
30110481Sandreas.hansson@arm.com};
3029235Sandreas.hansson@arm.com
3039235Sandreas.hansson@arm.comclass DebugInterrupt : public MipsFault
3049405Sandreas.hansson@arm.com{
3052SN/A  private:
3069235Sandreas.hansson@arm.com    static FaultName _name;
3079235Sandreas.hansson@arm.com    static FaultVect _vect;
3089405Sandreas.hansson@arm.com    static FaultStat _count;
3092SN/A  public:
3109235Sandreas.hansson@arm.com    FaultName name() const {return _name;}
3119235Sandreas.hansson@arm.com    FaultVect vect() {return _vect;}
3129405Sandreas.hansson@arm.com    FaultStat & countStat() {return _count;}
3132SN/A    void invoke(ThreadContext * tc);
3149235Sandreas.hansson@arm.com};
315
316class CoprocessorUnusableFault : public MipsFault
317{
318  private:
319    static FaultName _name;
320    static FaultVect _vect;
321    static FaultStat _count;
322    int coProcID;
323  public:
324    FaultName name() const {return _name;}
325    FaultVect vect() {return _vect;}
326    FaultStat & countStat() {return _count;}
327    void invoke(ThreadContext * tc);
328    CoprocessorUnusableFault(int _procid){ coProcID = _procid;}
329};
330
331class ReservedInstructionFault : public MipsFault
332{
333  private:
334    static FaultName _name;
335    static FaultVect _vect;
336    static FaultStat _count;
337  public:
338    FaultName name() const {return _name;}
339    FaultVect vect() {return _vect;}
340    FaultStat & countStat() {return _count;}
341    void invoke(ThreadContext * tc);
342};
343
344class ThreadFault : public MipsFault
345{
346  private:
347    static FaultName _name;
348    static FaultVect _vect;
349    static FaultStat _count;
350  public:
351    FaultName name() const {return _name;}
352    FaultVect vect() {return _vect;}
353    FaultStat & countStat() {return _count;}
354    void invoke(ThreadContext * tc);
355};
356
357class ArithmeticFault : public MipsFault
358{
359  protected:
360    bool skipFaultingInstruction() {return true;}
361  private:
362    static FaultName _name;
363    static FaultVect _vect;
364    static FaultStat _count;
365  public:
366    FaultName name() const {return _name;}
367    FaultVect vect() {return _vect;}
368    FaultStat & countStat() {return _count;}
369#if FULL_SYSTEM
370    void invoke(ThreadContext * tc);
371#endif
372};
373
374class InterruptFault : public MipsFault
375{
376  protected:
377    bool setRestartAddress() {return false;}
378  private:
379    static FaultName _name;
380    static FaultVect _vect;
381    static FaultStat _count;
382  public:
383    FaultName name() const {return _name;}
384    FaultVect vect() {return _vect;}
385    FaultStat & countStat() {return _count;}
386
387#if FULL_SYSTEM
388    void invoke(ThreadContext * tc);
389#endif
390};
391
392class TrapFault : public MipsFault
393{
394  private:
395    static FaultName _name;
396    static FaultVect _vect;
397    static FaultStat _count;
398  public:
399    FaultName name() const {return _name;}
400    FaultVect vect() {return _vect;}
401    FaultStat & countStat() {return _count;}
402#if FULL_SYSTEM
403    void invoke(ThreadContext * tc);
404#endif
405};
406
407class BreakpointFault : public MipsFault
408{
409  private:
410    static FaultName _name;
411    static FaultVect _vect;
412    static FaultStat _count;
413  public:
414    FaultName name() const {return _name;}
415    FaultVect vect() {return _vect;}
416    FaultStat & countStat() {return _count;}
417#if FULL_SYSTEM
418    void invoke(ThreadContext * tc);
419#endif
420};
421
422class ItbRefillFault : public MipsFault
423{
424  private:
425    static FaultName _name;
426    static FaultVect _vect;
427    static FaultStat _count;
428  public:
429    FaultName name() const {return _name;}
430    FaultVect vect() {return _vect;}
431    FaultStat & countStat() {return _count;}
432#if FULL_SYSTEM
433    void invoke(ThreadContext * tc);
434#endif
435};
436
437class DtbRefillFault : public MipsFault
438{
439  private:
440    static FaultName _name;
441    static FaultVect _vect;
442    static FaultStat _count;
443  public:
444    FaultName name() const {return _name;}
445    FaultVect vect() {return _vect;}
446    FaultStat & countStat() {return _count;}
447#if FULL_SYSTEM
448    void invoke(ThreadContext * tc);
449#endif
450};
451
452class ItbPageFault : public MipsFault
453{
454  private:
455    static FaultName _name;
456    static FaultVect _vect;
457    static FaultStat _count;
458  public:
459    FaultName name() const {return _name;}
460    FaultVect vect() {return _vect;}
461    FaultStat & countStat() {return _count;}
462#if FULL_SYSTEM
463    void invoke(ThreadContext * tc);
464#endif
465};
466
467class ItbInvalidFault : public MipsFault
468{
469  private:
470    static FaultName _name;
471    static FaultVect _vect;
472    static FaultStat _count;
473  public:
474    FaultName name() const {return _name;}
475    FaultVect vect() {return _vect;}
476    FaultStat & countStat() {return _count;}
477#if FULL_SYSTEM
478    void invoke(ThreadContext * tc);
479#endif
480};
481
482class TLBModifiedFault : public MipsFault
483{
484  private:
485    static FaultName _name;
486    static FaultVect _vect;
487    static FaultStat _count;
488  public:
489    FaultName name() const {return _name;}
490    FaultVect vect() {return _vect;}
491    FaultStat & countStat() {return _count;}
492#if FULL_SYSTEM
493    void invoke(ThreadContext * tc);
494#endif
495};
496
497class DtbInvalidFault : public MipsFault
498{
499  private:
500    static FaultName _name;
501    static FaultVect _vect;
502    static FaultStat _count;
503  public:
504    FaultName name() const {return _name;}
505    FaultVect vect() {return _vect;}
506    FaultStat & countStat() {return _count;}
507#if FULL_SYSTEM
508    void invoke(ThreadContext * tc);
509#endif
510};
511
512class FloatEnableFault : public MipsFault
513{
514  private:
515    static FaultName _name;
516    static FaultVect _vect;
517    static FaultStat _count;
518  public:
519    FaultName name() const {return _name;}
520    FaultVect vect() {return _vect;}
521    FaultStat & countStat() {return _count;}
522};
523
524class ItbMissFault : public MipsFault
525{
526  private:
527    static FaultName _name;
528    static FaultVect _vect;
529    static FaultStat _count;
530  public:
531    FaultName name() const {return _name;}
532    FaultVect vect() {return _vect;}
533    FaultStat & countStat() {return _count;}
534};
535
536class ItbAcvFault : public MipsFault
537{
538  private:
539    static FaultName _name;
540    static FaultVect _vect;
541    static FaultStat _count;
542  public:
543    FaultName name() const {return _name;}
544    FaultVect vect() {return _vect;}
545    FaultStat & countStat() {return _count;}
546};
547
548class IntegerOverflowFault : public MipsFault
549{
550  private:
551    static FaultName _name;
552    static FaultVect _vect;
553    static FaultStat _count;
554  public:
555    FaultName name() const {return _name;}
556    FaultVect vect() {return _vect;}
557    FaultStat & countStat() {return _count;}
558};
559
560class DspStateDisabledFault : public MipsFault
561{
562  private:
563    static FaultName _name;
564    static FaultVect _vect;
565    static FaultStat _count;
566  public:
567    FaultName name() const {return _name;}
568    FaultVect vect() {return _vect;}
569    FaultStat & countStat() {return _count;}
570    void invoke(ThreadContext * tc);
571};
572
573} // MipsISA namespace
574
575#endif // __MIPS_FAULTS_HH__
576