gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
isa.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2009 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  * Authors: Gabe Black
29  */
30 
31 #ifndef __ARCH_SPARC_ISA_HH__
32 #define __ARCH_SPARC_ISA_HH__
33 
34 #include <ostream>
35 #include <string>
36 
37 #include "arch/generic/isa.hh"
38 #include "arch/sparc/registers.hh"
39 #include "arch/sparc/types.hh"
40 #include "cpu/cpuevent.hh"
41 #include "cpu/reg_class.hh"
42 #include "sim/sim_object.hh"
43 
44 class Checkpoint;
45 class EventManager;
46 struct SparcISAParams;
47 class ThreadContext;
48 
49 namespace SparcISA
50 {
51 class ISA : public BaseISA
52 {
53  private:
54 
55  /* ASR Registers */
56  // uint64_t y; // Y (used in obsolete multiplication)
57  // uint8_t ccr; // Condition Code Register
58  uint8_t asi; // Address Space Identifier
59  uint64_t tick; // Hardware clock-tick counter
60  uint8_t fprs; // Floating-Point Register State
61  uint64_t gsr; // General Status Register
62  uint64_t softint;
63  uint64_t tick_cmpr; // Hardware tick compare registers
64  uint64_t stick; // Hardware clock-tick counter
65  uint64_t stick_cmpr; // Hardware tick compare registers
66 
67 
68  /* Privileged Registers */
69  uint64_t tpc[MaxTL]; // Trap Program Counter (value from
70  // previous trap level)
71  uint64_t tnpc[MaxTL]; // Trap Next Program Counter (value from
72  // previous trap level)
73  uint64_t tstate[MaxTL]; // Trap State
74  uint16_t tt[MaxTL]; // Trap Type (Type of trap which occured
75  // on the previous level)
76  uint64_t tba; // Trap Base Address
77 
78  PSTATE pstate; // Process State Register
79  uint8_t tl; // Trap Level
80  uint8_t pil; // Process Interrupt Register
81  uint8_t cwp; // Current Window Pointer
82  // uint8_t cansave; // Savable windows
83  // uint8_t canrestore; // Restorable windows
84  // uint8_t cleanwin; // Clean windows
85  // uint8_t otherwin; // Other windows
86  // uint8_t wstate; // Window State
87  uint8_t gl; // Global level register
88 
90  HPSTATE hpstate; // Hyperprivileged State Register
91  uint64_t htstate[MaxTL];// Hyperprivileged Trap State Register
92  uint64_t hintp;
93  uint64_t htba; // Hyperprivileged Trap Base Address register
94  uint64_t hstick_cmpr; // Hardware tick compare registers
95 
96  uint64_t strandStatusReg;// Per strand status register
97 
99  uint64_t fsr; // Floating-Point State Register
100 
102  uint16_t priContext;
103  uint16_t secContext;
104  uint16_t partId;
105  uint64_t lsuCtrlReg;
106 
107  uint64_t scratchPad[8];
108 
109  uint64_t cpu_mondo_head;
110  uint64_t cpu_mondo_tail;
111  uint64_t dev_mondo_head;
112  uint64_t dev_mondo_tail;
113  uint64_t res_error_head;
114  uint64_t res_error_tail;
115  uint64_t nres_error_head;
116  uint64_t nres_error_tail;
117 
118  // These need to check the int_dis field and if 0 then
119  // set appropriate bit in softint and checkinterrutps on the cpu
120  void setFSReg(int miscReg, RegVal val, ThreadContext *tc);
121  RegVal readFSReg(int miscReg, ThreadContext * tc);
122 
123  // Update interrupt state on softint or pil change
124  void checkSoftInt(ThreadContext *tc);
125 
131 
132  typedef CpuEventWrapper<ISA,
134  TickCompareEvent *tickCompare;
135 
136  typedef CpuEventWrapper<ISA,
138  STickCompareEvent *sTickCompare;
139 
140  typedef CpuEventWrapper<ISA,
142  HSTickCompareEvent *hSTickCompare;
143 
144  static const int NumGlobalRegs = 8;
145  static const int NumWindowedRegs = 24;
146  static const int WindowOverlap = 8;
147 
148  static const int TotalGlobals = (MaxGL + 1) * NumGlobalRegs;
149  static const int RegsPerWindow = NumWindowedRegs - WindowOverlap;
150  static const int TotalWindowed = NWindows * RegsPerWindow;
151 
161  };
162 
164  void installWindow(int cwp, int offset);
165  void installGlobals(int gl, int offset);
166  void reloadRegMap();
167 
168  public:
169 
170  void clear();
171 
172  void serialize(CheckpointOut &cp) const override;
173  void unserialize(CheckpointIn &cp) override;
174 
175  void startup(ThreadContext *tc) {}
176 
178  using BaseISA::startup;
179 
180  protected:
181  bool isHyperPriv() { return hpstate.hpriv; }
182  bool isPriv() { return hpstate.hpriv || pstate.priv; }
183  bool isNonPriv() { return !isPriv(); }
184 
185  public:
186 
187  RegVal readMiscRegNoEffect(int miscReg) const;
188  RegVal readMiscReg(int miscReg, ThreadContext *tc);
189 
190  void setMiscRegNoEffect(int miscReg, RegVal val);
191  void setMiscReg(int miscReg, RegVal val, ThreadContext *tc);
192 
193  RegId
194  flattenRegId(const RegId& regId) const
195  {
196  switch (regId.classValue()) {
197  case IntRegClass:
198  return RegId(IntRegClass, flattenIntIndex(regId.index()));
199  case FloatRegClass:
200  return RegId(FloatRegClass, flattenFloatIndex(regId.index()));
201  case CCRegClass:
202  return RegId(CCRegClass, flattenCCIndex(regId.index()));
203  case MiscRegClass:
204  return RegId(MiscRegClass, flattenMiscIndex(regId.index()));
205  default:
206  break;
207  }
208  return regId;
209  }
210 
211  int
212  flattenIntIndex(int reg) const
213  {
214  assert(reg < TotalInstIntRegs);
215  RegIndex flatIndex = intRegMap[reg];
216  assert(flatIndex < NumIntRegs);
217  return flatIndex;
218  }
219 
220  int
222  {
223  return reg;
224  }
225 
226  int
227  flattenVecIndex(int reg) const
228  {
229  return reg;
230  }
231 
232  int
234  {
235  return reg;
236  }
237 
238  int
240  {
241  return reg;
242  }
243 
244  // dummy
245  int
246  flattenCCIndex(int reg) const
247  {
248  return reg;
249  }
250 
251  int
253  {
254  return reg;
255  }
256 
257 
258  typedef SparcISAParams Params;
259  const Params *params() const;
260 
261  ISA(Params *p);
262 };
263 }
264 
265 #endif
RegVal readMiscRegNoEffect(int miscReg) const
Definition: isa.cc:177
Bitfield< 5, 3 > reg
Definition: types.hh:89
uint64_t htba
Definition: isa.hh:93
void reloadRegMap()
Definition: isa.cc:80
void installGlobals(int gl, int offset)
Definition: isa.cc:104
Floating-point register.
Definition: reg_class.hh:58
uint64_t dev_mondo_tail
Definition: isa.hh:112
CpuEventWrapper< ISA, &ISA::processSTickCompare > STickCompareEvent
Definition: isa.hh:137
int flattenFloatIndex(int reg) const
Definition: isa.hh:221
uint8_t pil
Definition: isa.hh:80
const int NumIntRegs
Definition: registers.hh:76
Control (misc) register.
Definition: reg_class.hh:65
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: isa.cc:643
void processSTickCompare(ThreadContext *tc)
Definition: ua2005.cc:327
uint64_t tnpc[MaxTL]
Definition: isa.hh:71
const int MaxGL
Definition: sparc_traits.hh:39
static const int NumWindowedRegs
Definition: isa.hh:145
uint8_t cwp
Definition: isa.hh:81
uint16_t partId
Definition: isa.hh:104
uint64_t htstate[MaxTL]
Definition: isa.hh:91
uint64_t RegVal
Definition: types.hh:168
TickCompareEvent * tickCompare
Definition: isa.hh:134
PSTATE pstate
Definition: isa.hh:78
Bitfield< 23, 0 > offset
Definition: types.hh:154
int flattenIntIndex(int reg) const
Definition: isa.hh:212
CpuEventWrapper< ISA, &ISA::processTickCompare > TickCompareEvent
Definition: isa.hh:133
Definition: cprintf.cc:42
uint64_t tick
Definition: isa.hh:59
int flattenVecElemIndex(int reg) const
Definition: isa.hh:233
uint64_t tpc[MaxTL]
Definition: isa.hh:69
RegIndex intRegMap[TotalInstIntRegs]
Definition: isa.hh:163
ThreadContext is the external interface to all thread state for anything outside of the CPU...
uint64_t nres_error_tail
Definition: isa.hh:116
uint64_t fsr
Floating point misc registers.
Definition: isa.hh:99
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: isa.cc:719
uint64_t lsuCtrlReg
Definition: isa.hh:105
uint64_t tstate[MaxTL]
Definition: isa.hh:73
Bitfield< 63 > val
Definition: misc.hh:771
uint64_t hstick_cmpr
Definition: isa.hh:94
void processTickCompare(ThreadContext *tc)
Process a tick compare event and generate an interrupt on the cpu if appropriate. ...
Definition: ua2005.cc:321
InstIntRegOffsets
Definition: isa.hh:152
int flattenCCIndex(int reg) const
Definition: isa.hh:246
bool isHyperPriv()
Definition: isa.hh:181
void processHSTickCompare(ThreadContext *tc)
Definition: ua2005.cc:351
static const int NumGlobalRegs
Definition: isa.hh:144
int flattenMiscIndex(int reg) const
Definition: isa.hh:252
uint64_t dev_mondo_head
Definition: isa.hh:111
uint16_t RegIndex
Definition: types.hh:42
uint8_t asi
Definition: isa.hh:58
int flattenVecPredIndex(int reg) const
Definition: isa.hh:239
uint64_t tba
Definition: isa.hh:76
uint64_t nres_error_head
Definition: isa.hh:115
RegVal readMiscReg(int miscReg, ThreadContext *tc)
Definition: isa.cc:338
uint8_t gl
Definition: isa.hh:87
Condition-code register.
Definition: reg_class.hh:64
uint64_t res_error_head
Definition: isa.hh:113
HPSTATE hpstate
Hyperprivileged Registers.
Definition: isa.hh:90
CpuEventWrapper< ISA, &ISA::processHSTickCompare > HSTickCompareEvent
Definition: isa.hh:141
void setMiscReg(int miscReg, RegVal val, ThreadContext *tc)
Definition: isa.cc:567
uint64_t cpu_mondo_head
Definition: isa.hh:109
static const int RegsPerWindow
Definition: isa.hh:149
HSTickCompareEvent * hSTickCompare
Definition: isa.hh:142
RegVal readFSReg(int miscReg, ThreadContext *tc)
Definition: ua2005.cc:247
uint16_t secContext
Definition: isa.hh:103
static const int WindowOverlap
Definition: isa.hh:146
uint8_t fprs
Definition: isa.hh:60
uint64_t softint
Definition: isa.hh:62
const int MaxTL
Definition: sparc_traits.hh:38
int flattenVecIndex(int reg) const
Definition: isa.hh:227
std::ostream CheckpointOut
Definition: serialize.hh:68
Definition: asi.cc:34
RegId flattenRegId(const RegId &regId) const
Definition: isa.hh:194
void startup(ThreadContext *tc)
Definition: isa.hh:175
STickCompareEvent * sTickCompare
Definition: isa.hh:138
const RegClass & classValue() const
Class accessor.
Definition: reg_class.hh:206
const int NWindows
Definition: sparc_traits.hh:43
uint64_t cpu_mondo_tail
Definition: isa.hh:110
uint64_t stick
Definition: isa.hh:64
const int NumMicroIntRegs
Definition: sparc_traits.hh:45
uint64_t res_error_tail
Definition: isa.hh:114
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:179
uint64_t strandStatusReg
Definition: isa.hh:96
const Params * params() const
Definition: isa.cc:74
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:79
Integer register.
Definition: reg_class.hh:57
void checkSoftInt(ThreadContext *tc)
Definition: ua2005.cc:47
Definition: isa.hh:35
uint64_t tick_cmpr
Definition: isa.hh:63
bool isNonPriv()
Definition: isa.hh:183
static const int TotalGlobals
Definition: isa.hh:148
static const int TotalWindowed
Definition: isa.hh:150
bool isPriv()
Definition: isa.hh:182
Bitfield< 0 > p
uint8_t tl
Definition: isa.hh:79
uint16_t priContext
MMU Internal Registers.
Definition: isa.hh:102
void clear()
Definition: isa.cc:114
uint16_t tt[MaxTL]
Definition: isa.hh:74
SparcISAParams Params
Definition: isa.hh:258
uint64_t hintp
Definition: isa.hh:92
ISA(Params *p)
Definition: isa.cc:64
void installWindow(int cwp, int offset)
Definition: isa.cc:94
uint64_t scratchPad[8]
Definition: isa.hh:107
uint64_t stick_cmpr
Definition: isa.hh:65
uint64_t gsr
Definition: isa.hh:61
void setMiscRegNoEffect(int miscReg, RegVal val)
Definition: isa.cc:386
void setFSReg(int miscReg, RegVal val, ThreadContext *tc)
Definition: ua2005.cc:92
virtual void startup()
startup() is the final initialization call before simulation.
Definition: sim_object.cc:99

Generated on Fri Feb 28 2020 16:26:56 for gem5 by doxygen 1.8.13