faults.hh revision 2665
11689SN/A/*
22329SN/A * Copyright (c) 2003-2005 The Regents of The University of Michigan
31689SN/A * All rights reserved.
41689SN/A *
51689SN/A * Redistribution and use in source and binary forms, with or without
61689SN/A * modification, are permitted provided that the following conditions are
71689SN/A * met: redistributions of source code must retain the above copyright
81689SN/A * notice, this list of conditions and the following disclaimer;
91689SN/A * redistributions in binary form must reproduce the above copyright
101689SN/A * notice, this list of conditions and the following disclaimer in the
111689SN/A * documentation and/or other materials provided with the distribution;
121689SN/A * neither the name of the copyright holders nor the names of its
131689SN/A * contributors may be used to endorse or promote products derived from
141689SN/A * this software without specific prior written permission.
151689SN/A *
161689SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
171689SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
181689SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
191689SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
201689SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
211689SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
221689SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
231689SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
241689SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
251689SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
261689SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272665Ssaidi@eecs.umich.edu *
282665Ssaidi@eecs.umich.edu * Authors: Korey Sewell
292831Sksewell@umich.edu */
301689SN/A
311689SN/A#ifndef __MIPS_FAULTS_HH__
322292SN/A#define __MIPS_FAULTS_HH__
332292SN/A
341060SN/A#include "sim/faults.hh"
352292SN/A
361461SN/A// The design of the "name" and "vect" functions is in sim/faults.hh
371461SN/A
381060SN/Anamespace MipsISA
391060SN/A{
402292SN/A
411060SN/Atypedef const Addr FaultVect;
421061SN/A
431060SN/Aclass MipsFault : public FaultBase
441060SN/A{
452107SN/A  protected:
462107SN/A    virtual bool skipFaultingInstruction() {return false;}
471060SN/A    virtual bool setRestartAddress() {return true;}
481060SN/A  public:
492733Sktlim@umich.edu#if FULL_SYSTEM
501061SN/A    void invoke(ExecContext * xc);
511060SN/A#endif
522292SN/A    virtual FaultVect vect() = 0;
532292SN/A    virtual FaultStat & countStat() = 0;
542292SN/A};
552292SN/A
562292SN/Aclass MachineCheckFault : public MipsFault
572292SN/A{
582292SN/A  private:
592329SN/A    static FaultName _name;
602292SN/A    static FaultVect _vect;
612292SN/A    static FaultStat _count;
622292SN/A  public:
632292SN/A    FaultName name() {return _name;}
642292SN/A    FaultVect vect() {return _vect;}
652292SN/A    FaultStat & countStat() {return _count;}
662292SN/A    bool isMachineCheckFault() {return true;}
672292SN/A};
682292SN/A
692292SN/Aclass AlignmentFault : public MipsFault
702292SN/A{
712292SN/A  private:
722292SN/A    static FaultName _name;
732292SN/A    static FaultVect _vect;
742292SN/A    static FaultStat _count;
751060SN/A  public:
761060SN/A    FaultName name() {return _name;}
771060SN/A    FaultVect vect() {return _vect;}
782292SN/A    FaultStat & countStat() {return _count;}
792292SN/A    bool isAlignmentFault() {return true;}
802292SN/A};
812292SN/A
822292SN/Astatic inline Fault genMachineCheckFault()
832292SN/A{
841060SN/A    return new MachineCheckFault;
854329Sktlim@umich.edu}
864329Sktlim@umich.edu
874329Sktlim@umich.edustatic inline Fault genAlignmentFault()
882292SN/A{
892292SN/A    return new AlignmentFault;
901060SN/A}
912292SN/A
922292SN/Aclass ResetFault : public MipsFault
932292SN/A{
942292SN/A  private:
952292SN/A    static FaultName _name;
962348SN/A    static FaultVect _vect;
972307SN/A    static FaultStat _count;
982307SN/A  public:
992348SN/A    FaultName name() {return _name;}
1002307SN/A    FaultVect vect() {return _vect;}
1012307SN/A    FaultStat & countStat() {return _count;}
1022292SN/A};
1032292SN/A
1042292SN/Aclass ArithmeticFault : public MipsFault
1051763SN/A{
1061060SN/A  protected:
1071061SN/A    bool skipFaultingInstruction() {return true;}
1081060SN/A  private:
1091060SN/A    static FaultName _name;
1101060SN/A    static FaultVect _vect;
1111060SN/A    static FaultStat _count;
1121060SN/A  public:
1132329SN/A    FaultName name() {return _name;}
1141060SN/A    FaultVect vect() {return _vect;}
1152292SN/A    FaultStat & countStat() {return _count;}
1162292SN/A#if FULL_SYSTEM
1172292SN/A    void invoke(ExecContext * xc);
1182292SN/A#endif
1192292SN/A};
1201060SN/A
1212292SN/Aclass InterruptFault : public MipsFault
1222292SN/A{
1232292SN/A  protected:
1242292SN/A    bool setRestartAddress() {return false;}
1252329SN/A  private:
1261060SN/A    static FaultName _name;
1272292SN/A    static FaultVect _vect;
1282292SN/A    static FaultStat _count;
1292292SN/A  public:
1302292SN/A    FaultName name() {return _name;}
1312292SN/A    FaultVect vect() {return _vect;}
1321060SN/A    FaultStat & countStat() {return _count;}
1332292SN/A};
1342329SN/A
1352107SN/Aclass NDtbMissFault : public MipsFault
1362292SN/A{
1372292SN/A  private:
1382292SN/A    static FaultName _name;
1392292SN/A    static FaultVect _vect;
1402292SN/A    static FaultStat _count;
1412292SN/A  public:
1422329SN/A    FaultName name() {return _name;}
1432107SN/A    FaultVect vect() {return _vect;}
1442292SN/A    FaultStat & countStat() {return _count;}
1452292SN/A};
1462292SN/A
1472292SN/Aclass PDtbMissFault : public MipsFault
1482292SN/A{
1492292SN/A  private:
1502292SN/A    static FaultName _name;
1512292SN/A    static FaultVect _vect;
1522292SN/A    static FaultStat _count;
1532292SN/A  public:
1542292SN/A    FaultName name() {return _name;}
1552292SN/A    FaultVect vect() {return _vect;}
1562292SN/A    FaultStat & countStat() {return _count;}
1571060SN/A};
1581060SN/A
1592292SN/Aclass DtbPageFault : public MipsFault
1602292SN/A{
1612292SN/A  private:
1622292SN/A    static FaultName _name;
1632292SN/A    static FaultVect _vect;
1642292SN/A    static FaultStat _count;
1652292SN/A  public:
1662292SN/A    FaultName name() {return _name;}
1672292SN/A    FaultVect vect() {return _vect;}
1682292SN/A    FaultStat & countStat() {return _count;}
1692292SN/A};
1702292SN/A
1711060SN/Aclass DtbAcvFault : public MipsFault
1721060SN/A{
1731060SN/A  private:
1742292SN/A    static FaultName _name;
1752292SN/A    static FaultVect _vect;
1762292SN/A    static FaultStat _count;
1772292SN/A  public:
1782292SN/A    FaultName name() {return _name;}
1791060SN/A    FaultVect vect() {return _vect;}
1801060SN/A    FaultStat & countStat() {return _count;}
1811060SN/A};
1822292SN/A
1832292SN/Aclass ItbMissFault : public MipsFault
1842292SN/A{
1851060SN/A  private:
1862292SN/A    static FaultName _name;
1872292SN/A    static FaultVect _vect;
1881060SN/A    static FaultStat _count;
1892292SN/A  public:
1902292SN/A    FaultName name() {return _name;}
1912292SN/A    FaultVect vect() {return _vect;}
1922292SN/A    FaultStat & countStat() {return _count;}
1931060SN/A};
1942292SN/A
1952292SN/Aclass ItbPageFault : public MipsFault
1961060SN/A{
1972292SN/A  private:
1982292SN/A    static FaultName _name;
1991060SN/A    static FaultVect _vect;
2002292SN/A    static FaultStat _count;
2012329SN/A  public:
2021060SN/A    FaultName name() {return _name;}
2032292SN/A    FaultVect vect() {return _vect;}
2042329SN/A    FaultStat & countStat() {return _count;}
2052292SN/A};
2062292SN/A
2072329SN/Aclass ItbAcvFault : public MipsFault
2082107SN/A{
2092292SN/A  private:
2102329SN/A    static FaultName _name;
2112292SN/A    static FaultVect _vect;
2122292SN/A    static FaultStat _count;
2132329SN/A  public:
2142107SN/A    FaultName name() {return _name;}
2152292SN/A    FaultVect vect() {return _vect;}
2162292SN/A    FaultStat & countStat() {return _count;}
2172329SN/A};
2182292SN/A
2192292SN/Aclass UnimplementedOpcodeFault : public MipsFault
2202329SN/A{
2212107SN/A  private:
2222292SN/A    static FaultName _name;
2232329SN/A    static FaultVect _vect;
2242292SN/A    static FaultStat _count;
2252292SN/A  public:
2262329SN/A    FaultName name() {return _name;}
2272107SN/A    FaultVect vect() {return _vect;}
2282292SN/A    FaultStat & countStat() {return _count;}
2292329SN/A};
2301060SN/A
2311060SN/Aclass FloatEnableFault : public MipsFault
2321060SN/A{
2331060SN/A  private:
2342292SN/A    static FaultName _name;
2352292SN/A    static FaultVect _vect;
2362292SN/A    static FaultStat _count;
2372292SN/A  public:
2382292SN/A    FaultName name() {return _name;}
2392292SN/A    FaultVect vect() {return _vect;}
2402292SN/A    FaultStat & countStat() {return _count;}
2411060SN/A};
2421060SN/A
2431060SN/Aclass PalFault : public MipsFault
2441060SN/A{
2451060SN/A  protected:
2461060SN/A    bool skipFaultingInstruction() {return true;}
2471060SN/A  private:
2482292SN/A    static FaultName _name;
2492292SN/A    static FaultVect _vect;
2502292SN/A    static FaultStat _count;
2512292SN/A  public:
2522292SN/A    FaultName name() {return _name;}
2532292SN/A    FaultVect vect() {return _vect;}
2541060SN/A    FaultStat & countStat() {return _count;}
2551060SN/A};
2562733Sktlim@umich.edu
2571060SN/Aclass IntegerOverflowFault : public MipsFault
2582292SN/A{
2592292SN/A  private:
2602292SN/A    static FaultName _name;
2611061SN/A    static FaultVect _vect;
2621060SN/A    static FaultStat _count;
2631060SN/A  public:
2642292SN/A    FaultName name() {return _name;}
2652292SN/A    FaultVect vect() {return _vect;}
2662292SN/A    FaultStat & countStat() {return _count;}
2672292SN/A};
2682292SN/A
2692292SN/A} // MipsISA namespace
2702292SN/A
2712292SN/A#endif // __FAULTS_HH__
2722292SN/A