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

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