faults.hh revision 5224
12131SN/A/*
25224Sksewell@umich.edu * Copyright (c) 2007 MIPS Technologies, Inc.
35224Sksewell@umich.edu * All rights reserved.
42131SN/A *
55224Sksewell@umich.edu * Redistribution and use in source and binary forms, with or without
65224Sksewell@umich.edu * modification, are permitted provided that the following conditions are
75224Sksewell@umich.edu * met: redistributions of source code must retain the above copyright
85224Sksewell@umich.edu * notice, this list of conditions and the following disclaimer;
95224Sksewell@umich.edu * redistributions in binary form must reproduce the above copyright
105224Sksewell@umich.edu * notice, this list of conditions and the following disclaimer in the
115224Sksewell@umich.edu * documentation and/or other materials provided with the distribution;
125224Sksewell@umich.edu * neither the name of the copyright holders nor the names of its
135224Sksewell@umich.edu * contributors may be used to endorse or promote products derived from
145224Sksewell@umich.edu * this software without specific prior written permission.
152131SN/A *
165224Sksewell@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175224Sksewell@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185224Sksewell@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195224Sksewell@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205224Sksewell@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215224Sksewell@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225224Sksewell@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235224Sksewell@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245224Sksewell@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255224Sksewell@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265224Sksewell@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272665Ssaidi@eecs.umich.edu *
285224Sksewell@umich.edu * Authors: Gabe Black
295224Sksewell@umich.edu *          Korey Sewell
305222Sksewell@umich.edu *          Jaidev Patwardhan
312131SN/A */
322131SN/A
332239SN/A#ifndef __MIPS_FAULTS_HH__
342239SN/A#define __MIPS_FAULTS_HH__
352131SN/A
362131SN/A#include "sim/faults.hh"
372447SN/A
382447SN/A// The design of the "name" and "vect" functions is in sim/faults.hh
392447SN/A
402447SN/Anamespace MipsISA
412447SN/A{
422447SN/Atypedef const Addr FaultVect;
432131SN/A
442239SN/Aclass MipsFault : public FaultBase
452131SN/A{
462447SN/A  protected:
472447SN/A    virtual bool skipFaultingInstruction() {return false;}
482447SN/A    virtual bool setRestartAddress() {return true;}
492131SN/A  public:
505222Sksewell@umich.edu    Addr BadVAddr;
515222Sksewell@umich.edu    Addr EntryHi_Asid;
525222Sksewell@umich.edu    Addr EntryHi_VPN2;
535222Sksewell@umich.edu    Addr EntryHi_VPN2X;
545222Sksewell@umich.edu    Addr Context_BadVPN2;
552447SN/A#if FULL_SYSTEM
565222Sksewell@umich.edu  void invoke(ThreadContext * tc) {};
575222Sksewell@umich.edu  void setExceptionState(ThreadContext *,uint8_t);
585222Sksewell@umich.edu  void setHandlerPC(Addr,ThreadContext *);
592447SN/A#endif
602447SN/A    virtual FaultVect vect() = 0;
612447SN/A    virtual FaultStat & countStat() = 0;
622131SN/A};
632131SN/A
642447SN/Aclass MachineCheckFault : public MipsFault
652131SN/A{
662447SN/A  private:
672447SN/A    static FaultName _name;
682447SN/A    static FaultVect _vect;
692447SN/A    static FaultStat _count;
702131SN/A  public:
714695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
722447SN/A    FaultVect vect() {return _vect;}
732447SN/A    FaultStat & countStat() {return _count;}
745222Sksewell@umich.edu    bool isMachineCheckFault() {return true;}
755222Sksewell@umich.edu};
765222Sksewell@umich.edu
775222Sksewell@umich.educlass NonMaskableInterrupt : public MipsFault
785222Sksewell@umich.edu{
795222Sksewell@umich.edu  private:
805222Sksewell@umich.edu    static FaultName _name;
815222Sksewell@umich.edu    static FaultVect _vect;
825222Sksewell@umich.edu    static FaultStat _count;
835222Sksewell@umich.edu  public:
845222Sksewell@umich.edu    FaultName name() const {return _name;}
855222Sksewell@umich.edu    FaultVect vect() {return _vect;}
865222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
875222Sksewell@umich.edu    bool isNonMaskableInterrupt() {return true;}
882447SN/A};
892131SN/A
902447SN/Aclass AlignmentFault : public MipsFault
912131SN/A{
922447SN/A  private:
932447SN/A    static FaultName _name;
942447SN/A    static FaultVect _vect;
952447SN/A    static FaultStat _count;
962131SN/A  public:
974695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
982447SN/A    FaultVect vect() {return _vect;}
992447SN/A    FaultStat & countStat() {return _count;}
1005222Sksewell@umich.edu    bool isAlignmentFault() {return true;}
1012447SN/A};
1022131SN/A
1035222Sksewell@umich.educlass AddressErrorFault : public MipsFault
1045222Sksewell@umich.edu{
1055222Sksewell@umich.edu  private:
1065222Sksewell@umich.edu    static FaultName _name;
1075222Sksewell@umich.edu    static FaultVect _vect;
1085222Sksewell@umich.edu    static FaultStat _count;
1095222Sksewell@umich.edu  public:
1105222Sksewell@umich.edu    FaultName name() const {return _name;}
1115222Sksewell@umich.edu    FaultVect vect() {return _vect;}
1125222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
1135222Sksewell@umich.edu#if FULL_SYSTEM
1145222Sksewell@umich.edu    void invoke(ThreadContext * tc);
1155222Sksewell@umich.edu#endif
1165222Sksewell@umich.edu
1175222Sksewell@umich.edu};
1185222Sksewell@umich.educlass StoreAddressErrorFault : public MipsFault
1195222Sksewell@umich.edu{
1205222Sksewell@umich.edu  private:
1215222Sksewell@umich.edu    static FaultName _name;
1225222Sksewell@umich.edu    static FaultVect _vect;
1235222Sksewell@umich.edu    static FaultStat _count;
1245222Sksewell@umich.edu  public:
1255222Sksewell@umich.edu    FaultName name() const {return _name;}
1265222Sksewell@umich.edu    FaultVect vect() {return _vect;}
1275222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
1285222Sksewell@umich.edu#if FULL_SYSTEM
1295222Sksewell@umich.edu    void invoke(ThreadContext * tc);
1305222Sksewell@umich.edu#endif
1315222Sksewell@umich.edu
1325222Sksewell@umich.edu};
1334661Sksewell@umich.educlass UnimplementedOpcodeFault : public MipsFault
1344661Sksewell@umich.edu{
1354661Sksewell@umich.edu  private:
1364661Sksewell@umich.edu    static FaultName _name;
1374661Sksewell@umich.edu    static FaultVect _vect;
1384661Sksewell@umich.edu    static FaultStat _count;
1394661Sksewell@umich.edu  public:
1404695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
1414661Sksewell@umich.edu    FaultVect vect() {return _vect;}
1424661Sksewell@umich.edu    FaultStat & countStat() {return _count;}
1434661Sksewell@umich.edu};
1444661Sksewell@umich.edu
1452447SN/A
1465222Sksewell@umich.educlass TLBRefillIFetchFault : public MipsFault
1472447SN/A{
1482447SN/A  private:
1495222Sksewell@umich.edu    Addr vaddr;
1502447SN/A    static FaultName _name;
1512447SN/A    static FaultVect _vect;
1522447SN/A    static FaultStat _count;
1532131SN/A  public:
1544695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
1552447SN/A    FaultVect vect() {return _vect;}
1562447SN/A    FaultStat & countStat() {return _count;}
1574661Sksewell@umich.edu    void invoke(ThreadContext * tc);
1582447SN/A};
1595222Sksewell@umich.educlass TLBInvalidIFetchFault : public MipsFault
1604661Sksewell@umich.edu{
1614661Sksewell@umich.edu  private:
1625222Sksewell@umich.edu    Addr vaddr;
1634661Sksewell@umich.edu    static FaultName _name;
1644661Sksewell@umich.edu    static FaultVect _vect;
1654661Sksewell@umich.edu    static FaultStat _count;
1664661Sksewell@umich.edu  public:
1674695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
1684661Sksewell@umich.edu    FaultVect vect() {return _vect;}
1694661Sksewell@umich.edu    FaultStat & countStat() {return _count;}
1704661Sksewell@umich.edu    void invoke(ThreadContext * tc);
1714661Sksewell@umich.edu};
1724661Sksewell@umich.edu
1732447SN/Aclass NDtbMissFault : public MipsFault
1742131SN/A{
1752447SN/A  private:
1762447SN/A    static FaultName _name;
1772447SN/A    static FaultVect _vect;
1782447SN/A    static FaultStat _count;
1792131SN/A  public:
1804695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
1812447SN/A    FaultVect vect() {return _vect;}
1822447SN/A    FaultStat & countStat() {return _count;}
1832447SN/A};
1842131SN/A
1852447SN/Aclass PDtbMissFault : public MipsFault
1862131SN/A{
1872447SN/A  private:
1882447SN/A    static FaultName _name;
1892447SN/A    static FaultVect _vect;
1902447SN/A    static FaultStat _count;
1912131SN/A  public:
1924695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
1932447SN/A    FaultVect vect() {return _vect;}
1942447SN/A    FaultStat & countStat() {return _count;}
1952447SN/A};
1962131SN/A
1972447SN/Aclass DtbPageFault : public MipsFault
1982131SN/A{
1992447SN/A  private:
2002447SN/A    static FaultName _name;
2012447SN/A    static FaultVect _vect;
2022447SN/A    static FaultStat _count;
2032131SN/A  public:
2044695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
2052447SN/A    FaultVect vect() {return _vect;}
2062447SN/A    FaultStat & countStat() {return _count;}
2072447SN/A};
2082131SN/A
2092447SN/Aclass DtbAcvFault : public MipsFault
2102131SN/A{
2112447SN/A  private:
2122447SN/A    static FaultName _name;
2132447SN/A    static FaultVect _vect;
2142447SN/A    static FaultStat _count;
2152131SN/A  public:
2164695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
2172447SN/A    FaultVect vect() {return _vect;}
2182447SN/A    FaultStat & countStat() {return _count;}
2192447SN/A};
2202131SN/A
2215222Sksewell@umich.educlass CacheErrorFault : public MipsFault
2225222Sksewell@umich.edu{
2235222Sksewell@umich.edu  private:
2245222Sksewell@umich.edu    Addr vaddr;
2255222Sksewell@umich.edu    static FaultName _name;
2265222Sksewell@umich.edu    static FaultVect _vect;
2275222Sksewell@umich.edu    static FaultStat _count;
2285222Sksewell@umich.edu  public:
2295222Sksewell@umich.edu    FaultName name() const {return _name;}
2305222Sksewell@umich.edu    FaultVect vect() {return _vect;}
2315222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
2325222Sksewell@umich.edu    void invoke(ThreadContext * tc);
2335222Sksewell@umich.edu};
2345222Sksewell@umich.edu
2355222Sksewell@umich.edu
2365222Sksewell@umich.edu
2375222Sksewell@umich.edu
2385222Sksewell@umich.edustatic inline Fault genMachineCheckFault()
2395222Sksewell@umich.edu{
2405222Sksewell@umich.edu    return new MachineCheckFault;
2415222Sksewell@umich.edu}
2425222Sksewell@umich.edu
2435222Sksewell@umich.edustatic inline Fault genAlignmentFault()
2445222Sksewell@umich.edu{
2455222Sksewell@umich.edu    return new AlignmentFault;
2465222Sksewell@umich.edu}
2475222Sksewell@umich.edu
2485222Sksewell@umich.educlass ResetFault : public MipsFault
2495222Sksewell@umich.edu{
2505222Sksewell@umich.edu  private:
2515222Sksewell@umich.edu    static FaultName _name;
2525222Sksewell@umich.edu    static FaultVect _vect;
2535222Sksewell@umich.edu    static FaultStat _count;
2545222Sksewell@umich.edu  public:
2555222Sksewell@umich.edu    FaultName name() const {return _name;}
2565222Sksewell@umich.edu    FaultVect vect() {return _vect;}
2575222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
2585222Sksewell@umich.edu    void invoke(ThreadContext * tc);
2595222Sksewell@umich.edu
2605222Sksewell@umich.edu};
2615222Sksewell@umich.educlass SystemCallFault : public MipsFault
2625222Sksewell@umich.edu{
2635222Sksewell@umich.edu  private:
2645222Sksewell@umich.edu    static FaultName _name;
2655222Sksewell@umich.edu    static FaultVect _vect;
2665222Sksewell@umich.edu    static FaultStat _count;
2675222Sksewell@umich.edu  public:
2685222Sksewell@umich.edu    FaultName name() const {return _name;}
2695222Sksewell@umich.edu    FaultVect vect() {return _vect;}
2705222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
2715222Sksewell@umich.edu    void invoke(ThreadContext * tc);
2725222Sksewell@umich.edu};
2735222Sksewell@umich.edu
2745222Sksewell@umich.educlass SoftResetFault : public MipsFault
2755222Sksewell@umich.edu{
2765222Sksewell@umich.edu  private:
2775222Sksewell@umich.edu    static FaultName _name;
2785222Sksewell@umich.edu    static FaultVect _vect;
2795222Sksewell@umich.edu    static FaultStat _count;
2805222Sksewell@umich.edu  public:
2815222Sksewell@umich.edu    FaultName name() const {return _name;}
2825222Sksewell@umich.edu    FaultVect vect() {return _vect;}
2835222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
2845222Sksewell@umich.edu    void invoke(ThreadContext * tc);
2855222Sksewell@umich.edu};
2865222Sksewell@umich.educlass DebugSingleStep : public MipsFault
2875222Sksewell@umich.edu{
2885222Sksewell@umich.edu  private:
2895222Sksewell@umich.edu    static FaultName _name;
2905222Sksewell@umich.edu    static FaultVect _vect;
2915222Sksewell@umich.edu    static FaultStat _count;
2925222Sksewell@umich.edu  public:
2935222Sksewell@umich.edu    FaultName name() const {return _name;}
2945222Sksewell@umich.edu    FaultVect vect() {return _vect;}
2955222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
2965222Sksewell@umich.edu    void invoke(ThreadContext * tc);
2975222Sksewell@umich.edu};
2985222Sksewell@umich.educlass DebugInterrupt : public MipsFault
2995222Sksewell@umich.edu{
3005222Sksewell@umich.edu  private:
3015222Sksewell@umich.edu    static FaultName _name;
3025222Sksewell@umich.edu    static FaultVect _vect;
3035222Sksewell@umich.edu    static FaultStat _count;
3045222Sksewell@umich.edu  public:
3055222Sksewell@umich.edu    FaultName name() const {return _name;}
3065222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3075222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
3085222Sksewell@umich.edu    void invoke(ThreadContext * tc);
3095222Sksewell@umich.edu};
3105222Sksewell@umich.edu
3115222Sksewell@umich.educlass CoprocessorUnusableFault : public MipsFault
3125222Sksewell@umich.edu{
3135222Sksewell@umich.edu  private:
3145222Sksewell@umich.edu    static FaultName _name;
3155222Sksewell@umich.edu    static FaultVect _vect;
3165222Sksewell@umich.edu    static FaultStat _count;
3175222Sksewell@umich.edu    int coProcID;
3185222Sksewell@umich.edu  public:
3195222Sksewell@umich.edu    FaultName name() const {return _name;}
3205222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3215222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
3225222Sksewell@umich.edu    void invoke(ThreadContext * tc);
3235222Sksewell@umich.edu    CoprocessorUnusableFault(int _procid){ coProcID = _procid;}
3245222Sksewell@umich.edu};
3255222Sksewell@umich.edu
3265222Sksewell@umich.educlass ReservedInstructionFault : public MipsFault
3275222Sksewell@umich.edu{
3285222Sksewell@umich.edu  private:
3295222Sksewell@umich.edu    static FaultName _name;
3305222Sksewell@umich.edu    static FaultVect _vect;
3315222Sksewell@umich.edu    static FaultStat _count;
3325222Sksewell@umich.edu  public:
3335222Sksewell@umich.edu    FaultName name() const {return _name;}
3345222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3355222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
3365222Sksewell@umich.edu    void invoke(ThreadContext * tc);
3375222Sksewell@umich.edu};
3385222Sksewell@umich.edu
3395222Sksewell@umich.educlass ThreadFault : public MipsFault
3405222Sksewell@umich.edu{
3415222Sksewell@umich.edu  private:
3425222Sksewell@umich.edu    static FaultName _name;
3435222Sksewell@umich.edu    static FaultVect _vect;
3445222Sksewell@umich.edu    static FaultStat _count;
3455222Sksewell@umich.edu  public:
3465222Sksewell@umich.edu    FaultName name() const {return _name;}
3475222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3485222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
3495222Sksewell@umich.edu    void invoke(ThreadContext * tc);
3505222Sksewell@umich.edu};
3515222Sksewell@umich.edu
3525222Sksewell@umich.edu
3535222Sksewell@umich.educlass ArithmeticFault : public MipsFault
3545222Sksewell@umich.edu{
3555222Sksewell@umich.edu  protected:
3565222Sksewell@umich.edu    bool skipFaultingInstruction() {return true;}
3575222Sksewell@umich.edu  private:
3585222Sksewell@umich.edu    static FaultName _name;
3595222Sksewell@umich.edu    static FaultVect _vect;
3605222Sksewell@umich.edu    static FaultStat _count;
3615222Sksewell@umich.edu  public:
3625222Sksewell@umich.edu    FaultName name() const {return _name;}
3635222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3645222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
3655222Sksewell@umich.edu#if FULL_SYSTEM
3665222Sksewell@umich.edu    void invoke(ThreadContext * tc);
3675222Sksewell@umich.edu#endif
3685222Sksewell@umich.edu};
3695222Sksewell@umich.edu
3705222Sksewell@umich.educlass InterruptFault : public MipsFault
3715222Sksewell@umich.edu{
3725222Sksewell@umich.edu  protected:
3735222Sksewell@umich.edu    bool setRestartAddress() {return false;}
3745222Sksewell@umich.edu  private:
3755222Sksewell@umich.edu    static FaultName _name;
3765222Sksewell@umich.edu    static FaultVect _vect;
3775222Sksewell@umich.edu    static FaultStat _count;
3785222Sksewell@umich.edu  public:
3795222Sksewell@umich.edu    FaultName name() const {return _name;}
3805222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3815222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
3825222Sksewell@umich.edu
3835222Sksewell@umich.edu#if FULL_SYSTEM
3845222Sksewell@umich.edu    void invoke(ThreadContext * tc);
3855222Sksewell@umich.edu#endif
3865222Sksewell@umich.edu
3875222Sksewell@umich.edu    //void invoke(ThreadContext * tc);
3885222Sksewell@umich.edu};
3895222Sksewell@umich.edu
3905222Sksewell@umich.educlass TrapFault : public MipsFault
3915222Sksewell@umich.edu{
3925222Sksewell@umich.edu  private:
3935222Sksewell@umich.edu    static FaultName _name;
3945222Sksewell@umich.edu    static FaultVect _vect;
3955222Sksewell@umich.edu    static FaultStat _count;
3965222Sksewell@umich.edu  public:
3975222Sksewell@umich.edu    FaultName name() const {return _name;}
3985222Sksewell@umich.edu    FaultVect vect() {return _vect;}
3995222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4005222Sksewell@umich.edu#if FULL_SYSTEM
4015222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4025222Sksewell@umich.edu#endif
4035222Sksewell@umich.edu};
4045222Sksewell@umich.edu
4055222Sksewell@umich.educlass BreakpointFault : public MipsFault
4065222Sksewell@umich.edu{
4075222Sksewell@umich.edu  private:
4085222Sksewell@umich.edu    static FaultName _name;
4095222Sksewell@umich.edu    static FaultVect _vect;
4105222Sksewell@umich.edu    static FaultStat _count;
4115222Sksewell@umich.edu  public:
4125222Sksewell@umich.edu    FaultName name() const {return _name;}
4135222Sksewell@umich.edu    FaultVect vect() {return _vect;}
4145222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4155222Sksewell@umich.edu#if FULL_SYSTEM
4165222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4175222Sksewell@umich.edu#endif
4185222Sksewell@umich.edu};
4195222Sksewell@umich.edu
4205222Sksewell@umich.educlass ItbRefillFault : public MipsFault
4215222Sksewell@umich.edu{
4225222Sksewell@umich.edu  private:
4235222Sksewell@umich.edu    static FaultName _name;
4245222Sksewell@umich.edu    static FaultVect _vect;
4255222Sksewell@umich.edu    static FaultStat _count;
4265222Sksewell@umich.edu  public:
4275222Sksewell@umich.edu    FaultName name() const {return _name;}
4285222Sksewell@umich.edu    FaultVect vect() {return _vect;}
4295222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4305222Sksewell@umich.edu#if FULL_SYSTEM
4315222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4325222Sksewell@umich.edu#endif
4335222Sksewell@umich.edu};
4345222Sksewell@umich.educlass DtbRefillFault : public MipsFault
4355222Sksewell@umich.edu{
4365222Sksewell@umich.edu  private:
4375222Sksewell@umich.edu    static FaultName _name;
4385222Sksewell@umich.edu    static FaultVect _vect;
4395222Sksewell@umich.edu    static FaultStat _count;
4405222Sksewell@umich.edu  public:
4415222Sksewell@umich.edu    FaultName name() const {return _name;}
4425222Sksewell@umich.edu    FaultVect vect() {return _vect;}
4435222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4445222Sksewell@umich.edu#if FULL_SYSTEM
4455222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4465222Sksewell@umich.edu#endif
4475222Sksewell@umich.edu};
4485222Sksewell@umich.edu
4495222Sksewell@umich.educlass ItbPageFault : public MipsFault
4505222Sksewell@umich.edu{
4515222Sksewell@umich.edu  private:
4525222Sksewell@umich.edu    static FaultName _name;
4535222Sksewell@umich.edu    static FaultVect _vect;
4545222Sksewell@umich.edu    static FaultStat _count;
4555222Sksewell@umich.edu  public:
4565222Sksewell@umich.edu    FaultName name() const {return _name;}
4575222Sksewell@umich.edu    FaultVect vect() {return _vect;}
4585222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4595222Sksewell@umich.edu#if FULL_SYSTEM
4605222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4615222Sksewell@umich.edu#endif
4625222Sksewell@umich.edu};
4635222Sksewell@umich.edu
4645222Sksewell@umich.educlass ItbInvalidFault : public MipsFault
4655222Sksewell@umich.edu{
4665222Sksewell@umich.edu  private:
4675222Sksewell@umich.edu    static FaultName _name;
4685222Sksewell@umich.edu    static FaultVect _vect;
4695222Sksewell@umich.edu    static FaultStat _count;
4705222Sksewell@umich.edu  public:
4715222Sksewell@umich.edu    FaultName name() const {return _name;}
4725222Sksewell@umich.edu    FaultVect vect() {return _vect;}
4735222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4745222Sksewell@umich.edu#if FULL_SYSTEM
4755222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4765222Sksewell@umich.edu#endif
4775222Sksewell@umich.edu
4785222Sksewell@umich.edu};
4795222Sksewell@umich.educlass TLBModifiedFault : public MipsFault
4805222Sksewell@umich.edu{
4815222Sksewell@umich.edu  private:
4825222Sksewell@umich.edu    static FaultName _name;
4835222Sksewell@umich.edu    static FaultVect _vect;
4845222Sksewell@umich.edu    static FaultStat _count;
4855222Sksewell@umich.edu  public:
4865222Sksewell@umich.edu    FaultName name() const {return _name;}
4875222Sksewell@umich.edu    FaultVect vect() {return _vect;}
4885222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
4895222Sksewell@umich.edu#if FULL_SYSTEM
4905222Sksewell@umich.edu    void invoke(ThreadContext * tc);
4915222Sksewell@umich.edu#endif
4925222Sksewell@umich.edu
4935222Sksewell@umich.edu};
4945222Sksewell@umich.edu
4955222Sksewell@umich.educlass DtbInvalidFault : public MipsFault
4965222Sksewell@umich.edu{
4975222Sksewell@umich.edu  private:
4985222Sksewell@umich.edu    static FaultName _name;
4995222Sksewell@umich.edu    static FaultVect _vect;
5005222Sksewell@umich.edu    static FaultStat _count;
5015222Sksewell@umich.edu  public:
5025222Sksewell@umich.edu    FaultName name() const {return _name;}
5035222Sksewell@umich.edu    FaultVect vect() {return _vect;}
5045222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
5055222Sksewell@umich.edu#if FULL_SYSTEM
5065222Sksewell@umich.edu    void invoke(ThreadContext * tc);
5075222Sksewell@umich.edu#endif
5085222Sksewell@umich.edu
5095222Sksewell@umich.edu};
5105222Sksewell@umich.edu
5115222Sksewell@umich.educlass FloatEnableFault : public MipsFault
5125222Sksewell@umich.edu{
5135222Sksewell@umich.edu  private:
5145222Sksewell@umich.edu    static FaultName _name;
5155222Sksewell@umich.edu    static FaultVect _vect;
5165222Sksewell@umich.edu    static FaultStat _count;
5175222Sksewell@umich.edu  public:
5185222Sksewell@umich.edu    FaultName name() const {return _name;}
5195222Sksewell@umich.edu    FaultVect vect() {return _vect;}
5205222Sksewell@umich.edu    FaultStat & countStat() {return _count;}
5215222Sksewell@umich.edu};
5225222Sksewell@umich.edu
5232447SN/Aclass ItbMissFault : public MipsFault
5242131SN/A{
5252447SN/A  private:
5262447SN/A    static FaultName _name;
5272447SN/A    static FaultVect _vect;
5282447SN/A    static FaultStat _count;
5292131SN/A  public:
5304695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
5312447SN/A    FaultVect vect() {return _vect;}
5322447SN/A    FaultStat & countStat() {return _count;}
5332447SN/A};
5342131SN/A
5352447SN/Aclass ItbAcvFault : public MipsFault
5362131SN/A{
5372447SN/A  private:
5382447SN/A    static FaultName _name;
5392447SN/A    static FaultVect _vect;
5402447SN/A    static FaultStat _count;
5412131SN/A  public:
5424695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
5432447SN/A    FaultVect vect() {return _vect;}
5442447SN/A    FaultStat & countStat() {return _count;}
5452447SN/A};
5462131SN/A
5472447SN/Aclass IntegerOverflowFault : public MipsFault
5482447SN/A{
5492447SN/A  private:
5502447SN/A    static FaultName _name;
5512447SN/A    static FaultVect _vect;
5522447SN/A    static FaultStat _count;
5532447SN/A  public:
5544695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
5552447SN/A    FaultVect vect() {return _vect;}
5562447SN/A    FaultStat & countStat() {return _count;}
5572447SN/A};
5582447SN/A
5594661Sksewell@umich.educlass DspStateDisabledFault : public MipsFault
5604661Sksewell@umich.edu{
5614661Sksewell@umich.edu  private:
5624661Sksewell@umich.edu    static FaultName _name;
5634661Sksewell@umich.edu    static FaultVect _vect;
5644661Sksewell@umich.edu    static FaultStat _count;
5654661Sksewell@umich.edu  public:
5664695Sgblack@eecs.umich.edu    FaultName name() const {return _name;}
5674661Sksewell@umich.edu    FaultVect vect() {return _vect;}
5684661Sksewell@umich.edu    FaultStat & countStat() {return _count;}
5694661Sksewell@umich.edu    void invoke(ThreadContext * tc);
5704661Sksewell@umich.edu};
5714661Sksewell@umich.edu
5722447SN/A} // MipsISA namespace
5732131SN/A
5745222Sksewell@umich.edu#endif // __MIPS_FAULTS_HH__
575