gem5  v20.0.0.2
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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 
46 namespace ArmISA
47 {
48 
49 class MightBeMicro : public PredOp
50 {
51  protected:
52  MightBeMicro(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
53  : PredOp(mnem, _machInst, __opClass)
54  {}
55 
56  void
57  advancePC(PCState &pcState) const
58  {
59  if (flags[IsLastMicroop]) {
60  pcState.uEnd();
61  } else if (flags[IsMicroop]) {
62  pcState.uAdvance();
63  } else {
64  pcState.advance();
65  }
66  }
67 };
68 
69 // The address is a base register plus an immediate.
70 class RfeOp : public MightBeMicro
71 {
72  public:
73  enum AddrMode {
77  IncrementBefore
78  };
79  protected:
82  bool wb;
83  IntRegIndex ura, urb, urc;
84  static const unsigned numMicroops = 3;
85 
87 
88  RfeOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
89  IntRegIndex _base, AddrMode _mode, bool _wb)
90  : MightBeMicro(mnem, _machInst, __opClass),
91  base(_base), mode(_mode), wb(_wb),
92  ura(INTREG_UREG0), urb(INTREG_UREG1),
93  urc(INTREG_UREG2),
94  uops(NULL)
95  {}
96 
97  virtual
99  {
100  delete [] uops;
101  }
102 
104  fetchMicroop(MicroPC microPC) const override
105  {
106  assert(uops != NULL && microPC < numMicroops);
107  return uops[microPC];
108  }
109 
110  std::string generateDisassembly(
111  Addr pc, const Loader::SymbolTable *symtab) const override;
112 };
113 
114 // The address is a base register plus an immediate.
115 class SrsOp : public MightBeMicro
116 {
117  public:
118  enum AddrMode {
122  IncrementBefore
123  };
124  protected:
125  uint32_t regMode;
127  bool wb;
128  static const unsigned numMicroops = 2;
129 
131 
132  SrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
133  uint32_t _regMode, AddrMode _mode, bool _wb)
134  : MightBeMicro(mnem, _machInst, __opClass),
135  regMode(_regMode), mode(_mode), wb(_wb), uops(NULL)
136  {}
137 
138  virtual
140  {
141  delete [] uops;
142  }
143 
145  fetchMicroop(MicroPC microPC) const override
146  {
147  assert(uops != NULL && microPC < numMicroops);
148  return uops[microPC];
149  }
150 
151  std::string generateDisassembly(
152  Addr pc, const Loader::SymbolTable *symtab) const override;
153 };
154 
155 class Memory : public MightBeMicro
156 {
157  public:
158  enum AddrMode {
161  AddrMd_PostIndex
162  };
163 
164  protected:
165 
168  bool add;
169  static const unsigned numMicroops = 3;
170 
172 
173  Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
174  IntRegIndex _dest, IntRegIndex _base, bool _add)
175  : MightBeMicro(mnem, _machInst, __opClass),
176  dest(_dest), base(_base), add(_add), uops(NULL)
177  {}
178 
179  virtual
181  {
182  delete [] uops;
183  }
184 
186  fetchMicroop(MicroPC microPC) const override
187  {
188  assert(uops != NULL && microPC < numMicroops);
189  return uops[microPC];
190  }
191 
192  virtual void
193  printOffset(std::ostream &os) const
194  {}
195 
196  virtual void
197  printDest(std::ostream &os) const
198  {
199  printIntReg(os, dest);
200  }
201 
202  void printInst(std::ostream &os, AddrMode addrMode) const;
203 };
204 
205 // The address is a base register plus an immediate.
206 class MemoryImm : public Memory
207 {
208  protected:
209  int32_t imm;
210 
211  MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
212  IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm)
213  : Memory(mnem, _machInst, __opClass, _dest, _base, _add), imm(_imm)
214  {}
215 
216  void
217  printOffset(std::ostream &os) const
218  {
219  int32_t pImm = imm;
220  if (!add)
221  pImm = -pImm;
222  ccprintf(os, "#%d", pImm);
223  }
224 };
225 
226 class MemoryExImm : public MemoryImm
227 {
228  protected:
230 
231  MemoryExImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
232  IntRegIndex _result, IntRegIndex _dest, IntRegIndex _base,
233  bool _add, int32_t _imm)
234  : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm),
235  result(_result)
236  {}
237 
238  void
239  printDest(std::ostream &os) const
240  {
241  printIntReg(os, result);
242  os << ", ";
244  }
245 };
246 
247 // The address is a base register plus an immediate.
248 class MemoryDImm : public MemoryImm
249 {
250  protected:
252 
253  MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
254  IntRegIndex _dest, IntRegIndex _dest2,
255  IntRegIndex _base, bool _add, int32_t _imm)
256  : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm),
257  dest2(_dest2)
258  {}
259 
260  void
261  printDest(std::ostream &os) const
262  {
264  os << ", ";
265  printIntReg(os, dest2);
266  }
267 };
268 
269 class MemoryExDImm : public MemoryDImm
270 {
271  protected:
273 
274  MemoryExDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
275  IntRegIndex _result, IntRegIndex _dest, IntRegIndex _dest2,
276  IntRegIndex _base, bool _add, int32_t _imm)
277  : MemoryDImm(mnem, _machInst, __opClass, _dest, _dest2,
278  _base, _add, _imm), result(_result)
279  {}
280 
281  void
282  printDest(std::ostream &os) const
283  {
284  printIntReg(os, result);
285  os << ", ";
287  }
288 };
289 
290 // The address is a shifted register plus an immediate
291 class MemoryReg : public Memory
292 {
293  protected:
294  int32_t shiftAmt;
297 
298  MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
299  IntRegIndex _dest, IntRegIndex _base, bool _add,
300  int32_t _shiftAmt, ArmShiftType _shiftType,
301  IntRegIndex _index)
302  : Memory(mnem, _machInst, __opClass, _dest, _base, _add),
303  shiftAmt(_shiftAmt), shiftType(_shiftType), index(_index)
304  {}
305 
306  void printOffset(std::ostream &os) const;
307 };
308 
309 class MemoryDReg : public MemoryReg
310 {
311  protected:
313 
314  MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
315  IntRegIndex _dest, IntRegIndex _dest2,
316  IntRegIndex _base, bool _add,
317  int32_t _shiftAmt, ArmShiftType _shiftType,
318  IntRegIndex _index)
319  : MemoryReg(mnem, _machInst, __opClass, _dest, _base, _add,
320  _shiftAmt, _shiftType, _index),
321  dest2(_dest2)
322  {}
323 
324  void
325  printDest(std::ostream &os) const
326  {
328  os << ", ";
329  printIntReg(os, dest2);
330  }
331 };
332 
333 template<class Base>
334 class MemoryOffset : public Base
335 {
336  protected:
337  MemoryOffset(const char *mnem, ExtMachInst _machInst,
338  OpClass __opClass, IntRegIndex _dest, IntRegIndex _base,
339  bool _add, int32_t _imm)
340  : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
341  {}
342 
343  MemoryOffset(const char *mnem, ExtMachInst _machInst,
344  OpClass __opClass, IntRegIndex _dest, IntRegIndex _base,
345  bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
346  IntRegIndex _index)
347  : Base(mnem, _machInst, __opClass, _dest, _base, _add,
348  _shiftAmt, _shiftType, _index)
349  {}
350 
351  MemoryOffset(const char *mnem, ExtMachInst _machInst,
352  OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2,
353  IntRegIndex _base, bool _add, int32_t _imm)
354  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
355  {}
356 
357  MemoryOffset(const char *mnem, ExtMachInst _machInst,
358  OpClass __opClass, IntRegIndex _result,
359  IntRegIndex _dest, IntRegIndex _dest2,
360  IntRegIndex _base, bool _add, int32_t _imm)
361  : Base(mnem, _machInst, __opClass, _result,
362  _dest, _dest2, _base, _add, _imm)
363  {}
364 
365  MemoryOffset(const char *mnem, ExtMachInst _machInst,
366  OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2,
367  IntRegIndex _base, bool _add,
368  int32_t _shiftAmt, ArmShiftType _shiftType,
369  IntRegIndex _index)
370  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
371  _shiftAmt, _shiftType, _index)
372  {}
373 
374  std::string
376  {
377  std::stringstream ss;
378  this->printInst(ss, Memory::AddrMd_Offset);
379  return ss.str();
380  }
381 };
382 
383 template<class Base>
384 class MemoryPreIndex : public Base
385 {
386  protected:
387  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
388  OpClass __opClass, IntRegIndex _dest, IntRegIndex _base,
389  bool _add, int32_t _imm)
390  : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
391  {}
392 
393  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
394  OpClass __opClass, IntRegIndex _dest, IntRegIndex _base,
395  bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
396  IntRegIndex _index)
397  : Base(mnem, _machInst, __opClass, _dest, _base, _add,
398  _shiftAmt, _shiftType, _index)
399  {}
400 
401  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
402  OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2,
403  IntRegIndex _base, bool _add, int32_t _imm)
404  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
405  {}
406 
407  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
408  OpClass __opClass, IntRegIndex _result,
409  IntRegIndex _dest, IntRegIndex _dest2,
410  IntRegIndex _base, bool _add, int32_t _imm)
411  : Base(mnem, _machInst, __opClass, _result,
412  _dest, _dest2, _base, _add, _imm)
413  {}
414 
415  MemoryPreIndex(const char *mnem, ExtMachInst _machInst,
416  OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2,
417  IntRegIndex _base, bool _add,
418  int32_t _shiftAmt, ArmShiftType _shiftType,
419  IntRegIndex _index)
420  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
421  _shiftAmt, _shiftType, _index)
422  {}
423 
424  std::string
426  {
427  std::stringstream ss;
428  this->printInst(ss, Memory::AddrMd_PreIndex);
429  return ss.str();
430  }
431 };
432 
433 template<class Base>
434 class MemoryPostIndex : public Base
435 {
436  protected:
437  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
438  OpClass __opClass, IntRegIndex _dest, IntRegIndex _base,
439  bool _add, int32_t _imm)
440  : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
441  {}
442 
443  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
444  OpClass __opClass, IntRegIndex _dest, IntRegIndex _base,
445  bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
446  IntRegIndex _index)
447  : Base(mnem, _machInst, __opClass, _dest, _base, _add,
448  _shiftAmt, _shiftType, _index)
449  {}
450 
451  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
452  OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2,
453  IntRegIndex _base, bool _add, int32_t _imm)
454  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
455  {}
456 
457  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
458  OpClass __opClass, IntRegIndex _result,
459  IntRegIndex _dest, IntRegIndex _dest2,
460  IntRegIndex _base, bool _add, int32_t _imm)
461  : Base(mnem, _machInst, __opClass, _result,
462  _dest, _dest2, _base, _add, _imm)
463  {}
464 
465  MemoryPostIndex(const char *mnem, ExtMachInst _machInst,
466  OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2,
467  IntRegIndex _base, bool _add,
468  int32_t _shiftAmt, ArmShiftType _shiftType,
469  IntRegIndex _index)
470  : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
471  _shiftAmt, _shiftType, _index)
472  {}
473 
474  std::string
476  {
477  std::stringstream ss;
478  this->printInst(ss, Memory::AddrMd_PostIndex);
479  return ss.str();
480  }
481 };
482 }
483 
484 #endif //__ARCH_ARM_INSTS_MEM_HH__
void ccprintf(cp::Print &print)
Definition: cprintf.hh:127
void advancePC(PCState &pcState) const
Definition: mem.hh:57
virtual ~SrsOp()
Definition: mem.hh:139
int32_t imm
Definition: mem.hh:209
IntRegIndex
Definition: intregs.hh:51
ArmShiftType shiftType
Definition: mem.hh:295
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:365
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _result, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:457
bool add
Definition: mem.hh:168
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:343
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
Definition: mem.hh:186
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _result, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:357
virtual void printDest(std::ostream &os) const
Definition: mem.hh:197
virtual ~Memory()
Definition: mem.hh:180
StaticInstPtr * uops
Definition: mem.hh:130
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const
Definition: mem.hh:425
Base class for predicated integer operations.
Definition: pred_inst.hh:210
IntRegIndex result
Definition: mem.hh:229
void printOffset(std::ostream &os) const
Definition: mem.hh:217
Definition: ccregs.hh:41
IntRegIndex result
Definition: mem.hh:272
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:393
bool wb
Definition: mem.hh:82
SrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regMode, AddrMode _mode, bool _wb)
Definition: mem.hh:132
Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add)
Definition: mem.hh:173
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:351
Bitfield< 17 > os
Definition: misc.hh:803
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:451
AddrMode mode
Definition: mem.hh:81
void printDest(std::ostream &os) const
Definition: mem.hh:325
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:443
IntRegIndex dest
Definition: mem.hh:166
virtual ~RfeOp()
Definition: mem.hh:98
std::bitset< Num_Flags > flags
Flag values for this instruction.
Definition: static_inst.hh:99
Bitfield< 4 > pc
IntRegIndex base
Definition: mem.hh:80
void printDest(std::ostream &os) const
Definition: mem.hh:261
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:294
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const
Definition: mem.hh:375
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
Definition: mem.hh:145
uint16_t MicroPC
Definition: types.hh:142
void printDest(std::ostream &os) const
Definition: mem.hh:282
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:437
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: static_inst.cc:621
Bitfield< 21 > ss
MightBeMicro(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition: mem.hh:52
IntRegIndex base
Definition: mem.hh:167
void printDest(std::ostream &os) const
Definition: mem.hh:239
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:337
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:140
Bitfield< 7, 0 > imm
Definition: types.hh:140
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:465
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:415
IntRegIndex index
Definition: mem.hh:296
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _result, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:407
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:387
uint32_t regMode
Definition: mem.hh:125
IntRegIndex dest2
Definition: mem.hh:312
MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:314
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const
Definition: mem.hh:475
MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:253
MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:211
IntRegIndex urc
Definition: mem.hh:83
MemoryExDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _result, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:274
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:401
MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, IntRegIndex _index)
Definition: mem.hh:298
StaticInstPtr * uops
Definition: mem.hh:86
virtual void printOffset(std::ostream &os) const
Definition: mem.hh:193
TheISA::ExtMachInst ExtMachInst
Binary extended machine instruction type.
Definition: static_inst.hh:89
MemoryExImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _result, IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm)
Definition: mem.hh:231
AddrMode mode
Definition: mem.hh:126
IntRegIndex dest2
Definition: mem.hh:251
int32_t shiftAmt
Definition: mem.hh:294
StaticInstPtr * uops
Definition: mem.hh:171
RfeOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, IntRegIndex _base, AddrMode _mode, bool _wb)
Definition: mem.hh:88
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
bool wb
Definition: mem.hh:127
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
Definition: mem.hh:104
ArmShiftType
Definition: types.hh:529

Generated on Mon Jun 8 2020 15:34:39 for gem5 by doxygen 1.8.13