gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
types.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010, 2012-2013, 2017-2018 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  * Authors: Stephen Hines
41  */
42 
43 #ifndef __ARCH_ARM_TYPES_HH__
44 #define __ARCH_ARM_TYPES_HH__
45 
46 #include "arch/generic/types.hh"
47 #include "base/bitunion.hh"
48 #include "base/logging.hh"
49 #include "base/types.hh"
50 #include "debug/Decoder.hh"
51 
52 namespace ArmISA
53 {
54  typedef uint32_t MachInst;
55 
56  BitUnion8(ITSTATE)
57  /* Note that the split (cond, mask) below is not as in ARM ARM.
58  * But it is more convenient for simulation. The condition
59  * is always the concatenation of the top 3 bits and the next bit,
60  * which applies when one of the bottom 4 bits is set.
61  * Refer to predecoder.cc for the use case.
62  */
63  Bitfield<7, 4> cond;
64  Bitfield<3, 0> mask;
65  // Bitfields for moving to/from CPSR
66  Bitfield<7, 2> top6;
67  Bitfield<1, 0> bottom2;
68  EndBitUnion(ITSTATE)
69 
71  // Decoder state
72  Bitfield<63, 62> decoderFault; // See DecoderFault
73  Bitfield<61> illegalExecution;
74 
75  // SVE vector length, encoded in the same format as the ZCR_EL<x>.LEN
76  // bitfields
77  Bitfield<59, 56> sveLen;
78 
79  // ITSTATE bits
80  Bitfield<55, 48> itstate;
81  Bitfield<55, 52> itstateCond;
82  Bitfield<51, 48> itstateMask;
83 
84  // FPSCR fields
85  Bitfield<41, 40> fpscrStride;
86  Bitfield<39, 37> fpscrLen;
87 
88  // Bitfields to select mode.
89  Bitfield<36> thumb;
90  Bitfield<35> bigThumb;
91  Bitfield<34> aarch64;
92 
93  // Made up bitfields that make life easier.
94  Bitfield<33> sevenAndFour;
95  Bitfield<32> isMisc;
96 
97  uint32_t instBits;
98 
99  // All the different types of opcode fields.
100  Bitfield<27, 25> encoding;
101  Bitfield<25> useImm;
102  Bitfield<24, 21> opcode;
103  Bitfield<24, 20> mediaOpcode;
104  Bitfield<24> opcode24;
105  Bitfield<24, 23> opcode24_23;
106  Bitfield<23, 20> opcode23_20;
107  Bitfield<23, 21> opcode23_21;
108  Bitfield<20> opcode20;
109  Bitfield<22> opcode22;
110  Bitfield<19, 16> opcode19_16;
111  Bitfield<19> opcode19;
112  Bitfield<18> opcode18;
113  Bitfield<15, 12> opcode15_12;
114  Bitfield<15> opcode15;
115  Bitfield<7, 4> miscOpcode;
116  Bitfield<7,5> opc2;
117  Bitfield<7> opcode7;
118  Bitfield<6> opcode6;
119  Bitfield<4> opcode4;
120 
121  Bitfield<31, 28> condCode;
122  Bitfield<20> sField;
123  Bitfield<19, 16> rn;
124  Bitfield<15, 12> rd;
125  Bitfield<15, 12> rt;
126  Bitfield<11, 7> shiftSize;
127  Bitfield<6, 5> shift;
128  Bitfield<3, 0> rm;
129 
130  Bitfield<11, 8> rs;
131 
132  SubBitUnion(puswl, 24, 20)
133  Bitfield<24> prepost;
134  Bitfield<23> up;
135  Bitfield<22> psruser;
136  Bitfield<21> writeback;
137  Bitfield<20> loadOp;
138  EndSubBitUnion(puswl)
139 
140  Bitfield<24, 20> pubwl;
141 
142  Bitfield<7, 0> imm;
143 
144  Bitfield<11, 8> rotate;
145 
146  Bitfield<11, 0> immed11_0;
147  Bitfield<7, 0> immed7_0;
148 
149  Bitfield<11, 8> immedHi11_8;
150  Bitfield<3, 0> immedLo3_0;
151 
152  Bitfield<15, 0> regList;
153 
154  Bitfield<23, 0> offset;
155 
156  Bitfield<23, 0> immed23_0;
157 
158  Bitfield<11, 8> cpNum;
159  Bitfield<18, 16> fn;
160  Bitfield<14, 12> fd;
161  Bitfield<3> fpRegImm;
162  Bitfield<3, 0> fm;
163  Bitfield<2, 0> fpImm;
164  Bitfield<24, 20> punwl;
165 
166  Bitfield<15, 8> m5Func;
167 
168  // 16 bit thumb bitfields
169  Bitfield<15, 13> topcode15_13;
170  Bitfield<13, 11> topcode13_11;
171  Bitfield<12, 11> topcode12_11;
172  Bitfield<12, 10> topcode12_10;
173  Bitfield<11, 9> topcode11_9;
174  Bitfield<11, 8> topcode11_8;
175  Bitfield<10, 9> topcode10_9;
176  Bitfield<10, 8> topcode10_8;
177  Bitfield<9, 6> topcode9_6;
178  Bitfield<7> topcode7;
179  Bitfield<7, 6> topcode7_6;
180  Bitfield<7, 5> topcode7_5;
181  Bitfield<7, 4> topcode7_4;
182  Bitfield<3, 0> topcode3_0;
183 
184  // 32 bit thumb bitfields
185  Bitfield<28, 27> htopcode12_11;
186  Bitfield<26, 25> htopcode10_9;
187  Bitfield<25> htopcode9;
188  Bitfield<25, 24> htopcode9_8;
189  Bitfield<25, 21> htopcode9_5;
190  Bitfield<25, 20> htopcode9_4;
191  Bitfield<24> htopcode8;
192  Bitfield<24, 23> htopcode8_7;
193  Bitfield<24, 22> htopcode8_6;
194  Bitfield<24, 21> htopcode8_5;
195  Bitfield<23> htopcode7;
196  Bitfield<23, 21> htopcode7_5;
197  Bitfield<22> htopcode6;
198  Bitfield<22, 21> htopcode6_5;
199  Bitfield<21, 20> htopcode5_4;
200  Bitfield<20> htopcode4;
201 
202  Bitfield<19, 16> htrn;
203  Bitfield<20> hts;
204 
205  Bitfield<15> ltopcode15;
206  Bitfield<11, 8> ltopcode11_8;
207  Bitfield<7, 6> ltopcode7_6;
208  Bitfield<7, 4> ltopcode7_4;
209  Bitfield<4> ltopcode4;
210 
211  Bitfield<11, 8> ltrd;
212  Bitfield<11, 8> ltcoproc;
214 
215  class PCState : public GenericISA::UPCState<MachInst>
216  {
217  protected:
218 
219  typedef GenericISA::UPCState<MachInst> Base;
220 
221  enum FlagBits {
222  ThumbBit = (1 << 0),
223  JazelleBit = (1 << 1),
224  AArch64Bit = (1 << 2)
225  };
226 
227  uint8_t flags;
228  uint8_t nextFlags;
229  uint8_t _itstate;
230  uint8_t _nextItstate;
231  uint8_t _size;
232  bool _illegalExec;
233  public:
234  PCState() : flags(0), nextFlags(0), _itstate(0), _nextItstate(0),
235  _size(0), _illegalExec(false)
236  {}
237 
238  void
239  set(Addr val)
240  {
241  Base::set(val);
242  npc(val + (thumb() ? 2 : 4));
243  }
244 
245  PCState(Addr val) : flags(0), nextFlags(0), _itstate(0),
246  _nextItstate(0), _size(0), _illegalExec(false)
247  { set(val); }
248 
249  bool
250  illegalExec() const
251  {
252  return _illegalExec;
253  }
254 
255  void
256  illegalExec(bool val)
257  {
258  _illegalExec = val;
259  }
260 
261  bool
262  thumb() const
263  {
264  return flags & ThumbBit;
265  }
266 
267  void
268  thumb(bool val)
269  {
270  if (val)
271  flags |= ThumbBit;
272  else
273  flags &= ~ThumbBit;
274  }
275 
276  bool
277  nextThumb() const
278  {
279  return nextFlags & ThumbBit;
280  }
281 
282  void
283  nextThumb(bool val)
284  {
285  if (val)
286  nextFlags |= ThumbBit;
287  else
288  nextFlags &= ~ThumbBit;
289  }
290 
291  void size(uint8_t s) { _size = s; }
292  uint8_t size() const { return _size; }
293 
294  bool
295  branching() const
296  {
297  return ((this->pc() + this->size()) != this->npc());
298  }
299 
300 
301  bool
302  jazelle() const
303  {
304  return flags & JazelleBit;
305  }
306 
307  void
308  jazelle(bool val)
309  {
310  if (val)
311  flags |= JazelleBit;
312  else
313  flags &= ~JazelleBit;
314  }
315 
316  bool
317  nextJazelle() const
318  {
319  return nextFlags & JazelleBit;
320  }
321 
322  void
323  nextJazelle(bool val)
324  {
325  if (val)
326  nextFlags |= JazelleBit;
327  else
328  nextFlags &= ~JazelleBit;
329  }
330 
331  bool
332  aarch64() const
333  {
334  return flags & AArch64Bit;
335  }
336 
337  void
338  aarch64(bool val)
339  {
340  if (val)
341  flags |= AArch64Bit;
342  else
343  flags &= ~AArch64Bit;
344  }
345 
346  bool
347  nextAArch64() const
348  {
349  return nextFlags & AArch64Bit;
350  }
351 
352  void
353  nextAArch64(bool val)
354  {
355  if (val)
356  nextFlags |= AArch64Bit;
357  else
358  nextFlags &= ~AArch64Bit;
359  }
360 
361 
362  uint8_t
363  itstate() const
364  {
365  return _itstate;
366  }
367 
368  void
369  itstate(uint8_t value)
370  {
371  _itstate = value;
372  }
373 
374  uint8_t
375  nextItstate() const
376  {
377  return _nextItstate;
378  }
379 
380  void
381  nextItstate(uint8_t value)
382  {
383  _nextItstate = value;
384  }
385 
386  void
387  advance()
388  {
389  Base::advance();
390  flags = nextFlags;
391  npc(pc() + (thumb() ? 2 : 4));
392 
393  if (_nextItstate) {
394  _itstate = _nextItstate;
395  _nextItstate = 0;
396  } else if (_itstate) {
397  ITSTATE it = _itstate;
398  uint8_t cond_mask = it.mask;
399  uint8_t thumb_cond = it.cond;
400  DPRINTF(Decoder, "Advancing ITSTATE from %#x,%#x.\n",
401  thumb_cond, cond_mask);
402  cond_mask <<= 1;
403  uint8_t new_bit = bits(cond_mask, 4);
404  cond_mask &= mask(4);
405  if (cond_mask == 0)
406  thumb_cond = 0;
407  else
408  replaceBits(thumb_cond, 0, new_bit);
409  DPRINTF(Decoder, "Advancing ITSTATE to %#x,%#x.\n",
410  thumb_cond, cond_mask);
411  it.mask = cond_mask;
412  it.cond = thumb_cond;
413  _itstate = it;
414  }
415  }
416 
417  void
418  uEnd()
419  {
420  advance();
421  upc(0);
422  nupc(1);
423  }
424 
425  Addr
426  instPC() const
427  {
428  return pc() + (thumb() ? 4 : 8);
429  }
430 
431  void
432  instNPC(Addr val)
433  {
434  // @todo: review this when AArch32/64 interprocessing is
435  // supported
436  if (aarch64())
437  npc(val); // AArch64 doesn't force PC alignment, a PC
438  // Alignment Fault can be raised instead
439  else
440  npc(val &~ mask(nextThumb() ? 1 : 2));
441  }
442 
443  Addr
444  instNPC() const
445  {
446  return npc();
447  }
448 
449  // Perform an interworking branch.
450  void
451  instIWNPC(Addr val)
452  {
453  bool thumbEE = (thumb() && jazelle());
454 
455  Addr newPC = val;
456  if (thumbEE) {
457  if (bits(newPC, 0)) {
458  newPC = newPC & ~mask(1);
459  } // else we have a bad interworking address; do not call
460  // panic() since the instruction could be executed
461  // speculatively
462  } else {
463  if (bits(newPC, 0)) {
464  nextThumb(true);
465  newPC = newPC & ~mask(1);
466  } else if (!bits(newPC, 1)) {
467  nextThumb(false);
468  } else {
469  // This state is UNPREDICTABLE in the ARM architecture
470  // The easy thing to do is just mask off the bit and
471  // stay in the current mode, so we'll do that.
472  newPC &= ~mask(2);
473  }
474  }
475  npc(newPC);
476  }
477 
478  // Perform an interworking branch in ARM mode, a regular branch
479  // otherwise.
480  void
481  instAIWNPC(Addr val)
482  {
483  if (!thumb() && !jazelle())
484  instIWNPC(val);
485  else
486  instNPC(val);
487  }
488 
489  bool
490  operator == (const PCState &opc) const
491  {
492  return Base::operator == (opc) &&
493  flags == opc.flags && nextFlags == opc.nextFlags &&
494  _itstate == opc._itstate &&
495  _nextItstate == opc._nextItstate &&
496  _illegalExec == opc._illegalExec;
497  }
498 
499  bool
500  operator != (const PCState &opc) const
501  {
502  return !(*this == opc);
503  }
504 
505  void
506  serialize(CheckpointOut &cp) const override
507  {
508  Base::serialize(cp);
509  SERIALIZE_SCALAR(flags);
510  SERIALIZE_SCALAR(_size);
511  SERIALIZE_SCALAR(nextFlags);
512  SERIALIZE_SCALAR(_itstate);
513  SERIALIZE_SCALAR(_nextItstate);
514  SERIALIZE_SCALAR(_illegalExec);
515  }
516 
517  void
518  unserialize(CheckpointIn &cp) override
519  {
520  Base::unserialize(cp);
521  UNSERIALIZE_SCALAR(flags);
522  UNSERIALIZE_SCALAR(_size);
523  UNSERIALIZE_SCALAR(nextFlags);
524  UNSERIALIZE_SCALAR(_itstate);
525  UNSERIALIZE_SCALAR(_nextItstate);
526  UNSERIALIZE_SCALAR(_illegalExec);
527  }
528  };
529 
530  // Shift types for ARM instructions
532  LSL = 0,
536  };
537 
538  // Extension types for ARM instructions
540  UXTB = 0,
541  UXTH = 1,
542  UXTW = 2,
543  UXTX = 3,
544  SXTB = 4,
545  SXTH = 5,
546  SXTW = 6,
547  SXTX = 7
548  };
549 
550  typedef int RegContextParam;
551  typedef int RegContextVal;
552 
553  //used in FP convert & round function
558 
562 
567 
572 
575  };
576 
577  //used in FP convert & round function
578  enum RoundMode{
583  };
584 
586  EL0 = 0,
590  };
591 
593  MODE_EL0T = 0x0,
594  MODE_EL1T = 0x4,
595  MODE_EL1H = 0x5,
596  MODE_EL2T = 0x8,
597  MODE_EL2H = 0x9,
598  MODE_EL3T = 0xC,
599  MODE_EL3H = 0xD,
600  MODE_USER = 16,
601  MODE_FIQ = 17,
602  MODE_IRQ = 18,
603  MODE_SVC = 19,
604  MODE_MON = 22,
606  MODE_HYP = 26,
610  };
611 
614  EC_UNKNOWN = 0x0,
621  EC_TRAPPED_SIMD_FP = 0x7, // AArch64 alias
628  EC_SVC = 0x11, // AArch64 alias
629  EC_HVC = 0x12,
631  EC_SMC = 0x13, // AArch64 alias
632  EC_SVC_64 = 0x15,
633  EC_HVC_64 = 0x16,
634  EC_SMC_64 = 0x17,
638  EC_PREFETCH_ABORT_LOWER_EL = 0x20, // AArch64 alias
640  EC_PREFETCH_ABORT_CURR_EL = 0x21, // AArch64 alias
643  EC_DATA_ABORT_LOWER_EL = 0x24, // AArch64 alias
645  EC_DATA_ABORT_CURR_EL = 0x25, // AArch64 alias
649  EC_SERROR = 0x2F,
652  };
653 
657  enum DecoderFault : std::uint8_t {
658  OK = 0x0,
659  UNALIGNED = 0x1,
660 
661  PANIC = 0x3,
662  };
663 
664  BitUnion8(OperatingMode64)
665  Bitfield<0> spX;
666  Bitfield<3, 2> el;
667  Bitfield<4> width;
668  EndBitUnion(OperatingMode64)
669 
670  static bool inline
671  opModeIs64(OperatingMode mode)
672  {
673  return ((OperatingMode64)(uint8_t)mode).width == 0;
674  }
675 
676  static bool inline
678  {
679  return (mode == MODE_EL1H || mode == MODE_EL2H || mode == MODE_EL3H);
680  }
681 
682  static bool inline
684  {
685  return (mode == MODE_EL0T || mode == MODE_EL1T || mode == MODE_EL2T ||
686  mode == MODE_EL3T);
687  }
688 
689  static ExceptionLevel inline
691  {
692  bool aarch32 = ((mode >> 4) & 1) ? true : false;
693  if (aarch32) {
694  switch (mode) {
695  case MODE_USER:
696  return EL0;
697  case MODE_FIQ:
698  case MODE_IRQ:
699  case MODE_SVC:
700  case MODE_ABORT:
701  case MODE_UNDEFINED:
702  case MODE_SYSTEM:
703  return EL1;
704  case MODE_HYP:
705  return EL2;
706  case MODE_MON:
707  return EL3;
708  default:
709  panic("Invalid operating mode: %d", mode);
710  break;
711  }
712  } else {
713  // aarch64
714  return (ExceptionLevel) ((mode >> 2) & 3);
715  }
716  }
717 
718  static inline bool
720  {
721  switch (mode) {
722  case MODE_EL0T:
723  case MODE_EL1T:
724  case MODE_EL1H:
725  case MODE_EL2T:
726  case MODE_EL2H:
727  case MODE_EL3T:
728  case MODE_EL3H:
729  case MODE_USER:
730  case MODE_FIQ:
731  case MODE_IRQ:
732  case MODE_SVC:
733  case MODE_MON:
734  case MODE_ABORT:
735  case MODE_HYP:
736  case MODE_UNDEFINED:
737  case MODE_SYSTEM:
738  return false;
739  default:
740  return true;
741  }
742  }
743 
744  static inline bool
746  {
747  switch (mode) {
748  case MODE_USER:
749  case MODE_FIQ:
750  case MODE_IRQ:
751  case MODE_SVC:
752  case MODE_MON:
753  case MODE_ABORT:
754  case MODE_HYP:
755  case MODE_UNDEFINED:
756  case MODE_SYSTEM:
757  return false;
758  default:
759  return true;
760  }
761  }
762 
763  constexpr unsigned MaxSveVecLenInBits = 2048;
764  static_assert(MaxSveVecLenInBits >= 128 &&
765  MaxSveVecLenInBits <= 2048 &&
766  MaxSveVecLenInBits % 128 == 0,
767  "Unsupported max. SVE vector length");
768  constexpr unsigned MaxSveVecLenInBytes = MaxSveVecLenInBits >> 3;
769  constexpr unsigned MaxSveVecLenInWords = MaxSveVecLenInBits >> 5;
770  constexpr unsigned MaxSveVecLenInDWords = MaxSveVecLenInBits >> 6;
771 
772  constexpr unsigned VecRegSizeBytes = MaxSveVecLenInBytes;
774  constexpr unsigned VecPredRegHasPackedRepr = false;
775 } // namespace ArmISA
776 
777 #endif
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:167
uint32_t MachInst
Definition: types.hh:54
#define DPRINTF(x,...)
Definition: trace.hh:229
Bitfield< 25 > htopcode9
Definition: types.hh:187
static bool unknownMode(OperatingMode mode)
Definition: types.hh:719
Bitfield< 25, 20 > htopcode9_4
Definition: types.hh:190
Bitfield< 15, 12 > rt
Definition: types.hh:125
Bitfield< 35 > bigThumb
Definition: types.hh:90
Bitfield< 20 > sField
Definition: types.hh:122
constexpr unsigned VecRegSizeBytes
Definition: types.hh:772
Bitfield< 7, 2 > top6
Definition: types.hh:66
Bitfield< 7, 0 > immed7_0
Definition: types.hh:147
Bitfield< 11, 7 > shiftSize
Definition: types.hh:126
Bitfield< 15 > ltopcode15
Definition: types.hh:205
Bitfield< 12, 10 > topcode12_10
Definition: types.hh:172
Bitfield< 55, 52 > itstateCond
Definition: types.hh:81
Bitfield< 24 > opcode24
Definition: types.hh:104
Bitfield< 61 > illegalExecution
Definition: types.hh:73
Bitfield< 36 > thumb
Definition: types.hh:89
Bitfield< 7, 6 > ltopcode7_6
Definition: types.hh:207
Bitfield< 3, 0 > fm
Definition: types.hh:162
static bool opModeIsT(OperatingMode mode)
Definition: types.hh:683
Bitfield< 24 > htopcode8
Definition: types.hh:191
Bitfield< 15, 12 > rd
Definition: types.hh:124
OperatingMode
Definition: types.hh:592
Bitfield< 59, 56 > sveLen
Definition: types.hh:77
Bitfield< 23, 0 > offset
Definition: types.hh:154
Bitfield< 23, 20 > opcode23_20
Definition: types.hh:106
Bitfield< 7, 5 > topcode7_5
Definition: types.hh:180
Definition: ccregs.hh:42
Bitfield< 22 > opcode22
Definition: types.hh:109
Bitfield< 10, 9 > topcode10_9
Definition: types.hh:175
Definition: cprintf.cc:42
Bitfield< 4, 0 > mode
No fault.
Definition: types.hh:658
EndBitUnion(CPSR) BitUnion64(AA64DFR0) Bitfield< 43
Bitfield< 18 > opcode18
Definition: types.hh:112
Bitfield< 23 > htopcode7
Definition: types.hh:195
Bitfield< 11, 9 > topcode11_9
Definition: types.hh:173
Bitfield< 24, 22 > htopcode8_6
Definition: types.hh:193
Bitfield< 2, 0 > fpImm
Definition: types.hh:163
Internal gem5 error.
Definition: types.hh:661
int RegContextVal
Definition: types.hh:551
Bitfield< 25 > useImm
Definition: types.hh:101
Bitfield< 63 > val
Definition: misc.hh:771
ExceptionLevel
Definition: types.hh:585
Bitfield< 31, 28 > condCode
Definition: types.hh:121
Bitfield< 3, 0 > rm
Definition: types.hh:128
Bitfield< 24, 23 > opcode24_23
Definition: types.hh:105
Bitfield< 24, 23 > htopcode8_7
Definition: types.hh:192
#define UNSERIALIZE_SCALAR(scalar)
Definition: serialize.hh:645
Bitfield< 3, 2 > el
Bitfield< 10, 8 > topcode10_8
Definition: types.hh:176
Bitfield< 4 > pc
static bool operator==(const ExtMachInst &emi1, const ExtMachInst &emi2)
Definition: types.hh:256
Bitfield< 15, 12 > opcode15_12
Definition: types.hh:113
Bitfield< 15, 13 > topcode15_13
Definition: types.hh:169
Bitfield< 22, 21 > htopcode6_5
Definition: types.hh:198
Bitfield< 11, 0 > immed11_0
Definition: types.hh:146
static bool opModeIsH(OperatingMode mode)
Definition: types.hh:677
Bitfield< 22 > htopcode6
Definition: types.hh:197
Bitfield< 23, 21 > htopcode7_5
Definition: types.hh:196
Bitfield< 4 > s
Bitfield< 19, 16 > htrn
Definition: types.hh:202
Bitfield< 7, 4 > topcode7_4
Definition: types.hh:181
Bitfield< 4 > ltopcode4
Definition: types.hh:209
GenericISA::DelaySlotUPCState< MachInst > PCState
Definition: types.hh:43
Bitfield< 25, 24 > htopcode9_8
Definition: types.hh:188
Bitfield< 20 > hts
Definition: types.hh:203
Bitfield< 6, 5 > shift
Definition: types.hh:127
Bitfield< 23, 21 > opcode23_21
Definition: types.hh:107
Bitfield< 7, 6 > topcode7_6
Definition: types.hh:179
void replaceBits(T &val, int first, int last, B bit_val)
A convenience function to replace bits first to last of val with bit_val in place.
Definition: bitfield.hh:157
Bitfield< 6 > opcode6
Definition: types.hh:118
Bitfield< 9, 6 > topcode9_6
Definition: types.hh:177
RoundMode
Definition: types.hh:578
static ExceptionLevel opModeToEL(OperatingMode mode)
Definition: types.hh:690
Bitfield< 19, 16 > rn
Definition: types.hh:123
void serialize(const ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
Bitfield< 11, 8 > topcode11_8
Definition: types.hh:174
constexpr unsigned VecPredRegHasPackedRepr
Definition: types.hh:774
int RegContextParam
Definition: types.hh:550
Bitfield< 41, 40 > fpscrStride
Definition: types.hh:85
Bitfield< 11, 8 > ltopcode11_8
Definition: types.hh:206
Bitfield< 24, 20 > mediaOpcode
Definition: types.hh:103
Bitfield< 11, 8 > immedHi11_8
Definition: types.hh:149
Bitfield< 15, 8 > m5Func
Definition: types.hh:166
uint32_t instBits
Definition: types.hh:97
Bitfield< 18, 16 > fn
Definition: types.hh:159
Bitfield< 7, 4 > ltopcode7_4
Definition: types.hh:208
constexpr unsigned MaxSveVecLenInDWords
Definition: types.hh:770
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
Bitfield< 11, 8 > ltrd
Definition: types.hh:211
constexpr unsigned MaxSveVecLenInWords
Definition: types.hh:769
Bitfield< 7, 0 > imm
Definition: types.hh:142
Bitfield< 3, 0 > immedLo3_0
Definition: types.hh:150
Bitfield< 34 > aarch64
Definition: types.hh:91
Bitfield< 7, 4 > miscOpcode
Definition: types.hh:115
Bitfield< 27, 25 > encoding
Definition: types.hh:100
Bitfield< 26, 25 > htopcode10_9
Definition: types.hh:186
Bitfield< 21 > writeback
Definition: types.hh:136
Bitfield< 23, 0 > immed23_0
Definition: types.hh:156
#define SERIALIZE_SCALAR(scalar)
Definition: serialize.hh:643
Bitfield< 15 > opcode15
Definition: types.hh:114
ExceptionClass
Definition: types.hh:612
Bitfield< 7 > topcode7
Definition: types.hh:178
BitUnion8(ITSTATE) Bitfield< 7
Bitfield< 55, 48 > itstate
Definition: types.hh:80
Bitfield< 39, 37 > fpscrLen
Definition: types.hh:86
Bitfield< 23 > up
Definition: types.hh:134
EndSubBitUnion(puswl) Bitfield< 24
static bool unknownMode32(OperatingMode mode)
Definition: types.hh:745
Bitfield< 28, 27 > htopcode12_11
Definition: types.hh:185
Bitfield< 19 > opcode19
Definition: types.hh:111
decoderFault
Definition: types.hh:72
Bitfield< 33 > sevenAndFour
Definition: types.hh:94
std::ostream CheckpointOut
Definition: serialize.hh:68
Bitfield< 15, 0 > regList
Definition: types.hh:152
Bitfield< 12, 11 > topcode12_11
Definition: types.hh:171
Bitfield< 20 > loadOp
Definition: types.hh:137
Bitfield< 24, 21 > opcode
Definition: types.hh:102
Bitfield< 24, 21 > htopcode8_5
Definition: types.hh:194
Bitfield< 4 > opcode4
Definition: types.hh:119
constexpr unsigned VecPredRegSizeBits
Definition: types.hh:773
Bitfield< 20 > opcode20
Definition: types.hh:108
Bitfield< 24, 20 > punwl
Definition: types.hh:164
Bitfield< 19, 16 > opcode19_16
Definition: types.hh:110
pubwl
Definition: types.hh:140
Bitfield< 4 > width
bool operator!=(const RefCountingPtr< T > &l, const RefCountingPtr< T > &r)
Check for inequality of two reference counting pointers.
Definition: refcnt.hh:274
ArmExtendType
Definition: types.hh:539
Bitfield< 25, 21 > htopcode9_5
Definition: types.hh:189
Bitfield< 3, 0 > topcode3_0
Definition: types.hh:182
Bitfield< 11, 8 > cpNum
Definition: types.hh:158
Bitfield< 7, 5 > opc2
Definition: types.hh:116
void unserialize(ThreadContext &tc, CheckpointIn &cp)
Bitfield< 11, 8 > rotate
Definition: types.hh:144
Bitfield< 1, 0 > bottom2
Definition: types.hh:67
Bitfield< 7 > opcode7
Definition: types.hh:117
uint64_t ExtMachInst
Definition: types.hh:41
Bitfield< 22 > psruser
Definition: types.hh:135
Bitfield< 3, 0 > mask
Definition: types.hh:64
Bitfield< 20 > htopcode4
Definition: types.hh:200
Bitfield< 32 > isMisc
Definition: types.hh:95
T bits(T val, int first, int last)
Extract the bitfield from position &#39;first&#39; to &#39;last&#39; (inclusive) from &#39;val&#39; and right justify it...
Definition: bitfield.hh:72
Bitfield< 13, 11 > topcode13_11
Definition: types.hh:170
constexpr unsigned MaxSveVecLenInBits
Definition: types.hh:763
#define BitUnion64(name)
Definition: bitunion.hh:376
Bitfield< 14, 12 > fd
Definition: types.hh:160
Unaligned instruction fault.
Definition: types.hh:659
Bitfield< 9, 8 > rs
SubBitUnion(puswl, 24, 20) Bitfield< 24 > prepost
ConvertType
Definition: types.hh:554
Bitfield< 11, 8 > ltcoproc
Definition: types.hh:212
Bitfield< 51, 48 > itstateMask
Definition: types.hh:82
ArmShiftType
Definition: types.hh:531
DecoderFault
Instruction decoder fault codes in ExtMachInst.
Definition: types.hh:657
cond
Definition: types.hh:63
Bitfield< 21, 20 > htopcode5_4
Definition: types.hh:199
Bitfield< 3 > fpRegImm
Definition: types.hh:161
constexpr unsigned MaxSveVecLenInBytes
Definition: types.hh:768

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