gem5  v20.0.0.2
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, 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) 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 
48 #ifndef __CPU_MINOR_EXEC_CONTEXT_HH__
49 #define __CPU_MINOR_EXEC_CONTEXT_HH__
50 
51 #include "cpu/exec_context.hh"
52 #include "cpu/minor/execute.hh"
53 #include "cpu/minor/pipeline.hh"
54 #include "cpu/base.hh"
55 #include "cpu/simple_thread.hh"
56 #include "mem/request.hh"
57 #include "debug/MinorExecute.hh"
58 
59 namespace Minor
60 {
61 
62 /* Forward declaration of Execute */
63 class Execute;
64 
69 class ExecContext : public ::ExecContext
70 {
71  public:
73 
76 
79 
82 
84  MinorCPU &cpu_,
85  SimpleThread &thread_, Execute &execute_,
86  MinorDynInstPtr inst_) :
87  cpu(cpu_),
88  thread(thread_),
89  execute(execute_),
90  inst(inst_)
91  {
92  DPRINTF(MinorExecute, "ExecContext setting PC: %s\n", inst->pc);
93  pcState(inst->pc);
94  setPredicate(inst->readPredicate());
95  setMemAccPredicate(inst->readMemAccPredicate());
96  thread.setIntReg(TheISA::ZeroReg, 0);
97  }
98 
100  {
101  inst->setPredicate(readPredicate());
102  inst->setMemAccPredicate(readMemAccPredicate());
103  }
104 
105  Fault
106  initiateMemRead(Addr addr, unsigned int size,
107  Request::Flags flags,
108  const std::vector<bool>& byte_enable =
109  std::vector<bool>()) override
110  {
111  assert(byte_enable.empty() || byte_enable.size() == size);
112  return execute.getLSQ().pushRequest(inst, true /* load */, nullptr,
113  size, addr, flags, nullptr, nullptr, byte_enable);
114  }
115 
116  Fault
117  writeMem(uint8_t *data, unsigned int size, Addr addr,
118  Request::Flags flags, uint64_t *res,
119  const std::vector<bool>& byte_enable = std::vector<bool>())
120  override
121  {
122  assert(byte_enable.empty() || byte_enable.size() == size);
123  return execute.getLSQ().pushRequest(inst, false /* store */, data,
124  size, addr, flags, res, nullptr, byte_enable);
125  }
126 
127  Fault
128  initiateMemAMO(Addr addr, unsigned int size, Request::Flags flags,
129  AtomicOpFunctorPtr amo_op) override
130  {
131  // AMO requests are pushed through the store path
132  return execute.getLSQ().pushRequest(inst, false /* amo */, nullptr,
133  size, addr, flags, nullptr, std::move(amo_op));
134  }
135 
136  RegVal
137  readIntRegOperand(const StaticInst *si, int idx) override
138  {
139  const RegId& reg = si->srcRegIdx(idx);
140  assert(reg.isIntReg());
141  return thread.readIntReg(reg.index());
142  }
143 
144  RegVal
145  readFloatRegOperandBits(const StaticInst *si, int idx) override
146  {
147  const RegId& reg = si->srcRegIdx(idx);
148  assert(reg.isFloatReg());
149  return thread.readFloatReg(reg.index());
150  }
151 
153  readVecRegOperand(const StaticInst *si, int idx) const override
154  {
155  const RegId& reg = si->srcRegIdx(idx);
156  assert(reg.isVecReg());
157  return thread.readVecReg(reg);
158  }
159 
161  getWritableVecRegOperand(const StaticInst *si, int idx) override
162  {
163  const RegId& reg = si->destRegIdx(idx);
164  assert(reg.isVecReg());
165  return thread.getWritableVecReg(reg);
166  }
167 
169  readVecElemOperand(const StaticInst *si, int idx) const override
170  {
171  const RegId& reg = si->srcRegIdx(idx);
172  assert(reg.isVecElem());
173  return thread.readVecElem(reg);
174  }
175 
177  readVecPredRegOperand(const StaticInst *si, int idx) const override
178  {
179  const RegId& reg = si->srcRegIdx(idx);
180  assert(reg.isVecPredReg());
181  return thread.readVecPredReg(reg);
182  }
183 
185  getWritableVecPredRegOperand(const StaticInst *si, int idx) override
186  {
187  const RegId& reg = si->destRegIdx(idx);
188  assert(reg.isVecPredReg());
189  return thread.getWritableVecPredReg(reg);
190  }
191 
192  void
193  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
194  {
195  const RegId& reg = si->destRegIdx(idx);
196  assert(reg.isIntReg());
197  thread.setIntReg(reg.index(), val);
198  }
199 
200  void
201  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
202  {
203  const RegId& reg = si->destRegIdx(idx);
204  assert(reg.isFloatReg());
205  thread.setFloatReg(reg.index(), val);
206  }
207 
208  void
209  setVecRegOperand(const StaticInst *si, int idx,
210  const TheISA::VecRegContainer& val) override
211  {
212  const RegId& reg = si->destRegIdx(idx);
213  assert(reg.isVecReg());
214  thread.setVecReg(reg, val);
215  }
216 
217  void
219  const TheISA::VecPredRegContainer& val) override
220  {
221  const RegId& reg = si->destRegIdx(idx);
222  assert(reg.isVecPredReg());
223  thread.setVecPredReg(reg, val);
224  }
225 
230  readVec8BitLaneOperand(const StaticInst *si, int idx) const
231  override
232  {
233  const RegId& reg = si->srcRegIdx(idx);
234  assert(reg.isVecReg());
235  return thread.readVec8BitLaneReg(reg);
236  }
237 
240  readVec16BitLaneOperand(const StaticInst *si, int idx) const
241  override
242  {
243  const RegId& reg = si->srcRegIdx(idx);
244  assert(reg.isVecReg());
245  return thread.readVec16BitLaneReg(reg);
246  }
247 
250  readVec32BitLaneOperand(const StaticInst *si, int idx) const
251  override
252  {
253  const RegId& reg = si->srcRegIdx(idx);
254  assert(reg.isVecReg());
255  return thread.readVec32BitLaneReg(reg);
256  }
257 
260  readVec64BitLaneOperand(const StaticInst *si, int idx) const
261  override
262  {
263  const RegId& reg = si->srcRegIdx(idx);
264  assert(reg.isVecReg());
265  return thread.readVec64BitLaneReg(reg);
266  }
267 
269  template <typename LD>
270  void
271  setVecLaneOperandT(const StaticInst *si, int idx, const LD& val)
272  {
273  const RegId& reg = si->destRegIdx(idx);
274  assert(reg.isVecReg());
275  return thread.setVecLane(reg, val);
276  }
277  virtual void
278  setVecLaneOperand(const StaticInst *si, int idx,
279  const LaneData<LaneSize::Byte>& val) override
280  {
281  setVecLaneOperandT(si, idx, val);
282  }
283  virtual void
284  setVecLaneOperand(const StaticInst *si, int idx,
285  const LaneData<LaneSize::TwoByte>& val) override
286  {
287  setVecLaneOperandT(si, idx, val);
288  }
289  virtual void
290  setVecLaneOperand(const StaticInst *si, int idx,
291  const LaneData<LaneSize::FourByte>& val) override
292  {
293  setVecLaneOperandT(si, idx, val);
294  }
295  virtual void
296  setVecLaneOperand(const StaticInst *si, int idx,
297  const LaneData<LaneSize::EightByte>& val) override
298  {
299  setVecLaneOperandT(si, idx, val);
300  }
303  void
304  setVecElemOperand(const StaticInst *si, int idx,
305  const TheISA::VecElem val) override
306  {
307  const RegId& reg = si->destRegIdx(idx);
308  assert(reg.isVecElem());
309  thread.setVecElem(reg, val);
310  }
311 
312  bool
313  readPredicate() const override
314  {
315  return thread.readPredicate();
316  }
317 
318  void
319  setPredicate(bool val) override
320  {
321  thread.setPredicate(val);
322  }
323 
324  bool
325  readMemAccPredicate() const override
326  {
327  return thread.readMemAccPredicate();
328  }
329 
330  void
331  setMemAccPredicate(bool val) override
332  {
333  thread.setMemAccPredicate(val);
334  }
335 
337  pcState() const override
338  {
339  return thread.pcState();
340  }
341 
342  void
343  pcState(const TheISA::PCState &val) override
344  {
345  thread.pcState(val);
346  }
347 
348  RegVal
349  readMiscRegNoEffect(int misc_reg) const
350  {
351  return thread.readMiscRegNoEffect(misc_reg);
352  }
353 
354  RegVal
355  readMiscReg(int misc_reg) override
356  {
357  return thread.readMiscReg(misc_reg);
358  }
359 
360  void
361  setMiscReg(int misc_reg, RegVal val) override
362  {
363  thread.setMiscReg(misc_reg, val);
364  }
365 
366  RegVal
367  readMiscRegOperand(const StaticInst *si, int idx) override
368  {
369  const RegId& reg = si->srcRegIdx(idx);
370  assert(reg.isMiscReg());
371  return thread.readMiscReg(reg.index());
372  }
373 
374  void
375  setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
376  {
377  const RegId& reg = si->destRegIdx(idx);
378  assert(reg.isMiscReg());
379  return thread.setMiscReg(reg.index(), val);
380  }
381 
382  void
383  syscall(Fault *fault) override
384  {
385  thread.syscall(fault);
386  }
387 
388  ThreadContext *tcBase() const override { return thread.getTC(); }
389 
390  /* @todo, should make stCondFailures persistent somewhere */
391  unsigned int readStCondFailures() const override { return 0; }
392  void setStCondFailures(unsigned int st_cond_failures) override {}
393 
394  ContextID contextId() { return thread.contextId(); }
395  /* ISA-specific (or at least currently ISA singleton) functions */
396 
397  /* X86: TLB twiddling */
398  void
399  demapPage(Addr vaddr, uint64_t asn) override
400  {
401  thread.getITBPtr()->demapPage(vaddr, asn);
402  thread.getDTBPtr()->demapPage(vaddr, asn);
403  }
404 
405  RegVal
406  readCCRegOperand(const StaticInst *si, int idx) override
407  {
408  const RegId& reg = si->srcRegIdx(idx);
409  assert(reg.isCCReg());
410  return thread.readCCReg(reg.index());
411  }
412 
413  void
414  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
415  {
416  const RegId& reg = si->destRegIdx(idx);
417  assert(reg.isCCReg());
418  thread.setCCReg(reg.index(), val);
419  }
420 
421  void
422  demapInstPage(Addr vaddr, uint64_t asn)
423  {
424  thread.getITBPtr()->demapPage(vaddr, asn);
425  }
426 
427  void
428  demapDataPage(Addr vaddr, uint64_t asn)
429  {
430  thread.getDTBPtr()->demapPage(vaddr, asn);
431  }
432 
433  BaseCPU *getCpuPtr() { return &cpu; }
434 
435  public:
436  // monitor/mwait funtions
437  void armMonitor(Addr address) override
438  { getCpuPtr()->armMonitor(inst->id.threadId, address); }
439 
440  bool mwait(PacketPtr pkt) override
441  { return getCpuPtr()->mwait(inst->id.threadId, pkt); }
442 
443  void mwaitAtomic(ThreadContext *tc) override
444  { return getCpuPtr()->mwaitAtomic(inst->id.threadId, tc, thread.dtb); }
445 
447  { return getCpuPtr()->getCpuAddrMonitor(inst->id.threadId); }
448 };
449 
450 }
451 
452 #endif /* __CPU_MINOR_EXEC_CONTEXT_HH__ */
#define DPRINTF(x,...)
Definition: trace.hh:222
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:87
Execute stage.
Definition: execute.hh:60
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
Definition: base.hh:610
bool isMiscReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:161
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:330
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:228
ContextID contextId() const override
LSQ & getLSQ()
To allow ExecContext to find the LSQ.
Definition: execute.hh:329
void setMemAccPredicate(bool val) override
MinorDynInstPtr inst
Instruction for the benefit of memory operations and for PC.
Definition: exec_context.hh:81
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:78
uint64_t RegVal
Definition: types.hh:166
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i&#39;th source reg.
Definition: static_inst.hh:222
Minor contains all the definitions within the MinorCPU apart from the CPU class itself.
Definition: activity.cc:44
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
void setMemAccPredicate(bool val)
uint32_t VecElem
Definition: registers.hh:68
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:69
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:769
VecRegContainer & getWritableVecReg(const RegId &reg) override
void armMonitor(ThreadID tid, Addr address)
Definition: base.cc:210
bool isCCReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:158
Bitfield< 15, 0 > si
Definition: types.hh:53
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:152
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:458
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.
TheISA::VecPredRegContainer & getWritableVecPredRegOperand(const StaticInst *si, int idx) override
Gets destination predicate register operand for modification.
RegVal readCCRegOperand(const StaticInst *si, int idx) override
void setStCondFailures(unsigned int st_cond_failures) override
Sets the number of consecutive store conditional failures.
VecPredReg::Container VecPredRegContainer
Definition: registers.hh:77
void pcState(const TheISA::PCState &val) override
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:1586
void demapDataPage(Addr vaddr, uint64_t asn)
bool isIntReg() const
Definition: reg_class.hh:143
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseTLB *dtb)
Definition: base.cc:245
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:146
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:140
ThreadContext * getTC()
Returns the pointer to this SimpleThread&#39;s ThreadContext.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:249
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:149
bool readPredicate() const override
BaseCPU * getCpuPtr()
ContextID contextId()
bool mwait(ThreadID tid, PacketPtr pkt)
Definition: base.cc:222
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:75
VecReg::Container VecRegContainer
Definition: registers.hh:71
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:85
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:173
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.
ThreadContext * tcBase() const override
Returns a pointer to the ThreadContext.
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:218
ExecContext(MinorCPU &cpu_, SimpleThread &thread_, Execute &execute_, MinorDynInstPtr inst_)
Definition: exec_context.hh:83
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:75
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
const int ZeroReg
Definition: registers.hh:118
bool isVecPredReg() const
true if it is a predicate physical register.
Definition: reg_class.hh:155
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:77
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
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
const char data[]
std::shared_ptr< FaultBase > Fault
Definition: types.hh:238
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:229
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 Mon Jun 8 2020 15:45:08 for gem5 by doxygen 1.8.13