gem5  v20.0.0.2
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
registers.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 ARM Limited
3  * Copyright (c) 2014-2015 Sven Karlsson
4  * Copyright (c) 2019 Yifei Liu
5  * Copyright (c) 2020 Barkhausen Institut
6  * All rights reserved
7  *
8  * The license below extends only to copyright in the software and shall
9  * not be construed as granting a license to any other intellectual
10  * property including but not limited to intellectual property relating
11  * to a hardware implementation of the functionality of the software
12  * licensed hereunder. You may use the software subject to the license
13  * terms below provided that you ensure that this notice is replicated
14  * unmodified and in its entirety in all distributions of the software,
15  * modified or unmodified, in source code or in binary form.
16  *
17  * Copyright (c) 2016 RISC-V Foundation
18  * Copyright (c) 2016 The University of Virginia
19  * All rights reserved.
20  *
21  * Redistribution and use in source and binary forms, with or without
22  * modification, are permitted provided that the following conditions are
23  * met: redistributions of source code must retain the above copyright
24  * notice, this list of conditions and the following disclaimer;
25  * redistributions in binary form must reproduce the above copyright
26  * notice, this list of conditions and the following disclaimer in the
27  * documentation and/or other materials provided with the distribution;
28  * neither the name of the copyright holders nor the names of its
29  * contributors may be used to endorse or promote products derived from
30  * this software without specific prior written permission.
31  *
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
39  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
40  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
42  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43  */
44 
45 #ifndef __ARCH_RISCV_REGISTERS_HH__
46 #define __ARCH_RISCV_REGISTERS_HH__
47 
48 #include <map>
49 #include <string>
50 #include <vector>
51 
52 #include "arch/generic/types.hh"
54 #include "arch/generic/vec_reg.hh"
55 #include "arch/isa_traits.hh"
56 #include "arch/riscv/generated/max_inst_regs.hh"
57 #include "base/types.hh"
58 
59 namespace RiscvISA {
60 
62 using RiscvISAInst::MaxInstDestRegs;
63 const int MaxMiscDestRegs = 2;
64 
65 // Not applicable to RISC-V
72 
73 // Not applicable to RISC-V
79 
80 const int NumIntArchRegs = 32;
81 const int NumMicroIntRegs = 1;
82 const int NumIntRegs = NumIntArchRegs + NumMicroIntRegs;
83 const int NumFloatRegs = 32;
84 
85 const unsigned NumVecRegs = 1; // Not applicable to RISC-V
86  // (1 to prevent warnings)
87 const int NumVecPredRegs = 1; // Not applicable to RISC-V
88  // (1 to prevent warnings)
89 
90 const int NumCCRegs = 0;
91 
92 // Semantically meaningful register indices
93 const int ZeroReg = 0;
94 const int ReturnAddrReg = 1;
95 const int StackPointerReg = 2;
96 const int GlobalPointerReg = 3;
97 const int ThreadPointerReg = 4;
98 const int FramePointerReg = 8;
99 const int ReturnValueReg = 10;
101 const std::vector<int> ArgumentRegs = {10, 11, 12, 13, 14, 15, 16, 17};
102 const int AMOTempReg = 32;
103 
104 const int SyscallPseudoReturnReg = 10;
105 const std::vector<int> SyscallArgumentRegs = {10, 11, 12, 13, 14, 15, 16};
106 const int SyscallNumReg = 17;
107 
109  "zero", "ra", "sp", "gp",
110  "tp", "t0", "t1", "t2",
111  "s0", "s1", "a0", "a1",
112  "a2", "a3", "a4", "a5",
113  "a6", "a7", "s2", "s3",
114  "s4", "s5", "s6", "s7",
115  "s8", "s9", "s10", "s11",
116  "t3", "t4", "t5", "t6"
117 };
119  "ft0", "ft1", "ft2", "ft3",
120  "ft4", "ft5", "ft6", "ft7",
121  "fs0", "fs1", "fa0", "fa1",
122  "fa2", "fa3", "fa4", "fa5",
123  "fa6", "fa7", "fs2", "fs3",
124  "fs4", "fs5", "fs6", "fs7",
125  "fs8", "fs9", "fs10", "fs11",
126  "ft8", "ft9", "ft10", "ft11"
127 };
128 
207 
217  // pmpcfg1 rv32 only
219  // pmpcfg3 rv32 only
236 
246 
254 
256 };
258 
259 enum CSRIndex {
260  CSR_USTATUS = 0x000,
261  CSR_UIE = 0x004,
262  CSR_UTVEC = 0x005,
263  CSR_USCRATCH = 0x040,
264  CSR_UEPC = 0x041,
265  CSR_UCAUSE = 0x042,
266  CSR_UTVAL = 0x043,
267  CSR_UIP = 0x044,
268  CSR_FFLAGS = 0x001,
269  CSR_FRM = 0x002,
270  CSR_FCSR = 0x003,
271  CSR_CYCLE = 0xC00,
272  CSR_TIME = 0xC01,
273  CSR_INSTRET = 0xC02,
303  // HPMCOUNTERH rv32 only
304 
305  CSR_SSTATUS = 0x100,
306  CSR_SEDELEG = 0x102,
307  CSR_SIDELEG = 0x103,
308  CSR_SIE = 0x104,
309  CSR_STVEC = 0x105,
310  CSR_SCOUNTEREN = 0x106,
311  CSR_SSCRATCH = 0x140,
312  CSR_SEPC = 0x141,
313  CSR_SCAUSE = 0x142,
314  CSR_STVAL = 0x143,
315  CSR_SIP = 0x144,
316  CSR_SATP = 0x180,
317 
318  CSR_MVENDORID = 0xF11,
319  CSR_MARCHID = 0xF12,
320  CSR_MIMPID = 0xF13,
321  CSR_MHARTID = 0xF14,
322  CSR_MSTATUS = 0x300,
323  CSR_MISA = 0x301,
324  CSR_MEDELEG = 0x302,
325  CSR_MIDELEG = 0x303,
326  CSR_MIE = 0x304,
327  CSR_MTVEC = 0x305,
328  CSR_MCOUNTEREN = 0x306,
329  CSR_MSCRATCH = 0x340,
330  CSR_MEPC = 0x341,
331  CSR_MCAUSE = 0x342,
332  CSR_MTVAL = 0x343,
333  CSR_MIP = 0x344,
334  CSR_PMPCFG0 = 0x3A0,
335  // pmpcfg1 rv32 only
336  CSR_PMPCFG2 = 0x3A2,
337  // pmpcfg3 rv32 only
338  CSR_PMPADDR00 = 0x3B0,
339  CSR_PMPADDR01 = 0x3B1,
340  CSR_PMPADDR02 = 0x3B2,
341  CSR_PMPADDR03 = 0x3B3,
342  CSR_PMPADDR04 = 0x3B4,
343  CSR_PMPADDR05 = 0x3B5,
344  CSR_PMPADDR06 = 0x3B6,
345  CSR_PMPADDR07 = 0x3B7,
346  CSR_PMPADDR08 = 0x3B8,
347  CSR_PMPADDR09 = 0x3B9,
348  CSR_PMPADDR10 = 0x3BA,
349  CSR_PMPADDR11 = 0x3BB,
350  CSR_PMPADDR12 = 0x3BC,
351  CSR_PMPADDR13 = 0x3BD,
352  CSR_PMPADDR14 = 0x3BE,
353  CSR_PMPADDR15 = 0x3BF,
354  CSR_MCYCLE = 0xB00,
355  CSR_MINSTRET = 0xB02,
385  // MHPMCOUNTERH rv32 only
415 
416  CSR_TSELECT = 0x7A0,
417  CSR_TDATA1 = 0x7A1,
418  CSR_TDATA2 = 0x7A2,
419  CSR_TDATA3 = 0x7A3,
420  CSR_DCSR = 0x7B0,
421  CSR_DPC = 0x7B1,
422  CSR_DSCRATCH = 0x7B2
423 };
424 
426 {
427  const std::string name;
428  const int physIndex;
429 };
430 
431 const std::map<int, CSRMetadata> CSRData = {
432  {CSR_USTATUS, {"ustatus", MISCREG_STATUS}},
433  {CSR_UIE, {"uie", MISCREG_IE}},
434  {CSR_UTVEC, {"utvec", MISCREG_UTVEC}},
435  {CSR_USCRATCH, {"uscratch", MISCREG_USCRATCH}},
436  {CSR_UEPC, {"uepc", MISCREG_UEPC}},
437  {CSR_UCAUSE, {"ucause", MISCREG_UCAUSE}},
438  {CSR_UTVAL, {"utval", MISCREG_UTVAL}},
439  {CSR_UIP, {"uip", MISCREG_IP}},
440  {CSR_FFLAGS, {"fflags", MISCREG_FFLAGS}},
441  {CSR_FRM, {"frm", MISCREG_FRM}},
442  {CSR_FCSR, {"fcsr", MISCREG_FFLAGS}}, // Actually FRM << 5 | FFLAGS
443  {CSR_CYCLE, {"cycle", MISCREG_CYCLE}},
444  {CSR_TIME, {"time", MISCREG_TIME}},
445  {CSR_INSTRET, {"instret", MISCREG_INSTRET}},
446  {CSR_HPMCOUNTER03, {"hpmcounter03", MISCREG_HPMCOUNTER03}},
447  {CSR_HPMCOUNTER04, {"hpmcounter04", MISCREG_HPMCOUNTER04}},
448  {CSR_HPMCOUNTER05, {"hpmcounter05", MISCREG_HPMCOUNTER05}},
449  {CSR_HPMCOUNTER06, {"hpmcounter06", MISCREG_HPMCOUNTER06}},
450  {CSR_HPMCOUNTER07, {"hpmcounter07", MISCREG_HPMCOUNTER07}},
451  {CSR_HPMCOUNTER08, {"hpmcounter08", MISCREG_HPMCOUNTER08}},
452  {CSR_HPMCOUNTER09, {"hpmcounter09", MISCREG_HPMCOUNTER09}},
453  {CSR_HPMCOUNTER10, {"hpmcounter10", MISCREG_HPMCOUNTER10}},
454  {CSR_HPMCOUNTER11, {"hpmcounter11", MISCREG_HPMCOUNTER11}},
455  {CSR_HPMCOUNTER12, {"hpmcounter12", MISCREG_HPMCOUNTER12}},
456  {CSR_HPMCOUNTER13, {"hpmcounter13", MISCREG_HPMCOUNTER13}},
457  {CSR_HPMCOUNTER14, {"hpmcounter14", MISCREG_HPMCOUNTER14}},
458  {CSR_HPMCOUNTER15, {"hpmcounter15", MISCREG_HPMCOUNTER15}},
459  {CSR_HPMCOUNTER16, {"hpmcounter16", MISCREG_HPMCOUNTER16}},
460  {CSR_HPMCOUNTER17, {"hpmcounter17", MISCREG_HPMCOUNTER17}},
461  {CSR_HPMCOUNTER18, {"hpmcounter18", MISCREG_HPMCOUNTER18}},
462  {CSR_HPMCOUNTER19, {"hpmcounter19", MISCREG_HPMCOUNTER19}},
463  {CSR_HPMCOUNTER20, {"hpmcounter20", MISCREG_HPMCOUNTER20}},
464  {CSR_HPMCOUNTER21, {"hpmcounter21", MISCREG_HPMCOUNTER21}},
465  {CSR_HPMCOUNTER22, {"hpmcounter22", MISCREG_HPMCOUNTER22}},
466  {CSR_HPMCOUNTER23, {"hpmcounter23", MISCREG_HPMCOUNTER23}},
467  {CSR_HPMCOUNTER24, {"hpmcounter24", MISCREG_HPMCOUNTER24}},
468  {CSR_HPMCOUNTER25, {"hpmcounter25", MISCREG_HPMCOUNTER25}},
469  {CSR_HPMCOUNTER26, {"hpmcounter26", MISCREG_HPMCOUNTER26}},
470  {CSR_HPMCOUNTER27, {"hpmcounter27", MISCREG_HPMCOUNTER27}},
471  {CSR_HPMCOUNTER28, {"hpmcounter28", MISCREG_HPMCOUNTER28}},
472  {CSR_HPMCOUNTER29, {"hpmcounter29", MISCREG_HPMCOUNTER29}},
473  {CSR_HPMCOUNTER30, {"hpmcounter30", MISCREG_HPMCOUNTER30}},
474  {CSR_HPMCOUNTER31, {"hpmcounter31", MISCREG_HPMCOUNTER31}},
475 
476  {CSR_SSTATUS, {"sstatus", MISCREG_STATUS}},
477  {CSR_SEDELEG, {"sedeleg", MISCREG_SEDELEG}},
478  {CSR_SIDELEG, {"sideleg", MISCREG_SIDELEG}},
479  {CSR_SIE, {"sie", MISCREG_IE}},
480  {CSR_STVEC, {"stvec", MISCREG_STVEC}},
481  {CSR_SCOUNTEREN, {"scounteren", MISCREG_SCOUNTEREN}},
482  {CSR_SSCRATCH, {"sscratch", MISCREG_SSCRATCH}},
483  {CSR_SEPC, {"sepc", MISCREG_SEPC}},
484  {CSR_SCAUSE, {"scause", MISCREG_SCAUSE}},
485  {CSR_STVAL, {"stval", MISCREG_STVAL}},
486  {CSR_SIP, {"sip", MISCREG_IP}},
487  {CSR_SATP, {"satp", MISCREG_SATP}},
488 
489  {CSR_MVENDORID, {"mvendorid", MISCREG_VENDORID}},
490  {CSR_MARCHID, {"marchid", MISCREG_ARCHID}},
491  {CSR_MIMPID, {"mimpid", MISCREG_IMPID}},
492  {CSR_MHARTID, {"mhartid", MISCREG_HARTID}},
493  {CSR_MSTATUS, {"mstatus", MISCREG_STATUS}},
494  {CSR_MISA, {"misa", MISCREG_ISA}},
495  {CSR_MEDELEG, {"medeleg", MISCREG_MEDELEG}},
496  {CSR_MIDELEG, {"mideleg", MISCREG_MIDELEG}},
497  {CSR_MIE, {"mie", MISCREG_IE}},
498  {CSR_MTVEC, {"mtvec", MISCREG_MTVEC}},
499  {CSR_MCOUNTEREN, {"mcounteren", MISCREG_MCOUNTEREN}},
500  {CSR_MSCRATCH, {"mscratch", MISCREG_MSCRATCH}},
501  {CSR_MEPC, {"mepc", MISCREG_MEPC}},
502  {CSR_MCAUSE, {"mcause", MISCREG_MCAUSE}},
503  {CSR_MTVAL, {"mtval", MISCREG_MTVAL}},
504  {CSR_MIP, {"mip", MISCREG_IP}},
505  {CSR_PMPCFG0, {"pmpcfg0", MISCREG_PMPCFG0}},
506  // pmpcfg1 rv32 only
507  {CSR_PMPCFG2, {"pmpcfg2", MISCREG_PMPCFG2}},
508  // pmpcfg3 rv32 only
509  {CSR_PMPADDR00, {"pmpaddr0", MISCREG_PMPADDR00}},
510  {CSR_PMPADDR01, {"pmpaddr1", MISCREG_PMPADDR01}},
511  {CSR_PMPADDR02, {"pmpaddr2", MISCREG_PMPADDR02}},
512  {CSR_PMPADDR03, {"pmpaddr3", MISCREG_PMPADDR03}},
513  {CSR_PMPADDR04, {"pmpaddr4", MISCREG_PMPADDR04}},
514  {CSR_PMPADDR05, {"pmpaddr5", MISCREG_PMPADDR05}},
515  {CSR_PMPADDR06, {"pmpaddr6", MISCREG_PMPADDR06}},
516  {CSR_PMPADDR07, {"pmpaddr7", MISCREG_PMPADDR07}},
517  {CSR_PMPADDR08, {"pmpaddr8", MISCREG_PMPADDR08}},
518  {CSR_PMPADDR09, {"pmpaddr9", MISCREG_PMPADDR09}},
519  {CSR_PMPADDR10, {"pmpaddr10", MISCREG_PMPADDR10}},
520  {CSR_PMPADDR11, {"pmpaddr11", MISCREG_PMPADDR11}},
521  {CSR_PMPADDR12, {"pmpaddr12", MISCREG_PMPADDR12}},
522  {CSR_PMPADDR13, {"pmpaddr13", MISCREG_PMPADDR13}},
523  {CSR_PMPADDR14, {"pmpaddr14", MISCREG_PMPADDR14}},
524  {CSR_PMPADDR15, {"pmpaddr15", MISCREG_PMPADDR15}},
525  {CSR_MCYCLE, {"mcycle", MISCREG_CYCLE}},
526  {CSR_MINSTRET, {"minstret", MISCREG_INSTRET}},
527  {CSR_MHPMCOUNTER03, {"mhpmcounter03", MISCREG_HPMCOUNTER03}},
528  {CSR_MHPMCOUNTER04, {"mhpmcounter04", MISCREG_HPMCOUNTER04}},
529  {CSR_MHPMCOUNTER05, {"mhpmcounter05", MISCREG_HPMCOUNTER05}},
530  {CSR_MHPMCOUNTER06, {"mhpmcounter06", MISCREG_HPMCOUNTER06}},
531  {CSR_MHPMCOUNTER07, {"mhpmcounter07", MISCREG_HPMCOUNTER07}},
532  {CSR_MHPMCOUNTER08, {"mhpmcounter08", MISCREG_HPMCOUNTER08}},
533  {CSR_MHPMCOUNTER09, {"mhpmcounter09", MISCREG_HPMCOUNTER09}},
534  {CSR_MHPMCOUNTER10, {"mhpmcounter10", MISCREG_HPMCOUNTER10}},
535  {CSR_MHPMCOUNTER11, {"mhpmcounter11", MISCREG_HPMCOUNTER11}},
536  {CSR_MHPMCOUNTER12, {"mhpmcounter12", MISCREG_HPMCOUNTER12}},
537  {CSR_MHPMCOUNTER13, {"mhpmcounter13", MISCREG_HPMCOUNTER13}},
538  {CSR_MHPMCOUNTER14, {"mhpmcounter14", MISCREG_HPMCOUNTER14}},
539  {CSR_MHPMCOUNTER15, {"mhpmcounter15", MISCREG_HPMCOUNTER15}},
540  {CSR_MHPMCOUNTER16, {"mhpmcounter16", MISCREG_HPMCOUNTER16}},
541  {CSR_MHPMCOUNTER17, {"mhpmcounter17", MISCREG_HPMCOUNTER17}},
542  {CSR_MHPMCOUNTER18, {"mhpmcounter18", MISCREG_HPMCOUNTER18}},
543  {CSR_MHPMCOUNTER19, {"mhpmcounter19", MISCREG_HPMCOUNTER19}},
544  {CSR_MHPMCOUNTER20, {"mhpmcounter20", MISCREG_HPMCOUNTER20}},
545  {CSR_MHPMCOUNTER21, {"mhpmcounter21", MISCREG_HPMCOUNTER21}},
546  {CSR_MHPMCOUNTER22, {"mhpmcounter22", MISCREG_HPMCOUNTER22}},
547  {CSR_MHPMCOUNTER23, {"mhpmcounter23", MISCREG_HPMCOUNTER23}},
548  {CSR_MHPMCOUNTER24, {"mhpmcounter24", MISCREG_HPMCOUNTER24}},
549  {CSR_MHPMCOUNTER25, {"mhpmcounter25", MISCREG_HPMCOUNTER25}},
550  {CSR_MHPMCOUNTER26, {"mhpmcounter26", MISCREG_HPMCOUNTER26}},
551  {CSR_MHPMCOUNTER27, {"mhpmcounter27", MISCREG_HPMCOUNTER27}},
552  {CSR_MHPMCOUNTER28, {"mhpmcounter28", MISCREG_HPMCOUNTER28}},
553  {CSR_MHPMCOUNTER29, {"mhpmcounter29", MISCREG_HPMCOUNTER29}},
554  {CSR_MHPMCOUNTER30, {"mhpmcounter30", MISCREG_HPMCOUNTER30}},
555  {CSR_MHPMCOUNTER31, {"mhpmcounter31", MISCREG_HPMCOUNTER31}},
556  {CSR_MHPMEVENT03, {"mhpmevent03", MISCREG_HPMEVENT03}},
557  {CSR_MHPMEVENT04, {"mhpmevent04", MISCREG_HPMEVENT04}},
558  {CSR_MHPMEVENT05, {"mhpmevent05", MISCREG_HPMEVENT05}},
559  {CSR_MHPMEVENT06, {"mhpmevent06", MISCREG_HPMEVENT06}},
560  {CSR_MHPMEVENT07, {"mhpmevent07", MISCREG_HPMEVENT07}},
561  {CSR_MHPMEVENT08, {"mhpmevent08", MISCREG_HPMEVENT08}},
562  {CSR_MHPMEVENT09, {"mhpmevent09", MISCREG_HPMEVENT09}},
563  {CSR_MHPMEVENT10, {"mhpmevent10", MISCREG_HPMEVENT10}},
564  {CSR_MHPMEVENT11, {"mhpmevent11", MISCREG_HPMEVENT11}},
565  {CSR_MHPMEVENT12, {"mhpmevent12", MISCREG_HPMEVENT12}},
566  {CSR_MHPMEVENT13, {"mhpmevent13", MISCREG_HPMEVENT13}},
567  {CSR_MHPMEVENT14, {"mhpmevent14", MISCREG_HPMEVENT14}},
568  {CSR_MHPMEVENT15, {"mhpmevent15", MISCREG_HPMEVENT15}},
569  {CSR_MHPMEVENT16, {"mhpmevent16", MISCREG_HPMEVENT16}},
570  {CSR_MHPMEVENT17, {"mhpmevent17", MISCREG_HPMEVENT17}},
571  {CSR_MHPMEVENT18, {"mhpmevent18", MISCREG_HPMEVENT18}},
572  {CSR_MHPMEVENT19, {"mhpmevent19", MISCREG_HPMEVENT19}},
573  {CSR_MHPMEVENT20, {"mhpmevent20", MISCREG_HPMEVENT20}},
574  {CSR_MHPMEVENT21, {"mhpmevent21", MISCREG_HPMEVENT21}},
575  {CSR_MHPMEVENT22, {"mhpmevent22", MISCREG_HPMEVENT22}},
576  {CSR_MHPMEVENT23, {"mhpmevent23", MISCREG_HPMEVENT23}},
577  {CSR_MHPMEVENT24, {"mhpmevent24", MISCREG_HPMEVENT24}},
578  {CSR_MHPMEVENT25, {"mhpmevent25", MISCREG_HPMEVENT25}},
579  {CSR_MHPMEVENT26, {"mhpmevent26", MISCREG_HPMEVENT26}},
580  {CSR_MHPMEVENT27, {"mhpmevent27", MISCREG_HPMEVENT27}},
581  {CSR_MHPMEVENT28, {"mhpmevent28", MISCREG_HPMEVENT28}},
582  {CSR_MHPMEVENT29, {"mhpmevent29", MISCREG_HPMEVENT29}},
583  {CSR_MHPMEVENT30, {"mhpmevent30", MISCREG_HPMEVENT30}},
584  {CSR_MHPMEVENT31, {"mhpmevent31", MISCREG_HPMEVENT31}},
585 
586  {CSR_TSELECT, {"tselect", MISCREG_TSELECT}},
587  {CSR_TDATA1, {"tdata1", MISCREG_TDATA1}},
588  {CSR_TDATA2, {"tdata2", MISCREG_TDATA2}},
589  {CSR_TDATA3, {"tdata3", MISCREG_TDATA3}},
590  {CSR_DCSR, {"dcsr", MISCREG_DCSR}},
591  {CSR_DPC, {"dpc", MISCREG_DPC}},
592  {CSR_DSCRATCH, {"dscratch", MISCREG_DSCRATCH}}
593 };
594 
602 BitUnion64(STATUS)
603  Bitfield<63> sd;
604  Bitfield<35, 34> sxl;
605  Bitfield<33, 32> uxl;
606  Bitfield<22> tsr;
607  Bitfield<21> tw;
608  Bitfield<20> tvm;
609  Bitfield<19> mxr;
610  Bitfield<18> sum;
611  Bitfield<17> mprv;
612  Bitfield<16, 15> xs;
613  Bitfield<14, 13> fs;
614  Bitfield<12, 11> mpp;
615  Bitfield<8> spp;
616  Bitfield<7> mpie;
617  Bitfield<5> spie;
618  Bitfield<4> upie;
619  Bitfield<3> mie;
620  Bitfield<1> sie;
621  Bitfield<0> uie;
622 EndBitUnion(STATUS)
623 
624 
630 BitUnion64(INTERRUPT)
631  Bitfield<11> mei;
632  Bitfield<9> sei;
633  Bitfield<8> uei;
634  Bitfield<7> mti;
635  Bitfield<5> sti;
636  Bitfield<4> uti;
637  Bitfield<3> msi;
638  Bitfield<1> ssi;
639  Bitfield<0> usi;
640 EndBitUnion(INTERRUPT)
641 
642 const off_t MXL_OFFSET = (sizeof(uint64_t) * 8 - 2);
643 const off_t SXL_OFFSET = 34;
644 const off_t UXL_OFFSET = 32;
645 const off_t FS_OFFSET = 13;
646 const off_t FRM_OFFSET = 5;
647 
648 const RegVal ISA_MXL_MASK = 3ULL << MXL_OFFSET;
650 const RegVal ISA_EXT_C_MASK = 1UL << ('c' - 'a');
651 const RegVal MISA_MASK = ISA_MXL_MASK | ISA_EXT_MASK;
652 
653 const RegVal STATUS_SD_MASK = 1ULL << ((sizeof(uint64_t) * 8) - 1);
656 const RegVal STATUS_TSR_MASK = 1ULL << 22;
657 const RegVal STATUS_TW_MASK = 1ULL << 21;
658 const RegVal STATUS_TVM_MASK = 1ULL << 20;
659 const RegVal STATUS_MXR_MASK = 1ULL << 19;
660 const RegVal STATUS_SUM_MASK = 1ULL << 18;
661 const RegVal STATUS_MPRV_MASK = 1ULL << 17;
662 const RegVal STATUS_XS_MASK = 3ULL << 15;
664 const RegVal STATUS_MPP_MASK = 3ULL << 11;
665 const RegVal STATUS_SPP_MASK = 1ULL << 8;
669 const RegVal STATUS_MIE_MASK = 1ULL << 3;
670 const RegVal STATUS_SIE_MASK = 1ULL << 1;
671 const RegVal STATUS_UIE_MASK = 1ULL << 0;
692 
693 const RegVal MEI_MASK = 1ULL << 11;
694 const RegVal SEI_MASK = 1ULL << 9;
695 const RegVal UEI_MASK = 1ULL << 8;
696 const RegVal MTI_MASK = 1ULL << 7;
697 const RegVal STI_MASK = 1ULL << 5;
698 const RegVal UTI_MASK = 1ULL << 4;
699 const RegVal MSI_MASK = 1ULL << 3;
700 const RegVal SSI_MASK = 1ULL << 1;
701 const RegVal USI_MASK = 1ULL << 0;
706  STI_MASK | UTI_MASK |
707  SSI_MASK | USI_MASK;
709 const RegVal FFLAGS_MASK = (1 << FRM_OFFSET) - 1;
710 const RegVal FRM_MASK = 0x7;
711 
712 const std::map<int, RegVal> CSRMasks = {
714  {CSR_UIE, UI_MASK},
715  {CSR_UIP, UI_MASK},
717  {CSR_FRM, FRM_MASK},
718  {CSR_FCSR, FFLAGS_MASK | (FRM_MASK << FRM_OFFSET)},
720  {CSR_SIE, SI_MASK},
721  {CSR_SIP, SI_MASK},
723  {CSR_MISA, MISA_MASK},
724  {CSR_MIE, MI_MASK},
725  {CSR_MIP, MI_MASK}
726 };
727 
728 }
729 
730 #endif // __ARCH_RISCV_REGISTERS_HH__
const std::vector< std::string > IntRegNames
Definition: registers.hh:108
const RegVal USTATUS_MASK
Definition: registers.hh:688
const RegVal STATUS_SUM_MASK
Definition: registers.hh:660
Bitfield< 4 > uti
Definition: registers.hh:636
const RegVal STATUS_TW_MASK
Definition: registers.hh:657
BitUnion64(SATP) Bitfield< 63
Bitfield< 9 > sei
Definition: registers.hh:632
const std::vector< int > ArgumentRegs
Definition: registers.hh:101
const int NumFloatRegs
Definition: registers.hh:83
const std::vector< int > ReturnValueRegs
Definition: registers.hh:100
const RegVal STATUS_UXL_MASK
Definition: registers.hh:655
Bitfield< 5 > sti
Definition: registers.hh:635
Bitfield< 5 > spie
Definition: registers.hh:617
const int NumIntArchRegs
Definition: registers.hh:80
const RegVal STATUS_TVM_MASK
Definition: registers.hh:658
const RegVal SI_MASK
Definition: registers.hh:705
const off_t FS_OFFSET
Definition: registers.hh:645
const int NumCCRegs
Definition: registers.hh:90
constexpr unsigned DummyNumVecElemPerVecReg
Definition: vec_reg.hh:665
Vector Register Abstraction This generic class is the model in a particularization of MVC...
Definition: vec_reg.hh:156
const RegVal STATUS_MPRV_MASK
Definition: registers.hh:661
const int StackPointerReg
Definition: registers.hh:95
const std::map< int, RegVal > CSRMasks
Definition: registers.hh:712
constexpr bool DummyVecPredRegHasPackedRepr
Dummy type aliases and constants for architectures that do not implement vector predicate registers...
const std::vector< int > SyscallArgumentRegs
Definition: registers.hh:105
const RegVal UEI_MASK
Definition: registers.hh:695
const RegVal SSI_MASK
Definition: registers.hh:700
const RegVal MSI_MASK
Definition: registers.hh:699
const RegVal UI_MASK
Definition: registers.hh:708
uint64_t RegVal
Definition: types.hh:166
VecRegT< DummyVecElem, DummyNumVecElemPerVecReg, true > DummyConstVecReg
Definition: vec_reg.hh:667
const int ThreadPointerReg
Definition: registers.hh:97
Bitfield< 17 > mprv
Definition: registers.hh:611
const int SyscallPseudoReturnReg
Definition: registers.hh:104
uint32_t DummyVecElem
Dummy type aliases and constants for architectures that do not implement vector registers.
Definition: vec_reg.hh:664
const RegVal STATUS_SPP_MASK
Definition: registers.hh:665
const RegVal STATUS_MPIE_MASK
Definition: registers.hh:666
const int MaxInstSrcRegs
Definition: registers.hh:57
const RegVal SSTATUS_MASK
Definition: registers.hh:682
Bitfield< 7 > mti
Definition: registers.hh:634
DummyVecPredReg::Container DummyVecPredRegContainer
constexpr size_t DummyVecPredRegSizeBits
const RegVal STATUS_XS_MASK
Definition: registers.hh:662
Bitfield< 8 > spp
Definition: registers.hh:615
const RegVal STATUS_SPIE_MASK
Definition: registers.hh:667
Bitfield< 21 > tw
Definition: registers.hh:607
const int MaxMiscDestRegs
Definition: registers.hh:63
const RegVal STATUS_MXR_MASK
Definition: registers.hh:659
const off_t FRM_OFFSET
Definition: registers.hh:646
const RegVal STATUS_MIE_MASK
Definition: registers.hh:669
const int NumMiscRegs
Definition: registers.hh:257
const RegVal STATUS_UPIE_MASK
Definition: registers.hh:668
const std::vector< std::string > FloatRegNames
Definition: registers.hh:118
const RegVal FFLAGS_MASK
Definition: registers.hh:709
Predicate register view.
Definition: vec_pred_reg.hh:66
constexpr bool VecPredRegHasPackedRepr
Definition: registers.hh:78
const RegVal USI_MASK
Definition: registers.hh:701
const RegVal ISA_EXT_MASK
Definition: registers.hh:649
constexpr size_t VecRegSizeBytes
Definition: registers.hh:71
::DummyVecElem VecElem
Definition: registers.hh:66
Bitfield< 1 > ssi
Definition: registers.hh:638
const int NumIntRegs
Definition: registers.hh:82
const int NumMicroIntRegs
Definition: registers.hh:81
Bitfield< 8 > uei
Definition: registers.hh:633
Bitfield< 18 > sum
Definition: registers.hh:610
Bitfield< 3 > msi
Definition: registers.hh:637
Bitfield< 14, 13 > fs
Definition: registers.hh:613
const RegVal STATUS_SIE_MASK
Definition: registers.hh:670
const RegVal MISA_MASK
Definition: registers.hh:651
const RegVal STATUS_TSR_MASK
Definition: registers.hh:656
const RegVal UTI_MASK
Definition: registers.hh:698
const std::map< int, CSRMetadata > CSRData
Definition: registers.hh:431
const RegVal STATUS_SD_MASK
Definition: registers.hh:653
Bitfield< 1 > sie
Definition: registers.hh:620
EndBitUnion(SATP) enum AddrXlateMode
Definition: pagetable.hh:45
const int SyscallNumReg
Definition: registers.hh:106
VecRegT< DummyVecElem, DummyNumVecElemPerVecReg, false > DummyVecReg
Definition: vec_reg.hh:666
const off_t UXL_OFFSET
Definition: registers.hh:644
DummyVecReg::Container DummyVecRegContainer
Definition: vec_reg.hh:668
constexpr unsigned NumVecElemPerVecReg
Definition: registers.hh:70
const int ReturnValueReg
Definition: registers.hh:99
const int ReturnAddrReg
Definition: registers.hh:94
const std::string name
Definition: registers.hh:427
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
#define ULL(N)
uint64_t constant
Definition: types.hh:48
const RegVal FRM_MASK
Definition: registers.hh:710
const off_t SXL_OFFSET
Definition: registers.hh:643
Bitfield< 33, 32 > uxl
Definition: registers.hh:605
Bitfield< 4 > upie
Definition: registers.hh:618
const int ZeroReg
Definition: registers.hh:93
Bitfield< 12, 11 > mpp
Definition: registers.hh:614
const RegVal STATUS_FS_MASK
Definition: registers.hh:663
const RegVal MEI_MASK
Definition: registers.hh:693
const RegVal MSTATUS_MASK
Definition: registers.hh:672
const int NumVecPredRegs
Definition: registers.hh:87
Bitfield< 0 > uie
Definition: registers.hh:621
const RegVal MI_MASK
Definition: registers.hh:702
const int FramePointerReg
Definition: registers.hh:98
VecPredRegT< DummyVecElem, DummyNumVecElemPerVecReg, DummyVecPredRegHasPackedRepr, true > DummyConstVecPredReg
const RegVal STATUS_MPP_MASK
Definition: registers.hh:664
Vector Registers layout specification.
Generic predicate register container.
Definition: vec_pred_reg.hh:47
Bitfield< 22 > tsr
Definition: registers.hh:606
const RegVal STI_MASK
Definition: registers.hh:697
VecPredRegT< DummyVecElem, DummyNumVecElemPerVecReg, DummyVecPredRegHasPackedRepr, false > DummyVecPredReg
const int GlobalPointerReg
Definition: registers.hh:96
constexpr size_t VecPredRegSizeBits
Definition: registers.hh:77
const int AMOTempReg
Definition: registers.hh:102
Bitfield< 16, 15 > xs
Definition: registers.hh:612
Bitfield< 20 > tvm
Definition: registers.hh:608
const RegVal MTI_MASK
Definition: registers.hh:696
Bitfield< 35, 34 > sxl
Definition: registers.hh:604
Vector Register Abstraction This generic class is a view in a particularization of MVC...
Definition: vec_reg.hh:170
Bitfield< 0 > usi
Definition: registers.hh:639
const unsigned NumVecRegs
Definition: registers.hh:85
Bitfield< 19 > mxr
Definition: registers.hh:609
const RegVal STATUS_SXL_MASK
Definition: registers.hh:654
Bitfield< 3 > mie
Definition: registers.hh:619
constexpr size_t DummyVecRegSizeBytes
Definition: vec_reg.hh:669
Bitfield< 7 > mpie
Definition: registers.hh:616
const RegVal SEI_MASK
Definition: registers.hh:694
const RegVal ISA_EXT_C_MASK
Definition: registers.hh:650
const RegVal ISA_MXL_MASK
Definition: registers.hh:648
const RegVal STATUS_UIE_MASK
Definition: registers.hh:671

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