gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
exec_context.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2014, 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) 2002-2005 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  * Dave Greene
43  * Nathan Binkert
44  * Andrew Bardsley
45  */
46 
53 #ifndef __CPU_MINOR_EXEC_CONTEXT_HH__
54 #define __CPU_MINOR_EXEC_CONTEXT_HH__
55 
56 #include "cpu/exec_context.hh"
57 #include "cpu/minor/execute.hh"
58 #include "cpu/minor/pipeline.hh"
59 #include "cpu/base.hh"
60 #include "cpu/simple_thread.hh"
61 #include "mem/request.hh"
62 #include "debug/MinorExecute.hh"
63 
64 namespace Minor
65 {
66 
67 /* Forward declaration of Execute */
68 class Execute;
69 
74 class ExecContext : public ::ExecContext
75 {
76  public:
78 
81 
84 
87 
89  MinorCPU &cpu_,
90  SimpleThread &thread_, Execute &execute_,
91  MinorDynInstPtr inst_) :
92  cpu(cpu_),
93  thread(thread_),
94  execute(execute_),
95  inst(inst_)
96  {
97  DPRINTF(MinorExecute, "ExecContext setting PC: %s\n", inst->pc);
98  pcState(inst->pc);
99  setPredicate(inst->readPredicate());
100  setMemAccPredicate(inst->readMemAccPredicate());
101  thread.setIntReg(TheISA::ZeroReg, 0);
102 #if THE_ISA == ALPHA_ISA
103  thread.setFloatReg(TheISA::ZeroReg, 0);
104 #endif
105  }
106 
108  {
109  inst->setPredicate(readPredicate());
110  inst->setMemAccPredicate(readMemAccPredicate());
111  }
112 
113  Fault
114  initiateMemRead(Addr addr, unsigned int size,
115  Request::Flags flags,
116  const std::vector<bool>& byte_enable =
117  std::vector<bool>()) override
118  {
119  assert(byte_enable.empty() || byte_enable.size() == size);
120  return execute.getLSQ().pushRequest(inst, true /* load */, nullptr,
121  size, addr, flags, nullptr, nullptr, byte_enable);
122  }
123 
124  Fault
125  writeMem(uint8_t *data, unsigned int size, Addr addr,
126  Request::Flags flags, uint64_t *res,
127  const std::vector<bool>& byte_enable = std::vector<bool>())
128  override
129  {
130  assert(byte_enable.empty() || byte_enable.size() == size);
131  return execute.getLSQ().pushRequest(inst, false /* store */, data,
132  size, addr, flags, res, nullptr, byte_enable);
133  }
134 
135  Fault
136  initiateMemAMO(Addr addr, unsigned int size, Request::Flags flags,
137  AtomicOpFunctorPtr amo_op) override
138  {
139  // AMO requests are pushed through the store path
140  return execute.getLSQ().pushRequest(inst, false /* amo */, nullptr,
141  size, addr, flags, nullptr, std::move(amo_op));
142  }
143 
144  RegVal
145  readIntRegOperand(const StaticInst *si, int idx) override
146  {
147  const RegId& reg = si->srcRegIdx(idx);
148  assert(reg.isIntReg());
149  return thread.readIntReg(reg.index());
150  }
151 
152  RegVal
153  readFloatRegOperandBits(const StaticInst *si, int idx) override
154  {
155  const RegId& reg = si->srcRegIdx(idx);
156  assert(reg.isFloatReg());
157  return thread.readFloatReg(reg.index());
158  }
159 
161  readVecRegOperand(const StaticInst *si, int idx) const override
162  {
163  const RegId& reg = si->srcRegIdx(idx);
164  assert(reg.isVecReg());
165  return thread.readVecReg(reg);
166  }
167 
169  getWritableVecRegOperand(const StaticInst *si, int idx) override
170  {
171  const RegId& reg = si->destRegIdx(idx);
172  assert(reg.isVecReg());
173  return thread.getWritableVecReg(reg);
174  }
175 
177  readVecElemOperand(const StaticInst *si, int idx) const override
178  {
179  const RegId& reg = si->srcRegIdx(idx);
180  assert(reg.isVecElem());
181  return thread.readVecElem(reg);
182  }
183 
185  readVecPredRegOperand(const StaticInst *si, int idx) const override
186  {
187  const RegId& reg = si->srcRegIdx(idx);
188  assert(reg.isVecPredReg());
189  return thread.readVecPredReg(reg);
190  }
191 
193  getWritableVecPredRegOperand(const StaticInst *si, int idx) override
194  {
195  const RegId& reg = si->destRegIdx(idx);
196  assert(reg.isVecPredReg());
197  return thread.getWritableVecPredReg(reg);
198  }
199 
200  void
201  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
202  {
203  const RegId& reg = si->destRegIdx(idx);
204  assert(reg.isIntReg());
205  thread.setIntReg(reg.index(), val);
206  }
207 
208  void
209  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
210  {
211  const RegId& reg = si->destRegIdx(idx);
212  assert(reg.isFloatReg());
213  thread.setFloatReg(reg.index(), val);
214  }
215 
216  void
217  setVecRegOperand(const StaticInst *si, int idx,
218  const TheISA::VecRegContainer& val) override
219  {
220  const RegId& reg = si->destRegIdx(idx);
221  assert(reg.isVecReg());
222  thread.setVecReg(reg, val);
223  }
224 
225  void
227  const TheISA::VecPredRegContainer& val) override
228  {
229  const RegId& reg = si->destRegIdx(idx);
230  assert(reg.isVecPredReg());
231  thread.setVecPredReg(reg, val);
232  }
233 
238  readVec8BitLaneOperand(const StaticInst *si, int idx) const
239  override
240  {
241  const RegId& reg = si->srcRegIdx(idx);
242  assert(reg.isVecReg());
243  return thread.readVec8BitLaneReg(reg);
244  }
245 
248  readVec16BitLaneOperand(const StaticInst *si, int idx) const
249  override
250  {
251  const RegId& reg = si->srcRegIdx(idx);
252  assert(reg.isVecReg());
253  return thread.readVec16BitLaneReg(reg);
254  }
255 
258  readVec32BitLaneOperand(const StaticInst *si, int idx) const
259  override
260  {
261  const RegId& reg = si->srcRegIdx(idx);
262  assert(reg.isVecReg());
263  return thread.readVec32BitLaneReg(reg);
264  }
265 
268  readVec64BitLaneOperand(const StaticInst *si, int idx) const
269  override
270  {
271  const RegId& reg = si->srcRegIdx(idx);
272  assert(reg.isVecReg());
273  return thread.readVec64BitLaneReg(reg);
274  }
275 
277  template <typename LD>
278  void
279  setVecLaneOperandT(const StaticInst *si, int idx, const LD& val)
280  {
281  const RegId& reg = si->destRegIdx(idx);
282  assert(reg.isVecReg());
283  return thread.setVecLane(reg, val);
284  }
285  virtual void
286  setVecLaneOperand(const StaticInst *si, int idx,
287  const LaneData<LaneSize::Byte>& val) override
288  {
289  setVecLaneOperandT(si, idx, val);
290  }
291  virtual void
292  setVecLaneOperand(const StaticInst *si, int idx,
293  const LaneData<LaneSize::TwoByte>& val) override
294  {
295  setVecLaneOperandT(si, idx, val);
296  }
297  virtual void
298  setVecLaneOperand(const StaticInst *si, int idx,
299  const LaneData<LaneSize::FourByte>& val) override
300  {
301  setVecLaneOperandT(si, idx, val);
302  }
303  virtual void
304  setVecLaneOperand(const StaticInst *si, int idx,
305  const LaneData<LaneSize::EightByte>& val) override
306  {
307  setVecLaneOperandT(si, idx, val);
308  }
311  void
312  setVecElemOperand(const StaticInst *si, int idx,
313  const TheISA::VecElem val) override
314  {
315  const RegId& reg = si->destRegIdx(idx);
316  assert(reg.isVecElem());
317  thread.setVecElem(reg, val);
318  }
319 
320  bool
321  readPredicate() const override
322  {
323  return thread.readPredicate();
324  }
325 
326  void
327  setPredicate(bool val) override
328  {
329  thread.setPredicate(val);
330  }
331 
332  bool
333  readMemAccPredicate() const override
334  {
335  return thread.readMemAccPredicate();
336  }
337 
338  void
339  setMemAccPredicate(bool val) override
340  {
341  thread.setMemAccPredicate(val);
342  }
343 
345  pcState() const override
346  {
347  return thread.pcState();
348  }
349 
350  void
351  pcState(const TheISA::PCState &val) override
352  {
353  thread.pcState(val);
354  }
355 
356  RegVal
357  readMiscRegNoEffect(int misc_reg) const
358  {
359  return thread.readMiscRegNoEffect(misc_reg);
360  }
361 
362  RegVal
363  readMiscReg(int misc_reg) override
364  {
365  return thread.readMiscReg(misc_reg);
366  }
367 
368  void
369  setMiscReg(int misc_reg, RegVal val) override
370  {
371  thread.setMiscReg(misc_reg, val);
372  }
373 
374  RegVal
375  readMiscRegOperand(const StaticInst *si, int idx) override
376  {
377  const RegId& reg = si->srcRegIdx(idx);
378  assert(reg.isMiscReg());
379  return thread.readMiscReg(reg.index());
380  }
381 
382  void
383  setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
384  {
385  const RegId& reg = si->destRegIdx(idx);
386  assert(reg.isMiscReg());
387  return thread.setMiscReg(reg.index(), val);
388  }
389 
390  void
391  syscall(Fault *fault) override
392  {
393  thread.syscall(fault);
394  }
395 
396  ThreadContext *tcBase() override { return thread.getTC(); }
397 
398  /* @todo, should make stCondFailures persistent somewhere */
399  unsigned int readStCondFailures() const override { return 0; }
400  void setStCondFailures(unsigned int st_cond_failures) override {}
401 
402  ContextID contextId() { return thread.contextId(); }
403  /* ISA-specific (or at least currently ISA singleton) functions */
404 
405  /* X86: TLB twiddling */
406  void
407  demapPage(Addr vaddr, uint64_t asn) override
408  {
409  thread.getITBPtr()->demapPage(vaddr, asn);
410  thread.getDTBPtr()->demapPage(vaddr, asn);
411  }
412 
413  RegVal
414  readCCRegOperand(const StaticInst *si, int idx) override
415  {
416  const RegId& reg = si->srcRegIdx(idx);
417  assert(reg.isCCReg());
418  return thread.readCCReg(reg.index());
419  }
420 
421  void
422  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
423  {
424  const RegId& reg = si->destRegIdx(idx);
425  assert(reg.isCCReg());
426  thread.setCCReg(reg.index(), val);
427  }
428 
429  void
430  demapInstPage(Addr vaddr, uint64_t asn)
431  {
432  thread.getITBPtr()->demapPage(vaddr, asn);
433  }
434 
435  void
436  demapDataPage(Addr vaddr, uint64_t asn)
437  {
438  thread.getDTBPtr()->demapPage(vaddr, asn);
439  }
440 
441  BaseCPU *getCpuPtr() { return &cpu; }
442 
443  public:
444  // monitor/mwait funtions
445  void armMonitor(Addr address) override
446  { getCpuPtr()->armMonitor(inst->id.threadId, address); }
447 
448  bool mwait(PacketPtr pkt) override
449  { return getCpuPtr()->mwait(inst->id.threadId, pkt); }
450 
451  void mwaitAtomic(ThreadContext *tc) override
452  { return getCpuPtr()->mwaitAtomic(inst->id.threadId, tc, thread.dtb); }
453 
455  { return getCpuPtr()->getCpuAddrMonitor(inst->id.threadId); }
456 };
457 
458 }
459 
460 #endif /* __CPU_MINOR_EXEC_CONTEXT_HH__ */
#define DPRINTF(x,...)
Definition: trace.hh:229
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
bool readMemAccPredicate() const override
Bitfield< 5, 3 > reg
Definition: types.hh:89
Execute stage.
Definition: execute.hh:62
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
Definition: base.hh:614
bool isMiscReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:167
void setVecRegOperand(const StaticInst *si, int idx, const TheISA::VecRegContainer &val) override
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::FourByte > &val) override
const TheISA::VecRegContainer & readVecRegOperand(const StaticInst *si, int idx) const override
Vector Register Interfaces.
bool readPredicate() const
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector operand.
RegVal readCCReg(RegIndex reg_idx) const override
RegVal readMiscRegNoEffect(int misc_reg) const
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
All the fun of executing instructions from Decode and sending branch/new instruction stream info...
ip6_addr_t addr
Definition: inet.hh:335
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:230
ContextID contextId() const override
LSQ & getLSQ()
To allow ExecContext to find the LSQ.
Definition: execute.hh:331
void setMemAccPredicate(bool val) override
MinorDynInstPtr inst
Instruction for the benefit of memory operations and for PC.
Definition: exec_context.hh:86
TheISA::PCState pcState() const override
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::EightByte > &val) override
Execute & execute
The execute stage so we can peek at its contents.
Definition: exec_context.hh:83
uint64_t RegVal
Definition: types.hh:168
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
ThreadContext * tcBase() override
Returns a pointer to the ThreadContext.
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i&#39;th source reg.
Definition: static_inst.hh:220
Minor contains all the definitions within the MinorCPU apart from the CPU class itself.
Definition: activity.cc:46
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
void setMemAccPredicate(bool val)
ThreadContext is the external interface to all thread state for anything outside of the CPU...
ConstVecLane16 readVec16BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 16bit operand.
VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
ExecContext bears the exec_context interface for Minor.
Definition: exec_context.hh:74
RegVal readMiscReg(RegIndex misc_reg) override
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Bitfield< 63 > val
Definition: misc.hh:771
VecRegContainer & getWritableVecReg(const RegId &reg) override
void armMonitor(ThreadID tid, Addr address)
Definition: base.cc:214
bool isCCReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:164
Bitfield< 15, 0 > si
Definition: types.hh:55
TheISA::PCState pcState() const override
void setVecElem(const RegId &reg, const VecElem &val) override
virtual ConstVecLane32 readVec32BitLaneReg(const RegId &reg) const override
Reads source vector 32bit operand.
bool isVecElem() const
true if it is a condition-code physical register.
Definition: reg_class.hh:158
Fault initiateMemAMO(Addr addr, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
For timing-mode contexts, initiate an atomic AMO (atomic read-modify-write memory operation) ...
void setIntReg(RegIndex reg_idx, RegVal val) override
void setVecLaneOperandT(const StaticInst *si, int idx, const LD &val)
Write a lane of the destination vector operand.
void syscall(Fault *fault) override
Executes a syscall.
void demapInstPage(Addr vaddr, uint64_t asn)
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:457
virtual ConstVecLane64 readVec64BitLaneReg(const RegId &reg) const override
Reads source vector 64bit operand.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::TwoByte > &val) override
virtual ConstVecLane16 readVec16BitLaneReg(const RegId &reg) const override
Reads source vector 16bit operand.
bool readMemAccPredicate()
void setCCReg(RegIndex reg_idx, RegVal val) override
RegVal readIntReg(RegIndex reg_idx) const override
void setVecElemOperand(const StaticInst *si, int idx, const TheISA::VecElem val) override
Sets a vector register to a value.
void setFloatReg(RegIndex reg_idx, RegVal val) override
RegVal readIntRegOperand(const StaticInst *si, int idx) override
Reads an integer register.
void setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
Sets the bits of a floating point register of single width to a binary value.
::DummyVecPredRegContainer VecPredRegContainer
Definition: registers.hh:60
TheISA::VecPredRegContainer & getWritableVecPredRegOperand(const StaticInst *si, int idx) override
Gets destination predicate register operand for modification.
RegVal readCCRegOperand(const StaticInst *si, int idx) override
::DummyVecRegContainer VecRegContainer
Definition: registers.hh:53
void setStCondFailures(unsigned int st_cond_failures) override
Sets the number of consecutive store conditional failures.
void pcState(const TheISA::PCState &val) override
const RegIndex ZeroReg
Definition: registers.hh:75
const VecPredRegContainer & readVecPredReg(const RegId &reg) const override
Fault pushRequest(MinorDynInstPtr inst, bool isLoad, uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, AtomicOpFunctorPtr amo_op, const std::vector< bool > &byte_enable=std::vector< bool >())
Single interface for readMem/writeMem/amoMem to issue requests into the LSQ.
Definition: lsq.cc:1582
void demapDataPage(Addr vaddr, uint64_t asn)
bool isIntReg() const
Definition: reg_class.hh:149
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseTLB *dtb)
Definition: base.cc:249
BaseTLB * getDTBPtr() override
void setMiscReg(RegIndex misc_reg, RegVal val) override
AddressMonitor * getAddrMonitor() override
RegVal readFloatRegOperandBits(const StaticInst *si, int idx) override
Reads a floating point register in its binary format, instead of by value.
bool isFloatReg() const
Definition: reg_class.hh:152
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.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:255
TheISA::VecElem readVecElemOperand(const StaticInst *si, int idx) const override
Vector Elem Interfaces.
void setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
Sets an integer register to a value.
RegVal readMiscRegOperand(const StaticInst *si, int idx) override
void setVecPredRegOperand(const StaticInst *si, int idx, const TheISA::VecPredRegContainer &val) override
bool isVecReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:155
bool readPredicate() const override
BaseCPU * getCpuPtr()
ContextID contextId()
bool mwait(ThreadID tid, PacketPtr pkt)
Definition: base.cc:226
const TheISA::VecPredRegContainer & readVecPredRegOperand(const StaticInst *si, int idx) const override
Predicate registers interface.
ConstVecLane64 readVec64BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 64bit operand.
Fault initiateMemRead(Addr addr, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Initiate a timing memory read operation.
Fault writeMem(uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable=std::vector< bool >()) override
For atomic-mode contexts, perform an atomic memory write operation.
SimpleThread & thread
ThreadState object, provides all the architectural state.
Definition: exec_context.hh:80
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
const VecElem & readVecElem(const RegId &reg) const override
void armMonitor(Addr address) override
RegVal readFloatReg(RegIndex reg_idx) const override
Base, ISA-independent static instruction class.
Definition: static_inst.hh:83
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:179
void setMiscReg(int misc_reg, RegVal val) override
Sets a miscellaneous register, handling any architectural side effects due to writing that register...
void setPredicate(bool val) override
The constructed pipeline.
void setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
virtual void demapPage(Addr vaddr, uint64_t asn)=0
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i&#39;th destination reg.
Definition: static_inst.hh:216
ExecContext(MinorCPU &cpu_, SimpleThread &thread_, Execute &execute_, MinorDynInstPtr inst_)
Definition: exec_context.hh:88
void setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:79
RegVal readMiscReg(int misc_reg) override
Reads a miscellaneous register, handling any architectural side effects due to reading that register...
void mwaitAtomic(ThreadContext *tc) override
::DummyVecElem VecElem
Definition: registers.hh:50
bool isVecPredReg() const
true if it is a predicate physical register.
Definition: reg_class.hh:161
void setVecReg(const RegId &reg, const VecRegContainer &val) override
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
MinorCPU is an in-order CPU model with four fixed pipeline stages:
Definition: cpu.hh:79
ConstVecLane8 readVec8BitLaneOperand(const StaticInst *si, int idx) const override
Vector Register Lane Interfaces.
TheISA::VecRegContainer & getWritableVecRegOperand(const StaticInst *si, int idx) override
Gets destination vector register operand for modification.
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
const char data[]
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
virtual ConstVecLane8 readVec8BitLaneReg(const RegId &reg) const override
Reads source vector 8bit operand.
ConstVecLane32 readVec32BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 32bit operand.
const VecRegContainer & readVecReg(const RegId &reg) const override
int ContextID
Globally unique thread context ID.
Definition: types.hh:231
BaseTLB * getITBPtr() override
void syscall(Fault *fault) override
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
BaseTLB * dtb
void setPredicate(bool val)
bool mwait(PacketPtr pkt) override

Generated on Fri Feb 28 2020 16:26:59 for gem5 by doxygen 1.8.13