gem5  v21.0.1.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
simple_thread.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2012, 2016-2018, 2020 ARM Limited
3  * Copyright (c) 2013 Advanced Micro Devices, Inc.
4  * All rights reserved
5  *
6  * The license below extends only to copyright in the software and shall
7  * not be construed as granting a license to any other intellectual
8  * property including but not limited to intellectual property relating
9  * to a hardware implementation of the functionality of the software
10  * licensed hereunder. You may use the software subject to the license
11  * terms below provided that you ensure that this notice is replicated
12  * unmodified and in its entirety in all distributions of the software,
13  * modified or unmodified, in source code or in binary form.
14  *
15  * Copyright (c) 2001-2006 The Regents of The University of Michigan
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  */
41 
42 #ifndef __CPU_SIMPLE_THREAD_HH__
43 #define __CPU_SIMPLE_THREAD_HH__
44 
45 #include <array>
46 
47 #include "arch/decoder.hh"
48 #include "arch/generic/htm.hh"
49 #include "arch/generic/mmu.hh"
50 #include "arch/generic/tlb.hh"
51 #include "arch/isa.hh"
52 #include "arch/registers.hh"
53 #include "arch/types.hh"
54 #include "base/types.hh"
55 #include "config/the_isa.hh"
56 #include "cpu/thread_context.hh"
57 #include "cpu/thread_state.hh"
58 #include "debug/CCRegs.hh"
59 #include "debug/FloatRegs.hh"
60 #include "debug/IntRegs.hh"
61 #include "debug/VecPredRegs.hh"
62 #include "debug/VecRegs.hh"
63 #include "mem/htm.hh"
64 #include "mem/page_table.hh"
65 #include "mem/request.hh"
66 #include "sim/byteswap.hh"
67 #include "sim/eventq.hh"
68 #include "sim/full_system.hh"
69 #include "sim/process.hh"
70 #include "sim/serialize.hh"
71 #include "sim/system.hh"
72 
73 class BaseCPU;
74 class CheckerCPU;
75 
90 class SimpleThread : public ThreadState, public ThreadContext
91 {
92  public:
94 
95  protected:
96  std::array<RegVal, TheISA::NumFloatRegs> floatRegs;
97  std::array<RegVal, TheISA::NumIntRegs> intRegs;
98  std::array<TheISA::VecRegContainer, TheISA::NumVecRegs> vecRegs;
99  std::array<TheISA::VecPredRegContainer, TheISA::NumVecPredRegs>
101  std::array<RegVal, TheISA::NumCCRegs> ccRegs;
102  TheISA::ISA *const isa; // one "instance" of the current ISA.
103 
105 
106  // hardware transactional memory
107  std::unique_ptr<BaseHTMCheckpoint> _htmCheckpoint;
108 
110  bool predicate;
111 
114 
115  public:
116  std::string name() const
117  {
118  return csprintf("%s.[tid:%i]", baseCpu->name(), threadId());
119  }
120 
127 
129 
131 
132  TheISA::Decoder decoder;
133 
134  // hardware transactional memory
137 
138  // constructor: initialize SimpleThread from given process structure
139  // FS
140  SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system,
141  BaseMMU *_mmu, BaseISA *_isa);
142  // SE
143  SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system,
144  Process *_process, BaseMMU *_mmu,
145  BaseISA *_isa);
146 
147  virtual ~SimpleThread() {}
148 
149  void takeOverFrom(ThreadContext *oldContext) override;
150 
151  void copyState(ThreadContext *oldContext);
152 
153  void serialize(CheckpointOut &cp) const override;
154  void unserialize(CheckpointIn &cp) override;
155 
156  /***************************************************************
157  * SimpleThread functions to provide CPU with access to various
158  * state.
159  **************************************************************/
160 
165  ThreadContext *getTC() { return this; }
166 
167  void
168  demapPage(Addr vaddr, uint64_t asn)
169  {
170  mmu->demapPage(vaddr, asn);
171  }
172 
173  /*******************************************
174  * ThreadContext interface functions.
175  ******************************************/
176 
177  bool schedule(PCEvent *e) override { return pcEventQueue.schedule(e); }
178  bool remove(PCEvent *e) override { return pcEventQueue.remove(e); }
179 
180  void
182  {
184  }
185  void
187  {
189  }
190  Tick
192  {
193  return comInstEventQueue.getCurTick();
194  }
195 
196  BaseCPU *getCpuPtr() override { return baseCpu; }
197 
198  int cpuId() const override { return ThreadState::cpuId(); }
199  uint32_t socketId() const override { return ThreadState::socketId(); }
200  int threadId() const override { return ThreadState::threadId(); }
201  void setThreadId(int id) override { ThreadState::setThreadId(id); }
202  ContextID contextId() const override { return ThreadState::contextId(); }
204 
205  BaseMMU *getMMUPtr() override { return mmu; }
206 
207  CheckerCPU *getCheckerCpuPtr() override { return NULL; }
208 
209  BaseISA *getIsaPtr() override { return isa; }
210 
211  TheISA::Decoder *getDecoderPtr() override { return &decoder; }
212 
213  System *getSystemPtr() override { return system; }
214 
217 
218  void initMemProxies(ThreadContext *tc) override
219  {
221  }
222 
225 
226  Status status() const override { return _status; }
227 
228  void setStatus(Status newStatus) override { _status = newStatus; }
229 
231  void activate() override;
232 
234  void suspend() override;
235 
237  void halt() override;
238 
239  Tick
240  readLastActivate() override
241  {
243  }
244  Tick
245  readLastSuspend() override
246  {
248  }
249 
250  void copyArchRegs(ThreadContext *tc) override;
251 
252  void
253  clearArchRegs() override
254  {
255  _pcState = 0;
256  intRegs.fill(0);
257  floatRegs.fill(0);
258  for (auto &vec_reg: vecRegs)
259  vec_reg.zero();
260  for (auto &pred_reg: vecPredRegs)
261  pred_reg.reset();
262  ccRegs.fill(0);
263  isa->clear();
264  }
265 
266  //
267  // New accessors for new decoder.
268  //
269  RegVal
270  readIntReg(RegIndex reg_idx) const override
271  {
272  int flatIndex = isa->flattenIntIndex(reg_idx);
273  assert(flatIndex < TheISA::NumIntRegs);
274  uint64_t regVal(readIntRegFlat(flatIndex));
275  DPRINTF(IntRegs, "Reading int reg %d (%d) as %#x.\n",
276  reg_idx, flatIndex, regVal);
277  return regVal;
278  }
279 
280  RegVal
281  readFloatReg(RegIndex reg_idx) const override
282  {
283  int flatIndex = isa->flattenFloatIndex(reg_idx);
284  assert(flatIndex < TheISA::NumFloatRegs);
285  RegVal regVal(readFloatRegFlat(flatIndex));
286  DPRINTF(FloatRegs, "Reading float reg %d (%d) bits as %#x.\n",
287  reg_idx, flatIndex, regVal);
288  return regVal;
289  }
290 
292  readVecReg(const RegId& reg) const override
293  {
294  int flatIndex = isa->flattenVecIndex(reg.index());
295  assert(flatIndex < TheISA::NumVecRegs);
296  const TheISA::VecRegContainer& regVal = readVecRegFlat(flatIndex);
297  DPRINTF(VecRegs, "Reading vector reg %d (%d) as %s.\n",
298  reg.index(), flatIndex, regVal.print());
299  return regVal;
300  }
301 
303  getWritableVecReg(const RegId& reg) override
304  {
305  int flatIndex = isa->flattenVecIndex(reg.index());
306  assert(flatIndex < TheISA::NumVecRegs);
307  TheISA::VecRegContainer& regVal = getWritableVecRegFlat(flatIndex);
308  DPRINTF(VecRegs, "Reading vector reg %d (%d) as %s for modify.\n",
309  reg.index(), flatIndex, regVal.print());
310  return regVal;
311  }
312 
316  template <typename T>
318  readVecLane(const RegId& reg) const
319  {
320  int flatIndex = isa->flattenVecIndex(reg.index());
321  assert(flatIndex < TheISA::NumVecRegs);
322  auto regVal = readVecLaneFlat<T>(flatIndex, reg.elemIndex());
323  DPRINTF(VecRegs, "Reading vector lane %d (%d)[%d] as %lx.\n",
324  reg.index(), flatIndex, reg.elemIndex(), regVal);
325  return regVal;
326  }
327 
329  virtual ConstVecLane8
330  readVec8BitLaneReg(const RegId &reg) const override
331  {
332  return readVecLane<uint8_t>(reg);
333  }
334 
336  virtual ConstVecLane16
337  readVec16BitLaneReg(const RegId &reg) const override
338  {
339  return readVecLane<uint16_t>(reg);
340  }
341 
343  virtual ConstVecLane32
344  readVec32BitLaneReg(const RegId &reg) const override
345  {
346  return readVecLane<uint32_t>(reg);
347  }
348 
350  virtual ConstVecLane64
351  readVec64BitLaneReg(const RegId &reg) const override
352  {
353  return readVecLane<uint64_t>(reg);
354  }
355 
357  template <typename LD>
358  void
359  setVecLaneT(const RegId &reg, const LD &val)
360  {
361  int flatIndex = isa->flattenVecIndex(reg.index());
362  assert(flatIndex < TheISA::NumVecRegs);
363  setVecLaneFlat(flatIndex, reg.elemIndex(), val);
364  DPRINTF(VecRegs, "Reading vector lane %d (%d)[%d] to %lx.\n",
365  reg.index(), flatIndex, reg.elemIndex(), val);
366  }
367  virtual void
369  {
370  return setVecLaneT(reg, val);
371  }
372  virtual void
374  const LaneData<LaneSize::TwoByte> &val) override
375  {
376  return setVecLaneT(reg, val);
377  }
378  virtual void
380  const LaneData<LaneSize::FourByte> &val) override
381  {
382  return setVecLaneT(reg, val);
383  }
384  virtual void
386  const LaneData<LaneSize::EightByte> &val) override
387  {
388  return setVecLaneT(reg, val);
389  }
392  const TheISA::VecElem &
393  readVecElem(const RegId &reg) const override
394  {
395  int flatIndex = isa->flattenVecElemIndex(reg.index());
396  assert(flatIndex < TheISA::NumVecRegs);
397  const TheISA::VecElem& regVal =
398  readVecElemFlat(flatIndex, reg.elemIndex());
399  DPRINTF(VecRegs, "Reading element %d of vector reg %d (%d) as"
400  " %#x.\n", reg.elemIndex(), reg.index(), flatIndex, regVal);
401  return regVal;
402  }
403 
405  readVecPredReg(const RegId &reg) const override
406  {
407  int flatIndex = isa->flattenVecPredIndex(reg.index());
408  assert(flatIndex < TheISA::NumVecPredRegs);
409  const TheISA::VecPredRegContainer& regVal =
410  readVecPredRegFlat(flatIndex);
411  DPRINTF(VecPredRegs, "Reading predicate reg %d (%d) as %s.\n",
412  reg.index(), flatIndex, regVal.print());
413  return regVal;
414  }
415 
417  getWritableVecPredReg(const RegId &reg) override
418  {
419  int flatIndex = isa->flattenVecPredIndex(reg.index());
420  assert(flatIndex < TheISA::NumVecPredRegs);
422  getWritableVecPredRegFlat(flatIndex);
423  DPRINTF(VecPredRegs,
424  "Reading predicate reg %d (%d) as %s for modify.\n",
425  reg.index(), flatIndex, regVal.print());
426  return regVal;
427  }
428 
429  RegVal
430  readCCReg(RegIndex reg_idx) const override
431  {
432  int flatIndex = isa->flattenCCIndex(reg_idx);
433  assert(0 <= flatIndex);
434  assert(flatIndex < TheISA::NumCCRegs);
435  uint64_t regVal(readCCRegFlat(flatIndex));
436  DPRINTF(CCRegs, "Reading CC reg %d (%d) as %#x.\n",
437  reg_idx, flatIndex, regVal);
438  return regVal;
439  }
440 
441  void
442  setIntReg(RegIndex reg_idx, RegVal val) override
443  {
444  int flatIndex = isa->flattenIntIndex(reg_idx);
445  assert(flatIndex < TheISA::NumIntRegs);
446  DPRINTF(IntRegs, "Setting int reg %d (%d) to %#x.\n",
447  reg_idx, flatIndex, val);
448  setIntRegFlat(flatIndex, val);
449  }
450 
451  void
452  setFloatReg(RegIndex reg_idx, RegVal val) override
453  {
454  int flatIndex = isa->flattenFloatIndex(reg_idx);
455  assert(flatIndex < TheISA::NumFloatRegs);
456  // XXX: Fix array out of bounds compiler error for gem5.fast
457  // when checkercpu enabled
458  if (flatIndex < TheISA::NumFloatRegs)
459  setFloatRegFlat(flatIndex, val);
460  DPRINTF(FloatRegs, "Setting float reg %d (%d) bits to %#x.\n",
461  reg_idx, flatIndex, val);
462  }
463 
464  void
465  setVecReg(const RegId &reg, const TheISA::VecRegContainer &val) override
466  {
467  int flatIndex = isa->flattenVecIndex(reg.index());
468  assert(flatIndex < TheISA::NumVecRegs);
469  setVecRegFlat(flatIndex, val);
470  DPRINTF(VecRegs, "Setting vector reg %d (%d) to %s.\n",
471  reg.index(), flatIndex, val.print());
472  }
473 
474  void
475  setVecElem(const RegId &reg, const TheISA::VecElem &val) override
476  {
477  int flatIndex = isa->flattenVecElemIndex(reg.index());
478  assert(flatIndex < TheISA::NumVecRegs);
479  setVecElemFlat(flatIndex, reg.elemIndex(), val);
480  DPRINTF(VecRegs, "Setting element %d of vector reg %d (%d) to"
481  " %#x.\n", reg.elemIndex(), reg.index(), flatIndex, val);
482  }
483 
484  void
486  const TheISA::VecPredRegContainer &val) override
487  {
488  int flatIndex = isa->flattenVecPredIndex(reg.index());
489  assert(flatIndex < TheISA::NumVecPredRegs);
490  setVecPredRegFlat(flatIndex, val);
491  DPRINTF(VecPredRegs, "Setting predicate reg %d (%d) to %s.\n",
492  reg.index(), flatIndex, val.print());
493  }
494 
495  void
496  setCCReg(RegIndex reg_idx, RegVal val) override
497  {
498  int flatIndex = isa->flattenCCIndex(reg_idx);
499  assert(flatIndex < TheISA::NumCCRegs);
500  DPRINTF(CCRegs, "Setting CC reg %d (%d) to %#x.\n",
501  reg_idx, flatIndex, val);
502  setCCRegFlat(flatIndex, val);
503  }
504 
505  TheISA::PCState pcState() const override { return _pcState; }
506  void pcState(const TheISA::PCState &val) override { _pcState = val; }
507 
508  void
510  {
511  _pcState = val;
512  }
513 
514  Addr instAddr() const override { return _pcState.instAddr(); }
515  Addr nextInstAddr() const override { return _pcState.nextInstAddr(); }
516  MicroPC microPC() const override { return _pcState.microPC(); }
517  bool readPredicate() const { return predicate; }
518  void setPredicate(bool val) { predicate = val; }
519 
520  RegVal
521  readMiscRegNoEffect(RegIndex misc_reg) const override
522  {
523  return isa->readMiscRegNoEffect(misc_reg);
524  }
525 
526  RegVal
527  readMiscReg(RegIndex misc_reg) override
528  {
529  return isa->readMiscReg(misc_reg);
530  }
531 
532  void
533  setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
534  {
535  return isa->setMiscRegNoEffect(misc_reg, val);
536  }
537 
538  void
539  setMiscReg(RegIndex misc_reg, RegVal val) override
540  {
541  return isa->setMiscReg(misc_reg, val);
542  }
543 
544  RegId
545  flattenRegId(const RegId& regId) const override
546  {
547  return isa->flattenRegId(regId);
548  }
549 
550  unsigned readStCondFailures() const override { return storeCondFailures; }
551 
552  bool
554  {
555  return memAccPredicate;
556  }
557 
558  void
560  {
562  }
563 
564  void
565  setStCondFailures(unsigned sc_failures) override
566  {
567  storeCondFailures = sc_failures;
568  }
569 
570  Counter
571  readFuncExeInst() const override
572  {
574  }
575 
576  RegVal readIntRegFlat(RegIndex idx) const override { return intRegs[idx]; }
577  void
579  {
580  intRegs[idx] = val;
581  }
582 
583  RegVal
584  readFloatRegFlat(RegIndex idx) const override
585  {
586  return floatRegs[idx];
587  }
588  void
590  {
591  floatRegs[idx] = val;
592  }
593 
595  readVecRegFlat(RegIndex reg) const override
596  {
597  return vecRegs[reg];
598  }
599 
602  {
603  return vecRegs[reg];
604  }
605 
606  void
608  {
609  vecRegs[reg] = val;
610  }
611 
612  template <typename T>
614  readVecLaneFlat(RegIndex reg, int lId) const
615  {
616  return vecRegs[reg].laneView<T>(lId);
617  }
618 
619  template <typename LD>
620  void
621  setVecLaneFlat(RegIndex reg, int lId, const LD &val)
622  {
623  vecRegs[reg].laneView<typename LD::UnderlyingType>(lId) = val;
624  }
625 
626  const TheISA::VecElem &
627  readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
628  {
629  return vecRegs[reg].as<TheISA::VecElem>()[elemIndex];
630  }
631 
632  void
634  const TheISA::VecElem &val) override
635  {
636  vecRegs[reg].as<TheISA::VecElem>()[elemIndex] = val;
637  }
638 
641  {
642  return vecPredRegs[reg];
643  }
644 
647  {
648  return vecPredRegs[reg];
649  }
650 
651  void
653  const TheISA::VecPredRegContainer &val) override
654  {
655  vecPredRegs[reg] = val;
656  }
657 
658  RegVal readCCRegFlat(RegIndex idx) const override { return ccRegs[idx]; }
659  void setCCRegFlat(RegIndex idx, RegVal val) override { ccRegs[idx] = val; }
660 
661  // hardware transactional memory
662  void htmAbortTransaction(uint64_t htm_uid,
663  HtmFailureFaultCause cause) override;
664 
666  void setHtmCheckpointPtr(BaseHTMCheckpointPtr new_cpt) override;
667 };
668 
669 
670 #endif // __CPU_CPU_EXEC_CONTEXT_HH__
SimpleThread::clearArchRegs
void clearArchRegs() override
Definition: simple_thread.hh:253
SimpleThread::setThreadId
void setThreadId(int id) override
Definition: simple_thread.hh:201
SimpleThread::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: simple_thread.cc:120
htm.hh
SimpleThread::setVecReg
void setVecReg(const RegId &reg, const TheISA::VecRegContainer &val) override
Definition: simple_thread.hh:465
SimpleThread::htmAbortTransaction
void htmAbortTransaction(uint64_t htm_uid, HtmFailureFaultCause cause) override
Definition: simple_thread.cc:176
ThreadState::setProcessPtr
void setProcessPtr(Process *p)
Definition: thread_state.hh:87
SimpleThread::contextId
ContextID contextId() const override
Definition: simple_thread.hh:202
SimpleThread::Status
ThreadContext::Status Status
Definition: simple_thread.hh:93
thread_state.hh
SimpleThread::cpuId
int cpuId() const override
Definition: simple_thread.hh:198
SimpleThread::setVecLane
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::TwoByte > &val) override
Definition: simple_thread.hh:373
ThreadState::getProcessPtr
Process * getProcessPtr()
Definition: thread_state.hh:85
SimpleThread::getWritableVecPredReg
TheISA::VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
Definition: simple_thread.hh:417
SimpleThread::setVecLaneFlat
void setVecLaneFlat(RegIndex reg, int lId, const LD &val)
Definition: simple_thread.hh:621
SimpleThread::pcState
TheISA::PCState pcState() const override
Definition: simple_thread.hh:505
SimpleThread::getHtmCheckpointPtr
BaseHTMCheckpointPtr & getHtmCheckpointPtr() override
Definition: simple_thread.cc:189
SimpleThread::setMemAccPredicate
void setMemAccPredicate(bool val)
Definition: simple_thread.hh:559
SimpleThread::readLastSuspend
Tick readLastSuspend() override
Definition: simple_thread.hh:245
system.hh
BaseMMU
Definition: mmu.hh:45
SimpleThread::getMMUPtr
BaseMMU * getMMUPtr() override
Definition: simple_thread.hh:205
ArmISA::VecRegContainer
VecReg::Container VecRegContainer
Definition: registers.hh:63
serialize.hh
SimpleThread::readFloatRegFlat
RegVal readFloatRegFlat(RegIndex idx) const override
Definition: simple_thread.hh:584
SimpleThread::readVecLaneFlat
VecLaneT< T, true > readVecLaneFlat(RegIndex reg, int lId) const
Definition: simple_thread.hh:614
Process
Definition: process.hh:65
SimpleThread::readVec8BitLaneReg
virtual ConstVecLane8 readVec8BitLaneReg(const RegId &reg) const override
Reads source vector 8bit operand.
Definition: simple_thread.hh:330
SimpleThread::setProcessPtr
void setProcessPtr(Process *p) override
Definition: simple_thread.hh:224
SimpleThread::getDecoderPtr
TheISA::Decoder * getDecoderPtr() override
Definition: simple_thread.hh:211
SimpleThread::setFloatRegFlat
void setFloatRegFlat(RegIndex idx, RegVal val) override
Definition: simple_thread.hh:589
SimpleThread::readLastActivate
Tick readLastActivate() override
Definition: simple_thread.hh:240
ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:237
SimpleThread::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
Definition: simple_thread.hh:521
ThreadState::socketId
uint32_t socketId() const
Definition: thread_state.hh:59
tlb.hh
htm.hh
SimpleThread::setPredicate
void setPredicate(bool val)
Definition: simple_thread.hh:518
SimpleThread::readVec16BitLaneReg
virtual ConstVecLane16 readVec16BitLaneReg(const RegId &reg) const override
Reads source vector 16bit operand.
Definition: simple_thread.hh:337
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:59
ArmISA::VecPredRegContainer
VecPredReg::Container VecPredRegContainer
Definition: registers.hh:69
SimpleThread::setIntReg
void setIntReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:442
SimpleThread::suspend
void suspend() override
Set the status to Suspended.
Definition: simple_thread.cc:146
SimpleThread::setCCReg
void setCCReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:496
SimpleThread::mmu
BaseMMU * mmu
Definition: simple_thread.hh:130
SimpleThread::pcEventQueue
PCEventQueue pcEventQueue
Definition: simple_thread.hh:121
SimpleThread::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: simple_thread.cc:128
SimpleThread::isa
TheISA::ISA *const isa
Definition: simple_thread.hh:102
SimpleThread::readVec64BitLaneReg
virtual ConstVecLane64 readVec64BitLaneReg(const RegId &reg) const override
Reads source vector 64bit operand.
Definition: simple_thread.hh:351
CheckerCPU
CheckerCPU class.
Definition: cpu.hh:85
SimpleThread::pcStateNoRecord
void pcStateNoRecord(const TheISA::PCState &val) override
Definition: simple_thread.hh:509
SimpleThread::setHtmCheckpointPtr
void setHtmCheckpointPtr(BaseHTMCheckpointPtr new_cpt) override
Definition: simple_thread.cc:195
PCEventQueue
Definition: pc_event.hh:71
ThreadState::setThreadId
void setThreadId(ThreadID id)
Definition: thread_state.hh:65
SimpleThread::readVecPredReg
const TheISA::VecPredRegContainer & readVecPredReg(const RegId &reg) const override
Definition: simple_thread.hh:405
HtmFailureFaultCause
HtmFailureFaultCause
Definition: htm.hh:44
X86ISA::count
count
Definition: misc.hh:703
SimpleThread::status
Status status() const override
Definition: simple_thread.hh:226
SimpleThread::readCCReg
RegVal readCCReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:430
X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:88
SimpleThread::decoder
TheISA::Decoder decoder
Definition: simple_thread.hh:132
request.hh
SimpleThread::scheduleInstCountEvent
void scheduleInstCountEvent(Event *event, Tick count) override
Definition: simple_thread.hh:181
SimpleThread::readStCondFailures
unsigned readStCondFailures() const override
Definition: simple_thread.hh:550
SimpleThread::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
Definition: simple_thread.hh:533
RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
SimpleThread::getWritableVecReg
TheISA::VecRegContainer & getWritableVecReg(const RegId &reg) override
Definition: simple_thread.hh:303
SimpleThread
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
Definition: simple_thread.hh:90
EventQueue::getCurTick
Tick getCurTick() const
While curTick() is useful for any object assigned to this event queue, if an object that is assigned ...
Definition: eventq.hh:854
SimpleThread::setMiscReg
void setMiscReg(RegIndex misc_reg, RegVal val) override
Definition: simple_thread.hh:539
SimpleThread::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: simple_thread.hh:168
SimpleThread::_htmCheckpoint
std::unique_ptr< BaseHTMCheckpoint > _htmCheckpoint
Definition: simple_thread.hh:107
ThreadState
Struct for holding general thread state that is needed across CPU models.
Definition: thread_state.hh:46
ThreadState::_status
ThreadContext::Status _status
Definition: thread_state.hh:132
Counter
int64_t Counter
Statistics counter type.
Definition: types.hh:54
SimpleThread::getWritableVecPredRegFlat
TheISA::VecPredRegContainer & getWritableVecPredRegFlat(RegIndex reg) override
Definition: simple_thread.hh:646
SimpleThread::pcState
void pcState(const TheISA::PCState &val) override
Definition: simple_thread.hh:506
SimpleThread::floatRegs
std::array< RegVal, TheISA::NumFloatRegs > floatRegs
Definition: simple_thread.hh:96
SimpleThread::SimpleThread
SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system, BaseMMU *_mmu, BaseISA *_isa)
Definition: simple_thread.cc:80
ArmISA::VecElem
uint32_t VecElem
Definition: registers.hh:60
cp
Definition: cprintf.cc:37
SimpleThread::getSystemPtr
System * getSystemPtr() override
Definition: simple_thread.hh:213
SimpleThread::htmTransactionStops
int64_t htmTransactionStops
Definition: simple_thread.hh:136
SimpleThread::instAddr
Addr instAddr() const override
Definition: simple_thread.hh:514
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
SimpleThread::takeOverFrom
void takeOverFrom(ThreadContext *oldContext) override
Definition: simple_thread.cc:95
SimpleThread::setStatus
void setStatus(Status newStatus) override
Definition: simple_thread.hh:228
SimpleThread::getTC
ThreadContext * getTC()
Returns the pointer to this SimpleThread's ThreadContext.
Definition: simple_thread.hh:165
Event
Definition: eventq.hh:248
VecLaneT
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
SimpleThread::descheduleInstCountEvent
void descheduleInstCountEvent(Event *event) override
Definition: simple_thread.hh:186
SimpleThread::predicate
bool predicate
Did this instruction execute or is it predicated false.
Definition: simple_thread.hh:110
SimpleThread::setVecElemFlat
void setVecElemFlat(RegIndex reg, const ElemIndex &elemIndex, const TheISA::VecElem &val) override
Definition: simple_thread.hh:633
SimpleThread::setIntRegFlat
void setIntRegFlat(RegIndex idx, RegVal val) override
Definition: simple_thread.hh:578
System
Definition: system.hh:73
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:237
SimpleThread::setStCondFailures
void setStCondFailures(unsigned sc_failures) override
Definition: simple_thread.hh:565
SimpleThread::system
System * system
Definition: simple_thread.hh:128
SimpleThread::setVecRegFlat
void setVecRegFlat(RegIndex reg, const TheISA::VecRegContainer &val) override
Definition: simple_thread.hh:607
MipsISA::vaddr
vaddr
Definition: pra_constants.hh:275
MipsISA::event
Bitfield< 10, 5 > event
Definition: pra_constants.hh:297
SimpleThread::getCpuPtr
BaseCPU * getCpuPtr() override
Definition: simple_thread.hh:196
SimpleThread::vecRegs
std::array< TheISA::VecRegContainer, TheISA::NumVecRegs > vecRegs
Definition: simple_thread.hh:98
SimpleThread::setVecElem
void setVecElem(const RegId &reg, const TheISA::VecElem &val) override
Definition: simple_thread.hh:475
ThreadState::getPhysProxy
PortProxy & getPhysProxy()
Definition: thread_state.cc:107
SimpleThread::memAccPredicate
bool memAccPredicate
True if the memory access should be skipped for this instruction.
Definition: simple_thread.hh:113
SimpleThread::getPhysProxy
PortProxy & getPhysProxy() override
Definition: simple_thread.hh:215
SimpleThread::setVecLane
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::EightByte > &val) override
Definition: simple_thread.hh:385
SimpleThread::setCCRegFlat
void setCCRegFlat(RegIndex idx, RegVal val) override
Definition: simple_thread.hh:659
process.hh
mmu.hh
SimpleThread::readMiscReg
RegVal readMiscReg(RegIndex misc_reg) override
Definition: simple_thread.hh:527
SimpleThread::readVec32BitLaneReg
virtual ConstVecLane32 readVec32BitLaneReg(const RegId &reg) const override
Reads source vector 32bit operand.
Definition: simple_thread.hh:344
SimpleThread::name
std::string name() const
Definition: simple_thread.hh:116
SimpleThread::copyState
void copyState(ThreadContext *oldContext)
Definition: simple_thread.cc:107
ArmISA::NumVecPredRegs
const int NumVecPredRegs
Definition: registers.hh:90
PCEventQueue::schedule
bool schedule(PCEvent *event) override
Definition: pc_event.cc:68
SimpleThread::setVecPredReg
void setVecPredReg(const RegId &reg, const TheISA::VecPredRegContainer &val) override
Definition: simple_thread.hh:485
SimpleThread::_pcState
TheISA::PCState _pcState
Definition: simple_thread.hh:104
SimpleThread::readVecLane
VecLaneT< T, true > readVecLane(const RegId &reg) const
Vector Register Lane Interfaces.
Definition: simple_thread.hh:318
SimpleThread::getVirtProxy
PortProxy & getVirtProxy() override
Definition: simple_thread.hh:216
SimpleThread::copyArchRegs
void copyArchRegs(ThreadContext *tc) override
Definition: simple_thread.cc:169
SimpleThread::readVecRegFlat
const TheISA::VecRegContainer & readVecRegFlat(RegIndex reg) const override
Definition: simple_thread.hh:595
SimpleThread::readMemAccPredicate
bool readMemAccPredicate()
Definition: simple_thread.hh:553
ArmISA::NumFloatRegs
const int NumFloatRegs
Definition: registers.hh:75
SimpleThread::remove
bool remove(PCEvent *e) override
Definition: simple_thread.hh:178
SimpleThread::readIntReg
RegVal readIntReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:270
ThreadState::setContextId
void setContextId(ContextID id)
Definition: thread_state.hh:63
SimpleThread::readFuncExeInst
Counter readFuncExeInst() const override
Definition: simple_thread.hh:571
SimpleThread::nextInstAddr
Addr nextInstAddr() const override
Definition: simple_thread.hh:515
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
ArmISA::NumIntRegs
const int NumIntRegs
Definition: registers.hh:74
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
SimpleThread::readFloatReg
RegVal readFloatReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:281
BaseHTMCheckpointPtr
std::unique_ptr< BaseHTMCheckpoint > BaseHTMCheckpointPtr
Definition: htm.hh:122
SimpleThread::microPC
MicroPC microPC() const override
Definition: simple_thread.hh:516
ThreadState::baseCpu
BaseCPU * baseCpu
Definition: thread_state.hh:135
SimpleThread::setFloatReg
void setFloatReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:452
SimpleThread::readVecPredRegFlat
const TheISA::VecPredRegContainer & readVecPredRegFlat(RegIndex reg) const override
Definition: simple_thread.hh:640
SimpleThread::activate
void activate() override
Set the status to Active.
Definition: simple_thread.cc:135
full_system.hh
ArmISA::e
Bitfield< 9 > e
Definition: miscregs_types.hh:61
SimpleThread::ccRegs
std::array< RegVal, TheISA::NumCCRegs > ccRegs
Definition: simple_thread.hh:101
EventQueue::schedule
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
Definition: eventq.hh:761
SimObject::name
virtual const std::string name() const
Definition: sim_object.hh:182
BaseCPU
Definition: base.hh:104
SimpleThread::initMemProxies
void initMemProxies(ThreadContext *tc) override
Initialise the physical and virtual port proxies and tie them to the data port of the CPU.
Definition: simple_thread.hh:218
SimpleThread::comInstEventQueue
EventQueue comInstEventQueue
An instruction-based event queue.
Definition: simple_thread.hh:126
SimpleThread::vecPredRegs
std::array< TheISA::VecPredRegContainer, TheISA::NumVecPredRegs > vecPredRegs
Definition: simple_thread.hh:100
ArmISA::NumCCRegs
const int NumCCRegs
Definition: registers.hh:76
PortProxy
This object is a proxy for a port or other object which implements the functional response protocol,...
Definition: port_proxy.hh:80
ThreadState::initMemProxies
void initMemProxies(ThreadContext *tc)
Initialise the physical and virtual port proxies and tie them to the data port of the CPU.
Definition: thread_state.cc:83
SimpleThread::htmTransactionStarts
int64_t htmTransactionStarts
Definition: simple_thread.hh:135
BaseMMU::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: mmu.hh:72
MipsISA::PCState
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
types.hh
RegIndex
uint16_t RegIndex
Definition: types.hh:52
SimpleThread::readVecReg
const TheISA::VecRegContainer & readVecReg(const RegId &reg) const override
Definition: simple_thread.hh:292
PCEventQueue::remove
bool remove(PCEvent *event) override
Definition: pc_event.cc:48
ThreadState::getVirtProxy
PortProxy & getVirtProxy()
Definition: thread_state.cc:115
ThreadState::storeCondFailures
unsigned storeCondFailures
Definition: thread_state.hh:171
SimpleThread::readCCRegFlat
RegVal readCCRegFlat(RegIndex idx) const override
Definition: simple_thread.hh:658
EventQueue::deschedule
void deschedule(Event *event)
Deschedule the specified event.
Definition: eventq.hh:794
ElemIndex
uint16_t ElemIndex
Logical vector register elem index type.
Definition: types.hh:55
SimpleThread::threadId
int threadId() const override
Definition: simple_thread.hh:200
ThreadState::readLastSuspend
Tick readLastSuspend() const
Definition: thread_state.hh:71
SimpleThread::~SimpleThread
virtual ~SimpleThread()
Definition: simple_thread.hh:147
CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:64
PCEvent
Definition: pc_event.hh:42
SimpleThread::getCurrentInstCount
Tick getCurrentInstCount() override
Definition: simple_thread.hh:191
SimpleThread::getIsaPtr
BaseISA * getIsaPtr() override
Definition: simple_thread.hh:209
SimpleThread::readIntRegFlat
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
Definition: simple_thread.hh:576
SimpleThread::setVecPredRegFlat
void setVecPredRegFlat(RegIndex reg, const TheISA::VecPredRegContainer &val) override
Definition: simple_thread.hh:652
SimpleThread::setVecLaneT
void setVecLaneT(const RegId &reg, const LD &val)
Write a lane of the destination vector register.
Definition: simple_thread.hh:359
ArmISA::NumVecRegs
const int NumVecRegs
Definition: registers.hh:89
SimpleThread::halt
void halt() override
Set the status to Halted.
Definition: simple_thread.cc:159
SimpleThread::socketId
uint32_t socketId() const override
Definition: simple_thread.hh:199
EventQueue
Queue of events sorted in time order.
Definition: eventq.hh:619
SimpleThread::setVecLane
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
Definition: simple_thread.hh:368
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
MicroPC
uint16_t MicroPC
Definition: types.hh:150
ThreadState::threadId
ThreadID threadId() const
Definition: thread_state.hh:67
SimpleThread::getProcessPtr
Process * getProcessPtr() override
Definition: simple_thread.hh:223
page_table.hh
CheckpointIn
Definition: serialize.hh:68
ThreadState::readLastActivate
Tick readLastActivate() const
Definition: thread_state.hh:69
SimpleThread::schedule
bool schedule(PCEvent *e) override
Definition: simple_thread.hh:177
SimpleThread::readVecElem
const TheISA::VecElem & readVecElem(const RegId &reg) const override
Definition: simple_thread.hh:393
SimpleThread::setVecLane
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::FourByte > &val) override
Definition: simple_thread.hh:379
BaseISA
Definition: isa.hh:47
SimpleThread::getWritableVecRegFlat
TheISA::VecRegContainer & getWritableVecRegFlat(RegIndex reg) override
Definition: simple_thread.hh:601
SimpleThread::flattenRegId
RegId flattenRegId(const RegId &regId) const override
Definition: simple_thread.hh:545
SimpleThread::intRegs
std::array< RegVal, TheISA::NumIntRegs > intRegs
Definition: simple_thread.hh:97
SimpleThread::setContextId
void setContextId(ContextID id) override
Definition: simple_thread.hh:203
csprintf
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:158
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
ThreadState::contextId
ContextID contextId() const
Definition: thread_state.hh:61
RegVal
uint64_t RegVal
Definition: types.hh:174
SimpleThread::readPredicate
bool readPredicate() const
Definition: simple_thread.hh:517
byteswap.hh
SimpleThread::readVecElemFlat
const TheISA::VecElem & readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
Definition: simple_thread.hh:627
ThreadState::cpuId
int cpuId() const
Definition: thread_state.hh:57
SimpleThread::getCheckerCpuPtr
CheckerCPU * getCheckerCpuPtr() override
Definition: simple_thread.hh:207
ThreadState::readFuncExeInst
Counter readFuncExeInst() const
Reads the number of instructions functionally executed and committed.
Definition: thread_state.hh:92
eventq.hh

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