faults.hh revision 2175
17405SAli.Saidi@ARM.com/*
27405SAli.Saidi@ARM.com * Copyright (c) 2003-2005 The Regents of The University of Michigan
37405SAli.Saidi@ARM.com * All rights reserved.
47405SAli.Saidi@ARM.com *
57405SAli.Saidi@ARM.com * Redistribution and use in source and binary forms, with or without
67405SAli.Saidi@ARM.com * modification, are permitted provided that the following conditions are
77405SAli.Saidi@ARM.com * met: redistributions of source code must retain the above copyright
87405SAli.Saidi@ARM.com * notice, this list of conditions and the following disclaimer;
97405SAli.Saidi@ARM.com * redistributions in binary form must reproduce the above copyright
107405SAli.Saidi@ARM.com * notice, this list of conditions and the following disclaimer in the
117405SAli.Saidi@ARM.com * documentation and/or other materials provided with the distribution;
127405SAli.Saidi@ARM.com * neither the name of the copyright holders nor the names of its
137405SAli.Saidi@ARM.com * contributors may be used to endorse or promote products derived from
147405SAli.Saidi@ARM.com * this software without specific prior written permission.
157405SAli.Saidi@ARM.com *
167405SAli.Saidi@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
177405SAli.Saidi@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187405SAli.Saidi@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
197405SAli.Saidi@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
207405SAli.Saidi@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
217405SAli.Saidi@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
227405SAli.Saidi@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
237405SAli.Saidi@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
247405SAli.Saidi@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
257405SAli.Saidi@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
267405SAli.Saidi@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
277405SAli.Saidi@ARM.com */
287405SAli.Saidi@ARM.com
297405SAli.Saidi@ARM.com#ifndef __ALPHA_FAULTS_HH__
307405SAli.Saidi@ARM.com#define __ALPHA_FAULTS_HH__
317405SAli.Saidi@ARM.com
327405SAli.Saidi@ARM.com#include "sim/faults.hh"
337405SAli.Saidi@ARM.com
347405SAli.Saidi@ARM.com// The design of the "name" and "vect" functions is in sim/faults.hh
357405SAli.Saidi@ARM.com
367405SAli.Saidi@ARM.comnamespace AlphaISA
377405SAli.Saidi@ARM.com{
387405SAli.Saidi@ARM.com
397405SAli.Saidi@ARM.comtypedef const Addr FaultVect;
407405SAli.Saidi@ARM.com
417405SAli.Saidi@ARM.comclass AlphaFault : public virtual FaultBase
427405SAli.Saidi@ARM.com{
437405SAli.Saidi@ARM.com  public:
447405SAli.Saidi@ARM.com#if FULL_SYSTEM
457405SAli.Saidi@ARM.com    void ev5_trap(ExecContext * xc);
467427Sgblack@eecs.umich.edu#endif
477427Sgblack@eecs.umich.edu    virtual FaultVect vect() = 0;
487427Sgblack@eecs.umich.edu};
497427Sgblack@eecs.umich.edu
507427Sgblack@eecs.umich.educlass AlphaMachineCheckFault :
517427Sgblack@eecs.umich.edu    public MachineCheckFault,
527427Sgblack@eecs.umich.edu    public AlphaFault
537427Sgblack@eecs.umich.edu{
547427Sgblack@eecs.umich.edu  private:
557427Sgblack@eecs.umich.edu    static FaultVect _vect;
567427Sgblack@eecs.umich.edu    static FaultStat _stat;
577427Sgblack@eecs.umich.edu  public:
587604SGene.Wu@arm.com#if FULL_SYSTEM
597427Sgblack@eecs.umich.edu    void ev5_trap(ExecContext * xc);
607427Sgblack@eecs.umich.edu#endif
617427Sgblack@eecs.umich.edu    FaultVect vect() {return _vect;}
627427Sgblack@eecs.umich.edu    FaultStat & stat() {return _stat;}
637427Sgblack@eecs.umich.edu};
647427Sgblack@eecs.umich.edu
657427Sgblack@eecs.umich.educlass AlphaAlignmentFault :
667427Sgblack@eecs.umich.edu    public AlignmentFault,
677427Sgblack@eecs.umich.edu    public AlphaFault
687427Sgblack@eecs.umich.edu{
697427Sgblack@eecs.umich.edu  private:
707427Sgblack@eecs.umich.edu    static FaultVect _vect;
717427Sgblack@eecs.umich.edu    static FaultStat _stat;
727427Sgblack@eecs.umich.edu  public:
737427Sgblack@eecs.umich.edu#if FULL_SYSTEM
747427Sgblack@eecs.umich.edu    void ev5_trap(ExecContext * xc);
757427Sgblack@eecs.umich.edu#endif
767427Sgblack@eecs.umich.edu    FaultVect vect() {return _vect;}
777427Sgblack@eecs.umich.edu    FaultStat & stat() {return _stat;}
787427Sgblack@eecs.umich.edu};
797427Sgblack@eecs.umich.edu
807427Sgblack@eecs.umich.edustatic inline Fault genMachineCheckFault()
817427Sgblack@eecs.umich.edu{
827427Sgblack@eecs.umich.edu    return new AlphaMachineCheckFault;
837427Sgblack@eecs.umich.edu}
847427Sgblack@eecs.umich.edu
857427Sgblack@eecs.umich.edustatic inline Fault genAlignmentFault()
867427Sgblack@eecs.umich.edu{
877427Sgblack@eecs.umich.edu    return new AlphaAlignmentFault;
887427Sgblack@eecs.umich.edu}
897427Sgblack@eecs.umich.edu
907427Sgblack@eecs.umich.educlass ResetFault : public AlphaFault
917427Sgblack@eecs.umich.edu{
927427Sgblack@eecs.umich.edu  private:
937427Sgblack@eecs.umich.edu    static FaultName _name;
947427Sgblack@eecs.umich.edu    static FaultVect _vect;
957427Sgblack@eecs.umich.edu    static FaultStat _stat;
967427Sgblack@eecs.umich.edu  public:
977427Sgblack@eecs.umich.edu    FaultName name() {return _name;}
987427Sgblack@eecs.umich.edu    FaultVect vect() {return _vect;}
997427Sgblack@eecs.umich.edu    FaultStat & stat() {return _stat;}
1007427Sgblack@eecs.umich.edu};
1017427Sgblack@eecs.umich.edu
1027427Sgblack@eecs.umich.educlass ArithmeticFault : public AlphaFault
1037427Sgblack@eecs.umich.edu{
1047427Sgblack@eecs.umich.edu  private:
1057427Sgblack@eecs.umich.edu    static FaultName _name;
1067427Sgblack@eecs.umich.edu    static FaultVect _vect;
1077427Sgblack@eecs.umich.edu    static FaultStat _stat;
1087427Sgblack@eecs.umich.edu  public:
1097427Sgblack@eecs.umich.edu    FaultName name() {return _name;}
1107427Sgblack@eecs.umich.edu    FaultVect vect() {return _vect;}
1117427Sgblack@eecs.umich.edu    FaultStat & stat() {return _stat;}
1127427Sgblack@eecs.umich.edu};
1137427Sgblack@eecs.umich.edu
1147427Sgblack@eecs.umich.educlass InterruptFault : public AlphaFault
1157427Sgblack@eecs.umich.edu{
1167427Sgblack@eecs.umich.edu  private:
1177427Sgblack@eecs.umich.edu    static FaultName _name;
1187427Sgblack@eecs.umich.edu    static FaultVect _vect;
1197427Sgblack@eecs.umich.edu    static FaultStat _stat;
1207427Sgblack@eecs.umich.edu  public:
1217436Sdam.sunwoo@arm.com    FaultName name() {return _name;}
1227436Sdam.sunwoo@arm.com    FaultVect vect() {return _vect;}
1237436Sdam.sunwoo@arm.com    FaultStat & stat() {return _stat;}
1247436Sdam.sunwoo@arm.com};
1257436Sdam.sunwoo@arm.com
1267436Sdam.sunwoo@arm.comclass NDtbMissFault : public AlphaFault
1277436Sdam.sunwoo@arm.com{
1287436Sdam.sunwoo@arm.com  private:
1297436Sdam.sunwoo@arm.com    static FaultName _name;
1307436Sdam.sunwoo@arm.com    static FaultVect _vect;
1317436Sdam.sunwoo@arm.com    static FaultStat _stat;
1327436Sdam.sunwoo@arm.com  public:
1337436Sdam.sunwoo@arm.com    FaultName name() {return _name;}
1347436Sdam.sunwoo@arm.com    FaultVect vect() {return _vect;}
1357436Sdam.sunwoo@arm.com    FaultStat & stat() {return _stat;}
1367436Sdam.sunwoo@arm.com};
1377436Sdam.sunwoo@arm.com
1387436Sdam.sunwoo@arm.comclass PDtbMissFault : public AlphaFault
1397436Sdam.sunwoo@arm.com{
1407436Sdam.sunwoo@arm.com  private:
1417436Sdam.sunwoo@arm.com    static FaultName _name;
1427436Sdam.sunwoo@arm.com    static FaultVect _vect;
1437436Sdam.sunwoo@arm.com    static FaultStat _stat;
1447436Sdam.sunwoo@arm.com  public:
1457436Sdam.sunwoo@arm.com    FaultName name() {return _name;}
1467436Sdam.sunwoo@arm.com    FaultVect vect() {return _vect;}
1477436Sdam.sunwoo@arm.com    FaultStat & stat() {return _stat;}
1487436Sdam.sunwoo@arm.com};
1497436Sdam.sunwoo@arm.com
1507436Sdam.sunwoo@arm.comclass DtbPageFault : public AlphaFault
1517436Sdam.sunwoo@arm.com{
1527436Sdam.sunwoo@arm.com  private:
1537427Sgblack@eecs.umich.edu    static FaultName _name;
1547427Sgblack@eecs.umich.edu    static FaultVect _vect;
1557427Sgblack@eecs.umich.edu    static FaultStat _stat;
1567405SAli.Saidi@ARM.com  public:
1577405SAli.Saidi@ARM.com    FaultName name() {return _name;}
1587405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
1597405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
1607405SAli.Saidi@ARM.com};
1617405SAli.Saidi@ARM.com
1627405SAli.Saidi@ARM.comclass DtbAcvFault : public AlphaFault
1637405SAli.Saidi@ARM.com{
1647405SAli.Saidi@ARM.com  private:
1657405SAli.Saidi@ARM.com    static FaultName _name;
1667405SAli.Saidi@ARM.com    static FaultVect _vect;
1677405SAli.Saidi@ARM.com    static FaultStat _stat;
1687405SAli.Saidi@ARM.com  public:
1697405SAli.Saidi@ARM.com    FaultName name() {return _name;}
1707405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
1717405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
1727405SAli.Saidi@ARM.com};
1737405SAli.Saidi@ARM.com
1747405SAli.Saidi@ARM.comclass ItbMissFault : public AlphaFault
1757405SAli.Saidi@ARM.com{
1767405SAli.Saidi@ARM.com  private:
1777405SAli.Saidi@ARM.com    static FaultName _name;
1787405SAli.Saidi@ARM.com    static FaultVect _vect;
1797405SAli.Saidi@ARM.com    static FaultStat _stat;
1807405SAli.Saidi@ARM.com  public:
1817405SAli.Saidi@ARM.com    FaultName name() {return _name;}
1827405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
1837405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
1847405SAli.Saidi@ARM.com};
1857405SAli.Saidi@ARM.com
1867405SAli.Saidi@ARM.comclass ItbPageFault : public AlphaFault
1877405SAli.Saidi@ARM.com{
1887405SAli.Saidi@ARM.com  private:
1897405SAli.Saidi@ARM.com    static FaultName _name;
1907405SAli.Saidi@ARM.com    static FaultVect _vect;
1917405SAli.Saidi@ARM.com    static FaultStat _stat;
1927405SAli.Saidi@ARM.com  public:
1937405SAli.Saidi@ARM.com    FaultName name() {return _name;}
1947405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
1957405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
1967405SAli.Saidi@ARM.com};
1977405SAli.Saidi@ARM.com
1987405SAli.Saidi@ARM.comclass ItbAcvFault : public AlphaFault
1997405SAli.Saidi@ARM.com{
2007405SAli.Saidi@ARM.com  private:
2017405SAli.Saidi@ARM.com    static FaultName _name;
2027405SAli.Saidi@ARM.com    static FaultVect _vect;
2037405SAli.Saidi@ARM.com    static FaultStat _stat;
2047405SAli.Saidi@ARM.com  public:
2057405SAli.Saidi@ARM.com    FaultName name() {return _name;}
2067405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
2077405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
2087405SAli.Saidi@ARM.com};
2097405SAli.Saidi@ARM.com
2107405SAli.Saidi@ARM.comclass UnimplementedOpcodeFault : public AlphaFault
2117405SAli.Saidi@ARM.com{
2127405SAli.Saidi@ARM.com  private:
2137405SAli.Saidi@ARM.com    static FaultName _name;
2147405SAli.Saidi@ARM.com    static FaultVect _vect;
2157588SAli.Saidi@arm.com    static FaultStat _stat;
2167588SAli.Saidi@arm.com  public:
2177588SAli.Saidi@arm.com    FaultName name() {return _name;}
2187583SAli.Saidi@arm.com    FaultVect vect() {return _vect;}
2197583SAli.Saidi@arm.com    FaultStat & stat() {return _stat;}
2207583SAli.Saidi@arm.com};
2217583SAli.Saidi@arm.com
2227583SAli.Saidi@arm.comclass FloatEnableFault : public AlphaFault
2237583SAli.Saidi@arm.com{
2247583SAli.Saidi@arm.com  private:
2257583SAli.Saidi@arm.com    static FaultName _name;
2267583SAli.Saidi@arm.com    static FaultVect _vect;
2277583SAli.Saidi@arm.com    static FaultStat _stat;
2287583SAli.Saidi@arm.com  public:
2297583SAli.Saidi@arm.com    FaultName name() {return _name;}
2307583SAli.Saidi@arm.com    FaultVect vect() {return _vect;}
2317583SAli.Saidi@arm.com    FaultStat & stat() {return _stat;}
2327405SAli.Saidi@ARM.com};
2337405SAli.Saidi@ARM.com
2347405SAli.Saidi@ARM.comclass PalFault : public AlphaFault
2357405SAli.Saidi@ARM.com{
2367405SAli.Saidi@ARM.com  private:
2377405SAli.Saidi@ARM.com    static FaultName _name;
2387405SAli.Saidi@ARM.com    static FaultVect _vect;
2397405SAli.Saidi@ARM.com    static FaultStat _stat;
2407405SAli.Saidi@ARM.com  public:
2417405SAli.Saidi@ARM.com    FaultName name() {return _name;}
2427405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
2437405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
2447405SAli.Saidi@ARM.com};
2457405SAli.Saidi@ARM.com
2467405SAli.Saidi@ARM.comclass IntegerOverflowFault : public AlphaFault
2477405SAli.Saidi@ARM.com{
2487405SAli.Saidi@ARM.com  private:
2497405SAli.Saidi@ARM.com    static FaultName _name;
2507405SAli.Saidi@ARM.com    static FaultVect _vect;
2517405SAli.Saidi@ARM.com    static FaultStat _stat;
2527405SAli.Saidi@ARM.com  public:
2537405SAli.Saidi@ARM.com    FaultName name() {return _name;}
2547405SAli.Saidi@ARM.com    FaultVect vect() {return _vect;}
2557405SAli.Saidi@ARM.com    FaultStat & stat() {return _stat;}
2567405SAli.Saidi@ARM.com};
2577405SAli.Saidi@ARM.com
2587405SAli.Saidi@ARM.com} // AlphaISA namespace
2597405SAli.Saidi@ARM.com
2607405SAli.Saidi@ARM.com#endif // __FAULTS_HH__
2617405SAli.Saidi@ARM.com