faults.hh revision 2175
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef __ALPHA_FAULTS_HH__
30#define __ALPHA_FAULTS_HH__
31
32#include "sim/faults.hh"
33
34// The design of the "name" and "vect" functions is in sim/faults.hh
35
36namespace AlphaISA
37{
38
39typedef const Addr FaultVect;
40
41class AlphaFault : public virtual FaultBase
42{
43  public:
44#if FULL_SYSTEM
45    void ev5_trap(ExecContext * xc);
46#endif
47    virtual FaultVect vect() = 0;
48};
49
50class AlphaMachineCheckFault :
51    public MachineCheckFault,
52    public AlphaFault
53{
54  private:
55    static FaultVect _vect;
56    static FaultStat _stat;
57  public:
58#if FULL_SYSTEM
59    void ev5_trap(ExecContext * xc);
60#endif
61    FaultVect vect() {return _vect;}
62    FaultStat & stat() {return _stat;}
63};
64
65class AlphaAlignmentFault :
66    public AlignmentFault,
67    public AlphaFault
68{
69  private:
70    static FaultVect _vect;
71    static FaultStat _stat;
72  public:
73#if FULL_SYSTEM
74    void ev5_trap(ExecContext * xc);
75#endif
76    FaultVect vect() {return _vect;}
77    FaultStat & stat() {return _stat;}
78};
79
80static inline Fault genMachineCheckFault()
81{
82    return new AlphaMachineCheckFault;
83}
84
85static inline Fault genAlignmentFault()
86{
87    return new AlphaAlignmentFault;
88}
89
90class ResetFault : public AlphaFault
91{
92  private:
93    static FaultName _name;
94    static FaultVect _vect;
95    static FaultStat _stat;
96  public:
97    FaultName name() {return _name;}
98    FaultVect vect() {return _vect;}
99    FaultStat & stat() {return _stat;}
100};
101
102class ArithmeticFault : public AlphaFault
103{
104  private:
105    static FaultName _name;
106    static FaultVect _vect;
107    static FaultStat _stat;
108  public:
109    FaultName name() {return _name;}
110    FaultVect vect() {return _vect;}
111    FaultStat & stat() {return _stat;}
112};
113
114class InterruptFault : public AlphaFault
115{
116  private:
117    static FaultName _name;
118    static FaultVect _vect;
119    static FaultStat _stat;
120  public:
121    FaultName name() {return _name;}
122    FaultVect vect() {return _vect;}
123    FaultStat & stat() {return _stat;}
124};
125
126class NDtbMissFault : public AlphaFault
127{
128  private:
129    static FaultName _name;
130    static FaultVect _vect;
131    static FaultStat _stat;
132  public:
133    FaultName name() {return _name;}
134    FaultVect vect() {return _vect;}
135    FaultStat & stat() {return _stat;}
136};
137
138class PDtbMissFault : public AlphaFault
139{
140  private:
141    static FaultName _name;
142    static FaultVect _vect;
143    static FaultStat _stat;
144  public:
145    FaultName name() {return _name;}
146    FaultVect vect() {return _vect;}
147    FaultStat & stat() {return _stat;}
148};
149
150class DtbPageFault : public AlphaFault
151{
152  private:
153    static FaultName _name;
154    static FaultVect _vect;
155    static FaultStat _stat;
156  public:
157    FaultName name() {return _name;}
158    FaultVect vect() {return _vect;}
159    FaultStat & stat() {return _stat;}
160};
161
162class DtbAcvFault : public AlphaFault
163{
164  private:
165    static FaultName _name;
166    static FaultVect _vect;
167    static FaultStat _stat;
168  public:
169    FaultName name() {return _name;}
170    FaultVect vect() {return _vect;}
171    FaultStat & stat() {return _stat;}
172};
173
174class ItbMissFault : public AlphaFault
175{
176  private:
177    static FaultName _name;
178    static FaultVect _vect;
179    static FaultStat _stat;
180  public:
181    FaultName name() {return _name;}
182    FaultVect vect() {return _vect;}
183    FaultStat & stat() {return _stat;}
184};
185
186class ItbPageFault : public AlphaFault
187{
188  private:
189    static FaultName _name;
190    static FaultVect _vect;
191    static FaultStat _stat;
192  public:
193    FaultName name() {return _name;}
194    FaultVect vect() {return _vect;}
195    FaultStat & stat() {return _stat;}
196};
197
198class ItbAcvFault : public AlphaFault
199{
200  private:
201    static FaultName _name;
202    static FaultVect _vect;
203    static FaultStat _stat;
204  public:
205    FaultName name() {return _name;}
206    FaultVect vect() {return _vect;}
207    FaultStat & stat() {return _stat;}
208};
209
210class UnimplementedOpcodeFault : public AlphaFault
211{
212  private:
213    static FaultName _name;
214    static FaultVect _vect;
215    static FaultStat _stat;
216  public:
217    FaultName name() {return _name;}
218    FaultVect vect() {return _vect;}
219    FaultStat & stat() {return _stat;}
220};
221
222class FloatEnableFault : public AlphaFault
223{
224  private:
225    static FaultName _name;
226    static FaultVect _vect;
227    static FaultStat _stat;
228  public:
229    FaultName name() {return _name;}
230    FaultVect vect() {return _vect;}
231    FaultStat & stat() {return _stat;}
232};
233
234class PalFault : public AlphaFault
235{
236  private:
237    static FaultName _name;
238    static FaultVect _vect;
239    static FaultStat _stat;
240  public:
241    FaultName name() {return _name;}
242    FaultVect vect() {return _vect;}
243    FaultStat & stat() {return _stat;}
244};
245
246class IntegerOverflowFault : public AlphaFault
247{
248  private:
249    static FaultName _name;
250    static FaultVect _vect;
251    static FaultStat _stat;
252  public:
253    FaultName name() {return _name;}
254    FaultVect vect() {return _vect;}
255    FaultStat & stat() {return _stat;}
256};
257
258} // AlphaISA namespace
259
260#endif // __FAULTS_HH__
261