gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
thread_context.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2012 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) 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: Kevin Lim
42  */
43 
44 #ifndef __CPU_THREAD_CONTEXT_HH__
45 #define __CPU_THREAD_CONTEXT_HH__
46 
47 #include <iostream>
48 #include <string>
49 
50 #include "arch/registers.hh"
51 #include "arch/types.hh"
52 #include "base/types.hh"
53 #include "config/the_isa.hh"
54 
55 // @todo: Figure out a more architecture independent way to obtain the ITB and
56 // DTB pointers.
57 namespace TheISA
58 {
59  class Decoder;
60  class TLB;
61 }
62 class BaseCPU;
63 class CheckerCPU;
64 class Checkpoint;
65 class EndQuiesceEvent;
68 class PortProxy;
69 class Process;
70 class System;
71 namespace TheISA {
72  namespace Kernel {
73  class Statistics;
74  }
75 }
76 
94 {
95  protected:
102  public:
103 
104  enum Status
105  {
109 
113 
118  };
119 
120  virtual ~ThreadContext() { };
121 
122  virtual BaseCPU *getCpuPtr() = 0;
123 
124  virtual int cpuId() const = 0;
125 
126  virtual uint32_t socketId() const = 0;
127 
128  virtual int threadId() const = 0;
129 
130  virtual void setThreadId(int id) = 0;
131 
132  virtual int contextId() const = 0;
133 
134  virtual void setContextId(int id) = 0;
135 
136  virtual TheISA::TLB *getITBPtr() = 0;
137 
138  virtual TheISA::TLB *getDTBPtr() = 0;
139 
140  virtual CheckerCPU *getCheckerCpuPtr() = 0;
141 
142  virtual TheISA::Decoder *getDecoderPtr() = 0;
143 
144  virtual System *getSystemPtr() = 0;
145 
146  virtual TheISA::Kernel::Statistics *getKernelStats() = 0;
147 
148  virtual PortProxy &getPhysProxy() = 0;
149 
150  virtual FSTranslatingPortProxy &getVirtProxy() = 0;
151 
158  virtual void initMemProxies(ThreadContext *tc) = 0;
159 
160  virtual SETranslatingPortProxy &getMemProxy() = 0;
161 
162  virtual Process *getProcessPtr() = 0;
163 
164  virtual void setProcessPtr(Process *p) = 0;
165 
166  virtual Status status() const = 0;
167 
168  virtual void setStatus(Status new_status) = 0;
169 
171  virtual void activate() = 0;
172 
174  virtual void suspend() = 0;
175 
177  virtual void halt() = 0;
178 
180  void quiesce();
181 
183  void quiesceTick(Tick resume);
184 
185  virtual void dumpFuncProfile() = 0;
186 
187  virtual void takeOverFrom(ThreadContext *old_context) = 0;
188 
189  virtual void regStats(const std::string &name) = 0;
190 
191  virtual EndQuiesceEvent *getQuiesceEvent() = 0;
192 
193  // Not necessarily the best location for these...
194  // Having an extra function just to read these is obnoxious
195  virtual Tick readLastActivate() = 0;
196  virtual Tick readLastSuspend() = 0;
197 
198  virtual void profileClear() = 0;
199  virtual void profileSample() = 0;
200 
201  virtual void copyArchRegs(ThreadContext *tc) = 0;
202 
203  virtual void clearArchRegs() = 0;
204 
205  //
206  // New accessors for new decoder.
207  //
208  virtual uint64_t readIntReg(int reg_idx) = 0;
209 
210  virtual FloatReg readFloatReg(int reg_idx) = 0;
211 
212  virtual FloatRegBits readFloatRegBits(int reg_idx) = 0;
213 
214  virtual CCReg readCCReg(int reg_idx) = 0;
215 
216  virtual void setIntReg(int reg_idx, uint64_t val) = 0;
217 
218  virtual void setFloatReg(int reg_idx, FloatReg val) = 0;
219 
220  virtual void setFloatRegBits(int reg_idx, FloatRegBits val) = 0;
221 
222  virtual void setCCReg(int reg_idx, CCReg val) = 0;
223 
224  virtual TheISA::PCState pcState() = 0;
225 
226  virtual void pcState(const TheISA::PCState &val) = 0;
227 
228  void
230  {
231  TheISA::PCState pc_state = pcState();
232  pc_state.setNPC(val);
233  pcState(pc_state);
234  }
235 
236  virtual void pcStateNoRecord(const TheISA::PCState &val) = 0;
237 
238  virtual Addr instAddr() = 0;
239 
240  virtual Addr nextInstAddr() = 0;
241 
242  virtual MicroPC microPC() = 0;
243 
244  virtual MiscReg readMiscRegNoEffect(int misc_reg) const = 0;
245 
246  virtual MiscReg readMiscReg(int misc_reg) = 0;
247 
248  virtual void setMiscRegNoEffect(int misc_reg, const MiscReg &val) = 0;
249 
250  virtual void setMiscReg(int misc_reg, const MiscReg &val) = 0;
251 
252  virtual int flattenIntIndex(int reg) = 0;
253  virtual int flattenFloatIndex(int reg) = 0;
254  virtual int flattenCCIndex(int reg) = 0;
255  virtual int flattenMiscIndex(int reg) = 0;
256 
257  virtual uint64_t
258  readRegOtherThread(int misc_reg, ThreadID tid)
259  {
260  return 0;
261  }
262 
263  virtual void
264  setRegOtherThread(int misc_reg, const MiscReg &val, ThreadID tid)
265  {
266  }
267 
268  // Also not necessarily the best location for these two. Hopefully will go
269  // away once we decide upon where st cond failures goes.
270  virtual unsigned readStCondFailures() = 0;
271 
272  virtual void setStCondFailures(unsigned sc_failures) = 0;
273 
274  // Same with st cond failures.
275  virtual Counter readFuncExeInst() = 0;
276 
277  virtual void syscall(int64_t callnum, Fault *fault) = 0;
278 
279  // This function exits the thread context in the CPU and returns
280  // 1 if the CPU has no more active threads (meaning it's OK to exit);
281  // Used in syscall-emulation mode when a thread calls the exit syscall.
282  virtual int exit() { return 1; };
283 
285  static void compare(ThreadContext *one, ThreadContext *two);
286 
299  virtual uint64_t readIntRegFlat(int idx) = 0;
300  virtual void setIntRegFlat(int idx, uint64_t val) = 0;
301 
302  virtual FloatReg readFloatRegFlat(int idx) = 0;
303  virtual void setFloatRegFlat(int idx, FloatReg val) = 0;
304 
305  virtual FloatRegBits readFloatRegBitsFlat(int idx) = 0;
306  virtual void setFloatRegBitsFlat(int idx, FloatRegBits val) = 0;
307 
308  virtual CCReg readCCRegFlat(int idx) = 0;
309  virtual void setCCRegFlat(int idx, CCReg val) = 0;
312 };
313 
324 template <class TC>
326 {
327  public:
328  ProxyThreadContext(TC *actual_tc)
329  { actualTC = actual_tc; }
330 
331  private:
332  TC *actualTC;
333 
334  public:
335 
336  BaseCPU *getCpuPtr() { return actualTC->getCpuPtr(); }
337 
338  int cpuId() const { return actualTC->cpuId(); }
339 
340  uint32_t socketId() const { return actualTC->socketId(); }
341 
342  int threadId() const { return actualTC->threadId(); }
343 
344  void setThreadId(int id) { actualTC->setThreadId(id); }
345 
346  int contextId() const { return actualTC->contextId(); }
347 
348  void setContextId(int id) { actualTC->setContextId(id); }
349 
350  TheISA::TLB *getITBPtr() { return actualTC->getITBPtr(); }
351 
352  TheISA::TLB *getDTBPtr() { return actualTC->getDTBPtr(); }
353 
354  CheckerCPU *getCheckerCpuPtr() { return actualTC->getCheckerCpuPtr(); }
355 
356  TheISA::Decoder *getDecoderPtr() { return actualTC->getDecoderPtr(); }
357 
358  System *getSystemPtr() { return actualTC->getSystemPtr(); }
359 
360  TheISA::Kernel::Statistics *getKernelStats()
361  { return actualTC->getKernelStats(); }
362 
363  PortProxy &getPhysProxy() { return actualTC->getPhysProxy(); }
364 
365  FSTranslatingPortProxy &getVirtProxy() { return actualTC->getVirtProxy(); }
366 
367  void initMemProxies(ThreadContext *tc) { actualTC->initMemProxies(tc); }
368 
369  SETranslatingPortProxy &getMemProxy() { return actualTC->getMemProxy(); }
370 
371  Process *getProcessPtr() { return actualTC->getProcessPtr(); }
372 
373  void setProcessPtr(Process *p) { actualTC->setProcessPtr(p); }
374 
375  Status status() const { return actualTC->status(); }
376 
377  void setStatus(Status new_status) { actualTC->setStatus(new_status); }
378 
380  void activate() { actualTC->activate(); }
381 
383  void suspend() { actualTC->suspend(); }
384 
386  void halt() { actualTC->halt(); }
387 
389  void quiesce() { actualTC->quiesce(); }
390 
392  void quiesceTick(Tick resume) { actualTC->quiesceTick(resume); }
393 
394  void dumpFuncProfile() { actualTC->dumpFuncProfile(); }
395 
396  void takeOverFrom(ThreadContext *oldContext)
397  { actualTC->takeOverFrom(oldContext); }
398 
399  void regStats(const std::string &name) { actualTC->regStats(name); }
400 
401  EndQuiesceEvent *getQuiesceEvent() { return actualTC->getQuiesceEvent(); }
402 
403  Tick readLastActivate() { return actualTC->readLastActivate(); }
404  Tick readLastSuspend() { return actualTC->readLastSuspend(); }
405 
406  void profileClear() { return actualTC->profileClear(); }
407  void profileSample() { return actualTC->profileSample(); }
408 
409  // @todo: Do I need this?
410  void copyArchRegs(ThreadContext *tc) { actualTC->copyArchRegs(tc); }
411 
412  void clearArchRegs() { actualTC->clearArchRegs(); }
413 
414  //
415  // New accessors for new decoder.
416  //
417  uint64_t readIntReg(int reg_idx)
418  { return actualTC->readIntReg(reg_idx); }
419 
420  FloatReg readFloatReg(int reg_idx)
421  { return actualTC->readFloatReg(reg_idx); }
422 
424  { return actualTC->readFloatRegBits(reg_idx); }
425 
426  CCReg readCCReg(int reg_idx)
427  { return actualTC->readCCReg(reg_idx); }
428 
429  void setIntReg(int reg_idx, uint64_t val)
430  { actualTC->setIntReg(reg_idx, val); }
431 
432  void setFloatReg(int reg_idx, FloatReg val)
433  { actualTC->setFloatReg(reg_idx, val); }
434 
435  void setFloatRegBits(int reg_idx, FloatRegBits val)
436  { actualTC->setFloatRegBits(reg_idx, val); }
437 
438  void setCCReg(int reg_idx, CCReg val)
439  { actualTC->setCCReg(reg_idx, val); }
440 
441  TheISA::PCState pcState() { return actualTC->pcState(); }
442 
443  void pcState(const TheISA::PCState &val) { actualTC->pcState(val); }
444 
445  void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); }
446 
447  Addr instAddr() { return actualTC->instAddr(); }
448  Addr nextInstAddr() { return actualTC->nextInstAddr(); }
449  MicroPC microPC() { return actualTC->microPC(); }
450 
451  bool readPredicate() { return actualTC->readPredicate(); }
452 
453  void setPredicate(bool val)
454  { actualTC->setPredicate(val); }
455 
456  MiscReg readMiscRegNoEffect(int misc_reg) const
457  { return actualTC->readMiscRegNoEffect(misc_reg); }
458 
459  MiscReg readMiscReg(int misc_reg)
460  { return actualTC->readMiscReg(misc_reg); }
461 
462  void setMiscRegNoEffect(int misc_reg, const MiscReg &val)
463  { return actualTC->setMiscRegNoEffect(misc_reg, val); }
464 
465  void setMiscReg(int misc_reg, const MiscReg &val)
466  { return actualTC->setMiscReg(misc_reg, val); }
467 
469  { return actualTC->flattenIntIndex(reg); }
470 
472  { return actualTC->flattenFloatIndex(reg); }
473 
475  { return actualTC->flattenCCIndex(reg); }
476 
478  { return actualTC->flattenMiscIndex(reg); }
479 
481  { return actualTC->readStCondFailures(); }
482 
483  void setStCondFailures(unsigned sc_failures)
484  { actualTC->setStCondFailures(sc_failures); }
485 
486  void syscall(int64_t callnum, Fault *fault)
487  { actualTC->syscall(callnum, fault); }
488 
489  Counter readFuncExeInst() { return actualTC->readFuncExeInst(); }
490 
491  uint64_t readIntRegFlat(int idx)
492  { return actualTC->readIntRegFlat(idx); }
493 
494  void setIntRegFlat(int idx, uint64_t val)
495  { actualTC->setIntRegFlat(idx, val); }
496 
498  { return actualTC->readFloatRegFlat(idx); }
499 
500  void setFloatRegFlat(int idx, FloatReg val)
501  { actualTC->setFloatRegFlat(idx, val); }
502 
504  { return actualTC->readFloatRegBitsFlat(idx); }
505 
507  { actualTC->setFloatRegBitsFlat(idx, val); }
508 
510  { return actualTC->readCCRegFlat(idx); }
511 
512  void setCCRegFlat(int idx, CCReg val)
513  { actualTC->setCCRegFlat(idx, val); }
514 };
515 
526 void serialize(ThreadContext &tc, CheckpointOut &cp);
527 void unserialize(ThreadContext &tc, CheckpointIn &cp);
528 
542 void takeOverFrom(ThreadContext &new_tc, ThreadContext &old_tc);
543 
544 #endif
A TranslatingPortProxy in FS mode translates a virtual address to a physical address and then calls t...
uint8_t CCReg
Definition: registers.hh:57
virtual void syscall(int64_t callnum, Fault *fault)=0
virtual void halt()=0
Set the status to Halted.
virtual System * getSystemPtr()=0
Bitfield< 5, 3 > reg
Definition: types.hh:89
virtual Addr instAddr()=0
void setCCRegFlat(int idx, CCReg val)
virtual TheISA::Decoder * getDecoderPtr()=0
const std::string & name()
Definition: trace.cc:49
CheckerCPU class.
Definition: cpu.hh:91
void copyArchRegs(ThreadContext *tc)
void setFloatRegFlat(int idx, FloatReg val)
virtual void profileClear()=0
virtual CCReg readCCReg(int reg_idx)=0
virtual void setFloatRegFlat(int idx, FloatReg val)=0
virtual void setFloatRegBitsFlat(int idx, FloatRegBits val)=0
ProxyThreadContext class that provides a way to implement a ThreadContext without having to derive fr...
TheISA::MiscReg MiscReg
TheISA::TLB * getDTBPtr()
virtual void setStatus(Status new_status)=0
int flattenMiscIndex(int reg)
uint64_t readIntReg(int reg_idx)
int flattenIntIndex(int reg)
TheISA::PCState pcState()
virtual void setRegOtherThread(int misc_reg, const MiscReg &val, ThreadID tid)
virtual uint64_t readIntRegFlat(int idx)=0
Flat register interfaces.
void setFloatReg(int reg_idx, FloatReg val)
virtual MiscReg readMiscRegNoEffect(int misc_reg) const =0
virtual Counter readFuncExeInst()=0
void setIntReg(int reg_idx, uint64_t val)
void setProcessPtr(Process *p)
virtual FloatRegBits readFloatRegBitsFlat(int idx)=0
virtual void setMiscReg(int misc_reg, const MiscReg &val)=0
virtual Process * getProcessPtr()=0
uint64_t MiscReg
Definition: registers.hh:54
virtual void setIntRegFlat(int idx, uint64_t val)=0
Definition: system.hh:83
virtual void setIntReg(int reg_idx, uint64_t val)=0
void regStats(const std::string &name)
virtual BaseCPU * getCpuPtr()=0
void setStatus(Status new_status)
virtual FloatRegBits readFloatRegBits(int reg_idx)=0
virtual TheISA::PCState pcState()=0
virtual void regStats(const std::string &name)=0
TheISA::Kernel::Statistics * getKernelStats()
virtual Tick readLastSuspend()=0
ThreadContext is the external interface to all thread state for anything outside of the CPU...
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
virtual int flattenFloatIndex(int reg)=0
Event for timing out quiesce instruction.
unsigned readStCondFailures()
void setPredicate(bool val)
void quiesce()
Quiesce thread context.
Bitfield< 63 > val
Definition: misc.hh:770
virtual CCReg readCCRegFlat(int idx)=0
void setContextId(int id)
virtual void setFloatRegBits(int reg_idx, FloatRegBits val)=0
uint32_t MachInst
Definition: types.hh:40
virtual EndQuiesceEvent * getQuiesceEvent()=0
CCReg readCCReg(int reg_idx)
virtual void setCCReg(int reg_idx, CCReg val)=0
ProxyThreadContext(TC *actual_tc)
virtual PortProxy & getPhysProxy()=0
virtual int flattenMiscIndex(int reg)=0
void setFloatRegBits(int reg_idx, FloatRegBits val)
virtual uint64_t readIntReg(int reg_idx)=0
void quiesce()
Quiesce thread context.
uint64_t FloatRegBits
Definition: registers.hh:51
virtual int cpuId() const =0
virtual void setProcessPtr(Process *p)=0
FloatReg readFloatRegFlat(int idx)
virtual void pcStateNoRecord(const TheISA::PCState &val)=0
uint64_t Tick
Tick count type.
Definition: types.hh:63
TheISA::FloatRegBits FloatRegBits
virtual TheISA::TLB * getDTBPtr()=0
virtual unsigned readStCondFailures()=0
void setFloatRegBitsFlat(int idx, FloatRegBits val)
int flattenCCIndex(int reg)
CCReg readCCRegFlat(int idx)
virtual Addr nextInstAddr()=0
void syscall(int64_t callnum, Fault *fault)
PortProxy & getPhysProxy()
virtual void suspend()=0
Set the status to Suspended.
void setThreadId(int id)
EndQuiesceEvent * getQuiesceEvent()
uint16_t MicroPC
Definition: types.hh:144
void suspend()
Set the status to Suspended.
void setNPC(Addr val)
virtual void setThreadId(int id)=0
virtual SETranslatingPortProxy & getMemProxy()=0
virtual MicroPC microPC()=0
virtual int flattenIntIndex(int reg)=0
TheISA::FloatReg FloatReg
double FloatReg
Definition: registers.hh:50
virtual void activate()=0
Set the status to Active.
void initMemProxies(ThreadContext *tc)
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
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
uint64_t readIntRegFlat(int idx)
Flat register interfaces.
int64_t Counter
Statistics counter type.
Definition: types.hh:58
FloatReg readFloatReg(int reg_idx)
virtual void setCCRegFlat(int idx, CCReg val)=0
CheckerCPU * getCheckerCpuPtr()
virtual int flattenCCIndex(int reg)=0
uint32_t socketId() const
int threadId() const
Process * getProcessPtr()
uint64_t IntReg
Definition: registers.hh:47
virtual void profileSample()=0
virtual MiscReg readMiscReg(int misc_reg)=0
Bitfield< 3 > one
Definition: ps2.hh:79
void serialize(ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
This object is a proxy for a structural port, to be used for debug accesses.
Definition: port_proxy.hh:84
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:171
virtual FSTranslatingPortProxy & getVirtProxy()=0
void halt()
Set the status to Halted.
Status status() const
virtual CheckerCPU * getCheckerCpuPtr()=0
virtual FloatReg readFloatRegFlat(int idx)=0
virtual FloatReg readFloatReg(int reg_idx)=0
void setStCondFailures(unsigned sc_failures)
virtual void setContextId(int id)=0
std::ostream CheckpointOut
Definition: serialize.hh:67
void pcStateNoRecord(const TheISA::PCState &val)
virtual void takeOverFrom(ThreadContext *old_context)=0
Permanently shut down.
FSTranslatingPortProxy & getVirtProxy()
TheISA::CCReg CCReg
MiscReg readMiscReg(int misc_reg)
static void compare(ThreadContext *one, ThreadContext *two)
function to compare two thread contexts (for debugging)
virtual void copyArchRegs(ThreadContext *tc)=0
void takeOverFrom(ThreadContext &new_tc, ThreadContext &old_tc)
Copy state between thread contexts in preparation for CPU handover.
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
FloatRegBits readFloatRegBitsFlat(int idx)
virtual int threadId() const =0
virtual int contextId() const =0
virtual Tick readLastActivate()=0
virtual uint32_t socketId() const =0
TheISA::Decoder * getDecoderPtr()
virtual Status status() const =0
void setIntRegFlat(int idx, uint64_t val)
virtual void setFloatReg(int reg_idx, FloatReg val)=0
virtual void clearArchRegs()=0
TheISA::IntReg IntReg
TheISA::TLB * getITBPtr()
virtual void setStCondFailures(unsigned sc_failures)=0
virtual int exit()
Temporarily inactive.
void pcState(const TheISA::PCState &val)
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
int contextId() const
MiscReg readMiscRegNoEffect(int misc_reg) const
SETranslatingPortProxy & getMemProxy()
void setMiscReg(int misc_reg, const MiscReg &val)
virtual void setMiscRegNoEffect(int misc_reg, const MiscReg &val)=0
TheISA::MachInst MachInst
virtual void initMemProxies(ThreadContext *tc)=0
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
Bitfield< 0 > p
void setCCReg(int reg_idx, CCReg val)
std::shared_ptr< FaultBase > Fault
Definition: types.hh:184
void setMiscRegNoEffect(int misc_reg, const MiscReg &val)
virtual ~ThreadContext()
FloatRegBits readFloatRegBits(int reg_idx)
virtual uint64_t readRegOtherThread(int misc_reg, ThreadID tid)
void unserialize(ThreadContext &tc, CheckpointIn &cp)
virtual void dumpFuncProfile()=0
virtual TheISA::TLB * getITBPtr()=0
void takeOverFrom(ThreadContext *oldContext)
int flattenFloatIndex(int reg)
void activate()
Set the status to Active.
virtual TheISA::Kernel::Statistics * getKernelStats()=0

Generated on Fri Jun 9 2017 13:03:42 for gem5 by doxygen 1.8.6