faults.hh revision 2665
12131SN/A/*
22131SN/A * Copyright (c) 2003-2005 The Regents of The University of Michigan
32131SN/A * All rights reserved.
42131SN/A *
52131SN/A * Redistribution and use in source and binary forms, with or without
62131SN/A * modification, are permitted provided that the following conditions are
72131SN/A * met: redistributions of source code must retain the above copyright
82131SN/A * notice, this list of conditions and the following disclaimer;
92131SN/A * redistributions in binary form must reproduce the above copyright
102131SN/A * notice, this list of conditions and the following disclaimer in the
112131SN/A * documentation and/or other materials provided with the distribution;
122131SN/A * neither the name of the copyright holders nor the names of its
132131SN/A * contributors may be used to endorse or promote products derived from
142131SN/A * this software without specific prior written permission.
152131SN/A *
162131SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
172131SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
182131SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
192131SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
202131SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
212131SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
222131SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232131SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
242131SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252131SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
262131SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272665Ssaidi@eecs.umich.edu *
282665Ssaidi@eecs.umich.edu * Authors: Korey Sewell
292131SN/A */
302131SN/A
312239SN/A#ifndef __MIPS_FAULTS_HH__
322239SN/A#define __MIPS_FAULTS_HH__
332131SN/A
342131SN/A#include "sim/faults.hh"
352447SN/A
362447SN/A// The design of the "name" and "vect" functions is in sim/faults.hh
372447SN/A
382447SN/Anamespace MipsISA
392447SN/A{
402447SN/A
412447SN/Atypedef const Addr FaultVect;
422131SN/A
432239SN/Aclass MipsFault : public FaultBase
442131SN/A{
452447SN/A  protected:
462447SN/A    virtual bool skipFaultingInstruction() {return false;}
472447SN/A    virtual bool setRestartAddress() {return true;}
482131SN/A  public:
492447SN/A#if FULL_SYSTEM
502447SN/A    void invoke(ExecContext * xc);
512447SN/A#endif
522447SN/A    virtual FaultVect vect() = 0;
532447SN/A    virtual FaultStat & countStat() = 0;
542131SN/A};
552131SN/A
562447SN/Aclass MachineCheckFault : public MipsFault
572131SN/A{
582447SN/A  private:
592447SN/A    static FaultName _name;
602447SN/A    static FaultVect _vect;
612447SN/A    static FaultStat _count;
622131SN/A  public:
632447SN/A    FaultName name() {return _name;}
642447SN/A    FaultVect vect() {return _vect;}
652447SN/A    FaultStat & countStat() {return _count;}
662447SN/A    bool isMachineCheckFault() {return true;}
672447SN/A};
682131SN/A
692447SN/Aclass AlignmentFault : public MipsFault
702131SN/A{
712447SN/A  private:
722447SN/A    static FaultName _name;
732447SN/A    static FaultVect _vect;
742447SN/A    static FaultStat _count;
752131SN/A  public:
762447SN/A    FaultName name() {return _name;}
772447SN/A    FaultVect vect() {return _vect;}
782447SN/A    FaultStat & countStat() {return _count;}
792447SN/A    bool isAlignmentFault() {return true;}
802447SN/A};
812131SN/A
822447SN/Astatic inline Fault genMachineCheckFault()
832131SN/A{
842447SN/A    return new MachineCheckFault;
852447SN/A}
862447SN/A
872447SN/Astatic inline Fault genAlignmentFault()
882447SN/A{
892447SN/A    return new AlignmentFault;
902447SN/A}
912447SN/A
922447SN/Aclass ResetFault : public MipsFault
932447SN/A{
942447SN/A  private:
952447SN/A    static FaultName _name;
962447SN/A    static FaultVect _vect;
972447SN/A    static FaultStat _count;
982131SN/A  public:
992447SN/A    FaultName name() {return _name;}
1002447SN/A    FaultVect vect() {return _vect;}
1012447SN/A    FaultStat & countStat() {return _count;}
1022447SN/A};
1032131SN/A
1042447SN/Aclass ArithmeticFault : public MipsFault
1052131SN/A{
1062447SN/A  protected:
1072447SN/A    bool skipFaultingInstruction() {return true;}
1082447SN/A  private:
1092447SN/A    static FaultName _name;
1102447SN/A    static FaultVect _vect;
1112447SN/A    static FaultStat _count;
1122131SN/A  public:
1132447SN/A    FaultName name() {return _name;}
1142447SN/A    FaultVect vect() {return _vect;}
1152447SN/A    FaultStat & countStat() {return _count;}
1162447SN/A#if FULL_SYSTEM
1172447SN/A    void invoke(ExecContext * xc);
1182447SN/A#endif
1192447SN/A};
1202131SN/A
1212447SN/Aclass InterruptFault : public MipsFault
1222131SN/A{
1232447SN/A  protected:
1242447SN/A    bool setRestartAddress() {return false;}
1252447SN/A  private:
1262447SN/A    static FaultName _name;
1272447SN/A    static FaultVect _vect;
1282447SN/A    static FaultStat _count;
1292131SN/A  public:
1302447SN/A    FaultName name() {return _name;}
1312447SN/A    FaultVect vect() {return _vect;}
1322447SN/A    FaultStat & countStat() {return _count;}
1332447SN/A};
1342131SN/A
1352447SN/Aclass NDtbMissFault : public MipsFault
1362131SN/A{
1372447SN/A  private:
1382447SN/A    static FaultName _name;
1392447SN/A    static FaultVect _vect;
1402447SN/A    static FaultStat _count;
1412131SN/A  public:
1422447SN/A    FaultName name() {return _name;}
1432447SN/A    FaultVect vect() {return _vect;}
1442447SN/A    FaultStat & countStat() {return _count;}
1452447SN/A};
1462131SN/A
1472447SN/Aclass PDtbMissFault : public MipsFault
1482131SN/A{
1492447SN/A  private:
1502447SN/A    static FaultName _name;
1512447SN/A    static FaultVect _vect;
1522447SN/A    static FaultStat _count;
1532131SN/A  public:
1542447SN/A    FaultName name() {return _name;}
1552447SN/A    FaultVect vect() {return _vect;}
1562447SN/A    FaultStat & countStat() {return _count;}
1572447SN/A};
1582131SN/A
1592447SN/Aclass DtbPageFault : public MipsFault
1602131SN/A{
1612447SN/A  private:
1622447SN/A    static FaultName _name;
1632447SN/A    static FaultVect _vect;
1642447SN/A    static FaultStat _count;
1652131SN/A  public:
1662447SN/A    FaultName name() {return _name;}
1672447SN/A    FaultVect vect() {return _vect;}
1682447SN/A    FaultStat & countStat() {return _count;}
1692447SN/A};
1702131SN/A
1712447SN/Aclass DtbAcvFault : public MipsFault
1722131SN/A{
1732447SN/A  private:
1742447SN/A    static FaultName _name;
1752447SN/A    static FaultVect _vect;
1762447SN/A    static FaultStat _count;
1772131SN/A  public:
1782447SN/A    FaultName name() {return _name;}
1792447SN/A    FaultVect vect() {return _vect;}
1802447SN/A    FaultStat & countStat() {return _count;}
1812447SN/A};
1822131SN/A
1832447SN/Aclass ItbMissFault : public MipsFault
1842131SN/A{
1852447SN/A  private:
1862447SN/A    static FaultName _name;
1872447SN/A    static FaultVect _vect;
1882447SN/A    static FaultStat _count;
1892131SN/A  public:
1902447SN/A    FaultName name() {return _name;}
1912447SN/A    FaultVect vect() {return _vect;}
1922447SN/A    FaultStat & countStat() {return _count;}
1932447SN/A};
1942131SN/A
1952447SN/Aclass ItbPageFault : public MipsFault
1962131SN/A{
1972447SN/A  private:
1982447SN/A    static FaultName _name;
1992447SN/A    static FaultVect _vect;
2002447SN/A    static FaultStat _count;
2012131SN/A  public:
2022447SN/A    FaultName name() {return _name;}
2032447SN/A    FaultVect vect() {return _vect;}
2042447SN/A    FaultStat & countStat() {return _count;}
2052447SN/A};
2062131SN/A
2072447SN/Aclass ItbAcvFault : public MipsFault
2082131SN/A{
2092447SN/A  private:
2102447SN/A    static FaultName _name;
2112447SN/A    static FaultVect _vect;
2122447SN/A    static FaultStat _count;
2132131SN/A  public:
2142447SN/A    FaultName name() {return _name;}
2152447SN/A    FaultVect vect() {return _vect;}
2162447SN/A    FaultStat & countStat() {return _count;}
2172447SN/A};
2182131SN/A
2192447SN/Aclass UnimplementedOpcodeFault : public MipsFault
2202131SN/A{
2212447SN/A  private:
2222447SN/A    static FaultName _name;
2232447SN/A    static FaultVect _vect;
2242447SN/A    static FaultStat _count;
2252131SN/A  public:
2262447SN/A    FaultName name() {return _name;}
2272447SN/A    FaultVect vect() {return _vect;}
2282447SN/A    FaultStat & countStat() {return _count;}
2292447SN/A};
2302131SN/A
2312447SN/Aclass FloatEnableFault : public MipsFault
2322131SN/A{
2332447SN/A  private:
2342447SN/A    static FaultName _name;
2352447SN/A    static FaultVect _vect;
2362447SN/A    static FaultStat _count;
2372131SN/A  public:
2382447SN/A    FaultName name() {return _name;}
2392447SN/A    FaultVect vect() {return _vect;}
2402447SN/A    FaultStat & countStat() {return _count;}
2412447SN/A};
2422131SN/A
2432447SN/Aclass PalFault : public MipsFault
2442447SN/A{
2452447SN/A  protected:
2462447SN/A    bool skipFaultingInstruction() {return true;}
2472447SN/A  private:
2482447SN/A    static FaultName _name;
2492447SN/A    static FaultVect _vect;
2502447SN/A    static FaultStat _count;
2512447SN/A  public:
2522447SN/A    FaultName name() {return _name;}
2532447SN/A    FaultVect vect() {return _vect;}
2542447SN/A    FaultStat & countStat() {return _count;}
2552447SN/A};
2562447SN/A
2572447SN/Aclass IntegerOverflowFault : public MipsFault
2582447SN/A{
2592447SN/A  private:
2602447SN/A    static FaultName _name;
2612447SN/A    static FaultVect _vect;
2622447SN/A    static FaultStat _count;
2632447SN/A  public:
2642447SN/A    FaultName name() {return _name;}
2652447SN/A    FaultVect vect() {return _vect;}
2662447SN/A    FaultStat & countStat() {return _count;}
2672447SN/A};
2682447SN/A
2692447SN/A} // MipsISA namespace
2702131SN/A
2712131SN/A#endif // __FAULTS_HH__
272