gem5  v22.1.0.0
macromem.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2014 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_MACROMEM_HH__
42 #define __ARCH_ARM_MACROMEM_HH__
43 
45 #include "arch/arm/pcstate.hh"
46 #include "arch/arm/tlb.hh"
47 #include "cpu/thread_context.hh"
48 
49 namespace gem5
50 {
51 
52 namespace ArmISA
53 {
54 
55 static inline unsigned int
57 {
58  uint32_t ones = 0;
59  for (int i = 0; i < 32; i++ )
60  {
61  if ( val & (1<<i) )
62  ones++;
63  }
64  return ones;
65 }
66 
70 class MicroOp : public PredOp
71 {
72  protected:
73  MicroOp(const char *mnem, ExtMachInst machInst, OpClass __opClass)
74  : PredOp(mnem, machInst, __opClass)
75  {
76  }
77 
78  public:
79  void
80  advancePC(PCStateBase &pcState) const override
81  {
82  auto &apc = pcState.as<PCState>();
83  if (flags[IsLastMicroop]) {
84  apc.uEnd();
85  } else if (flags[IsMicroop]) {
86  apc.uAdvance();
87  } else {
88  apc.advance();
89  }
90  }
91 
92  void
93  advancePC(ThreadContext *tc) const override
94  {
95  PCState pc = tc->pcState().as<PCState>();
96  if (flags[IsLastMicroop]) {
97  pc.uEnd();
98  } else if (flags[IsMicroop]) {
99  pc.uAdvance();
100  } else {
101  pc.advance();
102  }
103  tc->pcState(pc);
104  }
105 };
106 
107 class MicroOpX : public ArmStaticInst
108 {
109  protected:
110  MicroOpX(const char *mnem, ExtMachInst machInst, OpClass __opClass)
111  : ArmStaticInst(mnem, machInst, __opClass)
112  {}
113 
114  public:
115  void
116  advancePC(PCStateBase &pcState) const override
117  {
118  auto &apc = pcState.as<PCState>();
119  if (flags[IsLastMicroop]) {
120  apc.uEnd();
121  } else if (flags[IsMicroop]) {
122  apc.uAdvance();
123  } else {
124  apc.advance();
125  }
126  }
127 
128  void
129  advancePC(ThreadContext *tc) const override
130  {
131  PCState pc = tc->pcState().as<PCState>();
132  if (flags[IsLastMicroop]) {
133  pc.uEnd();
134  } else if (flags[IsMicroop]) {
135  pc.uAdvance();
136  } else {
137  pc.advance();
138  }
139  tc->pcState(pc);
140  }
141 };
142 
146 class MicroNeonMemOp : public MicroOp
147 {
148  protected:
150  uint32_t imm;
151  unsigned memAccessFlags;
152 
153  MicroNeonMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
154  RegIndex _dest, RegIndex _ura, uint32_t _imm)
155  : MicroOp(mnem, machInst, __opClass),
156  dest(_dest), ura(_ura), imm(_imm), memAccessFlags()
157  {
158  }
159 };
160 
164 class MicroNeonMixOp : public MicroOp
165 {
166  protected:
168  uint32_t step;
169 
170  MicroNeonMixOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
171  RegIndex _dest, RegIndex _op1, uint32_t _step)
172  : MicroOp(mnem, machInst, __opClass),
173  dest(_dest), op1(_op1), step(_step)
174  {
175  }
176 };
177 
179 {
180  protected:
181  unsigned lane;
182 
184  OpClass __opClass, RegIndex _dest, RegIndex _op1,
185  uint32_t _step, unsigned _lane)
186  : MicroNeonMixOp(mnem, machInst, __opClass, _dest, _op1, _step),
187  lane(_lane)
188  {
189  }
190 };
191 
195 class MicroNeonMixOp64 : public MicroOp
196 {
197  protected:
200 
201  MicroNeonMixOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass,
202  RegIndex _dest, RegIndex _op1, uint8_t _eSize,
203  uint8_t _dataSize, uint8_t _numStructElems,
204  uint8_t _numRegs, uint8_t _step)
205  : MicroOp(mnem, machInst, __opClass), dest(_dest), op1(_op1),
206  eSize(_eSize), dataSize(_dataSize), numStructElems(_numStructElems),
207  numRegs(_numRegs), step(_step)
208  {
209  }
210 };
211 
213 {
214  protected:
217  bool replicate;
218 
220  OpClass __opClass, RegIndex _dest, RegIndex _op1,
221  uint8_t _eSize, uint8_t _dataSize,
222  uint8_t _numStructElems, uint8_t _lane, uint8_t _step,
223  bool _replicate = false)
224  : MicroOp(mnem, machInst, __opClass), dest(_dest), op1(_op1),
225  eSize(_eSize), dataSize(_dataSize), numStructElems(_numStructElems),
226  lane(_lane), step(_step), replicate(_replicate)
227  {
228  }
229 };
230 
234 class VldMultOp64 : public PredMacroOp
235 {
236  protected:
238  bool wb;
239 
240  VldMultOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass,
241  RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize,
242  uint8_t dataSize, uint8_t numStructElems, uint8_t numRegs,
243  bool wb);
244 };
245 
246 class VstMultOp64 : public PredMacroOp
247 {
248  protected:
250  bool wb;
251 
252  VstMultOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass,
253  RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize,
254  uint8_t dataSize, uint8_t numStructElems, uint8_t numRegs,
255  bool wb);
256 };
257 
259 {
260  protected:
262  bool wb, replicate;
263 
264  VldSingleOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass,
265  RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize,
266  uint8_t dataSize, uint8_t numStructElems, uint8_t index,
267  bool wb, bool replicate = false);
268 };
269 
271 {
272  protected:
274  bool wb, replicate;
275 
276  VstSingleOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass,
277  RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize,
278  uint8_t dataSize, uint8_t numStructElems, uint8_t index,
279  bool wb, bool replicate = false);
280 };
281 
287 class MicroSetPCCPSR : public MicroOp
288 {
289  protected:
291 
292  MicroSetPCCPSR(const char *mnem, ExtMachInst machInst, OpClass __opClass,
293  RegIndex _ura, RegIndex _urb, RegIndex _urc)
294  : MicroOp(mnem, machInst, __opClass),
295  ura(_ura), urb(_urb), urc(_urc)
296  {
297  }
298 
299  std::string generateDisassembly(
300  Addr pc, const loader::SymbolTable *symtab) const override;
301 };
302 
306 class MicroIntMov : public MicroOp
307 {
308  protected:
310 
311  MicroIntMov(const char *mnem, ExtMachInst machInst, OpClass __opClass,
312  RegIndex _ura, RegIndex _urb)
313  : MicroOp(mnem, machInst, __opClass),
314  ura(_ura), urb(_urb)
315  {
316  }
317 
318  std::string generateDisassembly(
319  Addr pc, const loader::SymbolTable *symtab) const override;
320 };
321 
325 class MicroIntImmOp : public MicroOp
326 {
327  protected:
329  int32_t imm;
330 
331  MicroIntImmOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
332  RegIndex _ura, RegIndex _urb, int32_t _imm)
333  : MicroOp(mnem, machInst, __opClass),
334  ura(_ura), urb(_urb), imm(_imm)
335  {
336  }
337 
338  std::string generateDisassembly(
339  Addr pc, const loader::SymbolTable *symtab) const override;
340 };
341 
342 class MicroIntImmXOp : public MicroOpX
343 {
344  protected:
346  int64_t imm;
347 
348  MicroIntImmXOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
349  RegIndex _ura, RegIndex _urb, int64_t _imm)
350  : MicroOpX(mnem, machInst, __opClass),
351  ura(_ura), urb(_urb), imm(_imm)
352  {
353  }
354 
355  std::string generateDisassembly(
356  Addr pc, const loader::SymbolTable *symtab) const override;
357 };
358 
362 class MicroIntOp : public MicroOp
363 {
364  protected:
366 
367  MicroIntOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
368  RegIndex _ura, RegIndex _urb, RegIndex _urc)
369  : MicroOp(mnem, machInst, __opClass),
370  ura(_ura), urb(_urb), urc(_urc)
371  {
372  }
373 
374  std::string generateDisassembly(
375  Addr pc, const loader::SymbolTable *symtab) const override;
376 };
377 
378 class MicroIntRegXOp : public MicroOp
379 {
380  protected:
383  uint32_t shiftAmt;
384 
385  MicroIntRegXOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
386  RegIndex _ura, RegIndex _urb, RegIndex _urc,
387  ArmExtendType _type, uint32_t _shiftAmt)
388  : MicroOp(mnem, machInst, __opClass),
389  ura(_ura), urb(_urb), urc(_urc),
390  type(_type), shiftAmt(_shiftAmt)
391  {
392  }
393 
394  std::string generateDisassembly(
395  Addr pc, const loader::SymbolTable *symtab) const override;
396 };
397 
401 class MicroIntRegOp : public MicroOp
402 {
403  protected:
405  int32_t shiftAmt;
406  ArmShiftType shiftType;
407 
408  MicroIntRegOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
409  RegIndex _ura, RegIndex _urb, RegIndex _urc,
410  int32_t _shiftAmt, ArmShiftType _shiftType)
411  : MicroOp(mnem, machInst, __opClass),
412  ura(_ura), urb(_urb), urc(_urc),
413  shiftAmt(_shiftAmt), shiftType(_shiftType)
414  {
415  }
416 };
417 
421 class MicroMemOp : public MicroIntImmOp
422 {
423  protected:
424  bool up;
425  unsigned memAccessFlags;
426 
427  MicroMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
428  RegIndex _ura, RegIndex _urb, bool _up, uint8_t _imm)
429  : MicroIntImmOp(mnem, machInst, __opClass, _ura, _urb, _imm),
430  up(_up), memAccessFlags(MMU::AlignWord)
431  {
432  }
433 
434  std::string generateDisassembly(
435  Addr pc, const loader::SymbolTable *symtab) const override;
436 };
437 
438 class MicroMemPairOp : public MicroOp
439 {
440  protected:
442  bool up;
443  int32_t imm;
444  unsigned memAccessFlags;
445 
446  MicroMemPairOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
447  RegIndex _dreg1, RegIndex _dreg2, RegIndex _base,
448  bool _up, uint8_t _imm)
449  : MicroOp(mnem, machInst, __opClass),
450  dest(_dreg1), dest2(_dreg2), urb(_base), up(_up), imm(_imm),
451  memAccessFlags(MMU::AlignWord)
452  {
453  }
454 
455  std::string generateDisassembly(
456  Addr pc, const loader::SymbolTable *symtab) const override;
457 };
458 
462 class MacroMemOp : public PredMacroOp
463 {
464  protected:
465  MacroMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
466  RegIndex rn, bool index, bool up, bool user,
467  bool writeback, bool load, uint32_t reglist);
468 };
469 
473 class PairMemOp : public PredMacroOp
474 {
475  public:
476  enum AddrMode
477  {
481  };
482 
483  protected:
484  PairMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
485  uint32_t size, bool fp, bool load, bool noAlloc, bool signExt,
486  bool exclusive, bool acrel, int64_t imm, AddrMode mode,
487  RegIndex rn, RegIndex rt, RegIndex rt2);
488 };
489 
491 {
492  protected:
493  BigFpMemImmOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
494  bool load, RegIndex dest, RegIndex base, int64_t imm);
495 };
496 
498 {
499  protected:
500  BigFpMemPostOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
501  bool load, RegIndex dest, RegIndex base, int64_t imm);
502 };
503 
505 {
506  protected:
507  BigFpMemPreOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
508  bool load, RegIndex dest, RegIndex base, int64_t imm);
509 };
510 
512 {
513  protected:
514  BigFpMemRegOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
515  bool load, RegIndex dest, RegIndex base,
516  RegIndex offset, ArmExtendType type, int64_t imm);
517 };
518 
520 {
521  protected:
522  BigFpMemLitOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
523  RegIndex dest, int64_t imm);
524 };
525 
529 class VldMultOp : public PredMacroOp
530 {
531  protected:
532  VldMultOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
533  unsigned elems, RegIndex rn, RegIndex vd, unsigned regs,
534  unsigned inc, uint32_t size, uint32_t align, RegIndex rm);
535 };
536 
537 class VldSingleOp : public PredMacroOp
538 {
539  protected:
540  VldSingleOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
541  bool all, unsigned elems, RegIndex rn, RegIndex vd,
542  unsigned regs, unsigned inc, uint32_t size,
543  uint32_t align, RegIndex rm, unsigned lane);
544 };
545 
549 class VstMultOp : public PredMacroOp
550 {
551  protected:
552  VstMultOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
553  unsigned width, RegIndex rn, RegIndex vd, unsigned regs,
554  unsigned inc, uint32_t size, uint32_t align, RegIndex rm);
555 };
556 
557 class VstSingleOp : public PredMacroOp
558 {
559  protected:
560  VstSingleOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
561  bool all, unsigned elems, RegIndex rn, RegIndex vd,
562  unsigned regs, unsigned inc, uint32_t size,
563  uint32_t align, RegIndex rm, unsigned lane);
564 };
565 
570 {
571  protected:
572  MacroVFPMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
573  RegIndex rn, RegIndex vd, bool single, bool up,
574  bool writeback, bool load, uint32_t offset);
575 };
576 
577 } // namespace ArmISA
578 } // namespace gem5
579 
580 #endif //__ARCH_ARM_INSTS_MACROMEM_HH__
BigFpMemImmOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, bool load, RegIndex dest, RegIndex base, int64_t imm)
Definition: macromem.cc:366
BigFpMemLitOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex dest, int64_t imm)
Definition: macromem.cc:465
BigFpMemPostOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, bool load, RegIndex dest, RegIndex base, int64_t imm)
Definition: macromem.cc:387
BigFpMemPreOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, bool load, RegIndex dest, RegIndex base, int64_t imm)
Definition: macromem.cc:413
BigFpMemRegOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, bool load, RegIndex dest, RegIndex base, RegIndex offset, ArmExtendType type, int64_t imm)
Definition: macromem.cc:439
Base class for microcoded integer memory instructions.
Definition: macromem.hh:463
MacroMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex rn, bool index, bool up, bool user, bool writeback, bool load, uint32_t reglist)
Definition: macromem.cc:57
Base class for microcoded floating point memory instructions.
Definition: macromem.hh:570
MacroVFPMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex rn, RegIndex vd, bool single, bool up, bool writeback, bool load, uint32_t offset)
Definition: macromem.cc:1456
Microops of the form IntRegA = IntRegB op Imm.
Definition: macromem.hh:326
MicroIntImmOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, int32_t _imm)
Definition: macromem.hh:331
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1535
MicroIntImmXOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, int64_t _imm)
Definition: macromem.hh:348
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1549
Microops of the form IntRegA = IntRegB.
Definition: macromem.hh:307
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1586
MicroIntMov(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb)
Definition: macromem.hh:311
Microops of the form IntRegA = IntRegB op IntRegC.
Definition: macromem.hh:363
MicroIntOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc)
Definition: macromem.hh:367
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1598
Microops of the form IntRegA = IntRegB op shifted IntRegC.
Definition: macromem.hh:402
MicroIntRegOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc, int32_t _shiftAmt, ArmShiftType _shiftType)
Definition: macromem.hh:408
MicroIntRegXOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc, ArmExtendType _type, uint32_t _shiftAmt)
Definition: macromem.hh:385
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1573
Memory microops which use IntReg + Imm addressing.
Definition: macromem.hh:422
MicroMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, bool _up, uint8_t _imm)
Definition: macromem.hh:427
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1612
MicroMemPairOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dreg1, RegIndex _dreg2, RegIndex _base, bool _up, uint8_t _imm)
Definition: macromem.hh:446
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1630
Microops for Neon loads/stores.
Definition: macromem.hh:147
MicroNeonMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _ura, uint32_t _imm)
Definition: macromem.hh:153
MicroNeonMixLaneOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint8_t _eSize, uint8_t _dataSize, uint8_t _numStructElems, uint8_t _lane, uint8_t _step, bool _replicate=false)
Definition: macromem.hh:219
MicroNeonMixLaneOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint32_t _step, unsigned _lane)
Definition: macromem.hh:183
Microops for AArch64 NEON load/store (de)interleaving.
Definition: macromem.hh:196
MicroNeonMixOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint8_t _eSize, uint8_t _dataSize, uint8_t _numStructElems, uint8_t _numRegs, uint8_t _step)
Definition: macromem.hh:201
Microops for Neon load/store (de)interleaving.
Definition: macromem.hh:165
MicroNeonMixOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint32_t _step)
Definition: macromem.hh:170
void advancePC(PCStateBase &pcState) const override
Definition: macromem.hh:116
MicroOpX(const char *mnem, ExtMachInst machInst, OpClass __opClass)
Definition: macromem.hh:110
void advancePC(ThreadContext *tc) const override
Definition: macromem.hh:129
Base class for Memory microops.
Definition: macromem.hh:71
MicroOp(const char *mnem, ExtMachInst machInst, OpClass __opClass)
Definition: macromem.hh:73
void advancePC(ThreadContext *tc) const override
Definition: macromem.hh:93
void advancePC(PCStateBase &pcState) const override
Definition: macromem.hh:80
Microops of the form PC = IntRegA CPSR = IntRegB.
Definition: macromem.hh:288
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: macromem.cc:1563
MicroSetPCCPSR(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc)
Definition: macromem.hh:292
Base class for pair load/store instructions.
Definition: macromem.hh:474
PairMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, uint32_t size, bool fp, bool load, bool noAlloc, bool signExt, bool exclusive, bool acrel, int64_t imm, AddrMode mode, RegIndex rn, RegIndex rt, RegIndex rt2)
Definition: macromem.cc:244
Base class for predicated macro-operations.
Definition: pred_inst.hh:343
Base class for predicated integer operations.
Definition: pred_inst.hh:217
Base classes for microcoded AArch64 NEON memory instructions.
Definition: macromem.hh:235
VldMultOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize, uint8_t dataSize, uint8_t numStructElems, uint8_t numRegs, bool wb)
Definition: macromem.cc:1139
Base classes for microcoded integer memory instructions.
Definition: macromem.hh:530
VldMultOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, unsigned elems, RegIndex rn, RegIndex vd, unsigned regs, unsigned inc, uint32_t size, uint32_t align, RegIndex rm)
Definition: macromem.cc:478
VldSingleOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize, uint8_t dataSize, uint8_t numStructElems, uint8_t index, bool wb, bool replicate=false)
Definition: macromem.cc:1309
VldSingleOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, bool all, unsigned elems, RegIndex rn, RegIndex vd, unsigned regs, unsigned inc, uint32_t size, uint32_t align, RegIndex rm, unsigned lane)
Definition: macromem.cc:573
VstMultOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize, uint8_t dataSize, uint8_t numStructElems, uint8_t numRegs, bool wb)
Definition: macromem.cc:1224
Base class for microcoded integer memory instructions.
Definition: macromem.hh:550
VstMultOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, unsigned width, RegIndex rn, RegIndex vd, unsigned regs, unsigned inc, uint32_t size, uint32_t align, RegIndex rm)
Definition: macromem.cc:841
VstSingleOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex rn, RegIndex vd, RegIndex rm, uint8_t eSize, uint8_t dataSize, uint8_t numStructElems, uint8_t index, bool wb, bool replicate=false)
Definition: macromem.cc:1383
VstSingleOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, bool all, unsigned elems, RegIndex rn, RegIndex vd, unsigned regs, unsigned inc, uint32_t size, uint32_t align, RegIndex rm, unsigned lane)
Definition: macromem.cc:936
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
static unsigned int number_of_ones(int32_t val)
Definition: macromem.hh:56
Bitfield< 15, 12 > rt
Definition: types.hh:115
Bitfield< 4, 0 > mode
Definition: misc_types.hh:74
Bitfield< 4 > width
Definition: misc_types.hh:72
Bitfield< 3, 0 > rm
Definition: types.hh:118
Bitfield< 7, 0 > imm
Definition: types.hh:132
Bitfield< 21 > writeback
Definition: types.hh:126
Bitfield< 7 > i
Definition: misc_types.hh:67
Bitfield< 23, 0 > offset
Definition: types.hh:144
Bitfield< 23 > up
Definition: types.hh:124
Bitfield< 19, 16 > rn
Definition: types.hh:113
Bitfield< 19, 16 > fp
Definition: misc_types.hh:177
Bitfield< 4 > pc
Bitfield< 30, 0 > index
Bitfield< 51, 12 > base
Definition: pagetable.hh:141
Bitfield< 63 > val
Definition: misc.hh:776
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
void align(const scfx_rep &lhs, const scfx_rep &rhs, int &new_wp, int &len_mant, scfx_mant_ref &lhs_mant, scfx_mant_ref &rhs_mant)
Definition: scfx_rep.cc:2051
void inc(scfx_mant &mant)
Definition: scfx_mant.hh:309

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