gem5  v22.1.0.0
mem.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2007-2008 The Florida State University
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions are
19  * met: redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer;
21  * redistributions in binary form must reproduce the above copyright
22  * notice, this list of conditions and the following disclaimer in the
23  * documentation and/or other materials provided with the distribution;
24  * neither the name of the copyright holders nor the names of its
25  * contributors may be used to endorse or promote products derived from
26  * this software without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  */
40 
41 #ifndef __ARCH_ARM_MEM_HH__
42 #define __ARCH_ARM_MEM_HH__
43 
45 #include "arch/arm/pcstate.hh"
46 #include "cpu/thread_context.hh"
47 
48 namespace gem5
49 {
50 
51 namespace ArmISA
52 {
53 
54 class MightBeMicro : public PredOp
55 {
56  protected:
57  MightBeMicro(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
58  : PredOp(mnem, _machInst, __opClass)
59  {}
60 
61  void
62  advancePC(PCStateBase &pcState) const override
63  {
64  auto &apc = pcState.as<PCState>();
65  if (flags[IsLastMicroop]) {
66  apc.uEnd();
67  } else if (flags[IsMicroop]) {
68  apc.uAdvance();
69  } else {
70  apc.advance();
71  }
72  }
73 
74  void
75  advancePC(ThreadContext *tc) const override
76  {
77  PCState pc = tc->pcState().as<PCState>();
78  if (flags[IsLastMicroop]) {
79  pc.uEnd();
80  } else if (flags[IsMicroop]) {
81  pc.uAdvance();
82  } else {
83  pc.advance();
84  }
85  tc->pcState(pc);
86  }
87 };
88 
89 // The address is a base register plus an immediate.
90 class RfeOp : public MightBeMicro
91 {
92  public:
93  enum AddrMode
94  {
99  };
100  protected:
103  bool wb;
105  static const unsigned numMicroops = 3;
106 
108 
109  RfeOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
110  RegIndex _base, AddrMode _mode, bool _wb)
111  : MightBeMicro(mnem, _machInst, __opClass),
112  base(_base), mode(_mode), wb(_wb),
113  ura(int_reg::Ureg0), urb(int_reg::Ureg1),
114  urc(int_reg::Ureg2),
115  uops(NULL)
116  {}
117 
118  virtual
120  {
121  delete [] uops;
122  }
123 
125  fetchMicroop(MicroPC microPC) const override
126  {
127  assert(uops != NULL && microPC < numMicroops);
128  return uops[microPC];
129  }
130 
131  std::string generateDisassembly(
132  Addr pc, const loader::SymbolTable *symtab) const override;
133 };
134 
135 // The address is a base register plus an immediate.
136 class SrsOp : public MightBeMicro
137 {
138  public:
139  enum AddrMode
140  {
145  };
146  protected:
147  uint32_t regMode;
149  bool wb;
150  static const unsigned numMicroops = 2;
151 
153 
154  SrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
155  uint32_t _regMode, AddrMode _mode, bool _wb)
156  : MightBeMicro(mnem, _machInst, __opClass),
157  regMode(_regMode), mode(_mode), wb(_wb), uops(NULL)
158  {}
159 
160  virtual
162  {
163  delete [] uops;
164  }
165 
167  fetchMicroop(MicroPC microPC) const override
168  {
169  assert(uops != NULL && microPC < numMicroops);
170  return uops[microPC];
171  }
172 
173  std::string generateDisassembly(
174  Addr pc, const loader::SymbolTable *symtab) const override;
175 };
176 
177 class Memory : public MightBeMicro
178 {
179  public:
180  enum AddrMode
181  {
185  };
186 
187  protected:
188 
191  bool add;
192  static const unsigned numMicroops = 3;
193 
195 
196  Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
197  RegIndex _dest, RegIndex _base, bool _add)
198  : MightBeMicro(mnem, _machInst, __opClass),
199  dest(_dest), base(_base), add(_add), uops(NULL)
200  {}
201 
202  virtual
204  {
205  delete [] uops;
206  }
207 
209  fetchMicroop(MicroPC microPC) const override
210  {
211  assert(uops != NULL && microPC < numMicroops);
212  return uops[microPC];
213  }
214 
215  virtual void
216  printOffset(std::ostream &os) const
217  {}
218 
219  virtual void
220  printDest(std::ostream &os) const
221  {
222  printIntReg(os, dest);
223  }
224 
225  void printInst(std::ostream &os, AddrMode addrMode) const;
226 };
227 
228 // The address is a base register plus an immediate.
229 class MemoryImm : public Memory
230 {
231  protected:
232  int32_t imm;
233 
234  MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
235  RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
236  : Memory(mnem, _machInst, __opClass, _dest, _base, _add), imm(_imm)
237  {}
238 
239  void
240  printOffset(std::ostream &os) const
241  {
242  int32_t pImm = imm;
243  if (!add)
244  pImm = -pImm;
245  ccprintf(os, "#%d", pImm);
246  }
247 };
248 
249 class MemoryExImm : public MemoryImm
250 {
251  protected:
253 
254  MemoryExImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
255  RegIndex _result, RegIndex _dest, RegIndex _base,
256  bool _add, int32_t _imm)
257  : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm),
258  result(_result)
259  {}
260 
261  void
262  printDest(std::ostream &os) const
263  {
265  os << ", ";
267  }
268 };
269 
270 // The address is a base register plus an immediate.
271 class MemoryDImm : public MemoryImm
272 {
273  protected:
275 
276  MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
277  RegIndex _dest, RegIndex _dest2,
278  RegIndex _base, bool _add, int32_t _imm)
279  : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm),
280  dest2(_dest2)
281  {}
282 
283  void
284  printDest(std::ostream &os) const
285  {
287  os << ", ";
288  printIntReg(os, dest2);
289  }
290 };
291 
292 class MemoryExDImm : public MemoryDImm
293 {
294  protected:
296 
297  MemoryExDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
298  RegIndex _result, RegIndex _dest, RegIndex _dest2,
299  RegIndex _base, bool _add, int32_t _imm)
300  : MemoryDImm(mnem, _machInst, __opClass, _dest, _dest2,
301  _base, _add, _imm), result(_result)
302  {}
303 
304  void
305  printDest(std::ostream &os) const
306  {
308  os << ", ";
310  }
311 };
312 
313 // The address is a shifted register plus an immediate
314 class MemoryReg : public Memory
315 {
316  protected:
317  int32_t shiftAmt;
318  ArmShiftType shiftType;
320 
321  MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
322  RegIndex _dest, RegIndex _base, bool _add,
323  int32_t _shiftAmt, ArmShiftType _shiftType,
324  RegIndex _index)
325  : Memory(mnem, _machInst, __opClass, _dest, _base, _add),
326  shiftAmt(_shiftAmt), shiftType(_shiftType), index(_index)
327  {}
328 
329  void printOffset(std::ostream &os) const;
330 };
331 
332 class MemoryDReg : public MemoryReg
333 {
334  protected:
336 
337  MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
338  RegIndex _dest, RegIndex _dest2,
339  RegIndex _base, bool _add,
340  int32_t _shiftAmt, ArmShiftType _shiftType,
341  RegIndex _index)
342  : MemoryReg(mnem, _machInst, __opClass, _dest, _base, _add,
343  _shiftAmt, _shiftType, _index),
344  dest2(_dest2)
345  {}
346 
347  void
348  printDest(std::ostream &os) const
349  {
351  os << ", ";
352  printIntReg(os, dest2);
353  }
354 };
355 
356 template<class Base>
357 class MemoryOffset : public Base
358 {
359  protected:
360  MemoryOffset(const char *mnem, ExtMachInst _machInst,
361  OpClass __opClass, RegIndex _dest, RegIndex _base,
362  bool _add, int32_t _imm)
363  : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
364  {}
365 
366  MemoryOffset(const char *mnem, ExtMachInst _machInst,
367  OpClass __opClass, RegIndex _dest, RegIndex _base,
368  bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
369  RegIndex _index)
370  : Base(mnem, _machInst, __opClass, _dest, _base, _add,
371  _shiftAmt, _shiftType, _index)
372  {}
373 
374  MemoryOffset(const char *mnem, ExtMachInst _machInst,
375  OpClass __opClass, RegIndex _dest, RegIndex _dest2,
376  RegIndex _base, bool _add, int32_t _imm)
377  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
378  {}
379 
380  MemoryOffset(const char *mnem, ExtMachInst _machInst,
381  OpClass __opClass, RegIndex _result,
382  RegIndex _dest, RegIndex _dest2,
383  RegIndex _base, bool _add, int32_t _imm)
384  : Base(mnem, _machInst, __opClass, _result,
385  _dest, _dest2, _base, _add, _imm)
386  {}
387 
388  MemoryOffset(const char *mnem, ExtMachInst _machInst,
389  OpClass __opClass, RegIndex _dest, RegIndex _dest2,
390  RegIndex _base, bool _add,
391  int32_t _shiftAmt, ArmShiftType _shiftType,
392  RegIndex _index)
393  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
394  _shiftAmt, _shiftType, _index)
395  {}
396 
397  std::string
399  const loader::SymbolTable *symtab) const override
400  {
401  std::stringstream ss;
402  this->printInst(ss, Memory::AddrMd_Offset);
403  return ss.str();
404  }
405 };
406 
407 template<class Base>
408 class MemoryPreIndex : public Base
409 {
410  protected:
411  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
412  OpClass __opClass, RegIndex _dest, RegIndex _base,
413  bool _add, int32_t _imm)
414  : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
415  {}
416 
417  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
418  OpClass __opClass, RegIndex _dest, RegIndex _base,
419  bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
420  RegIndex _index)
421  : Base(mnem, _machInst, __opClass, _dest, _base, _add,
422  _shiftAmt, _shiftType, _index)
423  {}
424 
425  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
426  OpClass __opClass, RegIndex _dest, RegIndex _dest2,
427  RegIndex _base, bool _add, int32_t _imm)
428  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
429  {}
430 
431  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
432  OpClass __opClass, RegIndex _result,
433  RegIndex _dest, RegIndex _dest2,
434  RegIndex _base, bool _add, int32_t _imm)
435  : Base(mnem, _machInst, __opClass, _result,
436  _dest, _dest2, _base, _add, _imm)
437  {}
438 
439  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
440  OpClass __opClass, RegIndex _dest, RegIndex _dest2,
441  RegIndex _base, bool _add,
442  int32_t _shiftAmt, ArmShiftType _shiftType,
443  RegIndex _index)
444  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
445  _shiftAmt, _shiftType, _index)
446  {}
447 
448  std::string
450  const loader::SymbolTable *symtab) const override
451  {
452  std::stringstream ss;
453  this->printInst(ss, Memory::AddrMd_PreIndex);
454  return ss.str();
455  }
456 };
457 
458 template<class Base>
459 class MemoryPostIndex : public Base
460 {
461  protected:
462  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
463  OpClass __opClass, RegIndex _dest, RegIndex _base,
464  bool _add, int32_t _imm)
465  : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
466  {}
467 
468  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
469  OpClass __opClass, RegIndex _dest, RegIndex _base,
470  bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
471  RegIndex _index)
472  : Base(mnem, _machInst, __opClass, _dest, _base, _add,
473  _shiftAmt, _shiftType, _index)
474  {}
475 
476  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
477  OpClass __opClass, RegIndex _dest, RegIndex _dest2,
478  RegIndex _base, bool _add, int32_t _imm)
479  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
480  {}
481 
482  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
483  OpClass __opClass, RegIndex _result,
484  RegIndex _dest, RegIndex _dest2,
485  RegIndex _base, bool _add, int32_t _imm)
486  : Base(mnem, _machInst, __opClass, _result,
487  _dest, _dest2, _base, _add, _imm)
488  {}
489 
490  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
491  OpClass __opClass, RegIndex _dest, RegIndex _dest2,
492  RegIndex _base, bool _add,
493  int32_t _shiftAmt, ArmShiftType _shiftType,
494  RegIndex _index)
495  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
496  _shiftAmt, _shiftType, _index)
497  {}
498 
499  std::string
501  const loader::SymbolTable *symtab) const override
502  {
503  std::stringstream ss;
504  this->printInst(ss, Memory::AddrMd_PostIndex);
505  return ss.str();
506  }
507 };
508 
509 } // namespace ArmISA
510 } // namespace gem5
511 
512 #endif //__ARCH_ARM_INSTS_MEM_HH__
void printIntReg(std::ostream &os, RegIndex reg_idx, uint8_t opWidth=0) const
Print a register name for disassembly given the unique dependence tag number (FP or int).
Definition: static_inst.cc:299
MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:276
void printDest(std::ostream &os) const
Definition: mem.hh:284
void printDest(std::ostream &os) const
Definition: mem.hh:348
MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:337
void printDest(std::ostream &os) const
Definition: mem.hh:305
MemoryExDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:297
void printDest(std::ostream &os) const
Definition: mem.hh:262
MemoryExImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:254
void printOffset(std::ostream &os) const
Definition: mem.hh:240
MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:234
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:374
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:388
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Definition: mem.hh:398
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:360
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:366
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:380
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:490
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:468
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:476
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:462
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:482
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Definition: mem.hh:500
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:417
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Definition: mem.hh:449
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:411
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:431
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:425
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:439
ArmShiftType shiftType
Definition: mem.hh:318
void printOffset(std::ostream &os) const
Definition: mem.cc:52
MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
Definition: mem.hh:321
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
Definition: mem.hh:209
void printInst(std::ostream &os, AddrMode addrMode) const
Definition: mem.cc:163
RegIndex base
Definition: mem.hh:190
static const unsigned numMicroops
Definition: mem.hh:192
virtual void printDest(std::ostream &os) const
Definition: mem.hh:220
StaticInstPtr * uops
Definition: mem.hh:194
RegIndex dest
Definition: mem.hh:189
virtual ~Memory()
Definition: mem.hh:203
Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add)
Definition: mem.hh:196
virtual void printOffset(std::ostream &os) const
Definition: mem.hh:216
MightBeMicro(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition: mem.hh:57
void advancePC(ThreadContext *tc) const override
Definition: mem.hh:75
void advancePC(PCStateBase &pcState) const override
Definition: mem.hh:62
Base class for predicated integer operations.
Definition: pred_inst.hh:217
RegIndex urb
Definition: mem.hh:104
RegIndex base
Definition: mem.hh:101
RegIndex ura
Definition: mem.hh:104
StaticInstPtr * uops
Definition: mem.hh:107
RfeOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _base, AddrMode _mode, bool _wb)
Definition: mem.hh:109
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: mem.cc:80
AddrMode mode
Definition: mem.hh:102
static const unsigned numMicroops
Definition: mem.hh:105
RegIndex urc
Definition: mem.hh:104
virtual ~RfeOp()
Definition: mem.hh:119
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
Definition: mem.hh:125
AddrMode mode
Definition: mem.hh:148
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
Definition: mem.hh:167
SrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regMode, AddrMode _mode, bool _wb)
Definition: mem.hh:154
uint32_t regMode
Definition: mem.hh:147
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: mem.cc:105
StaticInstPtr * uops
Definition: mem.hh:152
virtual ~SrsOp()
Definition: mem.hh:161
static const unsigned numMicroops
Definition: mem.hh:150
Target & as()
Definition: pcstate.hh:72
std::bitset< Num_Flags > flags
Flag values for this instruction.
Definition: static_inst.hh:103
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual const PCStateBase & pcState() const =0
constexpr RegId Ureg0
Definition: int.hh:229
constexpr RegId Ureg1
Definition: int.hh:230
constexpr RegId Ureg2
Definition: int.hh:231
Bitfield< 21 > ss
Definition: misc_types.hh:60
Bitfield< 4 > pc
Bitfield< 17 > os
Definition: misc.hh:810
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
uint16_t RegIndex
Definition: types.hh:176
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
uint16_t MicroPC
Definition: types.hh:149
void ccprintf(cp::Print &print)
Definition: cprintf.hh:130

Generated on Wed Dec 21 2022 10:22:25 for gem5 by doxygen 1.9.1