gem5  v20.0.0.3
simple_thread.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2012, 2016-2018 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/tlb.hh"
49 #include "arch/isa.hh"
50 #include "arch/isa_traits.hh"
51 #include "arch/registers.hh"
52 #include "arch/types.hh"
53 #include "base/types.hh"
54 #include "config/the_isa.hh"
55 #include "cpu/thread_context.hh"
56 #include "cpu/thread_state.hh"
57 #include "debug/CCRegs.hh"
58 #include "debug/FloatRegs.hh"
59 #include "debug/IntRegs.hh"
60 #include "debug/VecPredRegs.hh"
61 #include "debug/VecRegs.hh"
62 #include "mem/page_table.hh"
63 #include "mem/request.hh"
64 #include "sim/byteswap.hh"
65 #include "sim/eventq.hh"
66 #include "sim/full_system.hh"
67 #include "sim/process.hh"
68 #include "sim/serialize.hh"
69 #include "sim/system.hh"
70 
71 class BaseCPU;
72 class CheckerCPU;
73 
74 class FunctionProfile;
75 class ProfileNode;
76 
77 namespace Kernel {
78  class Statistics;
79 }
80 
95 class SimpleThread : public ThreadState, public ThreadContext
96 {
97  protected:
102  public:
104 
105  protected:
106  std::array<RegVal, TheISA::NumFloatRegs> floatRegs;
107  std::array<RegVal, TheISA::NumIntRegs> intRegs;
108  std::array<VecRegContainer, TheISA::NumVecRegs> vecRegs;
109  std::array<VecPredRegContainer, TheISA::NumVecPredRegs> vecPredRegs;
110  std::array<RegVal, TheISA::NumCCRegs> ccRegs;
111  TheISA::ISA *const isa; // one "instance" of the current ISA.
112 
114 
116  bool predicate;
117 
120 
121  public:
122  std::string name() const
123  {
124  return csprintf("%s.[tid:%i]", baseCpu->name(), threadId());
125  }
126 
133 
135 
138 
139  TheISA::Decoder decoder;
140 
141  // constructor: initialize SimpleThread from given process structure
142  // FS
143  SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system,
144  BaseTLB *_itb, BaseTLB *_dtb, BaseISA *_isa,
145  bool use_kernel_stats = true);
146  // SE
147  SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system,
148  Process *_process, BaseTLB *_itb, BaseTLB *_dtb,
149  BaseISA *_isa);
150 
151  virtual ~SimpleThread() {}
152 
153  void takeOverFrom(ThreadContext *oldContext) override;
154 
155  void regStats(const std::string &name) override;
156 
157  void copyState(ThreadContext *oldContext);
158 
159  void serialize(CheckpointOut &cp) const override;
160  void unserialize(CheckpointIn &cp) override;
161  void startup();
162 
163  /***************************************************************
164  * SimpleThread functions to provide CPU with access to various
165  * state.
166  **************************************************************/
167 
172  ThreadContext *getTC() { return this; }
173 
174  void demapPage(Addr vaddr, uint64_t asn)
175  {
176  itb->demapPage(vaddr, asn);
177  dtb->demapPage(vaddr, asn);
178  }
179 
180  void demapInstPage(Addr vaddr, uint64_t asn)
181  {
182  itb->demapPage(vaddr, asn);
183  }
184 
185  void demapDataPage(Addr vaddr, uint64_t asn)
186  {
187  dtb->demapPage(vaddr, asn);
188  }
189 
190  void dumpFuncProfile() override;
191 
192  /*******************************************
193  * ThreadContext interface functions.
194  ******************************************/
195 
196  bool schedule(PCEvent *e) override { return pcEventQueue.schedule(e); }
197  bool remove(PCEvent *e) override { return pcEventQueue.remove(e); }
198 
199  void
201  {
202  comInstEventQueue.schedule(event, count);
203  }
204  void
206  {
207  comInstEventQueue.deschedule(event);
208  }
209  Tick
211  {
212  return comInstEventQueue.getCurTick();
213  }
214 
215  BaseCPU *getCpuPtr() override { return baseCpu; }
216 
217  int cpuId() const override { return ThreadState::cpuId(); }
218  uint32_t socketId() const override { return ThreadState::socketId(); }
219  int threadId() const override { return ThreadState::threadId(); }
220  void setThreadId(int id) override { ThreadState::setThreadId(id); }
221  ContextID contextId() const override { return ThreadState::contextId(); }
223 
224  BaseTLB *getITBPtr() override { return itb; }
225 
226  BaseTLB *getDTBPtr() override { return dtb; }
227 
228  CheckerCPU *getCheckerCpuPtr() override { return NULL; }
229 
230  BaseISA *getIsaPtr() override { return isa; }
231 
232  TheISA::Decoder *getDecoderPtr() override { return &decoder; }
233 
234  System *getSystemPtr() override { return system; }
235 
237  getKernelStats() override
238  {
240  }
241 
244 
245  void initMemProxies(ThreadContext *tc) override
246  {
248  }
249 
252 
253  Status status() const override { return _status; }
254 
255  void setStatus(Status newStatus) override { _status = newStatus; }
256 
258  void activate() override;
259 
261  void suspend() override;
262 
264  void halt() override;
265 
267  getQuiesceEvent() override
268  {
270  }
271 
272  Tick
273  readLastActivate() override
274  {
276  }
277  Tick
278  readLastSuspend() override
279  {
281  }
282 
285 
286  void copyArchRegs(ThreadContext *tc) override;
287 
288  void
289  clearArchRegs() override
290  {
291  _pcState = 0;
292  intRegs.fill(0);
293  floatRegs.fill(0);
294  for (auto &vec_reg: vecRegs)
295  vec_reg.zero();
296  for (auto &pred_reg: vecPredRegs)
297  pred_reg.reset();
298  ccRegs.fill(0);
299  isa->clear(this);
300  }
301 
302  //
303  // New accessors for new decoder.
304  //
305  RegVal
306  readIntReg(RegIndex reg_idx) const override
307  {
308  int flatIndex = isa->flattenIntIndex(reg_idx);
309  assert(flatIndex < TheISA::NumIntRegs);
310  uint64_t regVal(readIntRegFlat(flatIndex));
311  DPRINTF(IntRegs, "Reading int reg %d (%d) as %#x.\n",
312  reg_idx, flatIndex, regVal);
313  return regVal;
314  }
315 
316  RegVal
317  readFloatReg(RegIndex reg_idx) const override
318  {
319  int flatIndex = isa->flattenFloatIndex(reg_idx);
320  assert(flatIndex < TheISA::NumFloatRegs);
321  RegVal regVal(readFloatRegFlat(flatIndex));
322  DPRINTF(FloatRegs, "Reading float reg %d (%d) bits as %#x.\n",
323  reg_idx, flatIndex, regVal);
324  return regVal;
325  }
326 
327  const VecRegContainer&
328  readVecReg(const RegId& reg) const override
329  {
330  int flatIndex = isa->flattenVecIndex(reg.index());
331  assert(flatIndex < TheISA::NumVecRegs);
332  const VecRegContainer& regVal = readVecRegFlat(flatIndex);
333  DPRINTF(VecRegs, "Reading vector reg %d (%d) as %s.\n",
334  reg.index(), flatIndex, regVal.print());
335  return regVal;
336  }
337 
339  getWritableVecReg(const RegId& reg) override
340  {
341  int flatIndex = isa->flattenVecIndex(reg.index());
342  assert(flatIndex < TheISA::NumVecRegs);
343  VecRegContainer& regVal = getWritableVecRegFlat(flatIndex);
344  DPRINTF(VecRegs, "Reading vector reg %d (%d) as %s for modify.\n",
345  reg.index(), flatIndex, regVal.print());
346  return regVal;
347  }
348 
352  template <typename T>
354  readVecLane(const RegId& reg) const
355  {
356  int flatIndex = isa->flattenVecIndex(reg.index());
357  assert(flatIndex < TheISA::NumVecRegs);
358  auto regVal = readVecLaneFlat<T>(flatIndex, reg.elemIndex());
359  DPRINTF(VecRegs, "Reading vector lane %d (%d)[%d] as %lx.\n",
360  reg.index(), flatIndex, reg.elemIndex(), regVal);
361  return regVal;
362  }
363 
365  virtual ConstVecLane8
366  readVec8BitLaneReg(const RegId &reg) const override
367  {
368  return readVecLane<uint8_t>(reg);
369  }
370 
372  virtual ConstVecLane16
373  readVec16BitLaneReg(const RegId &reg) const override
374  {
375  return readVecLane<uint16_t>(reg);
376  }
377 
379  virtual ConstVecLane32
380  readVec32BitLaneReg(const RegId &reg) const override
381  {
382  return readVecLane<uint32_t>(reg);
383  }
384 
386  virtual ConstVecLane64
387  readVec64BitLaneReg(const RegId &reg) const override
388  {
389  return readVecLane<uint64_t>(reg);
390  }
391 
393  template <typename LD>
394  void
395  setVecLaneT(const RegId &reg, const LD &val)
396  {
397  int flatIndex = isa->flattenVecIndex(reg.index());
398  assert(flatIndex < TheISA::NumVecRegs);
399  setVecLaneFlat(flatIndex, reg.elemIndex(), val);
400  DPRINTF(VecRegs, "Reading vector lane %d (%d)[%d] to %lx.\n",
401  reg.index(), flatIndex, reg.elemIndex(), val);
402  }
403  virtual void
405  {
406  return setVecLaneT(reg, val);
407  }
408  virtual void
410  const LaneData<LaneSize::TwoByte> &val) override
411  {
412  return setVecLaneT(reg, val);
413  }
414  virtual void
416  const LaneData<LaneSize::FourByte> &val) override
417  {
418  return setVecLaneT(reg, val);
419  }
420  virtual void
422  const LaneData<LaneSize::EightByte> &val) override
423  {
424  return setVecLaneT(reg, val);
425  }
428  const VecElem &
429  readVecElem(const RegId &reg) const override
430  {
431  int flatIndex = isa->flattenVecElemIndex(reg.index());
432  assert(flatIndex < TheISA::NumVecRegs);
433  const VecElem& regVal = readVecElemFlat(flatIndex, reg.elemIndex());
434  DPRINTF(VecRegs, "Reading element %d of vector reg %d (%d) as"
435  " %#x.\n", reg.elemIndex(), reg.index(), flatIndex, regVal);
436  return regVal;
437  }
438 
439  const VecPredRegContainer &
440  readVecPredReg(const RegId &reg) const override
441  {
442  int flatIndex = isa->flattenVecPredIndex(reg.index());
443  assert(flatIndex < TheISA::NumVecPredRegs);
444  const VecPredRegContainer& regVal = readVecPredRegFlat(flatIndex);
445  DPRINTF(VecPredRegs, "Reading predicate reg %d (%d) as %s.\n",
446  reg.index(), flatIndex, regVal.print());
447  return regVal;
448  }
449 
451  getWritableVecPredReg(const RegId &reg) override
452  {
453  int flatIndex = isa->flattenVecPredIndex(reg.index());
454  assert(flatIndex < TheISA::NumVecPredRegs);
455  VecPredRegContainer& regVal = getWritableVecPredRegFlat(flatIndex);
456  DPRINTF(VecPredRegs,
457  "Reading predicate reg %d (%d) as %s for modify.\n",
458  reg.index(), flatIndex, regVal.print());
459  return regVal;
460  }
461 
462  RegVal
463  readCCReg(RegIndex reg_idx) const override
464  {
465  int flatIndex = isa->flattenCCIndex(reg_idx);
466  assert(0 <= flatIndex);
467  assert(flatIndex < TheISA::NumCCRegs);
468  uint64_t regVal(readCCRegFlat(flatIndex));
469  DPRINTF(CCRegs, "Reading CC reg %d (%d) as %#x.\n",
470  reg_idx, flatIndex, regVal);
471  return regVal;
472  }
473 
474  void
475  setIntReg(RegIndex reg_idx, RegVal val) override
476  {
477  int flatIndex = isa->flattenIntIndex(reg_idx);
478  assert(flatIndex < TheISA::NumIntRegs);
479  DPRINTF(IntRegs, "Setting int reg %d (%d) to %#x.\n",
480  reg_idx, flatIndex, val);
481  setIntRegFlat(flatIndex, val);
482  }
483 
484  void
485  setFloatReg(RegIndex reg_idx, RegVal val) override
486  {
487  int flatIndex = isa->flattenFloatIndex(reg_idx);
488  assert(flatIndex < TheISA::NumFloatRegs);
489  // XXX: Fix array out of bounds compiler error for gem5.fast
490  // when checkercpu enabled
491  if (flatIndex < TheISA::NumFloatRegs)
492  setFloatRegFlat(flatIndex, val);
493  DPRINTF(FloatRegs, "Setting float reg %d (%d) bits to %#x.\n",
494  reg_idx, flatIndex, val);
495  }
496 
497  void
498  setVecReg(const RegId &reg, const VecRegContainer &val) override
499  {
500  int flatIndex = isa->flattenVecIndex(reg.index());
501  assert(flatIndex < TheISA::NumVecRegs);
502  setVecRegFlat(flatIndex, val);
503  DPRINTF(VecRegs, "Setting vector reg %d (%d) to %s.\n",
504  reg.index(), flatIndex, val.print());
505  }
506 
507  void
508  setVecElem(const RegId &reg, const VecElem &val) override
509  {
510  int flatIndex = isa->flattenVecElemIndex(reg.index());
511  assert(flatIndex < TheISA::NumVecRegs);
512  setVecElemFlat(flatIndex, reg.elemIndex(), val);
513  DPRINTF(VecRegs, "Setting element %d of vector reg %d (%d) to"
514  " %#x.\n", reg.elemIndex(), reg.index(), flatIndex, val);
515  }
516 
517  void
518  setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
519  {
520  int flatIndex = isa->flattenVecPredIndex(reg.index());
521  assert(flatIndex < TheISA::NumVecPredRegs);
522  setVecPredRegFlat(flatIndex, val);
523  DPRINTF(VecPredRegs, "Setting predicate reg %d (%d) to %s.\n",
524  reg.index(), flatIndex, val.print());
525  }
526 
527  void
528  setCCReg(RegIndex reg_idx, RegVal val) override
529  {
530  int flatIndex = isa->flattenCCIndex(reg_idx);
531  assert(flatIndex < TheISA::NumCCRegs);
532  DPRINTF(CCRegs, "Setting CC reg %d (%d) to %#x.\n",
533  reg_idx, flatIndex, val);
534  setCCRegFlat(flatIndex, val);
535  }
536 
537  TheISA::PCState pcState() const override { return _pcState; }
538  void pcState(const TheISA::PCState &val) override { _pcState = val; }
539 
540  void
542  {
543  _pcState = val;
544  }
545 
546  Addr instAddr() const override { return _pcState.instAddr(); }
547  Addr nextInstAddr() const override { return _pcState.nextInstAddr(); }
548  MicroPC microPC() const override { return _pcState.microPC(); }
549  bool readPredicate() const { return predicate; }
550  void setPredicate(bool val) { predicate = val; }
551 
552  RegVal
553  readMiscRegNoEffect(RegIndex misc_reg) const override
554  {
555  return isa->readMiscRegNoEffect(misc_reg);
556  }
557 
558  RegVal
559  readMiscReg(RegIndex misc_reg) override
560  {
561  return isa->readMiscReg(misc_reg, this);
562  }
563 
564  void
565  setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
566  {
567  return isa->setMiscRegNoEffect(misc_reg, val);
568  }
569 
570  void
571  setMiscReg(RegIndex misc_reg, RegVal val) override
572  {
573  return isa->setMiscReg(misc_reg, val, this);
574  }
575 
576  RegId
577  flattenRegId(const RegId& regId) const override
578  {
579  return isa->flattenRegId(regId);
580  }
581 
582  unsigned readStCondFailures() const override { return storeCondFailures; }
583 
584  bool
586  {
587  return memAccPredicate;
588  }
589 
590  void
592  {
593  memAccPredicate = val;
594  }
595 
596  void
597  setStCondFailures(unsigned sc_failures) override
598  {
599  storeCondFailures = sc_failures;
600  }
601 
602  Counter
603  readFuncExeInst() const override
604  {
606  }
607 
608  void
609  syscall(Fault *fault) override
610  {
611  process->syscall(this, fault);
612  }
613 
614  RegVal readIntRegFlat(RegIndex idx) const override { return intRegs[idx]; }
615  void
617  {
618  intRegs[idx] = val;
619  }
620 
621  RegVal
622  readFloatRegFlat(RegIndex idx) const override
623  {
624  return floatRegs[idx];
625  }
626  void
628  {
629  floatRegs[idx] = val;
630  }
631 
632  const VecRegContainer &
633  readVecRegFlat(RegIndex reg) const override
634  {
635  return vecRegs[reg];
636  }
637 
640  {
641  return vecRegs[reg];
642  }
643 
644  void
646  {
647  vecRegs[reg] = val;
648  }
649 
650  template <typename T>
652  readVecLaneFlat(RegIndex reg, int lId) const
653  {
654  return vecRegs[reg].laneView<T>(lId);
655  }
656 
657  template <typename LD>
658  void
659  setVecLaneFlat(RegIndex reg, int lId, const LD &val)
660  {
661  vecRegs[reg].laneView<typename LD::UnderlyingType>(lId) = val;
662  }
663 
664  const VecElem &
665  readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
666  {
667  return vecRegs[reg].as<TheISA::VecElem>()[elemIndex];
668  }
669 
670  void
672  const VecElem &val) override
673  {
674  vecRegs[reg].as<TheISA::VecElem>()[elemIndex] = val;
675  }
676 
677  const VecPredRegContainer &
679  {
680  return vecPredRegs[reg];
681  }
682 
685  {
686  return vecPredRegs[reg];
687  }
688 
689  void
691  {
692  vecPredRegs[reg] = val;
693  }
694 
695  RegVal readCCRegFlat(RegIndex idx) const override { return ccRegs[idx]; }
696  void setCCRegFlat(RegIndex idx, RegVal val) override { ccRegs[idx] = val; }
697 };
698 
699 
700 #endif // __CPU_CPU_EXEC_CONTEXT_HH__
count
Definition: misc.hh:703
BaseISA * getIsaPtr() override
uint32_t MachInst
Definition: types.hh:52
#define DPRINTF(x,...)
Definition: trace.hh:225
void setContextId(ContextID id)
Definition: thread_state.hh:71
uint32_t socketId() const override
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
std::array< VecPredRegContainer, TheISA::NumVecPredRegs > vecPredRegs
Tick readLastActivate() const
Definition: thread_state.hh:77
void pcStateNoRecord(const TheISA::PCState &val) override
Struct for holding general thread state that is needed across CPU models.
Definition: thread_state.hh:54
Tick readLastSuspend() const
Definition: thread_state.hh:79
Process * getProcessPtr() override
Tick getCurrentInstCount() override
Bitfield< 5, 3 > reg
Definition: types.hh:87
Status status() const override
EndQuiesceEvent * getQuiesceEvent()
Definition: thread_state.hh:91
BaseTLB * itb
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::FourByte > &val) override
const std::string & name()
Definition: trace.cc:50
CheckerCPU class.
Definition: cpu.hh:85
std::array< RegVal, TheISA::NumIntRegs > intRegs
PortProxy & getPhysProxy()
void scheduleInstCountEvent(Event *event, Tick count) override
bool schedule(PCEvent *e) override
Vector Register Abstraction This generic class is the model in a particularization of MVC...
Definition: vec_reg.hh:156
bool readPredicate() const
uint32_t socketId() const
Definition: thread_state.hh:67
unsigned readStCondFailures() const override
RegVal readCCReg(RegIndex reg_idx) const override
CheckerCPU * getCheckerCpuPtr() override
Counter readFuncExeInst() const
Reads the number of instructions functionally executed and committed.
TheISA::Decoder decoder
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
void takeOverFrom(ThreadContext &ntc, ThreadContext &otc)
Copy state between thread contexts in preparation for CPU handover.
void profileClear() override
EndQuiesceEvent * getQuiesceEvent() override
void setThreadId(int id) override
std::array< RegVal, TheISA::NumFloatRegs > floatRegs
ContextID contextId() const override
System * getSystemPtr() override
void clearArchRegs() override
TheISA::PCState pcState() const override
const int NumFloatRegs
Definition: registers.hh:83
uint64_t RegVal
Definition: types.hh:166
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
Definition: eventq_impl.hh:38
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
void profileClear()
void setStatus(Status newStatus) override
void deschedule(Event *event)
Deschedule the specified event.
Definition: eventq_impl.hh:65
Definition: system.hh:72
bool remove(PCEvent *event) override
Definition: pc_event.cc:50
void descheduleInstCountEvent(Event *event) override
void setThreadId(ThreadID id)
Definition: thread_state.hh:73
void setIntRegFlat(RegIndex idx, RegVal val) override
int cpuId() const override
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::TwoByte > &val) override
System * system
Definition: cprintf.cc:40
void setMemAccPredicate(bool val)
VecLaneT< T, true > readVecLaneFlat(RegIndex reg, int lId) const
uint32_t VecElem
Definition: registers.hh:68
void setCCRegFlat(RegIndex idx, RegVal val) override
ThreadContext is the external interface to all thread state for anything outside of the CPU...
void setFloatRegFlat(RegIndex idx, RegVal val) override
VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
RegVal readMiscReg(RegIndex misc_reg) override
Event for timing out quiesce instruction.
Bitfield< 63 > val
Definition: misc.hh:769
VecRegContainer & getWritableVecReg(const RegId &reg) override
void setProcessPtr(Process *p) override
VecLaneT< T, true > readVecLane(const RegId &reg) const
Vector Register Lane Interfaces.
void setVecElem(const RegId &reg, const VecElem &val) override
virtual ConstVecLane32 readVec32BitLaneReg(const RegId &reg) const override
Reads source vector 32bit operand.
void setIntReg(RegIndex reg_idx, RegVal val) override
std::string name() const
const RegIndex & elemIndex() const
Elem accessor.
Definition: reg_class.hh:198
Definition: tlb.hh:50
TheISA::MachInst MachInst
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:458
Addr nextInstAddr() const override
virtual ConstVecLane64 readVec64BitLaneReg(const RegId &reg) const override
Reads source vector 64bit operand.
TheISA::PCState _pcState
virtual ConstVecLane16 readVec16BitLaneReg(const RegId &reg) const override
Reads source vector 16bit operand.
bool readMemAccPredicate()
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:158
void setCCReg(RegIndex reg_idx, RegVal val) override
RegVal readIntReg(RegIndex reg_idx) const override
ContextID contextId() const
Definition: thread_state.hh:69
PCEventQueue pcEventQueue
Queue of events sorted in time order.
Definition: eventq.hh:613
uint16_t RegIndex
Definition: types.hh:40
TheISA::ISA *const isa
void setFloatReg(RegIndex reg_idx, RegVal val) override
void setProcessPtr(Process *p)
uint64_t Tick
Tick count type.
Definition: types.hh:61
VecPredRegContainer & getWritableVecPredRegFlat(RegIndex reg) override
VecPredReg::Container VecPredRegContainer
Definition: registers.hh:77
const VecElem & readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
const VecPredRegContainer & readVecPredReg(const RegId &reg) const override
void serialize(const ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
void initMemProxies(ThreadContext *tc) override
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
uint16_t MicroPC
Definition: types.hh:142
void pcState(const TheISA::PCState &val) override
Kernel::Statistics * getKernelStats()
Definition: thread_state.hh:97
BaseTLB * getDTBPtr() override
void setMiscReg(RegIndex misc_reg, RegVal val) override
VecRegContainer & getWritableVecRegFlat(RegIndex reg) override
void demapInstPage(Addr vaddr, uint64_t asn)
ThreadID threadId() const
Definition: thread_state.hh:75
void demapDataPage(Addr vaddr, uint64_t asn)
void demapPage(Addr vaddr, uint64_t asn)
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:140
ThreadContext * getTC()
Returns the pointer to this SimpleThread&#39;s ThreadContext.
int64_t Counter
Statistics counter type.
Definition: types.hh:56
bool schedule(PCEvent *event) override
Definition: pc_event.cc:70
void setVecRegFlat(RegIndex reg, const VecRegContainer &val) override
Bitfield< 10, 5 > event
Addr instAddr() const override
Bitfield< 15 > system
Definition: misc.hh:997
int threadId() const override
PortProxy & getPhysProxy() override
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::EightByte > &val) override
bool predicate
Did this instruction execute or is it predicated false.
virtual ~SimpleThread()
void initMemProxies(ThreadContext *tc)
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
void setStCondFailures(unsigned sc_failures) override
This object is a proxy for a port or other object which implements the functional response protocol...
Definition: port_proxy.hh:80
Bitfield< 9 > e
BaseCPU * getCpuPtr() override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
bool memAccPredicate
True if the memory access should be skipped for this instruction.
const VecRegContainer & readVecRegFlat(RegIndex reg) const override
void setVecLaneT(const RegId &reg, const LD &val)
Write a lane of the destination vector register.
const std::string print() const
Returns a string representation of the register content.
Declarations of a non-full system Page Table.
RegId flattenRegId(const RegId &regId) const override
Process * getProcessPtr()
void setContextId(ContextID id) override
std::ostream CheckpointOut
Definition: serialize.hh:63
VecReg::Container VecRegContainer
Definition: registers.hh:71
const int NumIntRegs
Definition: registers.hh:82
uint16_t ElemIndex
Logical vector register elem index type.
Definition: types.hh:43
void setVecElemFlat(RegIndex reg, const ElemIndex &elemIndex, const VecElem &val) override
const std::string print() const
Definition: vec_reg.hh:366
Counter readFuncExeInst() const override
Definition: eventq.hh:245
const int NumCCRegs
Definition: registers.hh:84
const VecElem & readVecElem(const RegId &reg) const override
void profileSample() override
Generic predicate register container.
Definition: vec_pred_reg.hh:47
PortProxy & getVirtProxy() override
RegVal readFloatReg(RegIndex reg_idx) const override
MicroPC microPC() const override
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:173
const int NumVecPredRegs
Definition: registers.hh:98
Kernel::Statistics * getKernelStats() override
void setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
virtual void demapPage(Addr vaddr, uint64_t asn)=0
ThreadContext::Status Status
void unserialize(ThreadContext &tc, CheckpointIn &cp)
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
Definition: isa.hh:47
Tick readLastSuspend() override
int cpuId() const
Definition: thread_state.hh:65
TheISA::VecElem VecElem
void setVecReg(const RegId &reg, const VecRegContainer &val) override
std::array< VecRegContainer, TheISA::NumVecRegs > vecRegs
std::array< RegVal, TheISA::NumCCRegs > ccRegs
EventQueue comInstEventQueue
An instruction-based event queue.
void setVecLaneFlat(RegIndex reg, int lId, const LD &val)
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
void profileSample()
RegVal readFloatRegFlat(RegIndex idx) const override
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
Bitfield< 0 > p
std::shared_ptr< FaultBase > Fault
Definition: types.hh:238
virtual ConstVecLane8 readVec8BitLaneReg(const RegId &reg) const override
Reads source vector 8bit operand.
PortProxy & getVirtProxy()
RegVal readCCRegFlat(RegIndex idx) const override
TheISA::Decoder * getDecoderPtr() override
const VecRegContainer & readVecReg(const RegId &reg) const override
int ContextID
Globally unique thread context ID.
Definition: types.hh:229
output decoder
Definition: nop.cc:61
BaseTLB * getITBPtr() override
Tick readLastActivate() override
const VecPredRegContainer & readVecPredRegFlat(RegIndex reg) const override
void syscall(Fault *fault) override
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
Bitfield< 26 > halt
Definition: dt_constants.hh:44
void setVecPredRegFlat(RegIndex reg, const VecPredRegContainer &val) override
BaseTLB * dtb
void setPredicate(bool val)
Tick getCurTick() const
While curTick() is useful for any object assigned to this event queue, if an object that is assigned ...
Definition: eventq.hh:782
const int NumVecRegs
Definition: registers.hh:97

Generated on Fri Jul 3 2020 15:53:01 for gem5 by doxygen 1.8.13