gem5  v21.0.1.0
thread_context.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2019 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__
29 #define __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__
30 
31 #include <list>
32 #include <map>
33 #include <memory>
34 
35 #include "cpu/base.hh"
36 #include "cpu/thread_context.hh"
37 #include "iris/IrisInstance.h"
38 #include "iris/detail/IrisErrorCode.h"
39 #include "iris/detail/IrisObjects.h"
40 #include "sim/system.hh"
41 
42 namespace Iris
43 {
44 
45 // This class is the base for ThreadContexts which read and write state using
46 // the Iris API.
48 {
49  public:
50  typedef std::map<std::string, iris::ResourceInfo> ResourceMap;
51 
53  typedef std::map<int, std::string> IdxNameMap;
54 
55  protected:
57  int _threadId;
62 
63  std::string _irisPath;
64  iris::InstanceId _instId = iris::IRIS_UINT64_MAX;
65 
66  // Temporary holding places for the vector reg accessors to return.
67  // These are not updated live, only when requested.
70 
73 
74  virtual void initFromIrisInstance(const ResourceMap &resources);
75 
76  iris::ResourceId extractResourceId(
77  const ResourceMap &resources, const std::string &name);
79  const ResourceMap &resources, const IdxNameMap &idx_names);
80 
81 
87 
88  iris::ResourceId pcRscId = iris::IRIS_UINT64_MAX;
89  iris::ResourceId icountRscId;
90 
93 
96 
97  std::unique_ptr<PortProxy> virtProxy = nullptr;
98  std::unique_ptr<PortProxy> physProxy = nullptr;
99 
100 
101  // A queue to keep track of instruction count based events.
103  // A helper function to maintain the IRIS step count. This makes sure the
104  // step count is correct even after IRIS resets it for us, and also handles
105  // events which are supposed to happen at the current instruction count.
106  void maintainStepping();
107 
108 
109  using BpId = uint64_t;
110  struct BpInfo
111  {
115  std::shared_ptr<EventList> events;
116 
117  BpInfo(Addr _pc) : pc(_pc), events(new EventList) {}
118 
119  bool empty() const { return events->empty(); }
120  bool validIds() const { return !ids.empty(); }
121  void clearIds() { ids.clear(); }
122  };
123 
124  using BpInfoPtr = std::unique_ptr<BpInfo>;
125  using BpInfoMap = std::map<Addr, BpInfoPtr>;
126  using BpInfoIt = BpInfoMap::iterator;
127 
129 
131 
132  void installBp(BpInfoIt it);
133  void uninstallBp(BpInfoIt it);
134  void delBp(BpInfoIt it);
135 
136  virtual const std::vector<iris::MemorySpaceId> &getBpSpaceIds() const = 0;
137 
138 
139  iris::IrisErrorCode instanceRegistryChanged(
140  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
141  uint64_t sInstId, bool syncEc, std::string &error_message_out);
142  iris::IrisErrorCode phaseInitLeave(
143  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
144  uint64_t sInstId, bool syncEc, std::string &error_message_out);
145  iris::IrisErrorCode simulationTimeEvent(
146  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
147  uint64_t sInstId, bool syncEc, std::string &error_message_out);
148  iris::IrisErrorCode breakpointHit(
149  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
150  uint64_t sInstId, bool syncEc, std::string &error_message_out);
151  iris::IrisErrorCode semihostingEvent(
152  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
153  uint64_t sInstId, bool syncEc, std::string &error_message_out);
154 
155  iris::EventStreamId regEventStreamId;
156  iris::EventStreamId initEventStreamId;
157  iris::EventStreamId timeEventStreamId;
158  iris::EventStreamId breakpointEventStreamId;
159  iris::EventStreamId semihostingEventStreamId;
160 
161  mutable iris::IrisInstance client;
162  iris::IrisCppAdapter &call() const { return client.irisCall(); }
163  iris::IrisCppAdapter &noThrow() const { return client.irisCallNoThrow(); }
164 
165  bool translateAddress(Addr &paddr, iris::MemorySpaceId p_space,
166  Addr vaddr, iris::MemorySpaceId v_space);
167 
168  public:
169  ThreadContext(::BaseCPU *cpu, int id, System *system,
170  ::BaseMMU *mmu, ::BaseISA *isa,
171  iris::IrisConnectionInterface *iris_if,
172  const std::string &iris_path);
173  virtual ~ThreadContext();
174 
175  virtual bool translateAddress(Addr &paddr, Addr vaddr) = 0;
176 
177  bool schedule(PCEvent *e) override;
178  bool remove(PCEvent *e) override;
179 
180  void scheduleInstCountEvent(Event *event, Tick count) override;
181  void descheduleInstCountEvent(Event *event) override;
182  Tick getCurrentInstCount() override;
183 
184  ::BaseCPU *getCpuPtr() override { return _cpu; }
185  int cpuId() const override { return _cpu->cpuId(); }
186  uint32_t socketId() const override { return _cpu->socketId(); }
187 
188  int threadId() const override { return _threadId; }
189  void setThreadId(int id) override { _threadId = id; }
190 
191  int contextId() const override { return _contextId; }
192  void setContextId(int id) override { _contextId = id; }
193 
194  BaseMMU *
195  getMMUPtr() override
196  {
197  return _mmu;
198  }
199 
200  CheckerCPU *getCheckerCpuPtr() override { return nullptr; }
202  getDecoderPtr() override
203  {
204  panic("%s not implemented.", __FUNCTION__);
205  }
206 
207  System *getSystemPtr() override { return _cpu->system; }
208 
209  BaseISA *
210  getIsaPtr() override
211  {
212  return _isa;
213  }
214 
215  PortProxy &getPhysProxy() override { return *physProxy; }
216  PortProxy &getVirtProxy() override { return *virtProxy; }
217  void initMemProxies(::ThreadContext *tc) override;
218 
219  Process *
220  getProcessPtr() override
221  {
222  panic("%s not implemented.", __FUNCTION__);
223  }
224  void
226  {
227  panic("%s not implemented.", __FUNCTION__);
228  }
229 
230  Status status() const override;
231  void setStatus(Status new_status) override;
232  void activate() override { setStatus(Active); }
233  void suspend() override { setStatus(Suspended); }
234  void halt() override { setStatus(Halted); }
235 
236  void
237  takeOverFrom(::ThreadContext *old_context) override
238  {
239  panic("%s not implemented.", __FUNCTION__);
240  }
241 
242  void regStats(const std::string &name) override {}
243 
244  // Not necessarily the best location for these...
245  // Having an extra function just to read these is obnoxious
246  Tick
247  readLastActivate() override
248  {
249  panic("%s not implemented.", __FUNCTION__);
250  }
252  {
253  panic("%s not implemented.", __FUNCTION__);
254  }
255 
256  void
257  copyArchRegs(::ThreadContext *tc) override
258  {
259  panic("%s not implemented.", __FUNCTION__);
260  }
261 
262  void
263  clearArchRegs() override
264  {
265  warn("Ignoring clearArchRegs()");
266  }
267 
268  //
269  // New accessors for new decoder.
270  //
271  RegVal readIntReg(RegIndex reg_idx) const override;
272 
273  RegVal
274  readFloatReg(RegIndex reg_idx) const override
275  {
276  panic("%s not implemented.", __FUNCTION__);
277  }
278 
279  const VecRegContainer &readVecReg(const RegId &reg) const override;
281  getWritableVecReg(const RegId &reg) override
282  {
283  panic("%s not implemented.", __FUNCTION__);
284  }
285 
290  readVec8BitLaneReg(const RegId &reg) const override
291  {
292  panic("%s not implemented.", __FUNCTION__);
293  }
294 
297  readVec16BitLaneReg(const RegId &reg) const override
298  {
299  panic("%s not implemented.", __FUNCTION__);
300  }
301 
304  readVec32BitLaneReg(const RegId &reg) const override
305  {
306  panic("%s not implemented.", __FUNCTION__);
307  }
308 
311  readVec64BitLaneReg(const RegId &reg) const override
312  {
313  panic("%s not implemented.", __FUNCTION__);
314  }
315 
317  void
319  {
320  panic("%s not implemented.", __FUNCTION__);
321  }
322  void
324  const LaneData<LaneSize::TwoByte> &val) override
325  {
326  panic("%s not implemented.", __FUNCTION__);
327  }
328  void
330  const LaneData<LaneSize::FourByte> &val) override
331  {
332  panic("%s not implemented.", __FUNCTION__);
333  }
334  void
336  const LaneData<LaneSize::EightByte> &val) override
337  {
338  panic("%s not implemented.", __FUNCTION__);
339  }
342  const VecElem &
343  readVecElem(const RegId &reg) const override
344  {
345  panic("%s not implemented.", __FUNCTION__);
346  }
347 
348  const VecPredRegContainer &readVecPredReg(const RegId &reg) const override;
350  getWritableVecPredReg(const RegId &reg) override
351  {
352  panic("%s not implemented.", __FUNCTION__);
353  }
354 
355  RegVal
356  readCCReg(RegIndex reg_idx) const override
357  {
358  return readCCRegFlat(reg_idx);
359  }
360 
361  void setIntReg(RegIndex reg_idx, RegVal val) override;
362 
363  void
364  setFloatReg(RegIndex reg_idx, RegVal val) override
365  {
366  panic("%s not implemented.", __FUNCTION__);
367  }
368 
369  void
370  setVecReg(const RegId &reg, const VecRegContainer &val) override
371  {
372  panic("%s not implemented.", __FUNCTION__);
373  }
374 
375  void
376  setVecElem(const RegId& reg, const VecElem& val) override
377  {
378  panic("%s not implemented.", __FUNCTION__);
379  }
380 
381  void
383  const VecPredRegContainer &val) override
384  {
385  panic("%s not implemented.", __FUNCTION__);
386  }
387 
388  void
389  setCCReg(RegIndex reg_idx, RegVal val) override
390  {
391  setCCRegFlat(reg_idx, val);
392  }
393 
394  void pcStateNoRecord(const ArmISA::PCState &val) override { pcState(val); }
395  MicroPC microPC() const override { return 0; }
396 
397  ArmISA::PCState pcState() const override;
398  void pcState(const ArmISA::PCState &val) override;
399  Addr instAddr() const override;
400  Addr nextInstAddr() const override;
401 
402  RegVal readMiscRegNoEffect(RegIndex misc_reg) const override;
403  RegVal
404  readMiscReg(RegIndex misc_reg) override
405  {
406  return readMiscRegNoEffect(misc_reg);
407  }
408 
409  void setMiscRegNoEffect(RegIndex misc_reg, const RegVal val) override;
410  void
411  setMiscReg(RegIndex misc_reg, const RegVal val) override
412  {
413  setMiscRegNoEffect(misc_reg, val);
414  }
415 
416  RegId
417  flattenRegId(const RegId& regId) const override
418  {
419  panic("%s not implemented.", __FUNCTION__);
420  }
421 
422  // Also not necessarily the best location for these two. Hopefully will go
423  // away once we decide upon where st cond failures goes.
424  unsigned
425  readStCondFailures() const override
426  {
427  panic("%s not implemented.", __FUNCTION__);
428  }
429 
430  void
431  setStCondFailures(unsigned sc_failures) override
432  {
433  panic("%s not implemented.", __FUNCTION__);
434  }
435 
436  // Same with st cond failures.
437  Counter
438  readFuncExeInst() const override
439  {
440  panic("%s not implemented.", __FUNCTION__);
441  }
442 
455  RegVal readIntRegFlat(RegIndex idx) const override;
456  void setIntRegFlat(RegIndex idx, uint64_t val) override;
457 
458  RegVal
459  readFloatRegFlat(RegIndex idx) const override
460  {
461  panic("%s not implemented.", __FUNCTION__);
462  }
463  void
465  {
466  panic("%s not implemented.", __FUNCTION__);
467  }
468 
469  const VecRegContainer &readVecRegFlat(RegIndex idx) const override;
472  {
473  panic("%s not implemented.", __FUNCTION__);
474  }
475  void
477  {
478  panic("%s not implemented.", __FUNCTION__);
479  }
480 
481  const VecElem&
482  readVecElemFlat(RegIndex idx, const ElemIndex& elemIdx) const override
483  {
484  panic("%s not implemented.", __FUNCTION__);
485  }
486  void
487  setVecElemFlat(RegIndex idx, const ElemIndex &elemIdx,
488  const VecElem &val) override
489  {
490  panic("%s not implemented.", __FUNCTION__);
491  }
492 
493  const VecPredRegContainer &readVecPredRegFlat(RegIndex idx) const override;
496  {
497  panic("%s not implemented.", __FUNCTION__);
498  }
499  void
501  {
502  panic("%s not implemented.", __FUNCTION__);
503  }
504 
505  RegVal readCCRegFlat(RegIndex idx) const override;
506  void setCCRegFlat(RegIndex idx, RegVal val) override;
509  // hardware transactional memory
510  void
511  htmAbortTransaction(uint64_t htm_uid, HtmFailureFaultCause cause) override
512  {
513  panic("%s not implemented.", __FUNCTION__);
514  }
515 
518  {
519  panic("%s not implemented.", __FUNCTION__);
520  }
521 
522  void
524  {
525  panic("%s not implemented.", __FUNCTION__);
526  }
527 };
528 
529 } // namespace Iris
530 
531 #endif // __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__
Iris::ThreadContext::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex misc_reg, const RegVal val) override
Definition: thread_context.cc:571
Iris::ThreadContext::initMemProxies
void initMemProxies(::ThreadContext *tc) override
Definition: thread_context.cc:477
Iris::ThreadContext::setIntReg
void setIntReg(RegIndex reg_idx, RegVal val) override
Definition: thread_context.cc:591
Iris::ThreadContext::getVirtProxy
PortProxy & getVirtProxy() override
Definition: thread_context.hh:216
warn
#define warn(...)
Definition: logging.hh:239
Iris::ThreadContext::noThrow
iris::IrisCppAdapter & noThrow() const
Definition: thread_context.hh:163
Iris::ThreadContext::setVecReg
void setVecReg(const RegId &reg, const VecRegContainer &val) override
Definition: thread_context.hh:370
system.hh
Iris::ThreadContext::uninstallBp
void uninstallBp(BpInfoIt it)
Definition: thread_context.cc:170
Iris::ThreadContext::getHtmCheckpointPtr
BaseHTMCheckpointPtr & getHtmCheckpointPtr() override
Definition: thread_context.hh:517
Iris::ThreadContext::readVecRegFlat
const VecRegContainer & readVecRegFlat(RegIndex idx) const override
Definition: thread_context.cc:673
VecPredRegContainer
Generic predicate register container.
Definition: vec_pred_reg.hh:47
BaseMMU
Definition: mmu.hh:45
Iris::ThreadContext::enableAfterPseudoEvent
Event * enableAfterPseudoEvent
Definition: thread_context.hh:72
Iris
Definition: cpu.cc:34
Iris::ThreadContext::setProcessPtr
void setProcessPtr(Process *p) override
Definition: thread_context.hh:225
Iris::ThreadContext::pcState
ArmISA::PCState pcState() const override
Definition: thread_context.cc:513
Process
Definition: process.hh:65
Iris::ThreadContext::virtProxy
std::unique_ptr< PortProxy > virtProxy
Definition: thread_context.hh:97
Iris::ThreadContext::maintainStepping
void maintainStepping()
Definition: thread_context.cc:116
Iris::ThreadContext::timeEventStreamId
iris::EventStreamId timeEventStreamId
Definition: thread_context.hh:157
Iris::ThreadContext::readFloatRegFlat
RegVal readFloatRegFlat(RegIndex idx) const override
Definition: thread_context.hh:459
Iris::ThreadContext::pcRscId
iris::ResourceId pcRscId
Definition: thread_context.hh:88
Iris::ThreadContext::setVecElemFlat
void setVecElemFlat(RegIndex idx, const ElemIndex &elemIdx, const VecElem &val) override
Definition: thread_context.hh:487
Iris::ThreadContext::BpInfo::BpInfo
BpInfo(Addr _pc)
Definition: thread_context.hh:117
Iris::ThreadContext::setStCondFailures
void setStCondFailures(unsigned sc_failures) override
Definition: thread_context.hh:431
ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:237
Iris::ThreadContext::setContextId
void setContextId(int id) override
Definition: thread_context.hh:192
Iris::ThreadContext::miscRegIds
ResourceIds miscRegIds
Definition: thread_context.hh:82
Iris::ThreadContext::breakpointEventStreamId
iris::EventStreamId breakpointEventStreamId
Definition: thread_context.hh:158
Iris::ThreadContext::setVecElem
void setVecElem(const RegId &reg, const VecElem &val) override
Definition: thread_context.hh:376
Iris::ThreadContext::vecPredRegs
std::vector< ArmISA::VecPredRegContainer > vecPredRegs
Definition: thread_context.hh:69
Iris::ThreadContext::ccRegIds
ResourceIds ccRegIds
Definition: thread_context.hh:86
Iris::ThreadContext::physProxy
std::unique_ptr< PortProxy > physProxy
Definition: thread_context.hh:98
Iris::ThreadContext::readVecPredRegFlat
const VecPredRegContainer & readVecPredRegFlat(RegIndex idx) const override
Definition: thread_context.cc:708
Iris::ThreadContext::BpInfo::pc
Addr pc
Definition: thread_context.hh:112
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:59
Iris::ThreadContext::ResourceIds
std::vector< iris::ResourceId > ResourceIds
Definition: thread_context.hh:52
Iris::ThreadContext::BpInfo
Definition: thread_context.hh:110
Iris::ThreadContext::setHtmCheckpointPtr
void setHtmCheckpointPtr(BaseHTMCheckpointPtr cpt) override
Definition: thread_context.hh:523
Iris::ThreadContext::getWritableVecPredReg
VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
Definition: thread_context.hh:350
Iris::ThreadContext::readCCReg
RegVal readCCReg(RegIndex reg_idx) const override
Definition: thread_context.hh:356
Iris::ThreadContext::setIntRegFlat
void setIntRegFlat(RegIndex idx, uint64_t val) override
Definition: thread_context.cc:620
Iris::ThreadContext::getPhysProxy
PortProxy & getPhysProxy() override
Definition: thread_context.hh:215
Iris::ThreadContext::takeOverFrom
void takeOverFrom(::ThreadContext *old_context) override
Definition: thread_context.hh:237
Iris::ThreadContext::initEventStreamId
iris::EventStreamId initEventStreamId
Definition: thread_context.hh:156
Iris::ThreadContext::readVec16BitLaneReg
ConstVecLane16 readVec16BitLaneReg(const RegId &reg) const override
Reads source vector 16bit operand.
Definition: thread_context.hh:297
CheckerCPU
CheckerCPU class.
Definition: cpu.hh:85
std::vector< iris::ResourceId >
Iris::ThreadContext::instanceRegistryChanged
iris::IrisErrorCode instanceRegistryChanged(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
Definition: thread_context.cc:190
Iris::ThreadContext::installBp
void installBp(BpInfoIt it)
Definition: thread_context.cc:158
Iris::ThreadContext::getWritableVecPredRegFlat
VecPredRegContainer & getWritableVecPredRegFlat(RegIndex idx) override
Definition: thread_context.hh:495
Iris::ThreadContext::regEventStreamId
iris::EventStreamId regEventStreamId
Definition: thread_context.hh:155
BaseCPU::socketId
uint32_t socketId() const
Reads this CPU's Socket ID.
Definition: base.hh:198
HtmFailureFaultCause
HtmFailureFaultCause
Definition: htm.hh:44
X86ISA::count
count
Definition: misc.hh:703
Iris::ThreadContext::readFuncExeInst
Counter readFuncExeInst() const override
Definition: thread_context.hh:438
Iris::ThreadContext::schedule
bool schedule(PCEvent *e) override
Definition: thread_context.cc:396
Iris::ThreadContext::getBpSpaceIds
virtual const std::vector< iris::MemorySpaceId > & getBpSpaceIds() const =0
Iris::ThreadContext::_threadId
int _threadId
Definition: thread_context.hh:57
Iris::ThreadContext::translations
std::vector< iris::MemorySupportedAddressTranslationResult > translations
Definition: thread_context.hh:95
Iris::ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::EightByte > &val) override
Definition: thread_context.hh:335
X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:88
Iris::ThreadContext::getOrAllocBp
BpInfoIt getOrAllocBp(Addr pc)
Definition: thread_context.cc:145
Iris::ThreadContext::_contextId
ContextID _contextId
Definition: thread_context.hh:58
Iris::ThreadContext::status
Status status() const override
Definition: thread_context.cc:492
RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
Iris::ThreadContext::nextInstAddr
Addr nextInstAddr() const override
Definition: thread_context.cc:557
Iris::ThreadContext::getDecoderPtr
ArmISA::Decoder * getDecoderPtr() override
Definition: thread_context.hh:202
Iris::ThreadContext::setThreadId
void setThreadId(int id) override
Definition: thread_context.hh:189
Iris::ThreadContext::translateAddress
bool translateAddress(Addr &paddr, iris::MemorySpaceId p_space, Addr vaddr, iris::MemorySpaceId v_space)
Definition: thread_context.cc:420
Iris::ThreadContext::memorySpaces
std::vector< iris::MemorySpaceInfo > memorySpaces
Definition: thread_context.hh:94
Iris::ThreadContext::~ThreadContext
virtual ~ThreadContext()
Definition: thread_context.cc:373
Iris::ThreadContext::halt
void halt() override
Set the status to Halted.
Definition: thread_context.hh:234
Iris::ThreadContext::readVecElem
const VecElem & readVecElem(const RegId &reg) const override
Definition: thread_context.hh:343
X86ISA::system
Bitfield< 15 > system
Definition: misc.hh:997
Counter
int64_t Counter
Statistics counter type.
Definition: types.hh:54
Iris::ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
Definition: thread_context.hh:318
Iris::ThreadContext::phaseInitLeave
iris::IrisErrorCode phaseInitLeave(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
Definition: thread_context.cc:212
ArmISA::VecElem
uint32_t VecElem
Definition: registers.hh:60
Iris::ThreadContext::semihostingEvent
iris::IrisErrorCode semihostingEvent(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
Definition: thread_context.cc:285
Iris::ThreadContext::readVec32BitLaneReg
ConstVecLane32 readVec32BitLaneReg(const RegId &reg) const override
Reads source vector 32bit operand.
Definition: thread_context.hh:304
Iris::ThreadContext::readFloatReg
RegVal readFloatReg(RegIndex reg_idx) const override
Definition: thread_context.hh:274
Iris::ThreadContext::instAddr
Addr instAddr() const override
Definition: thread_context.cc:551
Iris::ThreadContext::breakpointHit
iris::IrisErrorCode breakpointHit(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
Definition: thread_context.cc:264
Iris::ThreadContext::setFloatReg
void setFloatReg(RegIndex reg_idx, RegVal val) override
Definition: thread_context.hh:364
Iris::ThreadContext::flattenRegId
RegId flattenRegId(const RegId &regId) const override
Definition: thread_context.hh:417
Iris::ThreadContext::BpInfo::validIds
bool validIds() const
Definition: thread_context.hh:120
Event
Definition: eventq.hh:248
VecLaneT
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
Iris::ThreadContext::readIntReg
RegVal readIntReg(RegIndex reg_idx) const override
Definition: thread_context.cc:578
Iris::ThreadContext::getIsaPtr
BaseISA * getIsaPtr() override
Definition: thread_context.hh:210
Iris::ThreadContext::setFloatRegFlat
void setFloatRegFlat(RegIndex idx, RegVal val) override
Definition: thread_context.hh:464
Iris::ThreadContext::ThreadContext
ThreadContext(::BaseCPU *cpu, int id, System *system, ::BaseMMU *mmu, ::BaseISA *isa, iris::IrisConnectionInterface *iris_if, const std::string &iris_path)
Definition: thread_context.cc:306
System
Definition: system.hh:73
Iris::ThreadContext::BpInfo::events
std::shared_ptr< EventList > events
Definition: thread_context.hh:115
ThreadContext::Halted
@ Halted
Permanently shut down.
Definition: thread_context.hh:116
MipsISA::vaddr
vaddr
Definition: pra_constants.hh:275
MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:240
MipsISA::event
Bitfield< 10, 5 > event
Definition: pra_constants.hh:297
Iris::ThreadContext::BpInfoPtr
std::unique_ptr< BpInfo > BpInfoPtr
Definition: thread_context.hh:124
Iris::ThreadContext::setVecRegFlat
void setVecRegFlat(RegIndex idx, const VecRegContainer &val) override
Definition: thread_context.hh:476
Iris::ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::TwoByte > &val) override
Definition: thread_context.hh:323
Iris::ThreadContext::readVecPredReg
const VecPredRegContainer & readVecPredReg(const RegId &reg) const override
Definition: thread_context.cc:679
Iris::ThreadContext::readCCRegFlat
RegVal readCCRegFlat(RegIndex idx) const override
Definition: thread_context.cc:632
Iris::ThreadContext::contextId
int contextId() const override
Definition: thread_context.hh:191
Iris::ThreadContext::IdxNameMap
std::map< int, std::string > IdxNameMap
Definition: thread_context.hh:53
Iris::ThreadContext::BpInfo::ids
std::vector< BpId > ids
Definition: thread_context.hh:113
Iris::ThreadContext::getWritableVecRegFlat
VecRegContainer & getWritableVecRegFlat(RegIndex idx) override
Definition: thread_context.hh:471
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
Iris::ThreadContext::vecRegs
std::vector< ArmISA::VecRegContainer > vecRegs
Definition: thread_context.hh:68
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:148
ThreadContext::Status
Status
Definition: thread_context.hh:99
Iris::ThreadContext::call
iris::IrisCppAdapter & call() const
Definition: thread_context.hh:162
Iris::ThreadContext::scheduleInstCountEvent
void scheduleInstCountEvent(Event *event, Tick count) override
Definition: thread_context.cc:450
BaseHTMCheckpointPtr
std::unique_ptr< BaseHTMCheckpoint > BaseHTMCheckpointPtr
Definition: htm.hh:122
Iris::ThreadContext::microPC
MicroPC microPC() const override
Definition: thread_context.hh:395
Iris::ThreadContext::readStCondFailures
unsigned readStCondFailures() const override
Definition: thread_context.hh:425
name
const std::string & name()
Definition: trace.cc:48
Iris::ThreadContext::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
Definition: thread_context.cc:563
Iris::ThreadContext::icountRscId
iris::ResourceId icountRscId
Definition: thread_context.hh:89
Iris::ThreadContext::intReg32Ids
ResourceIds intReg32Ids
Definition: thread_context.hh:83
Iris::ThreadContext::regStats
void regStats(const std::string &name) override
Definition: thread_context.hh:242
ArmISA::Decoder
Definition: decoder.hh:59
ArmISA::e
Bitfield< 9 > e
Definition: miscregs_types.hh:61
Iris::ThreadContext::getMMUPtr
BaseMMU * getMMUPtr() override
Definition: thread_context.hh:195
Iris::ThreadContext::remove
bool remove(PCEvent *e) override
Definition: thread_context.cc:408
Iris::ThreadContext::readVec8BitLaneReg
ConstVecLane8 readVec8BitLaneReg(const RegId &reg) const override
Vector Register Lane Interfaces.
Definition: thread_context.hh:290
Iris::ThreadContext::socketId
uint32_t socketId() const override
Definition: thread_context.hh:186
Iris::ThreadContext::pcStateNoRecord
void pcStateNoRecord(const ArmISA::PCState &val) override
Definition: thread_context.hh:394
Iris::ThreadContext::_mmu
::BaseMMU * _mmu
Definition: thread_context.hh:60
Iris::ThreadContext::getCheckerCpuPtr
CheckerCPU * getCheckerCpuPtr() override
Definition: thread_context.hh:200
Iris::ThreadContext::semihostingEventStreamId
iris::EventStreamId semihostingEventStreamId
Definition: thread_context.hh:159
ThreadContext::Suspended
@ Suspended
Temporarily inactive.
Definition: thread_context.hh:107
Iris::ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::FourByte > &val) override
Definition: thread_context.hh:329
ArmISA::ids
Bitfield< 39, 36 > ids
Definition: miscregs_types.hh:150
Iris::ThreadContext::client
iris::IrisInstance client
Definition: thread_context.hh:161
Iris::ThreadContext::setVecPredRegFlat
void setVecPredRegFlat(RegIndex idx, const VecPredRegContainer &val) override
Definition: thread_context.hh:500
PortProxy
This object is a proxy for a port or other object which implements the functional response protocol,...
Definition: port_proxy.hh:80
base.hh
Iris::ThreadContext::extractResourceMap
void extractResourceMap(ResourceIds &ids, const ResourceMap &resources, const IdxNameMap &idx_names)
Definition: thread_context.cc:100
Iris::ThreadContext::getCpuPtr
::BaseCPU * getCpuPtr() override
Definition: thread_context.hh:184
MipsISA::PCState
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
RegIndex
uint16_t RegIndex
Definition: types.hh:52
BaseCPU::system
System * system
Definition: base.hh:386
Iris::ThreadContext::intReg64Ids
ResourceIds intReg64Ids
Definition: thread_context.hh:84
Iris::ThreadContext::delBp
void delBp(BpInfoIt it)
Definition: thread_context.cc:178
Iris::ThreadContext::readLastSuspend
Tick readLastSuspend() override
Definition: thread_context.hh:251
Iris::ThreadContext::clearArchRegs
void clearArchRegs() override
Definition: thread_context.hh:263
Iris::ThreadContext::readVecElemFlat
const VecElem & readVecElemFlat(RegIndex idx, const ElemIndex &elemIdx) const override
Definition: thread_context.hh:482
Iris::ThreadContext::_system
System * _system
Definition: thread_context.hh:59
ElemIndex
uint16_t ElemIndex
Logical vector register elem index type.
Definition: types.hh:55
Iris::ThreadContext::BpInfoIt
BpInfoMap::iterator BpInfoIt
Definition: thread_context.hh:126
Iris::ThreadContext::extractResourceId
iris::ResourceId extractResourceId(const ResourceMap &resources, const std::string &name)
Definition: thread_context.cc:93
Iris::ThreadContext::readMiscReg
RegVal readMiscReg(RegIndex misc_reg) override
Definition: thread_context.hh:404
Iris::ThreadContext::BpInfo::clearIds
void clearIds()
Definition: thread_context.hh:121
ThreadContext::Active
@ Active
Running.
Definition: thread_context.hh:103
Iris::ThreadContext::bps
BpInfoMap bps
Definition: thread_context.hh:128
Iris::ThreadContext::BpInfoMap
std::map< Addr, BpInfoPtr > BpInfoMap
Definition: thread_context.hh:125
Iris::ThreadContext::setStatus
void setStatus(Status new_status) override
Definition: thread_context.cc:498
Iris::ThreadContext::readVec64BitLaneReg
ConstVecLane64 readVec64BitLaneReg(const RegId &reg) const override
Reads source vector 64bit operand.
Definition: thread_context.hh:311
Iris::ThreadContext::vecPredRegIds
ResourceIds vecPredRegIds
Definition: thread_context.hh:92
Iris::ThreadContext::setMiscReg
void setMiscReg(RegIndex misc_reg, const RegVal val) override
Definition: thread_context.hh:411
Iris::ThreadContext::_isa
::BaseISA * _isa
Definition: thread_context.hh:61
Iris::ThreadContext::_irisPath
std::string _irisPath
Definition: thread_context.hh:63
PCEvent
Definition: pc_event.hh:42
Iris::ThreadContext::BpInfo::empty
bool empty() const
Definition: thread_context.hh:119
Iris::ThreadContext::htmAbortTransaction
void htmAbortTransaction(uint64_t htm_uid, HtmFailureFaultCause cause) override
Definition: thread_context.hh:511
Iris::ThreadContext::flattenedIntIds
ResourceIds flattenedIntIds
Definition: thread_context.hh:85
Iris::ThreadContext::getProcessPtr
Process * getProcessPtr() override
Definition: thread_context.hh:220
Iris::ThreadContext::descheduleInstCountEvent
void descheduleInstCountEvent(Event *event) override
Definition: thread_context.cc:461
Iris::ThreadContext::getSystemPtr
System * getSystemPtr() override
Definition: thread_context.hh:207
EventQueue
Queue of events sorted in time order.
Definition: eventq.hh:619
Iris::ThreadContext::readLastActivate
Tick readLastActivate() override
Definition: thread_context.hh:247
Iris::ThreadContext::threadId
int threadId() const override
Definition: thread_context.hh:188
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
std::list< PCEvent * >
MicroPC
uint16_t MicroPC
Definition: types.hh:150
Iris::ThreadContext::getCurrentInstCount
Tick getCurrentInstCount() override
Definition: thread_context.cc:468
Iris::ThreadContext::_instId
iris::InstanceId _instId
Definition: thread_context.hh:64
Iris::ThreadContext::_status
Status _status
Definition: thread_context.hh:71
Iris::ThreadContext::ResourceMap
std::map< std::string, iris::ResourceInfo > ResourceMap
Definition: thread_context.hh:50
Iris::ThreadContext::cpuId
int cpuId() const override
Definition: thread_context.hh:185
BaseISA
Definition: isa.hh:47
Iris::ThreadContext::setCCRegFlat
void setCCRegFlat(RegIndex idx, RegVal val) override
Definition: thread_context.cc:642
Iris::ThreadContext::comInstEventQueue
EventQueue comInstEventQueue
Definition: thread_context.hh:102
Iris::ThreadContext::activate
void activate() override
Set the status to Active.
Definition: thread_context.hh:232
Iris::ThreadContext::simulationTimeEvent
iris::IrisErrorCode simulationTimeEvent(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
Definition: thread_context.cc:242
Iris::ThreadContext::getWritableVecReg
VecRegContainer & getWritableVecReg(const RegId &reg) override
Definition: thread_context.hh:281
Iris::ThreadContext
Definition: thread_context.hh:47
Iris::BaseCPU
Definition: cpu.hh:55
thread_context.hh
LaneData
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:458
Iris::ThreadContext::BpId
uint64_t BpId
Definition: thread_context.hh:109
BaseCPU::cpuId
int cpuId() const
Reads this CPU's ID.
Definition: base.hh:195
RegVal
uint64_t RegVal
Definition: types.hh:174
Iris::ThreadContext::readIntRegFlat
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
Definition: thread_context.cc:607
Iris::ThreadContext::setCCReg
void setCCReg(RegIndex reg_idx, RegVal val) override
Definition: thread_context.hh:389
VecRegContainer
Vector Register Abstraction This generic class is the model in a particularization of MVC,...
Definition: vec_reg.hh:156
Iris::ThreadContext::initFromIrisInstance
virtual void initFromIrisInstance(const ResourceMap &resources)
Definition: thread_context.cc:56
ArmISA::id
Bitfield< 33 > id
Definition: miscregs_types.hh:247
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:171
Iris::ThreadContext::suspend
void suspend() override
Set the status to Suspended.
Definition: thread_context.hh:233
Iris::ThreadContext::_cpu
::BaseCPU * _cpu
Definition: thread_context.hh:56
Iris::ThreadContext::copyArchRegs
void copyArchRegs(::ThreadContext *tc) override
Definition: thread_context.hh:257
Iris::ThreadContext::readVecReg
const VecRegContainer & readVecReg(const RegId &reg) const override
Definition: thread_context.cc:651
Iris::ThreadContext::setVecPredReg
void setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
Definition: thread_context.hh:382
Iris::ThreadContext::vecRegIds
ResourceIds vecRegIds
Definition: thread_context.hh:91

Generated on Tue Jun 22 2021 15:28:19 for gem5 by doxygen 1.8.17