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/mips/isa.hh"
30 
31 #include "arch/mips/mt.hh"
34 #include "arch/mips/regs/float.hh"
35 #include "arch/mips/regs/int.hh"
36 #include "arch/mips/regs/misc.hh"
37 #include "base/bitfield.hh"
38 #include "cpu/base.hh"
39 #include "cpu/reg_class.hh"
40 #include "cpu/thread_context.hh"
41 #include "debug/MatRegs.hh"
42 #include "debug/MipsPRA.hh"
43 #include "params/MipsISA.hh"
44 
45 namespace gem5
46 {
47 
48 namespace MipsISA
49 {
50 
51 std::string
53 {
54  "Index", "MVPControl", "MVPConf0", "MVPConf1", "", "", "", "",
55  "Random", "VPEControl", "VPEConf0", "VPEConf1",
56  "YQMask", "VPESchedule", "VPEScheFBack", "VPEOpt",
57  "EntryLo0", "TCStatus", "TCBind", "TCRestart",
58  "TCHalt", "TCContext", "TCSchedule", "TCScheFBack",
59  "EntryLo1", "", "", "", "", "", "", "",
60  "Context", "ContextConfig", "", "", "", "", "", "",
61  "PageMask", "PageGrain", "", "", "", "", "", "",
62  "Wired", "SRSConf0", "SRCConf1", "SRSConf2",
63  "SRSConf3", "SRSConf4", "", "",
64  "HWREna", "", "", "", "", "", "", "",
65  "BadVAddr", "", "", "", "", "", "", "",
66  "Count", "", "", "", "", "", "", "",
67  "EntryHi", "", "", "", "", "", "", "",
68  "Compare", "", "", "", "", "", "", "",
69  "Status", "IntCtl", "SRSCtl", "SRSMap", "", "", "", "",
70  "Cause", "", "", "", "", "", "", "",
71  "EPC", "", "", "", "", "", "", "",
72  "PRId", "EBase", "", "", "", "", "", "",
73  "Config", "Config1", "Config2", "Config3", "", "", "", "",
74  "LLAddr", "", "", "", "", "", "", "",
75  "WatchLo0", "WatchLo1", "WatchLo2", "WatchLo3",
76  "WatchLo4", "WatchLo5", "WatchLo6", "WatchLo7",
77  "WatchHi0", "WatchHi1", "WatchHi2", "WatchHi3",
78  "WatchHi4", "WatchHi5", "WatchHi6", "WatchHi7",
79  "XCContext64", "", "", "", "", "", "", "",
80  "", "", "", "", "", "", "", "",
81  "", "", "", "", "", "", "", "",
82  "Debug", "TraceControl1", "TraceControl2", "UserTraceData",
83  "TraceBPC", "", "", "",
84  "DEPC", "", "", "", "", "", "", "",
85  "PerfCnt0", "PerfCnt1", "PerfCnt2", "PerfCnt3",
86  "PerfCnt4", "PerfCnt5", "PerfCnt6", "PerfCnt7",
87  "ErrCtl", "", "", "", "", "", "", "",
88  "CacheErr0", "CacheErr1", "CacheErr2", "CacheErr3", "", "", "", "",
89  "TagLo0", "DataLo1", "TagLo2", "DataLo3",
90  "TagLo4", "DataLo5", "TagLo6", "DataLo7",
91  "TagHi0", "DataHi1", "TagHi2", "DataHi3",
92  "TagHi4", "DataHi5", "TagHi6", "DataHi7",
93  "ErrorEPC", "", "", "", "", "", "", "",
94  "DESAVE", "", "", "", "", "", "", "",
95  "LLFlag"
96 };
97 
98 namespace
99 {
100 
101 /* Not applicable to MIPS. */
102 constexpr RegClass vecRegClass(VecRegClass, VecRegClassName, 1,
103  debug::IntRegs);
104 constexpr RegClass vecElemClass(VecElemClass, VecElemClassName, 2,
105  debug::IntRegs);
107  debug::IntRegs);
108 constexpr RegClass matRegClass(MatRegClass, MatRegClassName, 1, debug::MatRegs);
109 constexpr RegClass ccRegClass(CCRegClass, CCRegClassName, 0, debug::IntRegs);
110 
111 } // anonymous namespace
112 
113 ISA::ISA(const Params &p) : BaseISA(p), numThreads(p.num_threads),
114  numVpes(p.num_vpes)
115 {
116  _regClasses.push_back(&intRegClass);
117  _regClasses.push_back(&floatRegClass);
118  _regClasses.push_back(&vecRegClass);
119  _regClasses.push_back(&vecElemClass);
120  _regClasses.push_back(&vecPredRegClass);
121  _regClasses.push_back(&matRegClass);
122  _regClasses.push_back(&ccRegClass);
123  _regClasses.push_back(&miscRegClass);
124 
126  bankType.resize(misc_reg::NumRegs);
127 
128  for (int i = 0; i < misc_reg::NumRegs; i++) {
129  miscRegFile[i].resize(1);
131  }
132 
134 
135  for (int i = 0; i < misc_reg::NumRegs; i++) {
136  miscRegFile_WriteMask[i].push_back(0);
137  }
138 
139  // Initialize all Per-VPE regs
140  uint32_t per_vpe_regs[] = { misc_reg::VpeControl,
148  };
149  uint32_t num_vpe_regs = sizeof(per_vpe_regs) / 4;
150  for (int i = 0; i < num_vpe_regs; i++) {
151  if (numVpes > 1) {
152  miscRegFile[per_vpe_regs[i]].resize(numVpes);
153  }
154  bankType[per_vpe_regs[i]] = perVirtProcessor;
155  }
156 
157  // Initialize all Per-TC regs
158  uint32_t per_tc_regs[] = { misc_reg::Status,
164  };
165  uint32_t num_tc_regs = sizeof(per_tc_regs) / 4;
166 
167  for (int i = 0; i < num_tc_regs; i++) {
168  miscRegFile[per_tc_regs[i]].resize(numThreads);
169  bankType[per_tc_regs[i]] = perThreadContext;
170  }
171 
172  clear();
173 }
174 
175 void
177 {
178  for (int i = 0; i < misc_reg::NumRegs; i++) {
179  for (int j = 0; j < miscRegFile[i].size(); j++)
180  miscRegFile[i][j] = 0;
181 
182  for (int k = 0; k < miscRegFile_WriteMask[i].size(); k++)
183  miscRegFile_WriteMask[i][k] = (long unsigned int)(-1);
184  }
185 }
186 
187 void
189 {
190  // First loop through the integer registers.
191  for (auto &id: intRegClass)
192  tc->setReg(id, src->getReg(id));
193 
194  // Then loop through the floating point registers.
195  for (auto &id: floatRegClass)
196  tc->setReg(id, src->getReg(id));
197 
198  // Copy misc. registers
199  for (int i = 0; i < misc_reg::NumRegs; i++)
201 
202  // Copy over the PC State
203  tc->pcState(src->pcState());
204 }
205 
206 
207 void
209 {
210  DPRINTF(MipsPRA, "Resetting CP0 State with %i TCs and %i VPEs\n",
212 
213  CoreSpecific cp;
214  panic("CP state must be set before the following code is used");
215 
216  // Do Default CP0 initialization HERE
217 
218  // Do Initialization for MT cores here (eventually use
219  // core_name parameter to toggle this initialization)
220  // ===================================================
221  DPRINTF(MipsPRA, "Initializing CP0 State.... ");
222 
225  procId.coId = cp.CP0_PRId_CompanyID;
226  procId.procId = cp.CP0_PRId_ProcessorID;
227  procId.rev = cp.CP0_PRId_Revision;
229 
230  // Now, create Write Mask for ProcID register
231  RegVal procIDMask = 0; // Read-Only register
232  replaceBits(procIDMask, 32, 0, 0);
233  setRegMask(misc_reg::Prid, procIDMask);
234 
235  // Config
236  ConfigReg cfg = readMiscRegNoEffect(misc_reg::Config);
237  cfg.be = cp.CP0_Config_BE;
238  cfg.at = cp.CP0_Config_AT;
239  cfg.ar = cp.CP0_Config_AR;
240  cfg.mt = cp.CP0_Config_MT;
241  cfg.vi = cp.CP0_Config_VI;
242  cfg.m = 1;
244  // Now, create Write Mask for Config register
245  RegVal cfg_Mask = 0x7FFF0007;
246  replaceBits(cfg_Mask, 32, 0, 0);
247  setRegMask(misc_reg::Config, cfg_Mask);
248 
249  // Config1
250  Config1Reg cfg1 = readMiscRegNoEffect(misc_reg::Config1);
251  cfg1.mmuSize = cp.CP0_Config1_MMU;
252  cfg1.is = cp.CP0_Config1_IS;
253  cfg1.il = cp.CP0_Config1_IL;
254  cfg1.ia = cp.CP0_Config1_IA;
255  cfg1.ds = cp.CP0_Config1_DS;
256  cfg1.dl = cp.CP0_Config1_DL;
257  cfg1.da = cp.CP0_Config1_DA;
258  cfg1.fp = cp.CP0_Config1_FP;
259  cfg1.ep = cp.CP0_Config1_EP;
260  cfg1.wr = cp.CP0_Config1_WR;
261  cfg1.md = cp.CP0_Config1_MD;
262  cfg1.c2 = cp.CP0_Config1_C2;
263  cfg1.pc = cp.CP0_Config1_PC;
264  cfg1.m = cp.CP0_Config1_M;
266  // Now, create Write Mask for Config register
267  RegVal cfg1_Mask = 0; // Read Only Register
268  replaceBits(cfg1_Mask, 32,0 , 0);
269  setRegMask(misc_reg::Config1, cfg1_Mask);
270 
271  // Config2
272  Config2Reg cfg2 = readMiscRegNoEffect(misc_reg::Config2);
273  cfg2.tu = cp.CP0_Config2_TU;
274  cfg2.ts = cp.CP0_Config2_TS;
275  cfg2.tl = cp.CP0_Config2_TL;
276  cfg2.ta = cp.CP0_Config2_TA;
277  cfg2.su = cp.CP0_Config2_SU;
278  cfg2.ss = cp.CP0_Config2_SS;
279  cfg2.sl = cp.CP0_Config2_SL;
280  cfg2.sa = cp.CP0_Config2_SA;
281  cfg2.m = cp.CP0_Config2_M;
283  // Now, create Write Mask for Config register
284  RegVal cfg2_Mask = 0x7000F000; // Read Only Register
285  replaceBits(cfg2_Mask, 32, 0, 0);
286  setRegMask(misc_reg::Config2, cfg2_Mask);
287 
288  // Config3
289  Config3Reg cfg3 = readMiscRegNoEffect(misc_reg::Config3);
290  cfg3.dspp = cp.CP0_Config3_DSPP;
291  cfg3.lpa = cp.CP0_Config3_LPA;
292  cfg3.veic = cp.CP0_Config3_VEIC;
293  cfg3.vint = cp.CP0_Config3_VInt;
294  cfg3.sp = cp.CP0_Config3_SP;
295  cfg3.mt = cp.CP0_Config3_MT;
296  cfg3.sm = cp.CP0_Config3_SM;
297  cfg3.tl = cp.CP0_Config3_TL;
299  // Now, create Write Mask for Config register
300  RegVal cfg3_Mask = 0; // Read Only Register
301  replaceBits(cfg3_Mask, 32,0 , 0);
302  setRegMask(misc_reg::Config3, cfg3_Mask);
303 
304  // EBase - CPUNum
305  EBaseReg eBase = readMiscRegNoEffect(misc_reg::Ebase);
306  eBase.cpuNum = cp.CP0_EBase_CPUNum;
307  replaceBits(eBase, 31, 31, 1);
309  // Now, create Write Mask for Config register
310  RegVal EB_Mask = 0x3FFFF000;// Except Exception Base, the
311  // entire register is read only
312  replaceBits(EB_Mask, 32, 0, 0);
313  setRegMask(misc_reg::Ebase, EB_Mask);
314 
315  // SRS Control - HSS (Highest Shadow Set)
316  SRSCtlReg scsCtl = readMiscRegNoEffect(misc_reg::Srsctl);
317  scsCtl.hss = cp.CP0_SrsCtl_HSS;
319  // Now, create Write Mask for the SRS Ctl register
320  RegVal SC_Mask = 0x0000F3C0;
321  replaceBits(SC_Mask, 32, 0, 0);
322  setRegMask(misc_reg::Srsctl, SC_Mask);
323 
324  // IntCtl - IPTI, IPPCI
325  IntCtlReg intCtl = readMiscRegNoEffect(misc_reg::Intctl);
326  intCtl.ipti = cp.CP0_IntCtl_IPTI;
327  intCtl.ippci = cp.CP0_IntCtl_IPPCI;
329  // Now, create Write Mask for the IntCtl register
330  RegVal IC_Mask = 0x000003E0;
331  replaceBits(IC_Mask, 32, 0, 0);
332  setRegMask(misc_reg::Intctl, IC_Mask);
333 
334  // Watch Hi - M - FIXME (More than 1 Watch register)
335  WatchHiReg watchHi = readMiscRegNoEffect(misc_reg::Watchhi0);
336  watchHi.m = cp.CP0_WatchHi_M;
338  // Now, create Write Mask for the IntCtl register
339  RegVal wh_Mask = 0x7FFF0FFF;
340  replaceBits(wh_Mask, 32, 0, 0);
341  setRegMask(misc_reg::Watchhi0, wh_Mask);
342 
343  // Perf Ctr - M - FIXME (More than 1 PerfCnt Pair)
344  PerfCntCtlReg perfCntCtl = readMiscRegNoEffect(misc_reg::Perfcnt0);
345  perfCntCtl.m = cp.CP0_PerfCtr_M;
346  perfCntCtl.w = cp.CP0_PerfCtr_W;
348  // Now, create Write Mask for the IntCtl register
349  RegVal pc_Mask = 0x00007FF;
350  replaceBits(pc_Mask, 32, 0, 0);
351  setRegMask(misc_reg::Perfcnt0, pc_Mask);
352 
353  // Random
355  // Now, create Write Mask for the IntCtl register
356  RegVal random_Mask = 0;
357  replaceBits(random_Mask, 32, 0, 0);
358  setRegMask(misc_reg::Cp0Random, random_Mask);
359 
360  // PageGrain
361  PageGrainReg pageGrain = readMiscRegNoEffect(misc_reg::Pagegrain);
362  pageGrain.esp = cp.CP0_Config3_SP;
364  // Now, create Write Mask for the IntCtl register
365  RegVal pg_Mask = 0x10000000;
366  replaceBits(pg_Mask, 32, 0, 0);
368 
369  // Status
371  // Only CU0 and IE are modified on a reset - everything else needs
372  // to be controlled on a per CPU model basis
373 
374  // Enable CP0 on reset
375  // status.cu0 = 1;
376 
377  // Enable ERL bit on a reset
378  status.erl = 1;
379  // Enable BEV bit on a reset
380  status.bev = 1;
381 
383  // Now, create Write Mask for the Status register
384  RegVal stat_Mask = 0xFF78FF17;
385  replaceBits(stat_Mask, 32, 0, 0);
386  setRegMask(misc_reg::Status, stat_Mask);
387 
388 
389  // MVPConf0
390  MVPConf0Reg mvpConf0 = readMiscRegNoEffect(misc_reg::MvpConf0);
391  mvpConf0.tca = 1;
392  mvpConf0.pvpe = numVpes - 1;
393  mvpConf0.ptc = numThreads - 1;
395 
396  // VPEConf0
397  VPEConf0Reg vpeConf0 = readMiscRegNoEffect(misc_reg::VpeConf0);
398  vpeConf0.mvp = 1;
400 
401  // TCBind
402  for (ThreadID tid = 0; tid < numThreads; tid++) {
403  TCBindReg tcBind = readMiscRegNoEffect(misc_reg::TcBind, tid);
404  tcBind.curTC = tid;
405  setMiscRegNoEffect(misc_reg::TcBind, tcBind, tid);
406  }
407  // TCHalt
408  TCHaltReg tcHalt = readMiscRegNoEffect(misc_reg::TcHalt);
409  tcHalt.h = 0;
411 
412  // TCStatus
413  // Set TCStatus Activated to 1 for the initial thread that is running
414  TCStatusReg tcStatus = readMiscRegNoEffect(misc_reg::TcStatus);
415  tcStatus.a = 1;
417 
418  // Set Dynamically Allocatable bit to 1 for all other threads
419  for (ThreadID tid = 1; tid < numThreads; tid++) {
420  tcStatus = readMiscRegNoEffect(misc_reg::TcStatus, tid);
421  tcStatus.da = 1;
422  setMiscRegNoEffect(misc_reg::TcStatus, tcStatus, tid);
423  }
424 
425 
426  RegVal mask = 0x7FFFFFFF;
427 
428  // Now, create Write Mask for the Index register
429  replaceBits(mask, 32, 0, 0);
431 
432  mask = 0x3FFFFFFF;
433  replaceBits(mask, 32, 0, 0);
436 
437  mask = 0xFF800000;
438  replaceBits(mask, 32, 0, 0);
440 
441  mask = 0x1FFFF800;
442  replaceBits(mask, 32, 0, 0);
444 
445  mask = 0x0;
446  replaceBits(mask, 32, 0, 0);
449 
450  mask = 0x08C00300;
451  replaceBits(mask, 32, 0, 0);
453 
454 }
455 
456 inline unsigned
458 {
459  TCBindReg tcBind = miscRegFile[misc_reg::TcBind][tid];
460  return tcBind.curVPE;
461 }
462 
463 RegVal
465 {
466  unsigned reg_sel = (bankType[idx] == perThreadContext)
467  ? tid : getVPENum(tid);
468  DPRINTF(MipsPRA, "Reading CP0 Register:%u Select:%u (%s) (%lx).\n",
469  idx / 8, idx % 8, miscRegNames[idx], miscRegFile[idx][reg_sel]);
470  return miscRegFile[idx][reg_sel];
471 }
472 
473 //@TODO: MIPS MT's register view automatically connects
474 // Status to TCStatus depending on current thread
475 //template <class TC>
476 RegVal
478 {
479  unsigned reg_sel = (bankType[idx] == perThreadContext)
480  ? tid : getVPENum(tid);
481  DPRINTF(MipsPRA,
482  "Reading CP0 Register:%u Select:%u (%s) with effect (%lx).\n",
483  idx / 8, idx % 8, miscRegNames[idx], miscRegFile[idx][reg_sel]);
484 
485  return miscRegFile[idx][reg_sel];
486 }
487 
488 void
490 {
491  unsigned reg_sel = (bankType[idx] == perThreadContext)
492  ? tid : getVPENum(tid);
493  DPRINTF(MipsPRA,
494  "[tid:%i] Setting (direct set) CP0 Register:%u "
495  "Select:%u (%s) to %#x.\n",
496  tid, idx / 8, idx % 8, miscRegNames[idx], val);
497 
498  miscRegFile[idx][reg_sel] = val;
499 }
500 
501 void
503 {
504  unsigned reg_sel = (bankType[idx] == perThreadContext)
505  ? tid : getVPENum(tid);
506  DPRINTF(MipsPRA,
507  "[tid:%i] Setting CP0 Register: %u Select: %u (%s) to %#x\n",
508  tid, idx / 8, idx % 8, miscRegNames[idx], val);
509  miscRegFile_WriteMask[idx][reg_sel] = val;
510 }
511 
512 // PROGRAMMER'S NOTES:
513 // (1) Some CP0 Registers have fields that cannot
514 // be overwritten. Make sure to handle those particular registers
515 // with care!
516 void
518 {
519  int reg_sel = (bankType[idx] == perThreadContext)
520  ? tid : getVPENum(tid);
521 
522  DPRINTF(MipsPRA,
523  "[tid:%i] Setting CP0 Register:%u "
524  "Select:%u (%s) to %#x, with effect.\n",
525  tid, idx / 8, idx % 8, miscRegNames[idx], val);
526 
527  RegVal cp0_val = filterCP0Write(idx, reg_sel, val);
528 
529  miscRegFile[idx][reg_sel] = cp0_val;
530 
532 }
533 
539 RegVal
541 {
542  RegVal retVal = val;
543 
544  // Mask off read-only regions
545  retVal &= miscRegFile_WriteMask[idx][reg_sel];
546  RegVal curVal = miscRegFile[idx][reg_sel];
547  // Mask off current alue with inverse mask (clear writeable bits)
548  curVal &= (~miscRegFile_WriteMask[idx][reg_sel]);
549  retVal |= curVal; // Combine the two
550  DPRINTF(MipsPRA,
551  "filterCP0Write: Mask: %lx, Inverse Mask: %lx, write Val: %x, "
552  "current val: %lx, written val: %x\n",
553  miscRegFile_WriteMask[idx][reg_sel],
554  ~miscRegFile_WriteMask[idx][reg_sel],
555  val, miscRegFile[idx][reg_sel], retVal);
556  return retVal;
557 }
558 
559 void
561 {
562  if (!cp0Updated) {
563  cp0Updated = true;
564 
565  //schedule UPDATE
566  auto cp0_event = new EventFunctionWrapper(
567  [this, cpu]{ processCP0Event(cpu, UpdateCP0); },
568  "Coprocessor-0 event", true, Event::CPU_Tick_Pri);
569  cpu->schedule(cp0_event, cpu->clockEdge(delay));
570  }
571 }
572 
573 void
575 {
577  //
578  // EVALUATE CP0 STATE FOR MIPS MT
579  //
581  MVPConf0Reg mvpConf0 = readMiscRegNoEffect(misc_reg::MvpConf0);
582  ThreadID num_threads = mvpConf0.ptc + 1;
583 
584  for (ThreadID tid = 0; tid < num_threads; tid++) {
585  TCStatusReg tcStatus = readMiscRegNoEffect(misc_reg::TcStatus, tid);
586  TCHaltReg tcHalt = readMiscRegNoEffect(misc_reg::TcHalt, tid);
587 
588  //@todo: add vpe/mt check here thru mvpcontrol & vpecontrol regs
589  if (tcHalt.h == 1 || tcStatus.a == 0) {
590  haltThread(cpu->getContext(tid));
591  } else if (tcHalt.h == 0 && tcStatus.a == 1) {
592  restoreThread(cpu->getContext(tid));
593  }
594  }
595 
596  num_threads = mvpConf0.ptc + 1;
597 
598  // Toggle update flag after we finished updating
599  cp0Updated = false;
600 }
601 
602 void
604 {
605  switch (cp0EventType)
606  {
607  case UpdateCP0:
608  updateCPU(cpu);
609  break;
610  }
611 }
612 
613 } // namespace MipsISA
614 } // namespace gem5
gem5::MipsISA::procId
Bitfield< 15, 8 > procId
Definition: pra_constants.hh:206
gem5::MipsISA::ISA::bankType
std::vector< BankType > bankType
Definition: isa.hh:77
misc.hh
gem5::MipsISA::mask
mask
Definition: pra_constants.hh:73
gem5::MipsISA::misc_reg::Config1
@ Config1
Definition: misc.hh:113
gem5::MipsISA::misc_reg::SrsConf0
@ SrsConf0
Definition: misc.hh:84
gem5::MipsISA::CoreSpecific::CP0_Config1_DS
unsigned CP0_Config1_DS
Definition: types.hh:125
isa.hh
gem5::MipsISA::misc_reg::Srsctl
@ Srsctl
Definition: misc.hh:102
gem5::BaseISA::tc
ThreadContext * tc
Definition: isa.hh:66
gem5::MipsISA::CoreSpecific::CP0_Config2_TA
unsigned CP0_Config2_TA
Definition: types.hh:139
gem5::MipsISA::misc_reg::Config
@ Config
Definition: misc.hh:112
gem5::MipsISA::restoreThread
void restoreThread(TC *tc)
Definition: mt.hh:152
gem5::MipsISA::misc_reg::TcContext
@ TcContext
Definition: misc.hh:71
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
gem5::MipsISA::misc_reg::VpeSchefback
@ VpeSchefback
Definition: misc.hh:63
gem5::MipsISA::misc_reg::Config3
@ Config3
Definition: misc.hh:115
gem5::MipsISA::misc_reg::Pagemask
@ Pagemask
Definition: misc.hh:80
gem5::MipsISA::CoreSpecific::CP0_Config3_SM
bool CP0_Config3_SM
Definition: types.hh:151
gem5::MipsISA::ISA::processCP0Event
void processCP0Event(BaseCPU *cpu, CP0EventType)
Process a CP0 event.
Definition: isa.cc:603
gem5::MipsISA::misc_reg::SrsConf2
@ SrsConf2
Definition: misc.hh:86
gem5::MipsISA::ISA::UpdateCP0
@ UpdateCP0
Definition: isa.hh:146
gem5::MipsISA::CoreSpecific::CP0_Config_VI
unsigned CP0_Config_VI
Definition: types.hh:119
gem5::MipsISA::misc_reg::Config2
@ Config2
Definition: misc.hh:114
gem5::MipsISA::misc_reg::Cause
@ Cause
Definition: misc.hh:105
gem5::MipsISA::misc_reg::Entrylo1
@ Entrylo1
Definition: misc.hh:75
gem5::MipsISA::misc_reg::VpeConf0
@ VpeConf0
Definition: misc.hh:59
gem5::MipsISA::CoreSpecific::CP0_Config3_LPA
bool CP0_Config3_LPA
Definition: types.hh:146
gem5::MipsISA::misc_reg::SrsConf4
@ SrsConf4
Definition: misc.hh:88
gem5::MipsISA::ISA::scheduleCP0Update
void scheduleCP0Update(BaseCPU *cpu, Cycles delay=Cycles(0))
Definition: isa.cc:560
gem5::VecElemClass
@ VecElemClass
Vector Register Native Elem lane.
Definition: reg_class.hh:65
gem5::VecRegClassName
constexpr char VecRegClassName[]
Definition: reg_class.hh:76
gem5::MipsISA::ISA::numVpes
uint8_t numVpes
Definition: isa.hh:66
gem5::ThreadContext::getReg
virtual RegVal getReg(const RegId &reg) const
Definition: thread_context.cc:180
gem5::MipsISA::CoreSpecific::CP0_Config1_IA
unsigned CP0_Config1_IA
Definition: types.hh:124
gem5::MipsISA::ISA::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex idx, RegVal val, ThreadID tid)
Definition: isa.cc:489
gem5::CCRegClass
@ CCRegClass
Condition-code register.
Definition: reg_class.hh:68
gem5::MipsISA::CoreSpecific::CP0_Config3_SP
bool CP0_Config3_SP
Definition: types.hh:149
gem5::ThreadContext::pcState
virtual const PCStateBase & pcState() const =0
pra_constants.hh
gem5::VecPredRegClassName
constexpr char VecPredRegClassName[]
Definition: reg_class.hh:78
gem5::MipsISA::misc_reg::Lladdr
@ Lladdr
Definition: misc.hh:122
gem5::replaceBits
constexpr void replaceBits(T &val, unsigned first, unsigned last, B bit_val)
A convenience function to replace bits first to last of val with bit_val in place.
Definition: bitfield.hh:213
gem5::MipsISA::misc_reg::VpeOpt
@ VpeOpt
Definition: misc.hh:64
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:776
gem5::MipsISA::misc_reg::TcBind
@ TcBind
Definition: misc.hh:68
gem5::MipsISA::misc_reg::VpeConf1
@ VpeConf1
Definition: misc.hh:60
gem5::MipsISA::CoreSpecific::CP0_IntCtl_IPPCI
unsigned CP0_IntCtl_IPPCI
Definition: types.hh:107
gem5::MipsISA::CoreSpecific::CP0_Config2_SA
unsigned CP0_Config2_SA
Definition: types.hh:143
gem5::EventManager::schedule
void schedule(Event &event, Tick when)
Definition: eventq.hh:1012
gem5::MipsISA::ISA::numThreads
uint8_t numThreads
Definition: isa.hh:65
gem5::MipsISA::CoreSpecific::CP0_IntCtl_IPTI
unsigned CP0_IntCtl_IPTI
Definition: types.hh:106
gem5::MipsISA::intRegClass
constexpr RegClass intRegClass(IntRegClass, IntRegClassName, int_reg::NumRegs, debug::IntRegs)
gem5::MipsISA::misc_reg::Index
@ Index
Definition: misc.hh:52
gem5::MipsISA::misc_reg::TcHalt
@ TcHalt
Definition: misc.hh:70
gem5::MipsISA::CoreSpecific::CP0_Config3_TL
bool CP0_Config3_TL
Definition: types.hh:152
gem5::MipsISA::ISA::ISA
ISA(const Params &p)
Definition: isa.cc:113
gem5::MipsISA::misc_reg::Yqmask
@ Yqmask
Definition: misc.hh:61
gem5::VecPredRegClass
@ VecPredRegClass
Definition: reg_class.hh:66
gem5::MipsISA::CoreSpecific::CP0_Config1_MD
bool CP0_Config1_MD
Definition: types.hh:129
gem5::MipsISA::ISA::miscRegFile
std::vector< std::vector< RegVal > > miscRegFile
Definition: isa.hh:75
gem5::Cycles
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:78
gem5::MipsISA::misc_reg::TcStatus
@ TcStatus
Definition: misc.hh:67
gem5::MipsISA::CoreSpecific::CP0_Config1_M
unsigned CP0_Config1_M
Definition: types.hh:120
gem5::MipsISA::CoreSpecific::CP0_Config1_DA
unsigned CP0_Config1_DA
Definition: types.hh:127
gem5::MipsISA::misc_reg::NumRegs
@ NumRegs
Definition: misc.hh:198
gem5::MipsISA::misc_reg::Ebase
@ Ebase
Definition: misc.hh:110
gem5::MipsISA::misc_reg::TcRestart
@ TcRestart
Definition: misc.hh:69
gem5::MipsISA::CoreSpecific::CP0_SrsCtl_HSS
unsigned CP0_SrsCtl_HSS
Definition: types.hh:108
gem5::ArmISA::j
Bitfield< 24 > j
Definition: misc_types.hh:57
gem5::BaseISA::_regClasses
RegClasses _regClasses
Definition: isa.hh:68
gem5::MipsISA::CoreSpecific::CP0_Config2_SU
unsigned CP0_Config2_SU
Definition: types.hh:140
gem5::MipsISA::CoreSpecific::CP0_Config1_DL
unsigned CP0_Config1_DL
Definition: types.hh:126
gem5::MipsISA::i
Bitfield< 2 > i
Definition: pra_constants.hh:279
gem5::MipsISA::ISA::clear
void clear() override
Definition: isa.cc:176
gem5::MipsISA::misc_reg::Entrylo0
@ Entrylo0
Definition: misc.hh:66
gem5::MipsISA::CoreSpecific::CP0_Config1_C2
bool CP0_Config1_C2
Definition: types.hh:128
bitfield.hh
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
gem5::MipsISA::misc_reg::SrsConf1
@ SrsConf1
Definition: misc.hh:85
gem5::MatRegClass
@ MatRegClass
Matrix Register.
Definition: reg_class.hh:67
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:210
gem5::MipsISA::CoreSpecific::CP0_PerfCtr_M
bool CP0_PerfCtr_M
Definition: types.hh:155
gem5::MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:326
gem5::MipsISA::CoreSpecific::CP0_WatchHi_M
bool CP0_WatchHi_M
Definition: types.hh:154
gem5::MipsISA::misc_reg::VpeSchedule
@ VpeSchedule
Definition: misc.hh:62
gem5::MipsISA::CoreSpecific::CP0_Config2_TU
unsigned CP0_Config2_TU
Definition: types.hh:136
gem5::MipsISA::misc_reg::SrsConf3
@ SrsConf3
Definition: misc.hh:87
gem5::MipsISA::ISA::perVirtProcessor
@ perVirtProcessor
Definition: isa.hh:72
gem5::MipsISA::CoreSpecific::CP0_Config3_VInt
bool CP0_Config3_VInt
Definition: types.hh:148
gem5::MatRegClassName
constexpr char MatRegClassName[]
Definition: reg_class.hh:79
gem5::MipsISA::CoreSpecific::CP0_Config3_VEIC
bool CP0_Config3_VEIC
Definition: types.hh:147
gem5::MipsISA::ISA::miscRegNames
static std::string miscRegNames[misc_reg::NumRegs]
Definition: isa.hh:159
gem5::BaseCPU
Definition: base.hh:104
gem5::MipsISA::CoreSpecific::CP0_Config3_DSPP
bool CP0_Config3_DSPP
Definition: types.hh:145
gem5::MipsISA::misc_reg::Debug
@ Debug
Definition: misc.hh:148
gem5::MipsISA::ISA::copyRegsFrom
void copyRegsFrom(ThreadContext *src) override
Definition: isa.cc:188
gem5::ThreadContext::readMiscRegNoEffect
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
gem5::MipsISA::CoreSpecific::CP0_Config1_MMU
unsigned CP0_Config1_MMU
Definition: types.hh:121
gem5::MipsISA::ISA::setRegMask
void setRegMask(RegIndex idx, RegVal val, ThreadID tid=0)
Definition: isa.cc:502
gem5::BaseCPU::getContext
virtual ThreadContext * getContext(int tn)
Given a thread num get tho thread context for it.
Definition: base.hh:288
gem5::MipsISA::misc_reg::Pagegrain
@ Pagegrain
Definition: misc.hh:81
gem5::VecElemClassName
constexpr char VecElemClassName[]
Definition: reg_class.hh:77
gem5::MipsISA::ISA::filterCP0Write
RegVal filterCP0Write(RegIndex idx, int reg_sel, RegVal val)
This method doesn't need to adjust the Control Register Offset since it has already been done in the ...
Definition: isa.cc:540
gem5::MipsISA::CoreSpecific::CP0_Config2_M
bool CP0_Config2_M
Definition: types.hh:135
gem5::MipsISA::ISA::readMiscReg
RegVal readMiscReg(RegIndex idx, ThreadID tid)
Definition: isa.cc:477
gem5::MipsISA::CoreSpecific::CP0_Config1_IS
unsigned CP0_Config1_IS
Definition: types.hh:122
gem5::MipsISA::ISA::setMiscReg
void setMiscReg(RegIndex idx, RegVal val, ThreadID tid)
Definition: isa.cc:517
gem5::MipsISA::floatRegClass
constexpr RegClass floatRegClass(FloatRegClass, FloatRegClassName, float_reg::NumRegs, debug::FloatRegs)
gem5::CCRegClassName
constexpr char CCRegClassName[]
Definition: reg_class.hh:80
gem5::MipsISA::CoreSpecific::CP0_Config1_WR
bool CP0_Config1_WR
Definition: types.hh:131
gem5::ArmISA::vecRegClass
constexpr RegClass vecRegClass
Definition: vec.hh:101
gem5::Clocked::clockEdge
Tick clockEdge(Cycles cycles=Cycles(0)) const
Determine the tick when a cycle begins, by default the current one, but the argument also enables the...
Definition: clocked_object.hh:177
gem5::MipsISA::ISA::CP0EventType
CP0EventType
Definition: isa.hh:144
float.hh
gem5::MipsISA::ISA::configCP
void configCP()
Definition: isa.cc:208
gem5::MipsISA::haltThread
void haltThread(TC *tc)
Definition: mt.hh:133
gem5::MipsISA::misc_reg::VpeControl
@ VpeControl
Definition: misc.hh:58
gem5::EventFunctionWrapper
Definition: eventq.hh:1136
gem5::MipsISA::CoreSpecific::CP0_PRId_ProcessorID
unsigned CP0_PRId_ProcessorID
Definition: types.hh:111
gem5::MipsISA::CoreSpecific
Definition: types.hh:79
gem5::MipsISA::CoreSpecific::CP0_PRId_Revision
unsigned CP0_PRId_Revision
Definition: types.hh:112
gem5::MipsISA::CoreSpecific::CP0_PRId_CompanyOptions
unsigned CP0_PRId_CompanyOptions
Definition: types.hh:109
gem5::MipsISA::CoreSpecific::CP0_Config1_IL
unsigned CP0_Config1_IL
Definition: types.hh:123
gem5::ArmISA::vecElemClass
constexpr RegClass vecElemClass
Definition: vec.hh:105
base.hh
int.hh
gem5::MipsISA::ISA::getVPENum
unsigned getVPENum(ThreadID tid) const
Definition: isa.cc:457
gem5::MipsISA::misc_reg::TcSchedule
@ TcSchedule
Definition: misc.hh:72
gem5::MipsISA::ISA::perThreadContext
@ perThreadContext
Definition: isa.hh:71
gem5::MipsISA::CoreSpecific::CP0_Config1_PC
bool CP0_Config1_PC
Definition: types.hh:130
gem5::MipsISA::miscRegClass
constexpr RegClass miscRegClass(MiscRegClass, MiscRegClassName, misc_reg::NumRegs, debug::MiscRegs)
gem5::MipsISA::CoreSpecific::CP0_Config_AT
unsigned CP0_Config_AT
Definition: types.hh:116
gem5::MipsISA::misc_reg::Cp0Random
@ Cp0Random
Definition: misc.hh:57
reg_class.hh
gem5::MipsISA::CoreSpecific::CP0_Config3_MT
bool CP0_Config3_MT
Definition: types.hh:150
gem5::MipsISA::CoreSpecific::CP0_Config_MT
unsigned CP0_Config_MT
Definition: types.hh:118
gem5::MipsISA::CoreSpecific::CP0_EBase_CPUNum
unsigned CP0_EBase_CPUNum
Definition: types.hh:113
gem5::MipsISA::misc_reg::MvpConf0
@ MvpConf0
Definition: misc.hh:54
gem5::MipsISA::misc_reg::Watchhi0
@ Watchhi0
Definition: misc.hh:133
gem5::MipsISA::ISA::perProcessor
@ perProcessor
Definition: isa.hh:70
gem5::MipsISA::ISA::updateCPU
void updateCPU(BaseCPU *cpu)
Definition: isa.cc:574
gem5::MipsISA::CoreSpecific::CP0_Config_AR
unsigned CP0_Config_AR
Definition: types.hh:117
gem5::MipsISA::misc_reg::Context
@ Context
Definition: misc.hh:77
gem5::MipsISA::k
Bitfield< 23 > k
Definition: dt_constants.hh:81
gem5::ThreadContext::getCpuPtr
virtual BaseCPU * getCpuPtr()=0
gem5::MipsISA::CoreSpecific::CP0_Config1_FP
bool CP0_Config1_FP
Definition: types.hh:134
gem5::MipsISA::CoreSpecific::CP0_Config_BE
unsigned CP0_Config_BE
Definition: types.hh:115
gem5::VecRegClass
@ VecRegClass
Vector Register.
Definition: reg_class.hh:63
gem5::MipsISA::CoreSpecific::CP0_Config2_TS
unsigned CP0_Config2_TS
Definition: types.hh:137
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::MipsISA::misc_reg::TcSchefback
@ TcSchefback
Definition: misc.hh:73
gem5::EventBase::CPU_Tick_Pri
static const Priority CPU_Tick_Pri
CPU ticks must come after other associated CPU events (such as writebacks).
Definition: eventq.hh:207
gem5::MipsISA::CoreSpecific::CP0_PerfCtr_W
bool CP0_PerfCtr_W
Definition: types.hh:156
gem5::MipsISA::misc_reg::Prid
@ Prid
Definition: misc.hh:109
gem5::MipsISA::ISA::cp0Updated
bool cp0Updated
Definition: isa.hh:141
gem5::MipsISA::misc_reg::Badvaddr
@ Badvaddr
Definition: misc.hh:92
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::MipsISA::ISA::Params
MipsISAParams Params
Definition: isa.hh:61
gem5::MipsISA::misc_reg::Intctl
@ Intctl
Definition: misc.hh:101
mt_constants.hh
gem5::ArmISA::matRegClass
constexpr RegClass matRegClass
Definition: mat.hh:92
gem5::MipsISA::CoreSpecific::CP0_Config2_SS
unsigned CP0_Config2_SS
Definition: types.hh:141
mt.hh
gem5::MipsISA::CoreSpecific::CP0_PRId_CompanyID
unsigned CP0_PRId_CompanyID
Definition: types.hh:110
gem5::ArmISA::ccRegClass
constexpr RegClass ccRegClass
Definition: cc.hh:87
gem5::MipsISA::CoreSpecific::CP0_Config2_TL
unsigned CP0_Config2_TL
Definition: types.hh:138
gem5::MipsISA::misc_reg::Perfcnt0
@ Perfcnt0
Definition: misc.hh:156
thread_context.hh
gem5::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:235
gem5::MipsISA::ISA::miscRegFile_WriteMask
std::vector< std::vector< RegVal > > miscRegFile_WriteMask
Definition: isa.hh:76
gem5::MipsISA::misc_reg::Status
@ Status
Definition: misc.hh:100
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::MipsISA::CoreSpecific::CP0_Config1_EP
bool CP0_Config1_EP
Definition: types.hh:133
gem5::ArmISA::status
Bitfield< 5, 0 > status
Definition: misc_types.hh:480
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::MipsISA::ISA::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex idx, ThreadID tid) const
Definition: isa.cc:464
gem5::MipsISA::CoreSpecific::CP0_Config2_SL
unsigned CP0_Config2_SL
Definition: types.hh:142

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