gem5  v19.0.0.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 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  * Authors: Steve Reinhardt
42  * Nathan Binkert
43  */
44 
45 #ifndef __CPU_SIMPLE_THREAD_HH__
46 #define __CPU_SIMPLE_THREAD_HH__
47 
48 #include <array>
49 
50 #include "arch/decoder.hh"
51 #include "arch/generic/tlb.hh"
52 #include "arch/isa.hh"
53 #include "arch/isa_traits.hh"
54 #include "arch/registers.hh"
55 #include "arch/types.hh"
56 #include "base/types.hh"
57 #include "config/the_isa.hh"
58 #include "cpu/thread_context.hh"
59 #include "cpu/thread_state.hh"
60 #include "debug/CCRegs.hh"
61 #include "debug/FloatRegs.hh"
62 #include "debug/IntRegs.hh"
63 #include "debug/VecPredRegs.hh"
64 #include "debug/VecRegs.hh"
65 #include "mem/page_table.hh"
66 #include "mem/request.hh"
67 #include "sim/byteswap.hh"
68 #include "sim/eventq.hh"
69 #include "sim/full_system.hh"
70 #include "sim/process.hh"
71 #include "sim/serialize.hh"
72 #include "sim/system.hh"
73 
74 class BaseCPU;
75 class CheckerCPU;
76 
77 class FunctionProfile;
78 class ProfileNode;
79 
80 namespace Kernel {
81  class Statistics;
82 }
83 
98 class SimpleThread : public ThreadState, public ThreadContext
99 {
100  protected:
105  public:
107 
108  protected:
109  std::array<RegVal, TheISA::NumFloatRegs> floatRegs;
110  std::array<RegVal, TheISA::NumIntRegs> intRegs;
111  std::array<VecRegContainer, TheISA::NumVecRegs> vecRegs;
112  std::array<VecPredRegContainer, TheISA::NumVecPredRegs> vecPredRegs;
113  std::array<RegVal, TheISA::NumCCRegs> ccRegs;
114  TheISA::ISA *const isa; // one "instance" of the current ISA.
115 
117 
119  bool predicate;
120 
123 
124  public:
125  std::string name() const
126  {
127  return csprintf("%s.[tid:%i]", baseCpu->name(), threadId());
128  }
129 
136 
138 
141 
142  TheISA::Decoder decoder;
143 
144  // constructor: initialize SimpleThread from given process structure
145  // FS
146  SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system,
147  BaseTLB *_itb, BaseTLB *_dtb, TheISA::ISA *_isa,
148  bool use_kernel_stats = true);
149  // SE
150  SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system,
151  Process *_process, BaseTLB *_itb, BaseTLB *_dtb,
152  TheISA::ISA *_isa);
153 
154  virtual ~SimpleThread() {}
155 
156  void takeOverFrom(ThreadContext *oldContext) override;
157 
158  void regStats(const std::string &name) override;
159 
160  void copyState(ThreadContext *oldContext);
161 
162  void serialize(CheckpointOut &cp) const override;
163  void unserialize(CheckpointIn &cp) override;
164  void startup();
165 
166  /***************************************************************
167  * SimpleThread functions to provide CPU with access to various
168  * state.
169  **************************************************************/
170 
175  ThreadContext *getTC() { return this; }
176 
177  void demapPage(Addr vaddr, uint64_t asn)
178  {
179  itb->demapPage(vaddr, asn);
180  dtb->demapPage(vaddr, asn);
181  }
182 
183  void demapInstPage(Addr vaddr, uint64_t asn)
184  {
185  itb->demapPage(vaddr, asn);
186  }
187 
188  void demapDataPage(Addr vaddr, uint64_t asn)
189  {
190  dtb->demapPage(vaddr, asn);
191  }
192 
193  void dumpFuncProfile() override;
194 
195  /*******************************************
196  * ThreadContext interface functions.
197  ******************************************/
198 
199  bool schedule(PCEvent *e) override { return pcEventQueue.schedule(e); }
200  bool remove(PCEvent *e) override { return pcEventQueue.remove(e); }
201 
202  void
204  {
205  comInstEventQueue.schedule(event, count);
206  }
207  void
209  {
210  comInstEventQueue.deschedule(event);
211  }
212  Tick
214  {
215  return comInstEventQueue.getCurTick();
216  }
217 
218  BaseCPU *getCpuPtr() override { return baseCpu; }
219 
220  int cpuId() const override { return ThreadState::cpuId(); }
221  uint32_t socketId() const override { return ThreadState::socketId(); }
222  int threadId() const override { return ThreadState::threadId(); }
223  void setThreadId(int id) override { ThreadState::setThreadId(id); }
224  ContextID contextId() const override { return ThreadState::contextId(); }
226 
227  BaseTLB *getITBPtr() override { return itb; }
228 
229  BaseTLB *getDTBPtr() override { return dtb; }
230 
231  CheckerCPU *getCheckerCpuPtr() override { return NULL; }
232 
233  BaseISA *getIsaPtr() override { return isa; }
234 
235  TheISA::Decoder *getDecoderPtr() override { return &decoder; }
236 
237  System *getSystemPtr() override { return system; }
238 
240  getKernelStats() override
241  {
243  }
244 
247 
248  void initMemProxies(ThreadContext *tc) override
249  {
251  }
252 
255 
256  Status status() const override { return _status; }
257 
258  void setStatus(Status newStatus) override { _status = newStatus; }
259 
261  void activate() override;
262 
264  void suspend() override;
265 
267  void halt() override;
268 
270  getQuiesceEvent() override
271  {
273  }
274 
275  Tick
276  readLastActivate() override
277  {
279  }
280  Tick
281  readLastSuspend() override
282  {
284  }
285 
288 
289  void copyArchRegs(ThreadContext *tc) override;
290 
291  void
292  clearArchRegs() override
293  {
294  _pcState = 0;
295  intRegs.fill(0);
296  floatRegs.fill(0);
297  for (auto &vec_reg: vecRegs)
298  vec_reg.zero();
299  for (auto &pred_reg: vecPredRegs)
300  pred_reg.reset();
301  ccRegs.fill(0);
302  isa->clear();
303  }
304 
305  //
306  // New accessors for new decoder.
307  //
308  RegVal
309  readIntReg(RegIndex reg_idx) const override
310  {
311  int flatIndex = isa->flattenIntIndex(reg_idx);
312  assert(flatIndex < TheISA::NumIntRegs);
313  uint64_t regVal(readIntRegFlat(flatIndex));
314  DPRINTF(IntRegs, "Reading int reg %d (%d) as %#x.\n",
315  reg_idx, flatIndex, regVal);
316  return regVal;
317  }
318 
319  RegVal
320  readFloatReg(RegIndex reg_idx) const override
321  {
322  int flatIndex = isa->flattenFloatIndex(reg_idx);
323  assert(flatIndex < TheISA::NumFloatRegs);
324  RegVal regVal(readFloatRegFlat(flatIndex));
325  DPRINTF(FloatRegs, "Reading float reg %d (%d) bits as %#x.\n",
326  reg_idx, flatIndex, regVal);
327  return regVal;
328  }
329 
330  const VecRegContainer&
331  readVecReg(const RegId& reg) const override
332  {
333  int flatIndex = isa->flattenVecIndex(reg.index());
334  assert(flatIndex < TheISA::NumVecRegs);
335  const VecRegContainer& regVal = readVecRegFlat(flatIndex);
336  DPRINTF(VecRegs, "Reading vector reg %d (%d) as %s.\n",
337  reg.index(), flatIndex, regVal.print());
338  return regVal;
339  }
340 
342  getWritableVecReg(const RegId& reg) override
343  {
344  int flatIndex = isa->flattenVecIndex(reg.index());
345  assert(flatIndex < TheISA::NumVecRegs);
346  VecRegContainer& regVal = getWritableVecRegFlat(flatIndex);
347  DPRINTF(VecRegs, "Reading vector reg %d (%d) as %s for modify.\n",
348  reg.index(), flatIndex, regVal.print());
349  return regVal;
350  }
351 
355  template <typename T>
357  readVecLane(const RegId& reg) const
358  {
359  int flatIndex = isa->flattenVecIndex(reg.index());
360  assert(flatIndex < TheISA::NumVecRegs);
361  auto regVal = readVecLaneFlat<T>(flatIndex, reg.elemIndex());
362  DPRINTF(VecRegs, "Reading vector lane %d (%d)[%d] as %lx.\n",
363  reg.index(), flatIndex, reg.elemIndex(), regVal);
364  return regVal;
365  }
366 
368  virtual ConstVecLane8
369  readVec8BitLaneReg(const RegId &reg) const override
370  {
371  return readVecLane<uint8_t>(reg);
372  }
373 
375  virtual ConstVecLane16
376  readVec16BitLaneReg(const RegId &reg) const override
377  {
378  return readVecLane<uint16_t>(reg);
379  }
380 
382  virtual ConstVecLane32
383  readVec32BitLaneReg(const RegId &reg) const override
384  {
385  return readVecLane<uint32_t>(reg);
386  }
387 
389  virtual ConstVecLane64
390  readVec64BitLaneReg(const RegId &reg) const override
391  {
392  return readVecLane<uint64_t>(reg);
393  }
394 
396  template <typename LD>
397  void
398  setVecLaneT(const RegId &reg, const LD &val)
399  {
400  int flatIndex = isa->flattenVecIndex(reg.index());
401  assert(flatIndex < TheISA::NumVecRegs);
402  setVecLaneFlat(flatIndex, reg.elemIndex(), val);
403  DPRINTF(VecRegs, "Reading vector lane %d (%d)[%d] to %lx.\n",
404  reg.index(), flatIndex, reg.elemIndex(), val);
405  }
406  virtual void
408  {
409  return setVecLaneT(reg, val);
410  }
411  virtual void
413  const LaneData<LaneSize::TwoByte> &val) override
414  {
415  return setVecLaneT(reg, val);
416  }
417  virtual void
419  const LaneData<LaneSize::FourByte> &val) override
420  {
421  return setVecLaneT(reg, val);
422  }
423  virtual void
425  const LaneData<LaneSize::EightByte> &val) override
426  {
427  return setVecLaneT(reg, val);
428  }
431  const VecElem &
432  readVecElem(const RegId &reg) const override
433  {
434  int flatIndex = isa->flattenVecElemIndex(reg.index());
435  assert(flatIndex < TheISA::NumVecRegs);
436  const VecElem& regVal = readVecElemFlat(flatIndex, reg.elemIndex());
437  DPRINTF(VecRegs, "Reading element %d of vector reg %d (%d) as"
438  " %#x.\n", reg.elemIndex(), reg.index(), flatIndex, regVal);
439  return regVal;
440  }
441 
442  const VecPredRegContainer &
443  readVecPredReg(const RegId &reg) const override
444  {
445  int flatIndex = isa->flattenVecPredIndex(reg.index());
446  assert(flatIndex < TheISA::NumVecPredRegs);
447  const VecPredRegContainer& regVal = readVecPredRegFlat(flatIndex);
448  DPRINTF(VecPredRegs, "Reading predicate reg %d (%d) as %s.\n",
449  reg.index(), flatIndex, regVal.print());
450  return regVal;
451  }
452 
454  getWritableVecPredReg(const RegId &reg) override
455  {
456  int flatIndex = isa->flattenVecPredIndex(reg.index());
457  assert(flatIndex < TheISA::NumVecPredRegs);
458  VecPredRegContainer& regVal = getWritableVecPredRegFlat(flatIndex);
459  DPRINTF(VecPredRegs,
460  "Reading predicate reg %d (%d) as %s for modify.\n",
461  reg.index(), flatIndex, regVal.print());
462  return regVal;
463  }
464 
465  RegVal
466  readCCReg(RegIndex reg_idx) const override
467  {
468  int flatIndex = isa->flattenCCIndex(reg_idx);
469  assert(0 <= flatIndex);
470  assert(flatIndex < TheISA::NumCCRegs);
471  uint64_t regVal(readCCRegFlat(flatIndex));
472  DPRINTF(CCRegs, "Reading CC reg %d (%d) as %#x.\n",
473  reg_idx, flatIndex, regVal);
474  return regVal;
475  }
476 
477  void
478  setIntReg(RegIndex reg_idx, RegVal val) override
479  {
480  int flatIndex = isa->flattenIntIndex(reg_idx);
481  assert(flatIndex < TheISA::NumIntRegs);
482  DPRINTF(IntRegs, "Setting int reg %d (%d) to %#x.\n",
483  reg_idx, flatIndex, val);
484  setIntRegFlat(flatIndex, val);
485  }
486 
487  void
488  setFloatReg(RegIndex reg_idx, RegVal val) override
489  {
490  int flatIndex = isa->flattenFloatIndex(reg_idx);
491  assert(flatIndex < TheISA::NumFloatRegs);
492  // XXX: Fix array out of bounds compiler error for gem5.fast
493  // when checkercpu enabled
494  if (flatIndex < TheISA::NumFloatRegs)
495  setFloatRegFlat(flatIndex, val);
496  DPRINTF(FloatRegs, "Setting float reg %d (%d) bits to %#x.\n",
497  reg_idx, flatIndex, val);
498  }
499 
500  void
501  setVecReg(const RegId &reg, const VecRegContainer &val) override
502  {
503  int flatIndex = isa->flattenVecIndex(reg.index());
504  assert(flatIndex < TheISA::NumVecRegs);
505  setVecRegFlat(flatIndex, val);
506  DPRINTF(VecRegs, "Setting vector reg %d (%d) to %s.\n",
507  reg.index(), flatIndex, val.print());
508  }
509 
510  void
511  setVecElem(const RegId &reg, const VecElem &val) override
512  {
513  int flatIndex = isa->flattenVecElemIndex(reg.index());
514  assert(flatIndex < TheISA::NumVecRegs);
515  setVecElemFlat(flatIndex, reg.elemIndex(), val);
516  DPRINTF(VecRegs, "Setting element %d of vector reg %d (%d) to"
517  " %#x.\n", reg.elemIndex(), reg.index(), flatIndex, val);
518  }
519 
520  void
521  setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
522  {
523  int flatIndex = isa->flattenVecPredIndex(reg.index());
524  assert(flatIndex < TheISA::NumVecPredRegs);
525  setVecPredRegFlat(flatIndex, val);
526  DPRINTF(VecPredRegs, "Setting predicate reg %d (%d) to %s.\n",
527  reg.index(), flatIndex, val.print());
528  }
529 
530  void
531  setCCReg(RegIndex reg_idx, RegVal val) override
532  {
533  int flatIndex = isa->flattenCCIndex(reg_idx);
534  assert(flatIndex < TheISA::NumCCRegs);
535  DPRINTF(CCRegs, "Setting CC reg %d (%d) to %#x.\n",
536  reg_idx, flatIndex, val);
537  setCCRegFlat(flatIndex, val);
538  }
539 
540  TheISA::PCState pcState() const override { return _pcState; }
541  void pcState(const TheISA::PCState &val) override { _pcState = val; }
542 
543  void
545  {
546  _pcState = val;
547  }
548 
549  Addr instAddr() const override { return _pcState.instAddr(); }
550  Addr nextInstAddr() const override { return _pcState.nextInstAddr(); }
551  MicroPC microPC() const override { return _pcState.microPC(); }
552  bool readPredicate() const { return predicate; }
553  void setPredicate(bool val) { predicate = val; }
554 
555  RegVal
556  readMiscRegNoEffect(RegIndex misc_reg) const override
557  {
558  return isa->readMiscRegNoEffect(misc_reg);
559  }
560 
561  RegVal
562  readMiscReg(RegIndex misc_reg) override
563  {
564  return isa->readMiscReg(misc_reg, this);
565  }
566 
567  void
568  setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
569  {
570  return isa->setMiscRegNoEffect(misc_reg, val);
571  }
572 
573  void
574  setMiscReg(RegIndex misc_reg, RegVal val) override
575  {
576  return isa->setMiscReg(misc_reg, val, this);
577  }
578 
579  RegId
580  flattenRegId(const RegId& regId) const override
581  {
582  return isa->flattenRegId(regId);
583  }
584 
585  unsigned readStCondFailures() const override { return storeCondFailures; }
586 
587  bool
589  {
590  return memAccPredicate;
591  }
592 
593  void
595  {
596  memAccPredicate = val;
597  }
598 
599  void
600  setStCondFailures(unsigned sc_failures) override
601  {
602  storeCondFailures = sc_failures;
603  }
604 
605  Counter
606  readFuncExeInst() const override
607  {
609  }
610 
611  void
612  syscall(Fault *fault) override
613  {
614  process->syscall(this, fault);
615  }
616 
617  RegVal readIntRegFlat(RegIndex idx) const override { return intRegs[idx]; }
618  void
620  {
621  intRegs[idx] = val;
622  }
623 
624  RegVal
625  readFloatRegFlat(RegIndex idx) const override
626  {
627  return floatRegs[idx];
628  }
629  void
631  {
632  floatRegs[idx] = val;
633  }
634 
635  const VecRegContainer &
636  readVecRegFlat(RegIndex reg) const override
637  {
638  return vecRegs[reg];
639  }
640 
643  {
644  return vecRegs[reg];
645  }
646 
647  void
649  {
650  vecRegs[reg] = val;
651  }
652 
653  template <typename T>
655  readVecLaneFlat(RegIndex reg, int lId) const
656  {
657  return vecRegs[reg].laneView<T>(lId);
658  }
659 
660  template <typename LD>
661  void
662  setVecLaneFlat(RegIndex reg, int lId, const LD &val)
663  {
664  vecRegs[reg].laneView<typename LD::UnderlyingType>(lId) = val;
665  }
666 
667  const VecElem &
668  readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
669  {
670  return vecRegs[reg].as<TheISA::VecElem>()[elemIndex];
671  }
672 
673  void
675  const VecElem &val) override
676  {
677  vecRegs[reg].as<TheISA::VecElem>()[elemIndex] = val;
678  }
679 
680  const VecPredRegContainer &
682  {
683  return vecPredRegs[reg];
684  }
685 
688  {
689  return vecPredRegs[reg];
690  }
691 
692  void
694  {
695  vecPredRegs[reg] = val;
696  }
697 
698  RegVal readCCRegFlat(RegIndex idx) const override { return ccRegs[idx]; }
699  void setCCRegFlat(RegIndex idx, RegVal val) override { ccRegs[idx] = val; }
700 };
701 
702 
703 #endif // __CPU_CPU_EXEC_CONTEXT_HH__
count
Definition: misc.hh:705
BaseISA * getIsaPtr() override
#define DPRINTF(x,...)
Definition: trace.hh:229
void setContextId(ContextID id)
Definition: thread_state.hh:76
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:82
void pcStateNoRecord(const TheISA::PCState &val) override
Struct for holding general thread state that is needed across CPU models.
Definition: thread_state.hh:59
Tick readLastSuspend() const
Definition: thread_state.hh:84
Process * getProcessPtr() override
Tick getCurrentInstCount() override
Bitfield< 5, 3 > reg
Definition: types.hh:89
Status status() const override
EndQuiesceEvent * getQuiesceEvent()
Definition: thread_state.hh:96
BaseTLB * itb
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::FourByte > &val) override
const std::string & name()
Definition: trace.cc:54
CheckerCPU class.
Definition: cpu.hh:87
std::array< RegVal, TheISA::NumIntRegs > intRegs
void deschedule(Event *event)
Deschedule the specified event.
Definition: eventq_impl.hh:69
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:160
bool readPredicate() const
uint32_t socketId() const
Definition: thread_state.hh:72
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
const int NumFloatRegs
Definition: registers.hh:94
std::array< RegVal, TheISA::NumFloatRegs > floatRegs
ContextID contextId() const override
System * getSystemPtr() override
void clearArchRegs() override
TheISA::PCState pcState() const override
uint64_t RegVal
Definition: types.hh:168
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
void profileClear()
void setStatus(Status newStatus) override
Definition: system.hh:77
bool remove(PCEvent *event) override
Definition: pc_event.cc:53
void descheduleInstCountEvent(Event *event) override
void setThreadId(ThreadID id)
Definition: thread_state.hh:78
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:42
void setMemAccPredicate(bool val)
VecLaneT< T, true > readVecLaneFlat(RegIndex reg, int lId) const
const int NumVecPredRegs
Definition: registers.hh:97
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:771
VecRegContainer & getWritableVecReg(const RegId &reg) override
uint32_t MachInst
Definition: types.hh:40
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:204
Definition: tlb.hh:52
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:457
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:162
void setCCReg(RegIndex reg_idx, RegVal val) override
RegVal readIntReg(RegIndex reg_idx) const override
ContextID contextId() const
Definition: thread_state.hh:74
PCEventQueue pcEventQueue
Queue of events sorted in time order.
Definition: eventq.hh:492
uint16_t RegIndex
Definition: types.hh:42
TheISA::ISA *const isa
void setFloatReg(RegIndex reg_idx, RegVal val) override
const int NumCCRegs
Definition: registers.hh:99
void setProcessPtr(Process *p)
::DummyVecPredRegContainer VecPredRegContainer
Definition: registers.hh:60
uint64_t Tick
Tick count type.
Definition: types.hh:63
VecPredRegContainer & getWritableVecPredRegFlat(RegIndex reg) override
::DummyVecRegContainer VecRegContainer
Definition: registers.hh:53
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:144
void pcState(const TheISA::PCState &val) override
Kernel::Statistics * getKernelStats()
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:80
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:142
ThreadContext * getTC()
Returns the pointer to this SimpleThread&#39;s ThreadContext.
int64_t Counter
Statistics counter type.
Definition: types.hh:58
bool schedule(PCEvent *event) override
Definition: pc_event.cc:73
void setVecRegFlat(RegIndex reg, const VecRegContainer &val) override
Bitfield< 10, 5 > event
Addr instAddr() const override
Bitfield< 15 > system
Definition: misc.hh:999
int threadId() const override
Tick getCurTick() const
Definition: eventq.hh:627
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:82
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:68
uint16_t ElemIndex
Logical vector register elem index type.
Definition: types.hh:45
void setVecElemFlat(RegIndex reg, const ElemIndex &elemIndex, const VecElem &val) override
Counter readFuncExeInst() const override
Definition: eventq.hh:189
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
const VecElem & readVecElem(const RegId &reg) const override
void profileSample() override
Generic predicate register container.
Definition: vec_pred_reg.hh:51
PortProxy & getVirtProxy() override
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
Definition: eventq_impl.hh:42
RegVal readFloatReg(RegIndex reg_idx) const override
MicroPC microPC() const override
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:179
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:79
Definition: isa.hh:35
Tick readLastSuspend() override
int cpuId() const
Definition: thread_state.hh:70
::DummyVecElem VecElem
Definition: registers.hh:50
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
Bitfield< 0 > p
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
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
const int NumVecRegs
Definition: registers.hh:95
const int NumIntRegs
Definition: registers.hh:93
int ContextID
Globally unique thread context ID.
Definition: types.hh:231
output decoder
Definition: nop.cc:64
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:46
void setVecPredRegFlat(RegIndex reg, const VecPredRegContainer &val) override
BaseTLB * dtb
void setPredicate(bool val)
const std::string print() const
Definition: vec_reg.hh:365

Generated on Fri Feb 28 2020 16:27:00 for gem5 by doxygen 1.8.13