gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
isa.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2009 The Regents of The University of Michigan
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #include "arch/x86/isa.hh"
30 
31 #include "arch/x86/decoder.hh"
32 #include "arch/x86/mmu.hh"
33 #include "arch/x86/regs/ccr.hh"
34 #include "arch/x86/regs/float.hh"
35 #include "arch/x86/regs/int.hh"
36 #include "arch/x86/regs/misc.hh"
37 #include "base/compiler.hh"
38 #include "cpu/base.hh"
39 #include "cpu/thread_context.hh"
40 #include "debug/MatRegs.hh"
41 #include "params/X86ISA.hh"
42 #include "sim/serialize.hh"
43 
44 namespace gem5
45 {
46 
47 namespace X86ISA
48 {
49 
50 void
52  SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags)
53 {
54  HandyM5Reg m5reg = 0;
55  if (efer.lma) {
56  m5reg.mode = LongMode;
57  if (csAttr.longMode)
58  m5reg.submode = SixtyFourBitMode;
59  else
60  m5reg.submode = CompatabilityMode;
61  } else {
62  m5reg.mode = LegacyMode;
63  if (cr0.pe) {
64  if (rflags.vm)
65  m5reg.submode = Virtual8086Mode;
66  else
67  m5reg.submode = ProtectedMode;
68  } else {
69  m5reg.submode = RealMode;
70  }
71  }
72  m5reg.cpl = csAttr.dpl;
73  m5reg.paging = cr0.pg;
74  m5reg.prot = cr0.pe;
75 
76  // Compute the default and alternate operand size.
77  if (m5reg.submode == SixtyFourBitMode || csAttr.defaultSize) {
78  m5reg.defOp = 2;
79  m5reg.altOp = 1;
80  } else {
81  m5reg.defOp = 1;
82  m5reg.altOp = 2;
83  }
84 
85  // Compute the default and alternate address size.
86  if (m5reg.submode == SixtyFourBitMode) {
87  m5reg.defAddr = 3;
88  m5reg.altAddr = 2;
89  } else if (csAttr.defaultSize) {
90  m5reg.defAddr = 2;
91  m5reg.altAddr = 1;
92  } else {
93  m5reg.defAddr = 1;
94  m5reg.altAddr = 2;
95  }
96 
97  // Compute the stack size
98  if (m5reg.submode == SixtyFourBitMode) {
99  m5reg.stack = 3;
100  } else if (ssAttr.defaultSize) {
101  m5reg.stack = 2;
102  } else {
103  m5reg.stack = 1;
104  }
105 
106  regVal[misc_reg::M5Reg] = m5reg;
107  if (tc)
108  tc->getDecoderPtr()->as<Decoder>().setM5Reg(m5reg);
109 }
110 
111 void
113 {
114  // Blank everything. 0 might not be an appropriate value for some things,
115  // but it is for most.
116  memset(regVal, 0, misc_reg::NumRegs * sizeof(RegVal));
117 
118  // If some state should be non-zero after a reset, set those values here.
119  regVal[misc_reg::Cr0] = 0x0000000060000010ULL;
120 
121  regVal[misc_reg::Mtrrcap] = 0x0508;
122 
123  regVal[misc_reg::McgCap] = 0x104;
124 
125  regVal[misc_reg::Pat] = 0x0007040600070406ULL;
126 
127  regVal[misc_reg::Syscfg] = 0x20601;
128 
129  regVal[misc_reg::TopMem] = 0x4000000;
130 
131  regVal[misc_reg::Dr6] = (mask(8) << 4) | (mask(16) << 16);
132  regVal[misc_reg::Dr7] = 1 << 10;
133 
134  LocalApicBase lApicBase = 0;
135  lApicBase.base = 0xFEE00000 >> 12;
136  lApicBase.enable = 1;
137  // The "bsp" bit will be set when this register is read, since then we'll
138  // have a ThreadContext to check the contextId from.
139  regVal[misc_reg::ApicBase] = lApicBase;
140 }
141 
142 namespace
143 {
144 
145 /* Not applicable to X86 */
146 RegClass vecRegClass(VecRegClass, VecRegClassName, 1, debug::IntRegs);
149  debug::IntRegs);
150 RegClass matRegClass(MatRegClass, MatRegClassName, 1, debug::MatRegs);
151 
152 } // anonymous namespace
153 
154 ISA::ISA(const X86ISAParams &p) : BaseISA(p), vendorString(p.vendor_string)
155 {
156  fatal_if(vendorString.size() != 12,
157  "CPUID vendor string must be 12 characters\n");
158 
159  _regClasses.push_back(&flatIntRegClass);
160  _regClasses.push_back(&flatFloatRegClass);
161  _regClasses.push_back(&vecRegClass);
162  _regClasses.push_back(&vecElemClass);
163  _regClasses.push_back(&vecPredRegClass);
164  _regClasses.push_back(&matRegClass);
165  _regClasses.push_back(&ccRegClass);
166  _regClasses.push_back(&miscRegClass);
167 
168  clear();
169 }
170 
171 static void
173 {
174  // This function assumes no side effects other than TLB invalidation
175  // need to be considered while copying state. That will likely not be
176  // true in the future.
177  for (int i = 0; i < misc_reg::NumRegs; ++i) {
178  if (!misc_reg::isValid(i))
179  continue;
180 
182  }
183 
184  // The TSC has to be updated with side-effects if the CPUs in a
185  // CPU switch have different frequencies.
187 
188  dest->getMMUPtr()->flushAll();
189 }
190 
191 void
193 {
194  //copy int regs
195  for (auto &id: flatIntRegClass)
196  tc->setReg(id, src->getReg(id));
197  //copy float regs
198  for (auto &id: flatFloatRegClass)
199  tc->setReg(id, src->getReg(id));
200  //copy condition-code regs
201  for (auto &id: ccRegClass)
202  tc->setReg(id, src->getReg(id));
203  copyMiscRegs(src, tc);
204  tc->pcState(src->pcState());
205 }
206 
207 RegVal
209 {
210  // Make sure we're not dealing with an illegal control register.
211  // Instructions should filter out these indexes, and nothing else should
212  // attempt to read them directly.
213  assert(misc_reg::isValid(idx));
214 
215  return regVal[idx];
216 }
217 
218 RegVal
220 {
221  if (idx == misc_reg::Tsc) {
222  return regVal[misc_reg::Tsc] + tc->getCpuPtr()->curCycle();
223  }
224 
225  if (idx == misc_reg::Fsw) {
226  RegVal fsw = regVal[misc_reg::Fsw];
228  return insertBits(fsw, 13, 11, top);
229  }
230 
231  if (idx == misc_reg::ApicBase) {
232  LocalApicBase base = regVal[misc_reg::ApicBase];
233  base.bsp = (tc->contextId() == 0);
234  return base;
235  }
236 
237  return readMiscRegNoEffect(idx);
238 }
239 
240 void
242 {
243  // Make sure we're not dealing with an illegal control register.
244  // Instructions should filter out these indexes, and nothing else should
245  // attempt to write to them directly.
246  assert(misc_reg::isValid(idx));
247 
248  HandyM5Reg m5Reg = regVal[misc_reg::M5Reg];
249  int reg_width = 64;
250  switch (idx) {
251  case misc_reg::X87Top:
252  reg_width = 3;
253  break;
254  case misc_reg::Ftw:
255  reg_width = 8;
256  break;
257  case misc_reg::Fsw:
258  case misc_reg::Fcw:
259  case misc_reg::Fop:
260  reg_width = 16;
261  break;
262  case misc_reg::Mxcsr:
263  reg_width = 32;
264  break;
265  case misc_reg::Fiseg:
266  case misc_reg::Foseg:
267  if (m5Reg.submode != SixtyFourBitMode)
268  reg_width = 16;
269  break;
270  case misc_reg::Fioff:
271  case misc_reg::Fooff:
272  if (m5Reg.submode != SixtyFourBitMode)
273  reg_width = 32;
274  break;
275  default:
276  break;
277  }
278 
279  regVal[idx] = val & mask(reg_width);
280 }
281 
282 void
284 {
285  RegVal newVal = val;
286  switch (idx) {
287  case misc_reg::Cr0:
288  {
289  CR0 toggled = regVal[idx] ^ val;
290  CR0 newCR0 = val;
291  Efer efer = regVal[misc_reg::Efer];
292  if (toggled.pg && efer.lme) {
293  if (newCR0.pg) {
294  //Turning on long mode
295  efer.lma = 1;
296  regVal[misc_reg::Efer] = efer;
297  } else {
298  //Turning off long mode
299  efer.lma = 0;
300  regVal[misc_reg::Efer] = efer;
301  }
302  }
303  if (toggled.pg) {
304  tc->getMMUPtr()->flushAll();
305  }
306  //This must always be 1.
307  newCR0.et = 1;
308  newVal = newCR0;
310  newCR0,
314  }
315  break;
316  case misc_reg::Cr2:
317  break;
318  case misc_reg::Cr3:
319  static_cast<MMU *>(tc->getMMUPtr())->flushNonGlobal();
320  break;
321  case misc_reg::Cr4:
322  {
323  CR4 toggled = regVal[idx] ^ val;
324  if (toggled.pae || toggled.pse || toggled.pge) {
325  tc->getMMUPtr()->flushAll();
326  }
327  }
328  break;
329  case misc_reg::Cr8:
330  break;
331  case misc_reg::Rflags:
332  {
333  RFLAGS rflags = val;
334  panic_if(rflags.vm, "Virtual 8086 mode is not supported.");
335  break;
336  }
337  case misc_reg::CsAttr:
338  {
339  SegAttr toggled = regVal[idx] ^ val;
340  SegAttr newCSAttr = val;
341  if (toggled.longMode) {
342  if (newCSAttr.longMode) {
347  } else {
352  }
353  }
356  newCSAttr,
359  }
360  break;
361  case misc_reg::SsAttr:
365  val,
367  break;
368  // These segments always actually use their bases, or in other words
369  // their effective bases must stay equal to their actual bases.
370  case misc_reg::FsBase:
371  case misc_reg::GsBase:
372  case misc_reg::HsBase:
373  case misc_reg::TslBase:
374  case misc_reg::TsgBase:
375  case misc_reg::TrBase:
376  case misc_reg::IdtrBase:
378  break;
379  // These segments ignore their bases in 64 bit mode.
380  // their effective bases must stay equal to their actual bases.
381  case misc_reg::EsBase:
382  case misc_reg::CsBase:
383  case misc_reg::SsBase:
384  case misc_reg::DsBase:
385  {
386  Efer efer = regVal[misc_reg::Efer];
387  SegAttr csAttr = regVal[misc_reg::CsAttr];
388  if (!efer.lma || !csAttr.longMode) // Check for non 64 bit mode.
391  }
392  break;
393  case misc_reg::Tsc:
395  return;
396  case misc_reg::Dr0:
397  case misc_reg::Dr1:
398  case misc_reg::Dr2:
399  case misc_reg::Dr3:
400  /* These should eventually set up breakpoints. */
401  break;
402  case misc_reg::Dr4:
403  idx = misc_reg::Dr6;
404  [[fallthrough]];
405  case misc_reg::Dr6:
406  {
407  DR6 dr6 = regVal[misc_reg::Dr6];
408  DR6 newDR6 = val;
409  dr6.b0 = newDR6.b0;
410  dr6.b1 = newDR6.b1;
411  dr6.b2 = newDR6.b2;
412  dr6.b3 = newDR6.b3;
413  dr6.bd = newDR6.bd;
414  dr6.bs = newDR6.bs;
415  dr6.bt = newDR6.bt;
416  newVal = dr6;
417  }
418  break;
419  case misc_reg::Dr5:
420  idx = misc_reg::Dr7;
421  [[fallthrough]];
422  case misc_reg::Dr7:
423  {
424  DR7 dr7 = regVal[misc_reg::Dr7];
425  DR7 newDR7 = val;
426  dr7.l0 = newDR7.l0;
427  dr7.g0 = newDR7.g0;
428  if (dr7.l0 || dr7.g0) {
429  panic("Debug register breakpoints not implemented.\n");
430  } else {
431  /* Disable breakpoint 0. */
432  }
433  dr7.l1 = newDR7.l1;
434  dr7.g1 = newDR7.g1;
435  if (dr7.l1 || dr7.g1) {
436  panic("Debug register breakpoints not implemented.\n");
437  } else {
438  /* Disable breakpoint 1. */
439  }
440  dr7.l2 = newDR7.l2;
441  dr7.g2 = newDR7.g2;
442  if (dr7.l2 || dr7.g2) {
443  panic("Debug register breakpoints not implemented.\n");
444  } else {
445  /* Disable breakpoint 2. */
446  }
447  dr7.l3 = newDR7.l3;
448  dr7.g3 = newDR7.g3;
449  if (dr7.l3 || dr7.g3) {
450  panic("Debug register breakpoints not implemented.\n");
451  } else {
452  /* Disable breakpoint 3. */
453  }
454  dr7.gd = newDR7.gd;
455  dr7.rw0 = newDR7.rw0;
456  dr7.len0 = newDR7.len0;
457  dr7.rw1 = newDR7.rw1;
458  dr7.len1 = newDR7.len1;
459  dr7.rw2 = newDR7.rw2;
460  dr7.len2 = newDR7.len2;
461  dr7.rw3 = newDR7.rw3;
462  dr7.len3 = newDR7.len3;
463  }
464  break;
465  case misc_reg::M5Reg:
466  // Writing anything to the m5reg with side effects makes it update
467  // based on the current values of the relevant registers. The actual
468  // value written is discarded.
474  return;
475  default:
476  break;
477  }
478  setMiscRegNoEffect(idx, newVal);
479 }
480 
481 void
483 {
485 }
486 
487 void
489 {
496 }
497 
498 void
500 {
502  tc->getDecoderPtr()->as<Decoder>().setM5Reg(regVal[misc_reg::M5Reg]);
503 }
504 
505 std::string
507 {
508  return vendorString;
509 }
510 
511 } // namespace X86ISA
512 } // namespace gem5
gem5::X86ISA::mask
mask
Definition: misc.hh:803
gem5::ThreadContext::readMiscReg
virtual RegVal readMiscReg(RegIndex misc_reg)=0
gem5::X86ISA::misc_reg::Dr0
@ Dr0
Definition: misc.hh:135
gem5::X86ISA::ISA::copyRegsFrom
void copyRegsFrom(ThreadContext *src) override
Definition: isa.cc:192
gem5::BaseISA::tc
ThreadContext * tc
Definition: isa.hh:66
gem5::X86ISA::misc_reg::Fsw
@ Fsw
Definition: misc.hh:392
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
mmu.hh
gem5::X86ISA::misc_reg::GsBase
@ GsBase
Definition: misc.hh:328
gem5::Clocked::curCycle
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
Definition: clocked_object.hh:195
serialize.hh
gem5::X86ISA::misc_reg::SsBase
@ SsBase
Definition: misc.hh:325
gem5::VecElemClass
@ VecElemClass
Vector Register Native Elem lane.
Definition: reg_class.hh:65
gem5::VecRegClassName
constexpr char VecRegClassName[]
Definition: reg_class.hh:76
gem5::ThreadContext::getReg
virtual RegVal getReg(const RegId &reg) const
Definition: thread_context.cc:180
gem5::InstDecoder::as
Type & as()
Definition: decoder.hh:71
gem5::X86ISA::ISA::vendorString
std::string vendorString
Definition: isa.hh:60
gem5::X86ISA::copyMiscRegs
static void copyMiscRegs(ThreadContext *src, ThreadContext *dest)
Definition: isa.cc:172
gem5::ThreadContext::getMMUPtr
virtual BaseMMU * getMMUPtr()=0
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::ThreadContext::pcState
virtual const PCStateBase & pcState() const =0
gem5::VecPredRegClassName
constexpr char VecPredRegClassName[]
Definition: reg_class.hh:78
gem5::X86ISA::ISA::ISA
ISA(const Params &p)
Definition: isa.cc:154
ccr.hh
gem5::X86ISA::misc_reg::CsBase
@ CsBase
Definition: misc.hh:324
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:776
gem5::X86ISA::misc_reg::CsEffBase
@ CsEffBase
Definition: misc.hh:342
gem5::X86ISA::misc_reg::segEffBase
static RegIndex segEffBase(int index)
Definition: misc.hh:519
gem5::X86ISA::misc_reg::SsEffBase
@ SsEffBase
Definition: misc.hh:343
gem5::X86ISA::misc_reg::DsBase
@ DsBase
Definition: misc.hh:326
gem5::X86ISA::misc_reg::Fiseg
@ Fiseg
Definition: misc.hh:395
gem5::X86ISA::misc_reg::Foseg
@ Foseg
Definition: misc.hh:397
top
Definition: test.h:61
gem5::ThreadContext::contextId
virtual ContextID contextId() const =0
gem5::X86ISA::misc_reg::Dr1
@ Dr1
Definition: misc.hh:136
gem5::X86ISA::misc_reg::Cr3
@ Cr3
Definition: misc.hh:119
gem5::X86ISA::base
Bitfield< 51, 12 > base
Definition: pagetable.hh:141
gem5::X86ISA::Virtual8086Mode
@ Virtual8086Mode
Definition: types.hh:207
gem5::X86ISA::misc_reg::EsBase
@ EsBase
Definition: misc.hh:323
gem5::X86ISA::SixtyFourBitMode
@ SixtyFourBitMode
Definition: types.hh:204
gem5::X86ISA::misc_reg::Dr4
@ Dr4
Definition: misc.hh:139
gem5::X86ISA::misc_reg::Dr2
@ Dr2
Definition: misc.hh:137
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gem5::X86ISA::miscRegClass
constexpr RegClass miscRegClass(MiscRegClass, MiscRegClassName, misc_reg::NumRegs, debug::MiscRegs)
decoder.hh
gem5::X86ISA::misc_reg::TsgBase
@ TsgBase
Definition: misc.hh:331
gem5::VecPredRegClass
@ VecPredRegClass
Definition: reg_class.hh:66
gem5::X86ISA::misc_reg::Dr5
@ Dr5
Definition: misc.hh:140
gem5::X86ISA::flatIntRegClass
constexpr RegClass flatIntRegClass
Definition: int.hh:112
gem5::X86ISA::misc_reg::Cr0
@ Cr0
Definition: misc.hh:116
gem5::X86ISA::misc_reg::isValid
static bool isValid(int index)
Definition: misc.hh:412
gem5::X86ISA::misc_reg::Efer
@ Efer
Definition: misc.hh:256
gem5::X86ISA::misc_reg::Rflags
@ Rflags
Definition: misc.hh:145
gem5::X86ISA::ISA::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: isa.cc:482
gem5::X86ISA::misc_reg::DsEffBase
@ DsEffBase
Definition: misc.hh:344
gem5::X86ISA::misc_reg::SegBaseBase
@ SegBaseBase
Definition: misc.hh:322
gem5::BaseISA::_regClasses
RegClasses _regClasses
Definition: isa.hh:68
gem5::X86ISA::ISA::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: isa.cc:488
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
gem5::MatRegClass
@ MatRegClass
Matrix Register.
Definition: reg_class.hh:67
gem5::X86ISA::ProtectedMode
@ ProtectedMode
Definition: types.hh:206
gem5::X86ISA::ISA::setThreadContext
void setThreadContext(ThreadContext *_tc) override
Definition: isa.cc:499
gem5::X86ISA::misc_reg::Cr2
@ Cr2
Definition: misc.hh:118
int.hh
gem5::X86ISA::misc_reg::Syscfg
@ Syscfg
Definition: misc.hh:282
gem5::ThreadContext::getDecoderPtr
virtual InstDecoder * getDecoderPtr()=0
gem5::X86ISA::misc_reg::TrBase
@ TrBase
Definition: misc.hh:334
gem5::X86ISA::misc_reg::Fop
@ Fop
Definition: misc.hh:399
gem5::BaseISA::setThreadContext
virtual void setThreadContext(ThreadContext *_tc)
Definition: isa.hh:82
gem5::X86ISA::misc_reg::Fioff
@ Fioff
Definition: misc.hh:396
gem5::MatRegClassName
constexpr char MatRegClassName[]
Definition: reg_class.hh:79
gem5::X86ISA::Decoder
Definition: decoder.hh:57
gem5::X86ISA::misc_reg::Mtrrcap
@ Mtrrcap
Definition: misc.hh:156
gem5::insertBits
constexpr T insertBits(T val, unsigned first, unsigned last, B bit_val)
Returns val with bits first to last set to the LSBs of bit_val.
Definition: bitfield.hh:182
compiler.hh
SERIALIZE_ARRAY
#define SERIALIZE_ARRAY(member, size)
Definition: serialize.hh:610
gem5::X86ISA::misc_reg::ApicBase
@ ApicBase
Definition: misc.hh:403
gem5::ThreadContext::readMiscRegNoEffect
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
gem5::X86ISA::misc_reg::X87Top
@ X87Top
Definition: misc.hh:388
gem5::VecElemClassName
constexpr char VecElemClassName[]
Definition: reg_class.hh:77
gem5::X86ISA::flatFloatRegClass
constexpr RegClass flatFloatRegClass
Definition: float.hh:131
gem5::X86ISA::misc_reg::Mxcsr
@ Mxcsr
Definition: misc.hh:390
gem5::RegClass
Definition: reg_class.hh:184
gem5::X86ISA::misc_reg::IdtrBase
@ IdtrBase
Definition: misc.hh:335
gem5::X86ISA::ISA::clear
void clear() override
Definition: isa.cc:112
gem5::X86ISA::misc_reg::HsBase
@ HsBase
Definition: misc.hh:329
gem5::X86ISA::ISA::getVendorString
std::string getVendorString() const
Definition: isa.cc:506
gem5::ArmISA::vecRegClass
constexpr RegClass vecRegClass
Definition: vec.hh:101
gem5::X86ISA::ISA::setMiscReg
void setMiscReg(RegIndex idx, RegVal val) override
Definition: isa.cc:283
isa.hh
gem5::X86ISA::misc_reg::Cr4
@ Cr4
Definition: misc.hh:120
gem5::X86ISA::ISA::regVal
RegVal regVal[misc_reg::NumRegs]
Definition: isa.hh:56
gem5::X86ISA::CompatabilityMode
@ CompatabilityMode
Definition: types.hh:205
gem5::X86ISA::ISA::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex idx, RegVal val) override
Definition: isa.cc:241
gem5::X86ISA::misc_reg::FsBase
@ FsBase
Definition: misc.hh:327
gem5::X86ISA::misc_reg::McgCap
@ McgCap
Definition: misc.hh:162
gem5::X86ISA::misc_reg::Dr3
@ Dr3
Definition: misc.hh:138
panic_if
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
Definition: logging.hh:214
gem5::X86ISA::misc_reg::SsAttr
@ SsAttr
Definition: misc.hh:375
gem5::X86ISA::misc_reg::NumRegs
@ NumRegs
Definition: misc.hh:408
gem5::ArmISA::vecElemClass
constexpr RegClass vecElemClass
Definition: vec.hh:105
gem5::X86ISA::misc_reg::Dr7
@ Dr7
Definition: misc.hh:142
gem5::X86ISA::misc_reg::Pat
@ Pat
Definition: misc.hh:207
base.hh
gem5::X86ISA::ccRegClass
constexpr RegClass ccRegClass(CCRegClass, CCRegClassName, cc_reg::NumRegs, debug::CCRegs)
UNSERIALIZE_ARRAY
#define UNSERIALIZE_ARRAY(member, size)
Definition: serialize.hh:618
gem5::X86ISA::misc_reg::Fooff
@ Fooff
Definition: misc.hh:398
gem5::ThreadContext::setMiscReg
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
gem5::X86ISA::ISA::updateHandyM5Reg
void updateHandyM5Reg(Efer efer, CR0 cr0, SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags)
Definition: isa.cc:51
gem5::X86ISA::misc_reg::Fcw
@ Fcw
Definition: misc.hh:391
gem5::X86ISA::misc_reg::Tsc
@ Tsc
Definition: misc.hh:154
gem5::BaseMMU::flushAll
virtual void flushAll()
Definition: mmu.cc:81
gem5::X86ISA::misc_reg::Cr8
@ Cr8
Definition: misc.hh:124
gem5::X86ISA::RealMode
@ RealMode
Definition: types.hh:208
gem5::X86ISA::p
Bitfield< 0 > p
Definition: pagetable.hh:151
gem5::X86ISA::misc_reg::CsAttr
@ CsAttr
Definition: misc.hh:374
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
gem5::ThreadContext::getCpuPtr
virtual BaseCPU * getCpuPtr()=0
gem5::X86ISA::misc_reg::TslBase
@ TslBase
Definition: misc.hh:330
gem5::VecRegClass
@ VecRegClass
Vector Register.
Definition: reg_class.hh:63
gem5::ArmISA::vecPredRegClass
constexpr RegClass vecPredRegClass
Definition: vec.hh:109
gem5::BaseISA
Definition: isa.hh:58
gem5::RegIndex
uint16_t RegIndex
Definition: types.hh:176
gem5::X86ISA::misc_reg::Dr6
@ Dr6
Definition: misc.hh:141
fatal_if
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
Definition: logging.hh:236
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::X86ISA::misc_reg::Ftw
@ Ftw
Definition: misc.hh:393
gem5::X86ISA::misc_reg::M5Reg
@ M5Reg
Definition: misc.hh:148
gem5::X86ISA::ISA::readMiscReg
RegVal readMiscReg(RegIndex idx) override
Definition: isa.cc:219
gem5::ArmISA::matRegClass
constexpr RegClass matRegClass
Definition: mat.hh:92
gem5::X86ISA::misc_reg::EsEffBase
@ EsEffBase
Definition: misc.hh:341
misc.hh
thread_context.hh
float.hh
gem5::X86ISA::ISA::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex idx) const override
Definition: isa.cc:208
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::X86ISA::misc_reg::TopMem
@ TopMem
Definition: misc.hh:294
gem5::ThreadContext::setMiscRegNoEffect
virtual void setMiscRegNoEffect(RegIndex misc_reg, RegVal val)=0
gem5::ThreadContext::setReg
virtual void setReg(const RegId &reg, RegVal val)
Definition: thread_context.cc:188
gem5::X86ISA::MMU
Definition: mmu.hh:52

Generated on Sun Jul 30 2023 01:56:46 for gem5 by doxygen 1.8.17