gem5  v21.0.1.0
thread_context.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) 2004-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_O3_THREAD_CONTEXT_HH__
43 #define __CPU_O3_THREAD_CONTEXT_HH__
44 
45 #include "config/the_isa.hh"
46 #include "cpu/o3/isa_specific.hh"
47 #include "cpu/thread_context.hh"
48 
62 template <class Impl>
63 class O3ThreadContext : public ThreadContext
64 {
65  public:
66  typedef typename Impl::O3CPU O3CPU;
67 
70 
71  bool
72  schedule(PCEvent *e) override
73  {
74  return thread->pcEventQueue.schedule(e);
75  }
76  bool
77  remove(PCEvent *e) override
78  {
79  return thread->pcEventQueue.remove(e);
80  }
81 
82  void
84  {
85  thread->comInstEventQueue.schedule(event, count);
86  }
87  void
89  {
90  thread->comInstEventQueue.deschedule(event);
91  }
92  Tick
94  {
95  return thread->comInstEventQueue.getCurTick();
96  }
97 
100 
102  BaseMMU *getMMUPtr() override { return cpu->mmu; }
103 
104  CheckerCPU *getCheckerCpuPtr() override { return NULL; }
105 
106  BaseISA *
107  getIsaPtr() override
108  {
109  return cpu->isa[thread->threadId()];
110  }
111 
112  TheISA::Decoder *
113  getDecoderPtr() override
114  {
115  return cpu->fetch.decoder[thread->threadId()];
116  }
117 
119  BaseCPU *getCpuPtr() override { return cpu; }
120 
122  int cpuId() const override { return cpu->cpuId(); }
123 
125  uint32_t socketId() const override { return cpu->socketId(); }
126 
127  ContextID contextId() const override { return thread->contextId(); }
128 
129  void setContextId(ContextID id) override { thread->setContextId(id); }
130 
132  int threadId() const override { return thread->threadId(); }
133  void setThreadId(int id) override { return thread->setThreadId(id); }
134 
136  System *getSystemPtr() override { return cpu->system; }
137 
139  Process *getProcessPtr() override { return thread->getProcessPtr(); }
140 
141  void setProcessPtr(Process *p) override { thread->setProcessPtr(p); }
142 
143  PortProxy &getPhysProxy() override { return thread->getPhysProxy(); }
144 
145  PortProxy &getVirtProxy() override;
146 
147  void
149  {
150  thread->initMemProxies(tc);
151  }
152 
154  Status status() const override { return thread->status(); }
155 
157  void
158  setStatus(Status new_status) override
159  {
160  thread->setStatus(new_status);
161  }
162 
164  void activate() override;
165 
167  void suspend() override;
168 
170  void halt() override;
171 
173  void takeOverFrom(ThreadContext *old_context) override;
174 
176  Tick readLastActivate() override;
178  Tick readLastSuspend() override;
179 
181  void copyArchRegs(ThreadContext *tc) override;
182 
184  void clearArchRegs() override;
185 
187  RegVal
188  readReg(RegIndex reg_idx)
189  {
191  reg_idx)).index());
192  }
193  RegVal
194  readIntReg(RegIndex reg_idx) const override
195  {
197  reg_idx)).index());
198  }
199 
200  RegVal
201  readFloatReg(RegIndex reg_idx) const override
202  {
204  reg_idx)).index());
205  }
206 
208  readVecReg(const RegId& id) const override
209  {
210  return readVecRegFlat(flattenRegId(id).index());
211  }
212 
217  getWritableVecReg(const RegId& id) override
218  {
220  }
221 
226  readVec8BitLaneReg(const RegId& id) const override
227  {
228  return readVecLaneFlat<uint8_t>(flattenRegId(id).index(),
229  id.elemIndex());
230  }
231 
234  readVec16BitLaneReg(const RegId& id) const override
235  {
236  return readVecLaneFlat<uint16_t>(flattenRegId(id).index(),
237  id.elemIndex());
238  }
239 
242  readVec32BitLaneReg(const RegId& id) const override
243  {
244  return readVecLaneFlat<uint32_t>(flattenRegId(id).index(),
245  id.elemIndex());
246  }
247 
250  readVec64BitLaneReg(const RegId& id) const override
251  {
252  return readVecLaneFlat<uint64_t>(flattenRegId(id).index(),
253  id.elemIndex());
254  }
255 
257  void
259  const LaneData<LaneSize::Byte>& val) override
260  {
261  return setVecLaneFlat(flattenRegId(reg).index(), reg.elemIndex(), val);
262  }
263  void
265  const LaneData<LaneSize::TwoByte>& val) override
266  {
267  return setVecLaneFlat(flattenRegId(reg).index(), reg.elemIndex(), val);
268  }
269  void
271  const LaneData<LaneSize::FourByte>& val) override
272  {
273  return setVecLaneFlat(flattenRegId(reg).index(), reg.elemIndex(), val);
274  }
275  void
277  const LaneData<LaneSize::EightByte>& val) override
278  {
279  return setVecLaneFlat(flattenRegId(reg).index(), reg.elemIndex(), val);
280  }
283  const TheISA::VecElem &
284  readVecElem(const RegId& reg) const override
285  {
286  return readVecElemFlat(flattenRegId(reg).index(), reg.elemIndex());
287  }
288 
290  readVecPredReg(const RegId& id) const override
291  {
292  return readVecPredRegFlat(flattenRegId(id).index());
293  }
294 
296  getWritableVecPredReg(const RegId& id) override
297  {
299  }
300 
301  RegVal
302  readCCReg(RegIndex reg_idx) const override
303  {
305  reg_idx)).index());
306  }
307 
309  void
310  setIntReg(RegIndex reg_idx, RegVal val) override
311  {
313  }
314 
315  void
316  setFloatReg(RegIndex reg_idx, RegVal val) override
317  {
319  reg_idx)).index(), val);
320  }
321 
322  void
323  setVecReg(const RegId& reg, const TheISA::VecRegContainer& val) override
324  {
326  }
327 
328  void
329  setVecElem(const RegId& reg, const TheISA::VecElem& val) override
330  {
331  setVecElemFlat(flattenRegId(reg).index(), reg.elemIndex(), val);
332  }
333 
334  void
336  const TheISA::VecPredRegContainer& val) override
337  {
339  }
340 
341  void
342  setCCReg(RegIndex reg_idx, RegVal val) override
343  {
345  }
346 
349  pcState() const override
350  {
351  return cpu->pcState(thread->threadId());
352  }
353 
355  void pcState(const TheISA::PCState &val) override;
356 
357  void pcStateNoRecord(const TheISA::PCState &val) override;
358 
360  Addr
361  instAddr() const override
362  {
363  return cpu->instAddr(thread->threadId());
364  }
365 
367  Addr
368  nextInstAddr() const override
369  {
370  return cpu->nextInstAddr(thread->threadId());
371  }
372 
374  MicroPC
375  microPC() const override
376  {
377  return cpu->microPC(thread->threadId());
378  }
379 
381  RegVal
382  readMiscRegNoEffect(RegIndex misc_reg) const override
383  {
384  return cpu->readMiscRegNoEffect(misc_reg, thread->threadId());
385  }
386 
389  RegVal
390  readMiscReg(RegIndex misc_reg) override
391  {
392  return cpu->readMiscReg(misc_reg, thread->threadId());
393  }
394 
396  void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override;
397 
400  void setMiscReg(RegIndex misc_reg, RegVal val) override;
401 
402  RegId flattenRegId(const RegId& regId) const override;
403 
405  // @todo: Figure out where these store cond failures should go.
406  unsigned
407  readStCondFailures() const override
408  {
409  return thread->storeCondFailures;
410  }
411 
413  void
414  setStCondFailures(unsigned sc_failures) override
415  {
416  thread->storeCondFailures = sc_failures;
417  }
418 
420  Counter readFuncExeInst() const override { return thread->funcExeInst; }
421 
427  inline void
429  {
430  if (!thread->trapPending && !thread->noSquashFromTC)
431  cpu->squashFromTC(thread->threadId());
432  }
433 
434  RegVal readIntRegFlat(RegIndex idx) const override;
435  void setIntRegFlat(RegIndex idx, RegVal val) override;
436 
437  RegVal readFloatRegFlat(RegIndex idx) const override;
438  void setFloatRegFlat(RegIndex idx, RegVal val) override;
439 
440  const TheISA::VecRegContainer& readVecRegFlat(RegIndex idx) const override;
443  void setVecRegFlat(RegIndex idx,
444  const TheISA::VecRegContainer& val) override;
445 
446  template <typename VE>
448  readVecLaneFlat(RegIndex idx, int lId) const
449  {
450  return cpu->template readArchVecLane<VE>(idx, lId,
451  thread->threadId());
452  }
453 
454  template <typename LD>
455  void
456  setVecLaneFlat(int idx, int lId, const LD& val)
457  {
458  cpu->template setArchVecLane(idx, lId, thread->threadId(), val);
459  }
460 
462  const ElemIndex& elemIndex) const override;
463  void setVecElemFlat(RegIndex idx, const ElemIndex& elemIdx,
464  const TheISA::VecElem& val) override;
465 
467  readVecPredRegFlat(RegIndex idx) const override;
469  getWritableVecPredRegFlat(RegIndex idx) override;
470  void setVecPredRegFlat(RegIndex idx,
471  const TheISA::VecPredRegContainer& val) override;
472 
473  RegVal readCCRegFlat(RegIndex idx) const override;
474  void setCCRegFlat(RegIndex idx, RegVal val) override;
475 
476  // hardware transactional memory
477  void htmAbortTransaction(uint64_t htm_uid,
478  HtmFailureFaultCause cause) override;
480  void setHtmCheckpointPtr(BaseHTMCheckpointPtr new_cpt) override;
481 };
482 
483 #endif
O3ThreadContext::nextInstAddr
Addr nextInstAddr() const override
Reads this thread's next PC.
Definition: thread_context.hh:368
O3ThreadContext::getCpuPtr
BaseCPU * getCpuPtr() override
Returns a pointer to this CPU.
Definition: thread_context.hh:119
O3ThreadContext::setStCondFailures
void setStCondFailures(unsigned sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: thread_context.hh:414
O3ThreadContext::setHtmCheckpointPtr
void setHtmCheckpointPtr(BaseHTMCheckpointPtr new_cpt) override
Definition: thread_context_impl.hh:348
O3ThreadContext::pcStateNoRecord
void pcStateNoRecord(const TheISA::PCState &val) override
Definition: thread_context_impl.hh:296
O3ThreadContext::getSystemPtr
System * getSystemPtr() override
Returns a pointer to the system.
Definition: thread_context.hh:136
O3ThreadContext::microPC
MicroPC microPC() const override
Reads this thread's next PC.
Definition: thread_context.hh:375
O3ThreadContext::cpuId
int cpuId() const override
Reads this CPU's ID.
Definition: thread_context.hh:122
O3ThreadContext::getWritableVecPredRegFlat
TheISA::VecPredRegContainer & getWritableVecPredRegFlat(RegIndex idx) override
Definition: thread_context_impl.hh:217
O3ThreadContext::setVecReg
void setVecReg(const RegId &reg, const TheISA::VecRegContainer &val) override
Definition: thread_context.hh:323
BaseMMU
Definition: mmu.hh:45
ArmISA::VecRegContainer
VecReg::Container VecRegContainer
Definition: registers.hh:63
MipsISA::index
Bitfield< 30, 0 > index
Definition: pra_constants.hh:44
O3ThreadContext::status
Status status() const override
Returns this thread's status.
Definition: thread_context.hh:154
O3ThreadContext::readCCReg
RegVal readCCReg(RegIndex reg_idx) const override
Definition: thread_context.hh:302
O3ThreadContext::readStCondFailures
unsigned readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: thread_context.hh:407
Process
Definition: process.hh:65
O3ThreadContext::getMMUPtr
BaseMMU * getMMUPtr() override
Returns a pointer to the MMU.
Definition: thread_context.hh:102
O3ThreadContext::instAddr
Addr instAddr() const override
Reads this thread's PC.
Definition: thread_context.hh:361
O3ThreadContext::setIntReg
void setIntReg(RegIndex reg_idx, RegVal val) override
Sets an integer register to a value.
Definition: thread_context.hh:310
O3ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::FourByte > &val) override
Definition: thread_context.hh:270
ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:237
O3ThreadContext::contextId
ContextID contextId() const override
Definition: thread_context.hh:127
O3ThreadContext::readReg
RegVal readReg(RegIndex reg_idx)
Reads an integer register.
Definition: thread_context.hh:188
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:59
ArmISA::VecPredRegContainer
VecPredReg::Container VecPredRegContainer
Definition: registers.hh:69
O3ThreadContext::setStatus
void setStatus(Status new_status) override
Sets this thread's status.
Definition: thread_context.hh:158
O3ThreadContext::O3CPU
Impl::O3CPU O3CPU
Definition: thread_context.hh:66
O3ThreadContext::setVecElemFlat
void setVecElemFlat(RegIndex idx, const ElemIndex &elemIdx, const TheISA::VecElem &val) override
Definition: thread_context_impl.hh:259
O3ThreadContext::readFloatRegFlat
RegVal readFloatRegFlat(RegIndex idx) const override
Definition: thread_context_impl.hh:181
CheckerCPU
CheckerCPU class.
Definition: cpu.hh:85
O3ThreadContext::setCCRegFlat
void setCCRegFlat(RegIndex idx, RegVal val) override
Definition: thread_context_impl.hh:278
HtmFailureFaultCause
HtmFailureFaultCause
Definition: htm.hh:44
X86ISA::count
count
Definition: misc.hh:703
O3ThreadContext::readVecPredReg
const TheISA::VecPredRegContainer & readVecPredReg(const RegId &id) const override
Definition: thread_context.hh:290
O3ThreadContext::readFloatReg
RegVal readFloatReg(RegIndex reg_idx) const override
Definition: thread_context.hh:201
O3ThreadContext::readVec64BitLaneReg
ConstVecLane64 readVec64BitLaneReg(const RegId &id) const override
Reads source vector 64bit operand.
Definition: thread_context.hh:250
O3ThreadContext::setVecRegFlat
void setVecRegFlat(RegIndex idx, const TheISA::VecRegContainer &val) override
Definition: thread_context_impl.hh:249
O3ThreadContext::scheduleInstCountEvent
void scheduleInstCountEvent(Event *event, Tick count) override
Definition: thread_context.hh:83
O3ThreadContext::takeOverFrom
void takeOverFrom(ThreadContext *old_context) override
Takes over execution of a thread from another CPU.
Definition: thread_context_impl.hh:60
X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:88
RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
O3ThreadContext::halt
void halt() override
Set the status to Halted.
Definition: thread_context_impl.hh:117
O3ThreadContext::getCheckerCpuPtr
CheckerCPU * getCheckerCpuPtr() override
Definition: thread_context.hh:104
O3ThreadContext::setVecLaneFlat
void setVecLaneFlat(int idx, int lId, const LD &val)
Definition: thread_context.hh:456
O3ThreadContext::getDecoderPtr
TheISA::Decoder * getDecoderPtr() override
Definition: thread_context.hh:113
Counter
int64_t Counter
Statistics counter type.
Definition: types.hh:54
O3ThreadContext::getWritableVecReg
TheISA::VecRegContainer & getWritableVecReg(const RegId &id) override
Read vector register operand for modification, hierarchical indexing.
Definition: thread_context.hh:217
ArmISA::VecElem
uint32_t VecElem
Definition: registers.hh:60
O3ThreadContext::conditionalSquash
void conditionalSquash()
check if the cpu is currently in state update mode and squash if not.
Definition: thread_context.hh:428
O3ThreadContext::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
Sets a misc.
Definition: thread_context_impl.hh:312
O3ThreadContext::setVecPredRegFlat
void setVecPredRegFlat(RegIndex idx, const TheISA::VecPredRegContainer &val) override
Definition: thread_context_impl.hh:268
FloatRegClass
@ FloatRegClass
Floating-point register.
Definition: reg_class.hh:54
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
O3ThreadContext::getProcessPtr
Process * getProcessPtr() override
Returns a pointer to this thread's process.
Definition: thread_context.hh:139
isa_specific.hh
Event
Definition: eventq.hh:248
VecLaneT
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
O3ThreadContext::readVec16BitLaneReg
ConstVecLane16 readVec16BitLaneReg(const RegId &id) const override
Reads source vector 16bit operand.
Definition: thread_context.hh:234
O3ThreadContext::activate
void activate() override
Set the status to Active.
Definition: thread_context_impl.hh:78
System
Definition: system.hh:73
O3ThreadContext::readIntReg
RegVal readIntReg(RegIndex reg_idx) const override
Definition: thread_context.hh:194
O3ThreadContext::readLastActivate
Tick readLastActivate() override
Reads the last tick that this thread was activated on.
Definition: thread_context_impl.hh:137
O3ThreadContext::htmAbortTransaction
void htmAbortTransaction(uint64_t htm_uid, HtmFailureFaultCause cause) override
Definition: thread_context_impl.hh:331
MipsISA::event
Bitfield< 10, 5 > event
Definition: pra_constants.hh:297
O3ThreadContext::readVec32BitLaneReg
ConstVecLane32 readVec32BitLaneReg(const RegId &id) const override
Reads source vector 32bit operand.
Definition: thread_context.hh:242
O3ThreadContext::flattenRegId
RegId flattenRegId(const RegId &regId) const override
Definition: thread_context_impl.hh:305
O3ThreadContext::setContextId
void setContextId(ContextID id) override
Definition: thread_context.hh:129
O3ThreadState
Class that has various thread state, such as the status, the current instruction being processed,...
Definition: commit.hh:56
O3ThreadContext::readFuncExeInst
Counter readFuncExeInst() const override
Reads the funcExeInst counter.
Definition: thread_context.hh:420
O3ThreadContext::clearArchRegs
void clearArchRegs() override
Resets all architectural registers to 0.
Definition: thread_context_impl.hh:167
O3ThreadContext::getWritableVecRegFlat
TheISA::VecRegContainer & getWritableVecRegFlat(RegIndex idx) override
Read vector register operand for modification, flat indexing.
Definition: thread_context_impl.hh:195
O3ThreadContext::readVecElemFlat
const TheISA::VecElem & readVecElemFlat(RegIndex idx, const ElemIndex &elemIndex) const override
Definition: thread_context_impl.hh:202
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
O3ThreadContext::getWritableVecPredReg
TheISA::VecPredRegContainer & getWritableVecPredReg(const RegId &id) override
Definition: thread_context.hh:296
O3ThreadContext::getCurrentInstCount
Tick getCurrentInstCount() override
Definition: thread_context.hh:93
O3ThreadContext::threadId
int threadId() const override
Returns this thread's ID number.
Definition: thread_context.hh:132
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:148
BaseHTMCheckpointPtr
std::unique_ptr< BaseHTMCheckpoint > BaseHTMCheckpointPtr
Definition: htm.hh:122
O3ThreadContext::readVecReg
const TheISA::VecRegContainer & readVecReg(const RegId &id) const override
Definition: thread_context.hh:208
O3ThreadContext::readCCRegFlat
RegVal readCCRegFlat(RegIndex idx) const override
Definition: thread_context_impl.hh:224
O3ThreadContext::setThreadId
void setThreadId(int id) override
Definition: thread_context.hh:133
O3ThreadContext::readVecRegFlat
const TheISA::VecRegContainer & readVecRegFlat(RegIndex idx) const override
Definition: thread_context_impl.hh:188
O3ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
Definition: thread_context.hh:258
O3ThreadContext::readVecLaneFlat
VecLaneT< VE, true > readVecLaneFlat(RegIndex idx, int lId) const
Definition: thread_context.hh:448
IntRegClass
@ IntRegClass
Integer register.
Definition: reg_class.hh:53
O3ThreadContext::setIntRegFlat
void setIntRegFlat(RegIndex idx, RegVal val) override
Definition: thread_context_impl.hh:231
O3ThreadContext::getPhysProxy
PortProxy & getPhysProxy() override
Definition: thread_context.hh:143
CCRegClass
@ CCRegClass
Condition-code register.
Definition: reg_class.hh:60
ArmISA::e
Bitfield< 9 > e
Definition: miscregs_types.hh:61
O3ThreadContext::getHtmCheckpointPtr
BaseHTMCheckpointPtr & getHtmCheckpointPtr() override
Definition: thread_context_impl.hh:341
BaseCPU
Definition: base.hh:104
O3ThreadContext::descheduleInstCountEvent
void descheduleInstCountEvent(Event *event) override
Definition: thread_context.hh:88
O3ThreadContext::readIntRegFlat
RegVal readIntRegFlat(RegIndex idx) const override
Definition: thread_context_impl.hh:174
O3ThreadContext::readLastSuspend
Tick readLastSuspend() override
Reads the last tick that this thread was suspended on.
Definition: thread_context_impl.hh:144
O3ThreadContext::readVecPredRegFlat
const TheISA::VecPredRegContainer & readVecPredRegFlat(RegIndex idx) const override
Definition: thread_context_impl.hh:210
O3ThreadContext::readVec8BitLaneReg
ConstVecLane8 readVec8BitLaneReg(const RegId &id) const override
Vector Register Lane Interfaces.
Definition: thread_context.hh:226
O3ThreadContext::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
Reads a miscellaneous register.
Definition: thread_context.hh:382
PortProxy
This object is a proxy for a port or other object which implements the functional response protocol,...
Definition: port_proxy.hh:80
O3ThreadContext::readVecElem
const TheISA::VecElem & readVecElem(const RegId &reg) const override
Definition: thread_context.hh:284
O3ThreadContext::getIsaPtr
BaseISA * getIsaPtr() override
Definition: thread_context.hh:107
MipsISA::PCState
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
RegIndex
uint16_t RegIndex
Definition: types.hh:52
O3ThreadContext::setVecPredReg
void setVecPredReg(const RegId &reg, const TheISA::VecPredRegContainer &val) override
Definition: thread_context.hh:335
O3ThreadContext::getVirtProxy
PortProxy & getVirtProxy() override
Definition: thread_context_impl.hh:53
ElemIndex
uint16_t ElemIndex
Logical vector register elem index type.
Definition: types.hh:55
O3ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::TwoByte > &val) override
Definition: thread_context.hh:264
O3ThreadContext::thread
O3ThreadState< Impl > * thread
Pointer to the thread state that this TC corrseponds to.
Definition: thread_context.hh:99
O3ThreadContext::suspend
void suspend() override
Set the status to Suspended.
Definition: thread_context_impl.hh:95
O3ThreadContext::schedule
bool schedule(PCEvent *e) override
Definition: thread_context.hh:72
O3ThreadContext::setFloatReg
void setFloatReg(RegIndex reg_idx, RegVal val) override
Definition: thread_context.hh:316
PCEvent
Definition: pc_event.hh:42
O3ThreadContext::setMiscReg
void setMiscReg(RegIndex misc_reg, RegVal val) override
Sets a misc.
Definition: thread_context_impl.hh:321
O3ThreadContext::remove
bool remove(PCEvent *e) override
Definition: thread_context.hh:77
O3ThreadContext::setProcessPtr
void setProcessPtr(Process *p) override
Definition: thread_context.hh:141
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
O3ThreadContext::setFloatRegFlat
void setFloatRegFlat(RegIndex idx, RegVal val) override
Definition: thread_context_impl.hh:240
MicroPC
uint16_t MicroPC
Definition: types.hh:150
O3ThreadContext::copyArchRegs
void copyArchRegs(ThreadContext *tc) override
Copies the architectural registers from another TC into this TC.
Definition: thread_context_impl.hh:151
O3ThreadContext::setVecElem
void setVecElem(const RegId &reg, const TheISA::VecElem &val) override
Definition: thread_context.hh:329
BaseISA
Definition: isa.hh:47
thread_context.hh
O3ThreadContext::initMemProxies
void initMemProxies(ThreadContext *tc) override
Definition: thread_context.hh:148
LaneData
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:458
O3ThreadContext::pcState
TheISA::PCState pcState() const override
Reads this thread's PC state.
Definition: thread_context.hh:349
O3ThreadContext::cpu
O3CPU * cpu
Pointer to the CPU.
Definition: thread_context.hh:69
O3ThreadContext::readMiscReg
RegVal readMiscReg(RegIndex misc_reg) override
Reads a misc.
Definition: thread_context.hh:390
RegVal
uint64_t RegVal
Definition: types.hh:174
O3ThreadContext::setCCReg
void setCCReg(RegIndex reg_idx, RegVal val) override
Definition: thread_context.hh:342
O3ThreadContext::socketId
uint32_t socketId() const override
Reads this CPU's Socket ID.
Definition: thread_context.hh:125
O3ThreadContext::setVecLane
void setVecLane(const RegId &reg, const LaneData< LaneSize::EightByte > &val) override
Definition: thread_context.hh:276
O3ThreadContext
Derived ThreadContext class for use with the O3CPU.
Definition: cpu.hh:71

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