gem5 v25.0.0.1
Loading...
Searching...
No Matches
misc.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 * Copyright (c) 2021 StreamComputing Corp
7 * Copyright (c) 2025 University of Athens
8 * All rights reserved
9 *
10 * The license below extends only to copyright in the software and shall
11 * not be construed as granting a license to any other intellectual
12 * property including but not limited to intellectual property relating
13 * to a hardware implementation of the functionality of the software
14 * licensed hereunder. You may use the software subject to the license
15 * terms below provided that you ensure that this notice is replicated
16 * unmodified and in its entirety in all distributions of the software,
17 * modified or unmodified, in source code or in binary form.
18 *
19 * Copyright (c) 2016 RISC-V Foundation
20 * Copyright (c) 2016 The University of Virginia
21 * Copyright (c) 2024 University of Rostock
22 * All rights reserved.
23 *
24 * Redistribution and use in source and binary forms, with or without
25 * modification, are permitted provided that the following conditions are
26 * met: redistributions of source code must retain the above copyright
27 * notice, this list of conditions and the following disclaimer;
28 * redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution;
31 * neither the name of the copyright holders nor the names of its
32 * contributors may be used to endorse or promote products derived from
33 * this software without specific prior written permission.
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46 */
47
48#ifndef __ARCH_RISCV_REGS_MISC_HH__
49#define __ARCH_RISCV_REGS_MISC_HH__
50
51#include <string>
52#include <unordered_map>
53
57#include "arch/riscv/types.hh"
58#include "base/bitunion.hh"
59#include "base/types.hh"
60#include "cpu/reg_class.hh"
61#include "debug/MiscRegs.hh"
62#include "enums/RiscvType.hh"
63
64namespace gem5
65{
66
67namespace RiscvISA
68{
69
71{
149
159 MISCREG_PMPCFG1, // pmpcfg1 is rv32 only
161 MISCREG_PMPCFG3, // pmpcfg3 is rv32 only
178
179 MISCREG_RESERVED01, // MISCREG_SEDELEG,
180 MISCREG_RESERVED02, // MISCREG_SIDELEG,
189
190 MISCREG_RESERVED03, // MISCREG_UTVEC,
191 MISCREG_RESERVED04, // MISCREG_USCRATCH,
192 MISCREG_RESERVED05, // MISCREG_UEPC,
193 MISCREG_RESERVED06, // MISCREG_UCAUSE,
194 MISCREG_RESERVED07, // MISCREG_UTVAL,
197
205
206 // H-extension registers (RV64)
207
208 MISCREG_HVIP, // vssi bit is alias for mip.vssi
209
212
221
226
234
235 // This register stores the V-bit.
236 // It is not mandated by the specification,
237 // however it is useful for the implementation.
239
240 // H-extension registers end here
241
242 // These registers are not in the standard, hence does not exist in the
243 // CSRData map. These are mainly used to provide a minimal implementation
244 // for non-maskable-interrupt in our simple cpu.
245 // non-maskable-interrupt-vector-base-address: NMI version of xTVEC
247 // non-maskable-interrupt-enable: NMI version of xIE
249 // non-maskable-interrupt-pending: NMI version of xIP
251
252 // Resumable Non-Maskable Interrupts
257
258 // the following MicsRegIndex are RV32 only
260
294
297
299};
300
302 NUM_MISCREGS, debug::MiscRegs);
303
305{
306 CSR_FFLAGS = 0x001,
307 CSR_FRM = 0x002,
308 CSR_FCSR = 0x003,
309 CSR_CYCLE = 0xC00,
310 CSR_TIME = 0xC01,
311 CSR_INSTRET = 0xC02,
341
342 // rv32 only csr register begin
343 CSR_CYCLEH = 0xC80,
344 CSR_TIMEH = 0xC81,
375 // rv32 only csr register end
376
377 CSR_SSTATUS = 0x100,
378 CSR_SIE = 0x104,
379 CSR_STVEC = 0x105,
382 CSR_SEPC = 0x141,
383 CSR_SCAUSE = 0x142,
384 CSR_STVAL = 0x143,
385 CSR_SIP = 0x144,
386 CSR_SATP = 0x180,
387 CSR_SENVCFG = 0x10A, // 20240411 RISCV spec, volume 2
388
390 CSR_MARCHID = 0xF12,
391 CSR_MIMPID = 0xF13,
392 CSR_MHARTID = 0xF14,
393 CSR_MSTATUS = 0x300,
394 CSR_MISA = 0x301,
395 CSR_MEDELEG = 0x302,
396 CSR_MIDELEG = 0x303,
397 CSR_MIE = 0x304,
398 CSR_MTVEC = 0x305,
400 CSR_MSTATUSH = 0x310, // rv32 only
402 CSR_MEPC = 0x341,
403 CSR_MCAUSE = 0x342,
404 CSR_MTVAL = 0x343,
405 CSR_MIP = 0x344,
406 CSR_PMPCFG0 = 0x3A0,
407 CSR_PMPCFG1 = 0x3A1, // pmpcfg1 rv32 only
408 CSR_PMPCFG2 = 0x3A2,
409 CSR_PMPCFG3 = 0x3A3,// pmpcfg3 rv32 only
426 CSR_MCYCLE = 0xB00,
457
458 // rv32 only csr register begin
459 CSR_MCYCLEH = 0xB80,
490 // rv32 only csr register end
491
521
522 CSR_TSELECT = 0x7A0,
523 CSR_TDATA1 = 0x7A1,
524 CSR_TDATA2 = 0x7A2,
525 CSR_TDATA3 = 0x7A3,
526 CSR_DCSR = 0x7B0,
527 CSR_DPC = 0x7B1,
529
530 CSR_VSTART = 0x008,
531 CSR_VXSAT = 0x009,
532 CSR_VXRM = 0x00A,
533 CSR_VCSR = 0x00F,
534 CSR_VL = 0xC20,
535 CSR_VTYPE = 0xC21,
536 CSR_VLENB = 0xC22,
537
539 CSR_MNEPC = 0x741,
540 CSR_MNCAUSE = 0x742,
542
543 CSR_JVT = 0x017,
544
545 // H-extension (RV64) CSRs
546
547 CSR_MTINST = 0x34A,
548 CSR_MTVAL2 = 0x34B,
549
550 CSR_HSTATUS = 0x600,
551 CSR_HEDELEG = 0x602,
552 CSR_HIDELEG = 0x603,
553 CSR_HIE = 0x604,
556 CSR_HGEIE = 0x607,
557
558 CSR_HTVAL = 0x643,
559 CSR_HIP = 0x644,
560 CSR_HVIP = 0x645,
561 CSR_HTINST = 0x64A,
562 CSR_HGEIP = 0xE12,
563
564 CSR_HENVCFG = 0x60A,
565 CSR_HGATP = 0x680,
567
569 CSR_VSIE = 0x204,
570 CSR_VSTVEC = 0x205,
572 CSR_VSEPC = 0x241,
573 CSR_VSCAUSE = 0x242,
574 CSR_VSTVAL = 0x243,
575 CSR_VSIP = 0x244,
576 CSR_VSATP = 0x280
577
578 // H-extension (RV64) CSRs end here
579};
580
582{
583 const std::string name;
584 const int physIndex;
585 const uint64_t rvTypes;
586 const uint64_t isaExts;
587 const bool requireSmrnmi = false;
588};
589
590template <typename... T>
591constexpr uint64_t rvTypeFlags(T... args) {
592 return ((1 << args) | ...);
593}
594
595template <typename... T>
596constexpr uint64_t isaExtsFlags(T... isa_exts) {
597 return ((1ULL << (isa_exts - 'a')) | ...);
598}
599
600constexpr uint64_t isaExtsFlags() {
601 return 0ULL;
602}
603
604const std::unordered_map<int, CSRMetadata> CSRData = {
605 {CSR_FFLAGS,
606 {"fflags", MISCREG_FFLAGS, rvTypeFlags(RV64, RV32),
607 isaExtsFlags('f')}},
608 {CSR_FRM,
609 {"frm", MISCREG_FRM, rvTypeFlags(RV64, RV32), isaExtsFlags('f')}},
610 {CSR_FCSR,
611 {"fcsr", MISCREG_FFLAGS, rvTypeFlags(RV64, RV32), isaExtsFlags('f')}},
612 {CSR_CYCLE,
614 {CSR_TIME,
619 {"hpmcounter03", MISCREG_HPMCOUNTER03, rvTypeFlags(RV64, RV32),
620 isaExtsFlags()}},
622 {"hpmcounter04", MISCREG_HPMCOUNTER04, rvTypeFlags(RV64, RV32),
623 isaExtsFlags()}},
625 {"hpmcounter05", MISCREG_HPMCOUNTER05, rvTypeFlags(RV64, RV32),
626 isaExtsFlags()}},
628 {"hpmcounter06", MISCREG_HPMCOUNTER06, rvTypeFlags(RV64, RV32),
629 isaExtsFlags()}},
631 {"hpmcounter07", MISCREG_HPMCOUNTER07, rvTypeFlags(RV64, RV32),
632 isaExtsFlags()}},
634 {"hpmcounter08", MISCREG_HPMCOUNTER08, rvTypeFlags(RV64, RV32),
635 isaExtsFlags()}},
637 {"hpmcounter09", MISCREG_HPMCOUNTER09, rvTypeFlags(RV64, RV32),
638 isaExtsFlags()}},
640 {"hpmcounter10", MISCREG_HPMCOUNTER10, rvTypeFlags(RV64, RV32),
641 isaExtsFlags()}},
643 {"hpmcounter11", MISCREG_HPMCOUNTER11, rvTypeFlags(RV64, RV32),
644 isaExtsFlags()}},
646 {"hpmcounter12", MISCREG_HPMCOUNTER12, rvTypeFlags(RV64, RV32),
647 isaExtsFlags()}},
649 {"hpmcounter13", MISCREG_HPMCOUNTER13, rvTypeFlags(RV64, RV32),
650 isaExtsFlags()}},
652 {"hpmcounter14", MISCREG_HPMCOUNTER14, rvTypeFlags(RV64, RV32),
653 isaExtsFlags()}},
655 {"hpmcounter15", MISCREG_HPMCOUNTER15, rvTypeFlags(RV64, RV32),
656 isaExtsFlags()}},
658 {"hpmcounter16", MISCREG_HPMCOUNTER16, rvTypeFlags(RV64, RV32),
659 isaExtsFlags()}},
661 {"hpmcounter17", MISCREG_HPMCOUNTER17, rvTypeFlags(RV64, RV32),
662 isaExtsFlags()}},
664 {"hpmcounter18", MISCREG_HPMCOUNTER18, rvTypeFlags(RV64, RV32),
665 isaExtsFlags()}},
667 {"hpmcounter19", MISCREG_HPMCOUNTER19, rvTypeFlags(RV64, RV32),
668 isaExtsFlags()}},
670 {"hpmcounter20", MISCREG_HPMCOUNTER20, rvTypeFlags(RV64, RV32),
671 isaExtsFlags()}},
673 {"hpmcounter21", MISCREG_HPMCOUNTER21, rvTypeFlags(RV64, RV32),
674 isaExtsFlags()}},
676 {"hpmcounter22", MISCREG_HPMCOUNTER22, rvTypeFlags(RV64, RV32),
677 isaExtsFlags()}},
679 {"hpmcounter23", MISCREG_HPMCOUNTER23, rvTypeFlags(RV64, RV32),
680 isaExtsFlags()}},
682 {"hpmcounter24", MISCREG_HPMCOUNTER24, rvTypeFlags(RV64, RV32),
683 isaExtsFlags()}},
685 {"hpmcounter25", MISCREG_HPMCOUNTER25, rvTypeFlags(RV64, RV32),
686 isaExtsFlags()}},
688 {"hpmcounter26", MISCREG_HPMCOUNTER26, rvTypeFlags(RV64, RV32),
689 isaExtsFlags()}},
691 {"hpmcounter27", MISCREG_HPMCOUNTER27, rvTypeFlags(RV64, RV32),
692 isaExtsFlags()}},
694 {"hpmcounter28", MISCREG_HPMCOUNTER28, rvTypeFlags(RV64, RV32),
695 isaExtsFlags()}},
697 {"hpmcounter29", MISCREG_HPMCOUNTER29, rvTypeFlags(RV64, RV32),
698 isaExtsFlags()}},
700 {"hpmcounter30", MISCREG_HPMCOUNTER30, rvTypeFlags(RV64, RV32),
701 isaExtsFlags()}},
703 {"hpmcounter31", MISCREG_HPMCOUNTER31, rvTypeFlags(RV64, RV32),
704 isaExtsFlags()}},
705 {CSR_CYCLEH,
707 {CSR_TIMEH,
710 {"instreth", MISCREG_INSTRETH, rvTypeFlags(RV32), isaExtsFlags()}},
712 {"hpmcounter03h", MISCREG_HPMCOUNTER03H, rvTypeFlags(RV32),
713 isaExtsFlags()}},
715 {"hpmcounter04h", MISCREG_HPMCOUNTER04H, rvTypeFlags(RV32),
716 isaExtsFlags()}},
718 {"hpmcounter05h", MISCREG_HPMCOUNTER05H, rvTypeFlags(RV32),
719 isaExtsFlags()}},
721 {"hpmcounter06h", MISCREG_HPMCOUNTER06H, rvTypeFlags(RV32),
722 isaExtsFlags()}},
724 {"hpmcounter07h", MISCREG_HPMCOUNTER07H, rvTypeFlags(RV32),
725 isaExtsFlags()}},
727 {"hpmcounter08h", MISCREG_HPMCOUNTER08H, rvTypeFlags(RV32),
728 isaExtsFlags()}},
730 {"hpmcounter09h", MISCREG_HPMCOUNTER09H, rvTypeFlags(RV32),
731 isaExtsFlags()}},
733 {"hpmcounter10h", MISCREG_HPMCOUNTER10H, rvTypeFlags(RV32),
734 isaExtsFlags()}},
736 {"hpmcounter11h", MISCREG_HPMCOUNTER11H, rvTypeFlags(RV32),
737 isaExtsFlags()}},
739 {"hpmcounter12h", MISCREG_HPMCOUNTER12H, rvTypeFlags(RV32),
740 isaExtsFlags()}},
742 {"hpmcounter13h", MISCREG_HPMCOUNTER13H, rvTypeFlags(RV32),
743 isaExtsFlags()}},
745 {"hpmcounter14h", MISCREG_HPMCOUNTER14H, rvTypeFlags(RV32),
746 isaExtsFlags()}},
748 {"hpmcounter15h", MISCREG_HPMCOUNTER15H, rvTypeFlags(RV32),
749 isaExtsFlags()}},
751 {"hpmcounter16h", MISCREG_HPMCOUNTER16H, rvTypeFlags(RV32),
752 isaExtsFlags()}},
754 {"hpmcounter17h", MISCREG_HPMCOUNTER17H, rvTypeFlags(RV32),
755 isaExtsFlags()}},
757 {"hpmcounter18h", MISCREG_HPMCOUNTER18H, rvTypeFlags(RV32),
758 isaExtsFlags()}},
760 {"hpmcounter19h", MISCREG_HPMCOUNTER19H, rvTypeFlags(RV32),
761 isaExtsFlags()}},
763 {"hpmcounter20h", MISCREG_HPMCOUNTER20H, rvTypeFlags(RV32),
764 isaExtsFlags()}},
766 {"hpmcounter21h", MISCREG_HPMCOUNTER21H, rvTypeFlags(RV32),
767 isaExtsFlags()}},
769 {"hpmcounter22h", MISCREG_HPMCOUNTER22H, rvTypeFlags(RV32),
770 isaExtsFlags()}},
772 {"hpmcounter23h", MISCREG_HPMCOUNTER23H, rvTypeFlags(RV32),
773 isaExtsFlags()}},
775 {"hpmcounter24h", MISCREG_HPMCOUNTER24H, rvTypeFlags(RV32),
776 isaExtsFlags()}},
778 {"hpmcounter25h", MISCREG_HPMCOUNTER25H, rvTypeFlags(RV32),
779 isaExtsFlags()}},
781 {"hpmcounter26h", MISCREG_HPMCOUNTER26H, rvTypeFlags(RV32),
782 isaExtsFlags()}},
784 {"hpmcounter27h", MISCREG_HPMCOUNTER27H, rvTypeFlags(RV32),
785 isaExtsFlags()}},
787 {"hpmcounter28h", MISCREG_HPMCOUNTER28H, rvTypeFlags(RV32),
788 isaExtsFlags()}},
790 {"hpmcounter29h", MISCREG_HPMCOUNTER29H, rvTypeFlags(RV32),
791 isaExtsFlags()}},
793 {"hpmcounter30h", MISCREG_HPMCOUNTER30H, rvTypeFlags(RV32),
794 isaExtsFlags()}},
796 {"hpmcounter31h", MISCREG_HPMCOUNTER31H, rvTypeFlags(RV32),
797 isaExtsFlags()}},
798
800 {"sstatus", MISCREG_STATUS, rvTypeFlags(RV64, RV32),
801 isaExtsFlags('s')}},
802 {CSR_SIE,
803 {"sie", MISCREG_IE, rvTypeFlags(RV64, RV32), isaExtsFlags('s')}},
804 {CSR_STVEC,
805 {"stvec", MISCREG_STVEC, rvTypeFlags(RV64, RV32), isaExtsFlags('s')}},
807 {"scounteren", MISCREG_SCOUNTEREN, rvTypeFlags(RV64, RV32),
808 isaExtsFlags('s')}},
810 {"sscratch", MISCREG_SSCRATCH, rvTypeFlags(RV64, RV32),
811 isaExtsFlags('s')}},
812 {CSR_SEPC,
813 {"sepc", MISCREG_SEPC, rvTypeFlags(RV64, RV32), isaExtsFlags('s')}},
814 {CSR_SCAUSE,
815 {"scause", MISCREG_SCAUSE, rvTypeFlags(RV64, RV32),
816 isaExtsFlags('s')}},
817 {CSR_STVAL,
818 {"stval", MISCREG_STVAL, rvTypeFlags(RV64, RV32), isaExtsFlags('s')}},
819 {CSR_SIP,
820 {"sip", MISCREG_IP, rvTypeFlags(RV64, RV32), isaExtsFlags('s')}},
821 {CSR_SATP,
822 {"satp", MISCREG_SATP, rvTypeFlags(RV64, RV32), isaExtsFlags('s')}},
824 {"senvcfg", MISCREG_SENVCFG, rvTypeFlags(RV64, RV32),
825 isaExtsFlags('s')}},
826
828 {"mvendorid", MISCREG_VENDORID, rvTypeFlags(RV64, RV32),
829 isaExtsFlags()}},
831 {"marchid", MISCREG_ARCHID, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
832 {CSR_MIMPID,
835 {"mhartid", MISCREG_HARTID, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
837 {"mstatus", MISCREG_STATUS, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
838 {CSR_MISA,
844 {CSR_MIE,
846 {CSR_MTVEC,
849 {"mcounteren", MISCREG_MCOUNTEREN, rvTypeFlags(RV64, RV32),
850 isaExtsFlags()}},
852 {"mstatush", MISCREG_MSTATUSH, rvTypeFlags(RV32), isaExtsFlags()}},
854 {"mscratch", MISCREG_MSCRATCH, rvTypeFlags(RV64, RV32),
855 isaExtsFlags()}},
856 {CSR_MEPC,
858 {CSR_MCAUSE,
860 {CSR_MTVAL,
862 {CSR_MIP,
866 // pmpcfg1 rv32 only
868 {"pmpcfg1", MISCREG_PMPCFG1, rvTypeFlags(RV32), isaExtsFlags()}},
871 // pmpcfg3 rv32 only
873 {"pmpcfg3", MISCREG_PMPCFG3, rvTypeFlags(RV32), isaExtsFlags()}},
875 {"pmpaddr0", MISCREG_PMPADDR00, rvTypeFlags(RV64, RV32),
876 isaExtsFlags()}},
878 {"pmpaddr1", MISCREG_PMPADDR01, rvTypeFlags(RV64, RV32),
879 isaExtsFlags()}},
881 {"pmpaddr2", MISCREG_PMPADDR02, rvTypeFlags(RV64, RV32),
882 isaExtsFlags()}},
884 {"pmpaddr3", MISCREG_PMPADDR03, rvTypeFlags(RV64, RV32),
885 isaExtsFlags()}},
887 {"pmpaddr4", MISCREG_PMPADDR04, rvTypeFlags(RV64, RV32),
888 isaExtsFlags()}},
890 {"pmpaddr5", MISCREG_PMPADDR05, rvTypeFlags(RV64, RV32),
891 isaExtsFlags()}},
893 {"pmpaddr6", MISCREG_PMPADDR06, rvTypeFlags(RV64, RV32),
894 isaExtsFlags()}},
896 {"pmpaddr7", MISCREG_PMPADDR07, rvTypeFlags(RV64, RV32),
897 isaExtsFlags()}},
899 {"pmpaddr8", MISCREG_PMPADDR08, rvTypeFlags(RV64, RV32),
900 isaExtsFlags()}},
902 {"pmpaddr9", MISCREG_PMPADDR09, rvTypeFlags(RV64, RV32),
903 isaExtsFlags()}},
905 {"pmpaddr10", MISCREG_PMPADDR10, rvTypeFlags(RV64, RV32),
906 isaExtsFlags()}},
908 {"pmpaddr11", MISCREG_PMPADDR11, rvTypeFlags(RV64, RV32),
909 isaExtsFlags()}},
911 {"pmpaddr12", MISCREG_PMPADDR12, rvTypeFlags(RV64, RV32),
912 isaExtsFlags()}},
914 {"pmpaddr13", MISCREG_PMPADDR13, rvTypeFlags(RV64, RV32),
915 isaExtsFlags()}},
917 {"pmpaddr14", MISCREG_PMPADDR14, rvTypeFlags(RV64, RV32),
918 isaExtsFlags()}},
920 {"pmpaddr15", MISCREG_PMPADDR15, rvTypeFlags(RV64, RV32),
921 isaExtsFlags()}},
922 {CSR_MCYCLE,
925 {"minstret", MISCREG_INSTRET, rvTypeFlags(RV64, RV32),
926 isaExtsFlags()}},
928 {"mhpmcounter03", MISCREG_HPMCOUNTER03, rvTypeFlags(RV64, RV32),
929 isaExtsFlags()}},
931 {"mhpmcounter04", MISCREG_HPMCOUNTER04, rvTypeFlags(RV64, RV32),
932 isaExtsFlags()}},
934 {"mhpmcounter05", MISCREG_HPMCOUNTER05, rvTypeFlags(RV64, RV32),
935 isaExtsFlags()}},
937 {"mhpmcounter06", MISCREG_HPMCOUNTER06, rvTypeFlags(RV64, RV32),
938 isaExtsFlags()}},
940 {"mhpmcounter07", MISCREG_HPMCOUNTER07, rvTypeFlags(RV64, RV32),
941 isaExtsFlags()}},
943 {"mhpmcounter08", MISCREG_HPMCOUNTER08, rvTypeFlags(RV64, RV32),
944 isaExtsFlags()}},
946 {"mhpmcounter09", MISCREG_HPMCOUNTER09, rvTypeFlags(RV64, RV32),
947 isaExtsFlags()}},
949 {"mhpmcounter10", MISCREG_HPMCOUNTER10, rvTypeFlags(RV64, RV32),
950 isaExtsFlags()}},
952 {"mhpmcounter11", MISCREG_HPMCOUNTER11, rvTypeFlags(RV64, RV32),
953 isaExtsFlags()}},
955 {"mhpmcounter12", MISCREG_HPMCOUNTER12, rvTypeFlags(RV64, RV32),
956 isaExtsFlags()}},
958 {"mhpmcounter13", MISCREG_HPMCOUNTER13, rvTypeFlags(RV64, RV32),
959 isaExtsFlags()}},
961 {"mhpmcounter14", MISCREG_HPMCOUNTER14, rvTypeFlags(RV64, RV32),
962 isaExtsFlags()}},
964 {"mhpmcounter15", MISCREG_HPMCOUNTER15, rvTypeFlags(RV64, RV32),
965 isaExtsFlags()}},
967 {"mhpmcounter16", MISCREG_HPMCOUNTER16, rvTypeFlags(RV64, RV32),
968 isaExtsFlags()}},
970 {"mhpmcounter17", MISCREG_HPMCOUNTER17, rvTypeFlags(RV64, RV32),
971 isaExtsFlags()}},
973 {"mhpmcounter18", MISCREG_HPMCOUNTER18, rvTypeFlags(RV64, RV32),
974 isaExtsFlags()}},
976 {"mhpmcounter19", MISCREG_HPMCOUNTER19, rvTypeFlags(RV64, RV32),
977 isaExtsFlags()}},
979 {"mhpmcounter20", MISCREG_HPMCOUNTER20, rvTypeFlags(RV64, RV32),
980 isaExtsFlags()}},
982 {"mhpmcounter21", MISCREG_HPMCOUNTER21, rvTypeFlags(RV64, RV32),
983 isaExtsFlags()}},
985 {"mhpmcounter22", MISCREG_HPMCOUNTER22, rvTypeFlags(RV64, RV32),
986 isaExtsFlags()}},
988 {"mhpmcounter23", MISCREG_HPMCOUNTER23, rvTypeFlags(RV64, RV32),
989 isaExtsFlags()}},
991 {"mhpmcounter24", MISCREG_HPMCOUNTER24, rvTypeFlags(RV64, RV32),
992 isaExtsFlags()}},
994 {"mhpmcounter25", MISCREG_HPMCOUNTER25, rvTypeFlags(RV64, RV32),
995 isaExtsFlags()}},
997 {"mhpmcounter26", MISCREG_HPMCOUNTER26, rvTypeFlags(RV64, RV32),
998 isaExtsFlags()}},
1000 {"mhpmcounter27", MISCREG_HPMCOUNTER27, rvTypeFlags(RV64, RV32),
1001 isaExtsFlags()}},
1003 {"mhpmcounter28", MISCREG_HPMCOUNTER28, rvTypeFlags(RV64, RV32),
1004 isaExtsFlags()}},
1006 {"mhpmcounter29", MISCREG_HPMCOUNTER29, rvTypeFlags(RV64, RV32),
1007 isaExtsFlags()}},
1009 {"mhpmcounter30", MISCREG_HPMCOUNTER30, rvTypeFlags(RV64, RV32),
1010 isaExtsFlags()}},
1012 {"mhpmcounter31", MISCREG_HPMCOUNTER31, rvTypeFlags(RV64, RV32),
1013 isaExtsFlags()}},
1014
1015 {CSR_MCYCLEH,
1016 {"mcycleh", MISCREG_CYCLEH, rvTypeFlags(RV32), isaExtsFlags()}},
1018 {"minstreth", MISCREG_INSTRETH, rvTypeFlags(RV32), isaExtsFlags()}},
1020 {"mhpmcounter03h", MISCREG_HPMCOUNTER03H, rvTypeFlags(RV32),
1021 isaExtsFlags()}},
1023 {"mhpmcounter04h", MISCREG_HPMCOUNTER04H, rvTypeFlags(RV32),
1024 isaExtsFlags()}},
1026 {"mhpmcounter05h", MISCREG_HPMCOUNTER05H, rvTypeFlags(RV32),
1027 isaExtsFlags()}},
1029 {"mhpmcounter06h", MISCREG_HPMCOUNTER06H, rvTypeFlags(RV32),
1030 isaExtsFlags()}},
1032 {"mhpmcounter07h", MISCREG_HPMCOUNTER07H, rvTypeFlags(RV32),
1033 isaExtsFlags()}},
1035 {"mhpmcounter08h", MISCREG_HPMCOUNTER08H, rvTypeFlags(RV32),
1036 isaExtsFlags()}},
1038 {"mhpmcounter09h", MISCREG_HPMCOUNTER09H, rvTypeFlags(RV32),
1039 isaExtsFlags()}},
1041 {"mhpmcounter10h", MISCREG_HPMCOUNTER10H, rvTypeFlags(RV32),
1042 isaExtsFlags()}},
1044 {"mhpmcounter11h", MISCREG_HPMCOUNTER11H, rvTypeFlags(RV32),
1045 isaExtsFlags()}},
1047 {"mhpmcounter12h", MISCREG_HPMCOUNTER12H, rvTypeFlags(RV32),
1048 isaExtsFlags()}},
1050 {"mhpmcounter13h", MISCREG_HPMCOUNTER13H, rvTypeFlags(RV32),
1051 isaExtsFlags()}},
1053 {"mhpmcounter14h", MISCREG_HPMCOUNTER14H, rvTypeFlags(RV32),
1054 isaExtsFlags()}},
1056 {"mhpmcounter15h", MISCREG_HPMCOUNTER15H, rvTypeFlags(RV32),
1057 isaExtsFlags()}},
1059 {"mhpmcounter16h", MISCREG_HPMCOUNTER16H, rvTypeFlags(RV32),
1060 isaExtsFlags()}},
1062 {"mhpmcounter17h", MISCREG_HPMCOUNTER17H, rvTypeFlags(RV32),
1063 isaExtsFlags()}},
1065 {"mhpmcounter18h", MISCREG_HPMCOUNTER18H, rvTypeFlags(RV32),
1066 isaExtsFlags()}},
1068 {"mhpmcounter19h", MISCREG_HPMCOUNTER19H, rvTypeFlags(RV32),
1069 isaExtsFlags()}},
1071 {"mhpmcounter20h", MISCREG_HPMCOUNTER20H, rvTypeFlags(RV32),
1072 isaExtsFlags()}},
1074 {"mhpmcounter21h", MISCREG_HPMCOUNTER21H, rvTypeFlags(RV32),
1075 isaExtsFlags()}},
1077 {"mhpmcounter22h", MISCREG_HPMCOUNTER22H, rvTypeFlags(RV32),
1078 isaExtsFlags()}},
1080 {"mhpmcounter23h", MISCREG_HPMCOUNTER23H, rvTypeFlags(RV32),
1081 isaExtsFlags()}},
1083 {"mhpmcounter24h", MISCREG_HPMCOUNTER24H, rvTypeFlags(RV32),
1084 isaExtsFlags()}},
1086 {"mhpmcounter25h", MISCREG_HPMCOUNTER25H, rvTypeFlags(RV32),
1087 isaExtsFlags()}},
1089 {"mhpmcounter26h", MISCREG_HPMCOUNTER26H, rvTypeFlags(RV32),
1090 isaExtsFlags()}},
1092 {"mhpmcounter27h", MISCREG_HPMCOUNTER27H, rvTypeFlags(RV32),
1093 isaExtsFlags()}},
1095 {"mhpmcounter28h", MISCREG_HPMCOUNTER28H, rvTypeFlags(RV32),
1096 isaExtsFlags()}},
1098 {"mhpmcounter29h", MISCREG_HPMCOUNTER29H, rvTypeFlags(RV32),
1099 isaExtsFlags()}},
1101 {"mhpmcounter30h", MISCREG_HPMCOUNTER30H, rvTypeFlags(RV32),
1102 isaExtsFlags()}},
1104 {"mhpmcounter31h", MISCREG_HPMCOUNTER31H, rvTypeFlags(RV32),
1105 isaExtsFlags()}},
1106
1108 {"mhpmevent03", MISCREG_HPMEVENT03, rvTypeFlags(RV64, RV32),
1109 isaExtsFlags()}},
1111 {"mhpmevent04", MISCREG_HPMEVENT04, rvTypeFlags(RV64, RV32),
1112 isaExtsFlags()}},
1114 {"mhpmevent05", MISCREG_HPMEVENT05, rvTypeFlags(RV64, RV32),
1115 isaExtsFlags()}},
1117 {"mhpmevent06", MISCREG_HPMEVENT06, rvTypeFlags(RV64, RV32),
1118 isaExtsFlags()}},
1120 {"mhpmevent07", MISCREG_HPMEVENT07, rvTypeFlags(RV64, RV32),
1121 isaExtsFlags()}},
1123 {"mhpmevent08", MISCREG_HPMEVENT08, rvTypeFlags(RV64, RV32),
1124 isaExtsFlags()}},
1126 {"mhpmevent09", MISCREG_HPMEVENT09, rvTypeFlags(RV64, RV32),
1127 isaExtsFlags()}},
1129 {"mhpmevent10", MISCREG_HPMEVENT10, rvTypeFlags(RV64, RV32),
1130 isaExtsFlags()}},
1132 {"mhpmevent11", MISCREG_HPMEVENT11, rvTypeFlags(RV64, RV32),
1133 isaExtsFlags()}},
1135 {"mhpmevent12", MISCREG_HPMEVENT12, rvTypeFlags(RV64, RV32),
1136 isaExtsFlags()}},
1138 {"mhpmevent13", MISCREG_HPMEVENT13, rvTypeFlags(RV64, RV32),
1139 isaExtsFlags()}},
1141 {"mhpmevent14", MISCREG_HPMEVENT14, rvTypeFlags(RV64, RV32),
1142 isaExtsFlags()}},
1144 {"mhpmevent15", MISCREG_HPMEVENT15, rvTypeFlags(RV64, RV32),
1145 isaExtsFlags()}},
1147 {"mhpmevent16", MISCREG_HPMEVENT16, rvTypeFlags(RV64, RV32),
1148 isaExtsFlags()}},
1150 {"mhpmevent17", MISCREG_HPMEVENT17, rvTypeFlags(RV64, RV32),
1151 isaExtsFlags()}},
1153 {"mhpmevent18", MISCREG_HPMEVENT18, rvTypeFlags(RV64, RV32),
1154 isaExtsFlags()}},
1156 {"mhpmevent19", MISCREG_HPMEVENT19, rvTypeFlags(RV64, RV32),
1157 isaExtsFlags()}},
1159 {"mhpmevent20", MISCREG_HPMEVENT20, rvTypeFlags(RV64, RV32),
1160 isaExtsFlags()}},
1162 {"mhpmevent21", MISCREG_HPMEVENT21, rvTypeFlags(RV64, RV32),
1163 isaExtsFlags()}},
1165 {"mhpmevent22", MISCREG_HPMEVENT22, rvTypeFlags(RV64, RV32),
1166 isaExtsFlags()}},
1168 {"mhpmevent23", MISCREG_HPMEVENT23, rvTypeFlags(RV64, RV32),
1169 isaExtsFlags()}},
1171 {"mhpmevent24", MISCREG_HPMEVENT24, rvTypeFlags(RV64, RV32),
1172 isaExtsFlags()}},
1174 {"mhpmevent25", MISCREG_HPMEVENT25, rvTypeFlags(RV64, RV32),
1175 isaExtsFlags()}},
1177 {"mhpmevent26", MISCREG_HPMEVENT26, rvTypeFlags(RV64, RV32),
1178 isaExtsFlags()}},
1180 {"mhpmevent27", MISCREG_HPMEVENT27, rvTypeFlags(RV64, RV32),
1181 isaExtsFlags()}},
1183 {"mhpmevent28", MISCREG_HPMEVENT28, rvTypeFlags(RV64, RV32),
1184 isaExtsFlags()}},
1186 {"mhpmevent29", MISCREG_HPMEVENT29, rvTypeFlags(RV64, RV32),
1187 isaExtsFlags()}},
1189 {"mhpmevent30", MISCREG_HPMEVENT30, rvTypeFlags(RV64, RV32),
1190 isaExtsFlags()}},
1192 {"mhpmevent31", MISCREG_HPMEVENT31, rvTypeFlags(RV64, RV32),
1193 isaExtsFlags()}},
1194
1195 {CSR_TSELECT,
1196 {"tselect", MISCREG_TSELECT, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
1197 {CSR_TDATA1,
1198 {"tdata1", MISCREG_TDATA1, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
1199 {CSR_TDATA2,
1200 {"tdata2", MISCREG_TDATA2, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
1201 {CSR_TDATA3,
1202 {"tdata3", MISCREG_TDATA3, rvTypeFlags(RV64, RV32), isaExtsFlags()}},
1203 {CSR_DCSR,
1205 {CSR_DPC,
1207 {CSR_DSCRATCH,
1208 {"dscratch", MISCREG_DSCRATCH, rvTypeFlags(RV64, RV32),
1209 isaExtsFlags()}},
1210
1211 {CSR_VSTART,
1212 {"vstart", MISCREG_VSTART, rvTypeFlags(RV64, RV32),
1213 isaExtsFlags('v')}},
1214 {CSR_VXSAT,
1215 {"vxsat", MISCREG_VXSAT, rvTypeFlags(RV64, RV32), isaExtsFlags('v')}},
1216 {CSR_VXRM,
1217 {"vxrm", MISCREG_VXRM, rvTypeFlags(RV64, RV32), isaExtsFlags('v')}},
1218 {CSR_VCSR,
1219 {"vcsr", MISCREG_VCSR, rvTypeFlags(RV64, RV32), isaExtsFlags('v')}},
1220 {CSR_VL,
1221 {"vl", MISCREG_VL, rvTypeFlags(RV64, RV32), isaExtsFlags('v')}},
1222 {CSR_VTYPE,
1223 {"vtype", MISCREG_VTYPE, rvTypeFlags(RV64, RV32), isaExtsFlags('v')}},
1224 {CSR_VLENB,
1225 {"VLENB", MISCREG_VLENB, rvTypeFlags(RV64, RV32), isaExtsFlags('v')}},
1226
1228 {"mnscratch", MISCREG_MNSCRATCH, rvTypeFlags(RV64, RV32),
1229 isaExtsFlags(), true}},
1230 {CSR_MNEPC,
1232 true}},
1233 {CSR_MNCAUSE,
1235 true}},
1236 {CSR_MNSTATUS,
1237 {"mnstatus", MISCREG_MNSTATUS, rvTypeFlags(RV64, RV32),
1238 isaExtsFlags(), true}},
1239
1240 {CSR_JVT,
1242
1243 // H-extension CSR -> MISCREG mappings
1244 {CSR_MTINST,
1245 {"mtinst", MISCREG_MTINST, rvTypeFlags(RV64),
1246 isaExtsFlags('h')}},
1247 {CSR_MTVAL2,
1248 {"mtval2", MISCREG_MTVAL2, rvTypeFlags(RV64),
1249 isaExtsFlags('h')}},
1250
1251 {CSR_HSTATUS,
1252 {"hstatus", MISCREG_HSTATUS, rvTypeFlags(RV64),
1253 isaExtsFlags('h')}},
1254 {CSR_HEDELEG,
1255 {"hedeleg", MISCREG_HEDELEG, rvTypeFlags(RV64),
1256 isaExtsFlags('h')}},
1257 {CSR_HIDELEG,
1258 {"hideleg", MISCREG_HIDELEG, rvTypeFlags(RV64),
1259 isaExtsFlags('h')}},
1260 {CSR_HIE,
1261 {"hie", MISCREG_IE, rvTypeFlags(RV64),
1262 isaExtsFlags('h')}},
1264 {"hcounteren", MISCREG_HCOUNTEREN, rvTypeFlags(RV64),
1265 isaExtsFlags('h')}},
1266 {CSR_HGEIE,
1267 {"hgeie", MISCREG_HGEIE, rvTypeFlags(RV64),
1268 isaExtsFlags('h')}},
1269 {CSR_HTVAL,
1270 {"htval", MISCREG_HTVAL, rvTypeFlags(RV64),
1271 isaExtsFlags('h')}},
1272 {CSR_HIP,
1273 {"hip", MISCREG_IP, rvTypeFlags(RV64),
1274 isaExtsFlags('h')}},
1275 {CSR_HVIP,
1276 {"hvip", MISCREG_HVIP, rvTypeFlags(RV64),
1277 isaExtsFlags('h')}},
1278 {CSR_HTINST,
1279 {"htinst", MISCREG_HTINST, rvTypeFlags(RV64),
1280 isaExtsFlags('h')}},
1281 {CSR_HGEIP,
1282 {"hgeip", MISCREG_HGEIP, rvTypeFlags(RV64),
1283 isaExtsFlags('h')}},
1284 {CSR_HENVCFG,
1285 {"henvcfg", MISCREG_HENVCFG, rvTypeFlags(RV64),
1286 isaExtsFlags('h')}},
1287 {CSR_HGATP,
1288 {"hgatp", MISCREG_HGATP, rvTypeFlags(RV64),
1289 isaExtsFlags('h')}},
1290 {CSR_HCONTEXT,
1291 {"hcontext", MISCREG_HCONTEXT, rvTypeFlags(RV64),
1292 isaExtsFlags('h')}},
1294 {"htimedelta", MISCREG_HTIMEDELTA, rvTypeFlags(RV64),
1295 isaExtsFlags('h')}},
1296
1297 {CSR_VSSTATUS,
1298 {"vsstatus", MISCREG_VSSTATUS, rvTypeFlags(RV64),
1299 isaExtsFlags('h')}},
1300 {CSR_VSIE,
1301 {"vsie", MISCREG_IE, rvTypeFlags(RV64),
1302 isaExtsFlags('h')}},
1303 {CSR_VSTVEC,
1304 {"vstvec", MISCREG_VSTVEC, rvTypeFlags(RV64),
1305 isaExtsFlags('h')}},
1307 {"vsscratch", MISCREG_VSSCRATCH, rvTypeFlags(RV64),
1308 isaExtsFlags('h')}},
1309 {CSR_VSEPC,
1310 {"vsepc", MISCREG_VSEPC, rvTypeFlags(RV64),
1311 isaExtsFlags('h')}},
1312 {CSR_VSCAUSE,
1313 {"vscause", MISCREG_VSCAUSE, rvTypeFlags(RV64),
1314 isaExtsFlags('h')}},
1315 {CSR_VSTVAL,
1316 {"vstval", MISCREG_VSTVAL, rvTypeFlags(RV64),
1317 isaExtsFlags('h')}},
1318 {CSR_VSIP,
1319 {"vsip", MISCREG_IP, rvTypeFlags(RV64),
1320 isaExtsFlags('h')}},
1321 {CSR_VSATP,
1322 {"vsatp", MISCREG_VSATP, rvTypeFlags(RV64),
1323 isaExtsFlags('h')}},
1324};
1325
1334 Bitfield<63> rv64_sd;
1335 Bitfield<39> mpv; // H-extension
1336 Bitfield<38> gva; // H-extension
1337 Bitfield<37> mbe;
1338 Bitfield<36> sbe;
1339 Bitfield<35, 34> sxl;
1340 Bitfield<33, 32> uxl;
1341 Bitfield<31> rv32_sd;
1342 Bitfield<22> tsr;
1343 Bitfield<21> tw;
1344 Bitfield<20> tvm;
1345 Bitfield<19> mxr;
1346 Bitfield<18> sum;
1347 Bitfield<17> mprv;
1348 Bitfield<16, 15> xs;
1349 Bitfield<14, 13> fs;
1350 Bitfield<12, 11> mpp;
1351 Bitfield<10, 9> vs;
1352 Bitfield<8> spp;
1353 Bitfield<7> mpie;
1354 Bitfield<6> ube;
1355 Bitfield<5> spie;
1356 Bitfield<3> mie;
1357 Bitfield<1> sie;
1359
1360
1361// H-extension
1362BitUnion64(HSTATUS)
1363 Bitfield<33, 32> vsxl;
1364 Bitfield<22> vtsr;
1365 Bitfield<21> vtw;
1366 Bitfield<20> vtvm;
1367 Bitfield<17, 12> vgein;
1368 Bitfield<9> hu;
1369 Bitfield<8> spvp;
1370 Bitfield<7> spv;
1371 Bitfield<6> gva;
1372 Bitfield<5> vsbe;
1374
1375
1381BitUnion64(NSTATUS)
1382 Bitfield<12, 11> mnpp;
1383 Bitfield<7> mnv;
1384 Bitfield<3> nmie;
1386
1392BitUnion64(MISA)
1393 Bitfield<63, 62> rv64_mxl;
1394 Bitfield<31, 30> rv32_mxl;
1395 Bitfield<23> rvx;
1396 Bitfield<21> rvv;
1397 Bitfield<20> rvu;
1398 Bitfield<19> rvt;
1399 Bitfield<18> rvs;
1400 Bitfield<16> rvq;
1401 Bitfield<15> rvp;
1402 Bitfield<13> rvn;
1403 Bitfield<12> rvm;
1404 Bitfield<11> rvl;
1405 Bitfield<10> rvk;
1406 Bitfield<9> rvj;
1407 Bitfield<8> rvi;
1408 Bitfield<7> rvh;
1409 Bitfield<6> rvg;
1410 Bitfield<5> rvf;
1411 Bitfield<4> rve;
1412 Bitfield<3> rvd;
1413 Bitfield<2> rvc;
1414 Bitfield<1> rvb;
1415 Bitfield<0> rva;
1417
1425 Bitfield<63,16> local;
1426 Bitfield<12> sgei; // H-extension
1427 Bitfield<11> mei;
1428 Bitfield<10> vsei; // H-extension
1429 Bitfield<9> sei;
1430 Bitfield<7> mti;
1431 Bitfield<6> vsti; // H-extension
1432 Bitfield<5> sti;
1433 Bitfield<3> msi;
1434 Bitfield<2> vssi; // H-extension
1435 Bitfield<1> ssi;
1437
1438
1439// From the RISCV specification version 20240411, volume 2,
1440// section 10.1.10, page 98
1441BitUnion64(SENVCFG)
1442 Bitfield<63,34> wpri_1;
1443 Bitfield<33,32> pmm;
1444 Bitfield<31,8> wpri_2;
1445 Bitfield<7> cbze;
1446 Bitfield<6> cbcfe;
1447 Bitfield<5,4> cbie;
1448 Bitfield<3,1> wpri_3;
1449 Bitfield<0> fiom;
1451
1452BitUnion64(JVT)
1453 Bitfield<63,6> base;
1454 Bitfield<5,0> mode;
1456
1457const off_t MXL_OFFSETS[enums::Num_RiscvType] = {
1458 [RV32] = (sizeof(uint32_t) * 8 - 2),
1459 [RV64] = (sizeof(uint64_t) * 8 - 2),
1460};
1461const off_t MBE_OFFSET[enums::Num_RiscvType] = {
1462 [RV32] = 5,
1463 [RV64] = 37,
1464};
1465const off_t SBE_OFFSET[enums::Num_RiscvType] = {
1466 [RV32] = 4,
1467 [RV64] = 36,
1468};
1469const off_t SXL_OFFSET = 34;
1470const off_t VSXL_OFFSET = 32; // H-extension
1471const off_t UXL_OFFSET = 32;
1472const off_t FS_OFFSET = 13;
1473const off_t VS_OFFSET = 9;
1474const off_t FRM_OFFSET = 5;
1475
1476const RegVal ISA_MXL_MASKS[enums::Num_RiscvType] = {
1477 [RV32] = 3ULL << MXL_OFFSETS[RV32],
1478 [RV64] = 3ULL << MXL_OFFSETS[RV64],
1479};
1481const RegVal ISA_EXT_C_MASK = 1UL << ('c' - 'a');
1482const RegVal MISA_MASKS[enums::Num_RiscvType] = {
1485};
1486
1487
1488const RegVal STATUS_SD_MASKS[enums::Num_RiscvType] = {
1489 [RV32] = 1ULL << ((sizeof(uint32_t) * 8) - 1),
1490 [RV64] = 1ULL << ((sizeof(uint64_t) * 8) - 1),
1491};
1492const RegVal STATUS_MBE_MASK[enums::Num_RiscvType] = {
1493 [RV32] = 1ULL << MBE_OFFSET[RV32],
1494 [RV64] = 1ULL << MBE_OFFSET[RV64],
1495};
1496const RegVal STATUS_SBE_MASK[enums::Num_RiscvType] = {
1497 [RV32] = 1ULL << SBE_OFFSET[RV32],
1498 [RV64] = 1ULL << SBE_OFFSET[RV64],
1499};
1500// These first two offsets only work for RV64
1501const RegVal STATUS_MPV_MASK = 1LL << 39; // H-extension
1502const RegVal STATUS_GVA_MASK = 1LL << 38; // H-extension
1505const RegVal STATUS_TSR_MASK = 1ULL << 22;
1506const RegVal STATUS_TW_MASK = 1ULL << 21;
1507const RegVal STATUS_TVM_MASK = 1ULL << 20;
1508const RegVal STATUS_MXR_MASK = 1ULL << 19;
1509const RegVal STATUS_SUM_MASK = 1ULL << 18;
1510const RegVal STATUS_MPRV_MASK = 1ULL << 17;
1511const RegVal STATUS_XS_MASK = 3ULL << 15;
1513const RegVal STATUS_MPP_MASK = 3ULL << 11;
1515const RegVal STATUS_SPP_MASK = 1ULL << 8;
1516const RegVal STATUS_MPIE_MASK = 1ULL << 7;
1517const RegVal STATUS_UBE_MASK = 1ULL << 6;
1518const RegVal STATUS_SPIE_MASK = 1ULL << 5;
1519const RegVal STATUS_MIE_MASK = 1ULL << 3;
1520const RegVal STATUS_SIE_MASK = 1ULL << 1;
1521
1522// H-extension
1524const RegVal HSTATUS_VTSR_MASK = 1ULL << 22;
1525const RegVal HSTATUS_VTW_MASK = 1ULL << 21;
1526const RegVal HSTATUS_VTVM_MASK = 1ULL << 20;
1527const RegVal HSTATUS_VGEIN_MASK = 63ULL << 12;
1528const RegVal HSTATUS_HU_MASK = 1ULL << 9;
1529const RegVal HSTATUS_SPVP_MASK = 1ULL << 8;
1530const RegVal HSTATUS_SPV_MASK = 1ULL << 7;
1531const RegVal HSTATUS_GVA_MASK = 1LL << 6;
1532const RegVal HSTATUS_VSBE_MASK = 1ULL << 5;
1533
1534const RegVal
1535MSTATUS_MASKS[enums::Num_RiscvType][enums::Num_PrivilegeModeSet] = {
1536 [RV32] = {
1537 [enums::M] = STATUS_SD_MASKS[RV32] |
1540 [enums::MU] = STATUS_SD_MASKS[RV32] | STATUS_TW_MASK |
1544 [enums::MSU] = STATUS_SD_MASKS[RV32] | STATUS_TSR_MASK |
1551 },
1552 [RV64] = {
1553 [enums::M] = STATUS_SD_MASKS[RV64] | STATUS_MBE_MASK[RV64] |
1556 [enums::MU] = STATUS_SD_MASKS[RV64] | STATUS_MBE_MASK[RV64] |
1560 [enums::MSU] = STATUS_SD_MASKS[RV64] |
1569 [enums::MHSU] = STATUS_SD_MASKS[RV64] |
1570 STATUS_MPV_MASK | STATUS_GVA_MASK | // H-extension
1579 },
1580};
1581// rv32 only
1582const RegVal MSTATUSH_MASKS[enums::Num_PrivilegeModeSet] = {
1583 [enums::M] = STATUS_MBE_MASK[RV32],
1584 [enums::MU] = STATUS_MBE_MASK[RV32],
1585 [enums::MSU] = STATUS_MBE_MASK[RV32] | STATUS_SBE_MASK[RV32],
1586};
1587
1588const RegVal
1589HSTATUS_MASKS[enums::Num_RiscvType][enums::Num_PrivilegeModeSet] = {
1590 [RV32] = {
1591 [enums::M] = 0ULL,
1592 [enums::MU] = 0ULL,
1593 [enums::MSU] = 0ULL,
1594 [enums::MHSU] = 0ULL,
1595 },
1596 [RV64] = {
1597 [enums::M] = 0ULL,
1598 [enums::MU] = 0ULL,
1599 [enums::MSU] = 0ULL,
1600 [enums::MHSU] = HSTATUS_VSXL_MASK | HSTATUS_VTSR_MASK |
1605 },
1606};
1607const RegVal
1608SSTATUS_MASKS[enums::Num_RiscvType][enums::Num_PrivilegeModeSet] = {
1609 [RV32] = {
1610 [enums::M] = 0ULL,
1611 [enums::MU] = 0ULL,
1612 [enums::MSU] = STATUS_SD_MASKS[RV32] | STATUS_MXR_MASK |
1616 },
1617 [RV64] = {
1618 [enums::M] = 0ULL,
1619 [enums::MU] = 0ULL,
1620 [enums::MSU] = STATUS_SD_MASKS[RV64] | STATUS_UXL_MASK |
1624 [enums::MHSU] = STATUS_SD_MASKS[RV64] | STATUS_UXL_MASK |
1628 },
1629};
1630
1631const RegVal LOCAL_MASK = mask(63,16);
1632const RegVal SGEI_MASK = 1ULL << 12; // H-extension
1633const RegVal MEI_MASK = 1ULL << 11;
1634const RegVal VSEI_MASK = 1ULL << 10; // H-extension
1635const RegVal SEI_MASK = 1ULL << 9;
1636const RegVal MTI_MASK = 1ULL << 7;
1637const RegVal VSTI_MASK = 1ULL << 6; // H-extension
1638const RegVal STI_MASK = 1ULL << 5;
1639const RegVal MSI_MASK = 1ULL << 3;
1640const RegVal VSSI_MASK = 1ULL << 2; // H-extension
1641const RegVal SSI_MASK = 1ULL << 1;
1642
1643const RegVal MI_MASK[enums::Num_PrivilegeModeSet] = {
1644 [enums::M] = LOCAL_MASK |
1646 [enums::MU] = LOCAL_MASK |
1648 [enums::MSU] = LOCAL_MASK |
1649 MEI_MASK | SEI_MASK |
1650 MTI_MASK | STI_MASK |
1652 [enums::MHSU] = LOCAL_MASK |
1656};
1657
1658const RegVal SI_MASK[enums::Num_PrivilegeModeSet] = {
1659 [enums::M] = LOCAL_MASK,
1660 [enums::MU] = LOCAL_MASK,
1661 [enums::MSU] = LOCAL_MASK | SEI_MASK | STI_MASK | SSI_MASK,
1662 [enums::MHSU] = LOCAL_MASK | SEI_MASK | STI_MASK | SSI_MASK,
1663};
1664const RegVal MIDELEG_MASK[enums::Num_PrivilegeModeSet] = {
1665 [enums::M] = LOCAL_MASK,
1666 [enums::MU] = LOCAL_MASK,
1667 [enums::MSU] = LOCAL_MASK | SEI_MASK | STI_MASK | SSI_MASK,
1668 [enums::MHSU] = LOCAL_MASK | SEI_MASK | STI_MASK | SSI_MASK,
1669};
1670
1671const RegVal VSI_MASK[enums::Num_PrivilegeModeSet] = {
1672 [enums::M] = LOCAL_MASK,
1673 [enums::MU] = LOCAL_MASK,
1674 [enums::MSU] = LOCAL_MASK,
1675 [enums::MHSU] = LOCAL_MASK | VSEI_MASK | VSTI_MASK | VSSI_MASK,
1676};
1677
1678const RegVal FFLAGS_MASK = (1 << FRM_OFFSET) - 1;
1679const RegVal FRM_MASK = 0x7;
1680
1681const RegVal CAUSE_INTERRUPT_MASKS[enums::Num_RiscvType] = {
1682 [RV32] = (1ULL << 31),
1683 [RV64] = (1ULL << 63),
1684};
1685
1686
1687// H-extension
1690// H-extension
1692
1693const std::unordered_map<int, RegVal>
1694CSRMasks[enums::Num_RiscvType][enums::Num_PrivilegeModeSet] = {
1695 [RV32] = {
1696 [enums::M] = {
1698 {CSR_FRM, FRM_MASK},
1700 {CSR_SSTATUS, SSTATUS_MASKS[RV32][enums::M]},
1701 {CSR_SIE, SI_MASK[enums::M]},
1702 {CSR_SIP, SI_MASK[enums::M]},
1703 {CSR_MSTATUS, MSTATUS_MASKS[RV32][enums::M]},
1705 {CSR_MIE, MI_MASK[enums::M]},
1706 {CSR_MSTATUSH, MSTATUSH_MASKS[enums::M]},
1707 {CSR_MIP, MI_MASK[enums::M]},
1708 },
1709 [enums::MU] = {
1711 {CSR_FRM, FRM_MASK},
1713 {CSR_SSTATUS, SSTATUS_MASKS[RV32][enums::MU]},
1714 {CSR_SIE, SI_MASK[enums::MU]},
1715 {CSR_SIP, SI_MASK[enums::MU]},
1716 {CSR_MSTATUS, MSTATUS_MASKS[RV32][enums::MU]},
1718 {CSR_MIE, MI_MASK[enums::MU]},
1719 {CSR_MSTATUSH, MSTATUSH_MASKS[enums::MU]},
1720 {CSR_MIP, MI_MASK[enums::MU]},
1721 },
1722 [enums::MSU] = {
1724 {CSR_FRM, FRM_MASK},
1726 {CSR_SSTATUS, SSTATUS_MASKS[RV32][enums::MSU]},
1727 {CSR_SIE, SI_MASK[enums::MSU]},
1728 {CSR_SIP, SI_MASK[enums::MSU]},
1729 {CSR_MSTATUS, MSTATUS_MASKS[RV32][enums::MSU]},
1731 {CSR_MIE, MI_MASK[enums::MSU]},
1732 {CSR_MSTATUSH, MSTATUSH_MASKS[enums::MSU]},
1733 {CSR_MIP, MI_MASK[enums::MSU]},
1734 },
1735 },
1736 [RV64] = {
1737 [enums::M] = {
1739 {CSR_FRM, FRM_MASK},
1741 {CSR_SSTATUS, SSTATUS_MASKS[RV64][enums::M]},
1742 {CSR_SIE, SI_MASK[enums::M]},
1743 {CSR_SIP, SI_MASK[enums::M]},
1744 {CSR_MSTATUS, MSTATUS_MASKS[RV64][enums::M]},
1746 {CSR_MIE, MI_MASK[enums::M]},
1747 {CSR_MIP, MI_MASK[enums::M]},
1748 },
1749 [enums::MU] = {
1751 {CSR_FRM, FRM_MASK},
1753 {CSR_SSTATUS, SSTATUS_MASKS[RV64][enums::MU]},
1754 {CSR_SIE, SI_MASK[enums::MU]},
1755 {CSR_SIP, SI_MASK[enums::MU]},
1756 {CSR_MSTATUS, MSTATUS_MASKS[RV64][enums::MU]},
1758 {CSR_MIE, MI_MASK[enums::MU]},
1759 {CSR_MIP, MI_MASK[enums::MU]},
1760 },
1761 [enums::MSU] = {
1763 {CSR_FRM, FRM_MASK},
1765 {CSR_SSTATUS, SSTATUS_MASKS[RV64][enums::MSU]},
1766 {CSR_SIE, SI_MASK[enums::MSU]},
1767 {CSR_SIP, SI_MASK[enums::MSU]},
1768 {CSR_MSTATUS, MSTATUS_MASKS[RV64][enums::MSU]},
1770 {CSR_MIE, MI_MASK[enums::MSU]},
1771 {CSR_MIP, MI_MASK[enums::MSU]},
1772 },
1773 [enums::MHSU] = {
1775 {CSR_FRM, FRM_MASK},
1777 {CSR_SSTATUS, SSTATUS_MASKS[RV64][enums::MHSU]},
1778 {CSR_SIE, SI_MASK[enums::MHSU]},
1779 {CSR_SIP, SI_MASK[enums::MHSU]},
1780 {CSR_VSSTATUS, SSTATUS_MASKS[RV64][enums::MHSU]},
1781 {CSR_VSIE, VSI_MASK[enums::MHSU]},
1782 {CSR_VSIP, VSI_MASK[enums::MHSU]},
1783 {CSR_HSTATUS, HSTATUS_MASKS[RV64][enums::MHSU]},
1787 {CSR_MSTATUS, MSTATUS_MASKS[RV64][enums::MHSU]},
1789 {CSR_MIE, MI_MASK[enums::MHSU]},
1790 {CSR_MIP, MI_MASK[enums::MHSU]},
1791 },
1792 },
1793};
1794
1795
1796// Write masks are needed since some visible (readable)
1797// register bits can be read-only.
1798// Without using a write mask, writes are permitted to
1799// bits that should be read-only.
1800
1801// Normal software (e.g. a linux kernel) wouldn't do this,
1802// but our "hardware" shouldn't allow this to any program.
1803
1804// For RV32 we leave the write masks the same as the
1805// "visible bits" masks that are defined above for now
1806
1807// Moreover, instead of writing out a write mask for
1808// every register, we only specify masks for registers
1809// whose write mask differs from the total visible bits.
1810// This saves space and improves readability.
1811// To use the map we lookup a CSR for its write-mask
1812// If the mask is present it is used, otherwise the write mask
1813// that should be used is the "visible bits" mask define above.
1814
1815const std::unordered_map<int, RegVal>
1816CSRWriteMasks[enums::Num_RiscvType][enums::Num_PrivilegeModeSet] = {
1817 [RV32] = {
1818 [enums::M] = {},
1819 [enums::MU] = {},
1820 [enums::MSU] = {},
1821 },
1822 [RV64] = {
1823 [enums::M] = {
1824 {CSR_MIDELEG, 0ULL},
1825 {CSR_MEDELEG, 0ULL},
1826 {CSR_MSTATUS,
1830 },
1831 {CSR_MIP, 0ULL},
1832 {CSR_MIE,
1834 },
1835 },
1836 [enums::MU] = {
1837 {CSR_MIDELEG, 0ULL},
1838 {CSR_MEDELEG, 0ULL},
1839 {CSR_MSTATUS,
1843 STATUS_MPRV_MASK // added for U
1844 },
1845 {CSR_MIP, 0ULL},
1846 {CSR_MIE,
1848 },
1849 },
1850 [enums::MSU] = {
1853 {CSR_MSTATUS,
1857 STATUS_MPRV_MASK | // added for U
1860 // added for S
1861 },
1862 {CSR_MIP,
1863 SEI_MASK | SSI_MASK | STI_MASK // added for S
1864 },
1865 {CSR_MIE,
1867 SSI_MASK | STI_MASK | SEI_MASK // added for S
1868 },
1869 {CSR_SSTATUS,
1871 STATUS_SIE_MASK | STATUS_SPIE_MASK | // no TSR here!
1873 // added for S
1874 },
1875 {CSR_SIP,
1876 SSI_MASK // added for S
1877 },
1878 {CSR_SIE,
1879 SSI_MASK | STI_MASK | SEI_MASK // added for S
1880 },
1881 },
1882 [enums::MHSU] = {
1885 {CSR_MSTATUS,
1889 STATUS_MPRV_MASK | // added for U
1892 // added for S
1893 STATUS_GVA_MASK | STATUS_MPV_MASK // added for H
1894 },
1895 {CSR_MIP,
1896 SEI_MASK | SSI_MASK | STI_MASK | // added for S
1897 VSSI_MASK // added for H
1898 },
1899 {CSR_MIE,
1901 SSI_MASK | STI_MASK | SEI_MASK | // added for S
1902 HS_INTERRUPTS // added for H (multiple bits)
1903 },
1904 {CSR_SSTATUS,
1906 STATUS_SIE_MASK | STATUS_SPIE_MASK | // no TSR here!
1908 // added for S
1909 },
1910 {CSR_SIP,
1911 SSI_MASK // added for S
1912 },
1913 {CSR_SIE,
1914 SSI_MASK | STI_MASK | SEI_MASK // added for S
1915 },
1916 {CSR_HSTATUS,
1920 HSTATUS_GVA_MASK // added for H
1921 },
1922 {CSR_HIP,
1923 VSSI_MASK // added for H
1924 },
1925 {CSR_HIE,
1926 HS_INTERRUPTS // added for H
1927 },
1928 {CSR_HVIP,
1929 HS_INTERRUPTS & ~SGEI_MASK // added for H
1930 },
1931 {CSR_VSSTATUS,
1933 STATUS_SIE_MASK | STATUS_SPIE_MASK | // no TSR here!
1935 // added for H
1936 },
1937 {CSR_VSIP,
1938 VSSI_MASK // added for H
1939 },
1940 {CSR_VSIE,
1941 HS_INTERRUPTS & ~SGEI_MASK // added for H
1942 },
1943
1944 },
1945 },
1946};
1947
1948} // namespace RiscvISA
1949} // namespace gem5
1950
1951#endif // __ARCH_RISCV_REGS_MISC_HH__
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
#define BitUnion64(name)
Use this to define conveniently sized values overlayed with bitfields.
Definition bitunion.hh:494
#define EndBitUnion(name)
This closes off the class and union started by the above macro.
Definition bitunion.hh:428
constexpr RegClass miscRegClass
Definition misc.hh:2992
const RegVal STATUS_TSR_MASK
Definition misc.hh:1505
const RegVal HSTATUS_MASKS[enums::Num_RiscvType][enums::Num_PrivilegeModeSet]
Definition misc.hh:1589
Bitfield< 3 > nmie
Definition misc.hh:1384
const RegVal MSTATUSH_MASKS[enums::Num_PrivilegeModeSet]
Definition misc.hh:1582
Bitfield< 3 > rvd
Definition misc.hh:1412
const RegVal SI_MASK[enums::Num_PrivilegeModeSet]
Definition misc.hh:1658
Bitfield< 3 > msi
Definition misc.hh:1433
const RegVal HSTATUS_SPV_MASK
Definition misc.hh:1530
Bitfield< 12, 11 > mpp
Definition misc.hh:1350
Bitfield< 36 > sbe
Definition misc.hh:1338
Bitfield< 21 > tw
Definition misc.hh:1343
Bitfield< 39 > mpv
Definition misc.hh:1335
Bitfield< 7 > spv
Definition misc.hh:1370
constexpr uint64_t isaExtsFlags()
Definition misc.hh:600
@ CSR_MHPMEVENT19
Definition misc.hh:508
@ CSR_HPMCOUNTER18
Definition misc.hh:327
@ CSR_HPMCOUNTER05H
Definition misc.hh:348
@ CSR_HPMCOUNTER11
Definition misc.hh:320
@ CSR_HPMCOUNTER03H
Definition misc.hh:346
@ CSR_HPMCOUNTER05
Definition misc.hh:314
@ CSR_MHPMCOUNTER25H
Definition misc.hh:483
@ CSR_MHPMEVENT27
Definition misc.hh:516
@ CSR_MHPMCOUNTER07H
Definition misc.hh:465
@ CSR_HPMCOUNTER23
Definition misc.hh:332
@ CSR_MHPMCOUNTER03H
Definition misc.hh:461
@ CSR_MHPMEVENT17
Definition misc.hh:506
@ CSR_HPMCOUNTER20H
Definition misc.hh:363
@ CSR_HPMCOUNTER17
Definition misc.hh:326
@ CSR_MHPMEVENT21
Definition misc.hh:510
@ CSR_MHPMCOUNTER07
Definition misc.hh:432
@ CSR_HPMCOUNTER16
Definition misc.hh:325
@ CSR_HPMCOUNTER15
Definition misc.hh:324
@ CSR_HPMCOUNTER06H
Definition misc.hh:349
@ CSR_HPMCOUNTER07
Definition misc.hh:316
@ CSR_HPMCOUNTER27
Definition misc.hh:336
@ CSR_HPMCOUNTER08
Definition misc.hh:317
@ CSR_MHPMCOUNTER21H
Definition misc.hh:479
@ CSR_HPMCOUNTER21
Definition misc.hh:330
@ CSR_HPMCOUNTER24
Definition misc.hh:333
@ CSR_MHPMCOUNTER29H
Definition misc.hh:487
@ CSR_MHPMCOUNTER12H
Definition misc.hh:470
@ CSR_MHPMEVENT22
Definition misc.hh:511
@ CSR_MHPMCOUNTER16
Definition misc.hh:441
@ CSR_MHPMEVENT06
Definition misc.hh:495
@ CSR_MHPMCOUNTER23
Definition misc.hh:448
@ CSR_MHPMEVENT05
Definition misc.hh:494
@ CSR_MHPMCOUNTER22
Definition misc.hh:447
@ CSR_MHPMCOUNTER10H
Definition misc.hh:468
@ CSR_MHPMEVENT13
Definition misc.hh:502
@ CSR_HPMCOUNTER29
Definition misc.hh:338
@ CSR_MHPMCOUNTER06
Definition misc.hh:431
@ CSR_HPMCOUNTER04
Definition misc.hh:313
@ CSR_MHPMCOUNTER05H
Definition misc.hh:463
@ CSR_HPMCOUNTER25
Definition misc.hh:334
@ CSR_MHPMEVENT20
Definition misc.hh:509
@ CSR_HPMCOUNTER10H
Definition misc.hh:353
@ CSR_HPMCOUNTER26
Definition misc.hh:335
@ CSR_HPMCOUNTER11H
Definition misc.hh:354
@ CSR_MHPMEVENT31
Definition misc.hh:520
@ CSR_HPMCOUNTER28
Definition misc.hh:337
@ CSR_MHPMCOUNTER29
Definition misc.hh:454
@ CSR_MHPMCOUNTER15
Definition misc.hh:440
@ CSR_MHPMEVENT14
Definition misc.hh:503
@ CSR_HPMCOUNTER10
Definition misc.hh:319
@ CSR_MHPMCOUNTER28
Definition misc.hh:453
@ CSR_MHPMCOUNTER09H
Definition misc.hh:467
@ CSR_HPMCOUNTER19H
Definition misc.hh:362
@ CSR_MHPMCOUNTER13H
Definition misc.hh:471
@ CSR_MHPMCOUNTER27
Definition misc.hh:452
@ CSR_MHPMCOUNTER16H
Definition misc.hh:474
@ CSR_MHPMCOUNTER03
Definition misc.hh:428
@ CSR_HPMCOUNTER04H
Definition misc.hh:347
@ CSR_MHPMEVENT07
Definition misc.hh:496
@ CSR_MHPMCOUNTER11
Definition misc.hh:436
@ CSR_MHPMCOUNTER26H
Definition misc.hh:484
@ CSR_HPMCOUNTER07H
Definition misc.hh:350
@ CSR_MHPMCOUNTER17H
Definition misc.hh:475
@ CSR_MHPMEVENT03
Definition misc.hh:492
@ CSR_HPMCOUNTER30
Definition misc.hh:339
@ CSR_HPMCOUNTER28H
Definition misc.hh:371
@ CSR_HPMCOUNTER25H
Definition misc.hh:368
@ CSR_HPMCOUNTER17H
Definition misc.hh:360
@ CSR_HPMCOUNTER29H
Definition misc.hh:372
@ CSR_MHPMEVENT08
Definition misc.hh:497
@ CSR_MHPMEVENT25
Definition misc.hh:514
@ CSR_MHPMCOUNTER22H
Definition misc.hh:480
@ CSR_HPMCOUNTER31H
Definition misc.hh:374
@ CSR_MHPMCOUNTER19
Definition misc.hh:444
@ CSR_MHPMCOUNTER05
Definition misc.hh:430
@ CSR_MHPMCOUNTER15H
Definition misc.hh:473
@ CSR_MHPMEVENT30
Definition misc.hh:519
@ CSR_MHPMCOUNTER10
Definition misc.hh:435
@ CSR_HPMCOUNTER16H
Definition misc.hh:359
@ CSR_HPMCOUNTER30H
Definition misc.hh:373
@ CSR_HPMCOUNTER22
Definition misc.hh:331
@ CSR_MHPMEVENT16
Definition misc.hh:505
@ CSR_MHPMCOUNTER24H
Definition misc.hh:482
@ CSR_MHPMEVENT12
Definition misc.hh:501
@ CSR_HPMCOUNTER23H
Definition misc.hh:366
@ CSR_HPMCOUNTER20
Definition misc.hh:329
@ CSR_HPMCOUNTER14H
Definition misc.hh:357
@ CSR_HPMCOUNTER08H
Definition misc.hh:351
@ CSR_MHPMEVENT09
Definition misc.hh:498
@ CSR_HPMCOUNTER26H
Definition misc.hh:369
@ CSR_MHPMEVENT04
Definition misc.hh:493
@ CSR_MHPMCOUNTER18H
Definition misc.hh:476
@ CSR_MHPMEVENT29
Definition misc.hh:518
@ CSR_MHPMCOUNTER06H
Definition misc.hh:464
@ CSR_HPMCOUNTER27H
Definition misc.hh:370
@ CSR_HPMCOUNTER18H
Definition misc.hh:361
@ CSR_MHPMCOUNTER25
Definition misc.hh:450
@ CSR_MHPMCOUNTER23H
Definition misc.hh:481
@ CSR_MHPMEVENT15
Definition misc.hh:504
@ CSR_MHPMEVENT11
Definition misc.hh:500
@ CSR_HPMCOUNTER09H
Definition misc.hh:352
@ CSR_MHPMCOUNTER13
Definition misc.hh:438
@ CSR_HPMCOUNTER15H
Definition misc.hh:358
@ CSR_MHPMEVENT10
Definition misc.hh:499
@ CSR_MHPMCOUNTER11H
Definition misc.hh:469
@ CSR_MHPMEVENT18
Definition misc.hh:507
@ CSR_HPMCOUNTER06
Definition misc.hh:315
@ CSR_MHPMEVENT23
Definition misc.hh:512
@ CSR_MHPMEVENT26
Definition misc.hh:515
@ CSR_MHPMCOUNTER09
Definition misc.hh:434
@ CSR_MHPMCOUNTER24
Definition misc.hh:449
@ CSR_MHPMCOUNTER26
Definition misc.hh:451
@ CSR_HPMCOUNTER21H
Definition misc.hh:364
@ CSR_MHPMCOUNTER04H
Definition misc.hh:462
@ CSR_MHPMCOUNTER30H
Definition misc.hh:488
@ CSR_HPMCOUNTER22H
Definition misc.hh:365
@ CSR_MHPMCOUNTER17
Definition misc.hh:442
@ CSR_MHPMCOUNTER14H
Definition misc.hh:472
@ CSR_MHPMCOUNTER31H
Definition misc.hh:489
@ CSR_HPMCOUNTER13
Definition misc.hh:322
@ CSR_MHPMCOUNTER20
Definition misc.hh:445
@ CSR_MHPMCOUNTER20H
Definition misc.hh:478
@ CSR_HPMCOUNTER12
Definition misc.hh:321
@ CSR_MHPMCOUNTER21
Definition misc.hh:446
@ CSR_MHPMEVENT28
Definition misc.hh:517
@ CSR_HPMCOUNTER14
Definition misc.hh:323
@ CSR_MHPMCOUNTER31
Definition misc.hh:456
@ CSR_HPMCOUNTER31
Definition misc.hh:340
@ CSR_HPMCOUNTER13H
Definition misc.hh:356
@ CSR_MHPMCOUNTER28H
Definition misc.hh:486
@ CSR_MHPMCOUNTER14
Definition misc.hh:439
@ CSR_MHPMCOUNTER19H
Definition misc.hh:477
@ CSR_HPMCOUNTER12H
Definition misc.hh:355
@ CSR_HPMCOUNTER09
Definition misc.hh:318
@ CSR_HPMCOUNTER19
Definition misc.hh:328
@ CSR_HPMCOUNTER03
Definition misc.hh:312
@ CSR_MHPMCOUNTER18
Definition misc.hh:443
@ CSR_MHPMCOUNTER27H
Definition misc.hh:485
@ CSR_MHPMCOUNTER08H
Definition misc.hh:466
@ CSR_MHPMCOUNTER12
Definition misc.hh:437
@ CSR_MHPMCOUNTER30
Definition misc.hh:455
@ CSR_MHPMCOUNTER04
Definition misc.hh:429
@ CSR_MHPMEVENT24
Definition misc.hh:513
@ CSR_HPMCOUNTER24H
Definition misc.hh:367
@ CSR_MHPMCOUNTER08
Definition misc.hh:433
Bitfield< 1 > ssi
Definition misc.hh:1435
const RegVal HSTATUS_VSXL_MASK
Definition misc.hh:1523
Bitfield< 35, 34 > sxl
Definition misc.hh:1339
Bitfield< 33, 32 > pmm
Definition misc.hh:1443
constexpr enums::RiscvType RV32
Definition pcstate.hh:56
const RegVal FRM_MASK
Definition misc.hh:1679
const RegVal VSEI_MASK
Definition misc.hh:1634
Bitfield< 8 > rvi
Definition misc.hh:1407
Bitfield< 21 > rvv
Definition misc.hh:1396
const RegVal STATUS_MBE_MASK[enums::Num_RiscvType]
Definition misc.hh:1492
const RegVal CAUSE_INTERRUPT_MASKS[enums::Num_RiscvType]
Definition misc.hh:1681
const RegVal VSI_MASK[enums::Num_PrivilegeModeSet]
Definition misc.hh:1671
Bitfield< 6 > rvg
Definition misc.hh:1409
Bitfield< 6 > vsti
Definition misc.hh:1431
Bitfield< 20 > rvu
Definition misc.hh:1397
Bitfield< 18 > sum
Definition misc.hh:1346
Bitfield< 6 > ube
Definition misc.hh:1354
Bitfield< 10 > vsei
Definition misc.hh:1428
Bitfield< 8 > spp
Definition misc.hh:1352
Bitfield< 11 > mei
Definition misc.hh:1427
const RegVal STATUS_SBE_MASK[enums::Num_RiscvType]
Definition misc.hh:1496
Bitfield< 7 > rvh
Definition misc.hh:1408
const RegVal SGEI_MASK
Definition misc.hh:1632
Bitfield< 21 > vtw
Definition misc.hh:1365
Bitfield< 0 > fiom
Definition misc.hh:1449
const RegVal MEI_MASK
Definition misc.hh:1633
const RegVal DELEGABLE_INTS_MASK
Definition misc.hh:1688
const RegVal STATUS_UBE_MASK
Definition misc.hh:1517
Bitfield< 17 > mprv
Definition misc.hh:1347
const RegVal SEI_MASK
Definition misc.hh:1635
Bitfield< 23 > rvx
Definition misc.hh:1395
const RegVal HSTATUS_SPVP_MASK
Definition misc.hh:1529
Bitfield< 37 > mbe
Definition misc.hh:1337
const RegVal SSI_MASK
Definition misc.hh:1641
Bitfield< 17, 12 > vgein
Definition misc.hh:1367
const off_t UXL_OFFSET
Definition misc.hh:1471
Bitfield< 5 > sti
Definition misc.hh:1432
Bitfield< 1 > sie
Definition misc.hh:1357
Bitfield< 3, 1 > wpri_3
Definition misc.hh:1448
Bitfield< 18 > rvs
Definition misc.hh:1399
const off_t SXL_OFFSET
Definition misc.hh:1469
const RegVal STATUS_MIE_MASK
Definition misc.hh:1519
const RegVal HSTATUS_VTSR_MASK
Definition misc.hh:1524
const RegVal HS_INTERRUPTS
Definition misc.hh:1691
Bitfield< 31 > rv32_sd
Definition misc.hh:1341
const RegVal STATUS_SIE_MASK
Definition misc.hh:1520
const off_t FS_OFFSET
Definition misc.hh:1472
const RegVal STATUS_TW_MASK
Definition misc.hh:1506
const RegVal STATUS_MPIE_MASK
Definition misc.hh:1516
Bitfield< 14, 13 > fs
Definition misc.hh:1349
Bitfield< 12 > rvm
Definition misc.hh:1403
const RegVal SSTATUS_MASKS[enums::Num_RiscvType][enums::Num_PrivilegeModeSet]
Definition misc.hh:1608
const RegVal STATUS_VS_MASK
Definition misc.hh:1514
const off_t VS_OFFSET
Definition misc.hh:1473
Bitfield< 38 > gva
Definition misc.hh:1336
const RegVal MTI_MASK
Definition misc.hh:1636
const off_t MBE_OFFSET[enums::Num_RiscvType]
Definition misc.hh:1461
const RegVal HSTATUS_VTVM_MASK
Definition misc.hh:1526
Bitfield< 20 > tvm
Definition misc.hh:1344
const RegVal STATUS_XS_MASK
Definition misc.hh:1511
const RegVal STATUS_GVA_MASK
Definition misc.hh:1502
const RegVal STATUS_SXL_MASK
Definition misc.hh:1503
const RegVal FFLAGS_MASK
Definition misc.hh:1678
Bitfield< 7 > mti
Definition misc.hh:1430
EndBitUnion(SATP) enum AddrXlateMode
Definition pagetable.hh:49
Bitfield< 0 > rva
Definition misc.hh:1415
Bitfield< 16 > rvq
Definition misc.hh:1400
const RegVal HSTATUS_HU_MASK
Definition misc.hh:1528
const RegVal STATUS_MPRV_MASK
Definition misc.hh:1510
const RegVal DELEGABLE_EXCPS
const RegVal HSTATUS_VGEIN_MASK
Definition misc.hh:1527
Bitfield< 33, 32 > uxl
Definition misc.hh:1340
Bitfield< 15 > rvp
Definition misc.hh:1401
const off_t VSXL_OFFSET
Definition misc.hh:1470
const RegVal MSI_MASK
Definition misc.hh:1639
Bitfield< 5 > spie
Definition misc.hh:1355
Bitfield< 20 > vtvm
Definition misc.hh:1366
const RegVal HSTATUS_VSBE_MASK
Definition misc.hh:1532
Bitfield< 2 > vssi
Definition misc.hh:1434
Bitfield< 22 > vtsr
Definition misc.hh:1364
Bitfield< 3 > mie
Definition misc.hh:1356
Bitfield< 7 > mpie
Definition misc.hh:1353
Bitfield< 7 > mnv
Definition misc.hh:1383
const RegVal STATUS_UXL_MASK
Definition misc.hh:1504
const RegVal STATUS_MXR_MASK
Definition misc.hh:1508
const std::unordered_map< int, CSRMetadata > CSRData
Definition misc.hh:604
const RegVal STATUS_MPV_MASK
Definition misc.hh:1501
Bitfield< 22 > tsr
Definition misc.hh:1342
const std::unordered_map< int, RegVal > CSRMasks[enums::Num_RiscvType][enums::Num_PrivilegeModeSet]
Definition misc.hh:1694
const RegVal LOCAL_MASK
Definition misc.hh:1631
const RegVal VSTI_MASK
Definition misc.hh:1637
Bitfield< 6 > cbcfe
Definition misc.hh:1446
Bitfield< 5 > vsbe
Definition misc.hh:1372
const RegVal STATUS_FS_MASK
Definition misc.hh:1512
const RegVal STATUS_SPP_MASK
Definition misc.hh:1515
const RegVal VSSI_MASK
Definition misc.hh:1640
const RegVal HSTATUS_VTW_MASK
Definition misc.hh:1525
const RegVal ISA_EXT_MASK
Definition misc.hh:1480
Bitfield< 5, 4 > cbie
Definition misc.hh:1447
Bitfield< 12 > sgei
Definition misc.hh:1426
const RegVal STATUS_SD_MASKS[enums::Num_RiscvType]
Definition misc.hh:1488
const std::unordered_map< int, RegVal > CSRWriteMasks[enums::Num_RiscvType][enums::Num_PrivilegeModeSet]
Definition misc.hh:1816
const RegVal STATUS_SPIE_MASK
Definition misc.hh:1518
const RegVal STATUS_MPP_MASK
Definition misc.hh:1513
Bitfield< 13 > rvn
Definition misc.hh:1402
Bitfield< 4 > rve
Definition misc.hh:1411
constexpr enums::RiscvType RV64
Definition pcstate.hh:57
const RegVal ISA_EXT_C_MASK
Definition misc.hh:1481
Bitfield< 1 > rvb
Definition misc.hh:1414
@ MISCREG_PMPADDR11
Definition misc.hh:173
@ MISCREG_HPMCOUNTER16H
Definition misc.hh:277
@ MISCREG_HSTATUS
Definition misc.hh:213
@ MISCREG_HPMCOUNTER09
Definition misc.hh:90
@ MISCREG_HPMEVENT31
Definition misc.hh:141
@ MISCREG_IMPID
Definition misc.hh:76
@ MISCREG_HPMEVENT07
Definition misc.hh:117
@ MISCREG_RESERVED01
Definition misc.hh:179
@ MISCREG_HPMCOUNTER16
Definition misc.hh:97
@ MISCREG_HPMCOUNTER13H
Definition misc.hh:274
@ MISCREG_SENVCFG
Definition misc.hh:188
@ MISCREG_HPMCOUNTER19
Definition misc.hh:100
@ MISCREG_PMPADDR12
Definition misc.hh:174
@ MISCREG_HPMCOUNTER07
Definition misc.hh:88
@ MISCREG_HPMEVENT29
Definition misc.hh:139
@ MISCREG_HPMCOUNTER26
Definition misc.hh:107
@ MISCREG_PMPADDR05
Definition misc.hh:167
@ MISCREG_RESERVED03
Definition misc.hh:190
@ MISCREG_HPMCOUNTER13
Definition misc.hh:94
@ MISCREG_PMPADDR10
Definition misc.hh:172
@ MISCREG_PMPADDR14
Definition misc.hh:176
@ MISCREG_PMPCFG3
Definition misc.hh:161
@ NUM_PHYS_MISCREGS
Definition misc.hh:295
@ MISCREG_HPMCOUNTER22H
Definition misc.hh:283
@ MISCREG_PMPADDR09
Definition misc.hh:171
@ MISCREG_HPMEVENT06
Definition misc.hh:116
@ MISCREG_TSELECT
Definition misc.hh:142
@ MISCREG_MSCRATCH
Definition misc.hh:154
@ MISCREG_HPMCOUNTER04H
Definition misc.hh:265
@ MISCREG_MNCAUSE
Definition misc.hh:255
@ MISCREG_HPMEVENT21
Definition misc.hh:131
@ MISCREG_HPMCOUNTER12H
Definition misc.hh:273
@ MISCREG_STATUS
Definition misc.hh:78
@ MISCREG_HPMEVENT12
Definition misc.hh:122
@ MISCREG_HPMCOUNTER25
Definition misc.hh:106
@ MISCREG_RESERVED05
Definition misc.hh:192
@ MISCREG_PMPADDR04
Definition misc.hh:166
@ MISCREG_INSTRETH
Definition misc.hh:263
@ MISCREG_MCOUNTEREN
Definition misc.hh:153
@ MISCREG_PMPADDR00
Definition misc.hh:162
@ MISCREG_HPMCOUNTER22
Definition misc.hh:103
@ MISCREG_RESERVED02
Definition misc.hh:180
@ MISCREG_HPMEVENT17
Definition misc.hh:127
@ MISCREG_RESERVED06
Definition misc.hh:193
@ MISCREG_HPMEVENT20
Definition misc.hh:130
@ MISCREG_HPMCOUNTER03H
Definition misc.hh:264
@ MISCREG_HPMCOUNTER15H
Definition misc.hh:276
@ MISCREG_MEDELEG
Definition misc.hh:150
@ MISCREG_HPMEVENT25
Definition misc.hh:135
@ MISCREG_HPMCOUNTER31H
Definition misc.hh:292
@ MISCREG_HPMCOUNTER11
Definition misc.hh:92
@ MISCREG_HPMCOUNTER17H
Definition misc.hh:278
@ MISCREG_HPMEVENT03
Definition misc.hh:113
@ MISCREG_PMPCFG1
Definition misc.hh:159
@ MISCREG_HPMEVENT13
Definition misc.hh:123
@ MISCREG_PMPADDR13
Definition misc.hh:175
@ MISCREG_FFLAGS_EXE
Definition misc.hh:296
@ MISCREG_HPMCOUNTER12
Definition misc.hh:93
@ MISCREG_HPMCOUNTER29H
Definition misc.hh:290
@ MISCREG_HENVCFG
Definition misc.hh:222
@ MISCREG_HPMEVENT04
Definition misc.hh:114
@ MISCREG_HPMEVENT08
Definition misc.hh:118
@ MISCREG_HIDELEG
Definition misc.hh:215
@ MISCREG_HPMEVENT19
Definition misc.hh:129
@ MISCREG_DSCRATCH
Definition misc.hh:148
@ MISCREG_HPMEVENT30
Definition misc.hh:140
@ MISCREG_PMPADDR06
Definition misc.hh:168
@ MISCREG_HPMCOUNTER21
Definition misc.hh:102
@ MISCREG_HPMCOUNTER21H
Definition misc.hh:282
@ MISCREG_PMPADDR03
Definition misc.hh:165
@ MISCREG_SCOUNTEREN
Definition misc.hh:182
@ MISCREG_HPMCOUNTER18H
Definition misc.hh:279
@ MISCREG_HPMCOUNTER06
Definition misc.hh:87
@ MISCREG_HPMCOUNTER20H
Definition misc.hh:281
@ MISCREG_HPMCOUNTER28
Definition misc.hh:109
@ MISCREG_PMPADDR02
Definition misc.hh:164
@ MISCREG_MIDELEG
Definition misc.hh:151
@ MISCREG_HPMCOUNTER30
Definition misc.hh:111
@ MISCREG_VSSCRATCH
Definition misc.hh:229
@ MISCREG_HPMCOUNTER14
Definition misc.hh:95
@ MISCREG_MSTATUSH
Definition misc.hh:259
@ MISCREG_HPMEVENT10
Definition misc.hh:120
@ MISCREG_HPMEVENT26
Definition misc.hh:136
@ MISCREG_HPMEVENT18
Definition misc.hh:128
@ MISCREG_VSSTATUS
Definition misc.hh:227
@ MISCREG_HPMEVENT23
Definition misc.hh:133
@ MISCREG_INSTRET
Definition misc.hh:83
@ MISCREG_HARTID
Definition misc.hh:77
@ MISCREG_MNSTATUS
Definition misc.hh:256
@ MISCREG_HPMCOUNTER05H
Definition misc.hh:266
@ MISCREG_HPMCOUNTER20
Definition misc.hh:101
@ MISCREG_HPMEVENT09
Definition misc.hh:119
@ MISCREG_HPMCOUNTER04
Definition misc.hh:85
@ MISCREG_HPMCOUNTER25H
Definition misc.hh:286
@ MISCREG_HPMCOUNTER27H
Definition misc.hh:288
@ MISCREG_HPMCOUNTER06H
Definition misc.hh:267
@ MISCREG_RESERVED07
Definition misc.hh:194
@ MISCREG_PMPADDR07
Definition misc.hh:169
@ MISCREG_HPMCOUNTER08H
Definition misc.hh:269
@ MISCREG_HPMEVENT16
Definition misc.hh:126
@ MISCREG_HPMCOUNTER18
Definition misc.hh:99
@ MISCREG_SSCRATCH
Definition misc.hh:183
@ MISCREG_HPMCOUNTER19H
Definition misc.hh:280
@ MISCREG_HPMEVENT14
Definition misc.hh:124
@ MISCREG_VSCAUSE
Definition misc.hh:231
@ MISCREG_HPMCOUNTER10H
Definition misc.hh:271
@ MISCREG_HPMCOUNTER05
Definition misc.hh:86
@ MISCREG_HPMCOUNTER30H
Definition misc.hh:291
@ MISCREG_HPMCOUNTER17
Definition misc.hh:98
@ MISCREG_HCONTEXT
Definition misc.hh:224
@ MISCREG_HPMCOUNTER09H
Definition misc.hh:270
@ MISCREG_HPMCOUNTER27
Definition misc.hh:108
@ MISCREG_HPMCOUNTER24
Definition misc.hh:105
@ MISCREG_HPMCOUNTER28H
Definition misc.hh:289
@ MISCREG_HPMCOUNTER14H
Definition misc.hh:275
@ MISCREG_HPMCOUNTER23
Definition misc.hh:104
@ MISCREG_CYCLE
Definition misc.hh:81
@ MISCREG_RESERVED04
Definition misc.hh:191
@ MISCREG_HPMCOUNTER07H
Definition misc.hh:268
@ MISCREG_MNSCRATCH
Definition misc.hh:253
@ MISCREG_HPMCOUNTER15
Definition misc.hh:96
@ MISCREG_HPMEVENT24
Definition misc.hh:134
@ MISCREG_HPMCOUNTER10
Definition misc.hh:91
@ MISCREG_HPMCOUNTER29
Definition misc.hh:110
@ MISCREG_VENDORID
Definition misc.hh:74
@ MISCREG_PMPADDR01
Definition misc.hh:163
@ MISCREG_HEDELEG
Definition misc.hh:214
@ MISCREG_HPMEVENT27
Definition misc.hh:137
@ MISCREG_HPMEVENT15
Definition misc.hh:125
@ MISCREG_HPMEVENT05
Definition misc.hh:115
@ MISCREG_ARCHID
Definition misc.hh:75
@ MISCREG_HPMCOUNTER24H
Definition misc.hh:285
@ MISCREG_HPMEVENT11
Definition misc.hh:121
@ MISCREG_HPMCOUNTER31
Definition misc.hh:112
@ MISCREG_HPMCOUNTER23H
Definition misc.hh:284
@ MISCREG_HTIMEDELTA
Definition misc.hh:225
@ MISCREG_HPMCOUNTER11H
Definition misc.hh:272
@ MISCREG_PMPADDR08
Definition misc.hh:170
@ MISCREG_HPMCOUNTER03
Definition misc.hh:84
@ MISCREG_PMPADDR15
Definition misc.hh:177
@ MISCREG_HPMEVENT28
Definition misc.hh:138
@ MISCREG_HCOUNTEREN
Definition misc.hh:216
@ MISCREG_HPMEVENT22
Definition misc.hh:132
@ MISCREG_PMPCFG0
Definition misc.hh:158
@ MISCREG_HPMCOUNTER08
Definition misc.hh:89
@ MISCREG_HPMCOUNTER26H
Definition misc.hh:287
@ MISCREG_PMPCFG2
Definition misc.hh:160
const RegVal MISA_MASKS[enums::Num_RiscvType]
Definition misc.hh:1482
Bitfield< 10 > rvk
Definition misc.hh:1405
const RegVal HSTATUS_GVA_MASK
Definition misc.hh:1531
Bitfield< 19 > rvt
Definition misc.hh:1398
const off_t FRM_OFFSET
Definition misc.hh:1474
Bitfield< 9, 5 > vs
Bitfield< 16, 15 > xs
Definition misc.hh:1348
const RegVal ISA_MXL_MASKS[enums::Num_RiscvType]
Definition misc.hh:1476
Bitfield< 31, 8 > wpri_2
Definition misc.hh:1444
const RegVal STI_MASK
Definition misc.hh:1638
Bitfield< 8 > spvp
Definition misc.hh:1369
const RegVal MI_MASK[enums::Num_PrivilegeModeSet]
Definition misc.hh:1643
const RegVal MIDELEG_MASK[enums::Num_PrivilegeModeSet]
Definition misc.hh:1664
const RegVal STATUS_SUM_MASK
Definition misc.hh:1509
BitUnion64(SATP) Bitfield< 63
Bitfield< 5 > rvf
Definition misc.hh:1410
Bitfield< 9 > rvj
Definition misc.hh:1406
Bitfield< 31, 30 > rv32_mxl
Definition misc.hh:1394
Bitfield< 2 > rvc
Definition misc.hh:1413
Bitfield< 11 > rvl
Definition misc.hh:1404
const off_t SBE_OFFSET[enums::Num_RiscvType]
Definition misc.hh:1465
Bitfield< 7 > cbze
Definition misc.hh:1445
Bitfield< 19 > mxr
Definition misc.hh:1345
const RegVal DELEGABLE_EXCPS_WITH_RVH
constexpr uint64_t rvTypeFlags(T... args)
Definition misc.hh:591
Bitfield< 9 > sei
Definition misc.hh:1429
const RegVal STATUS_TVM_MASK
Definition misc.hh:1507
Bitfield< 9 > hu
Definition misc.hh:1368
const RegVal MSTATUS_MASKS[enums::Num_RiscvType][enums::Num_PrivilegeModeSet]
Definition misc.hh:1535
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
constexpr char MiscRegClassName[]
Definition reg_class.hh:82
uint64_t RegVal
Definition types.hh:173
@ MiscRegClass
Control (misc) register.
Definition reg_class.hh:70
const uint64_t rvTypes
Definition misc.hh:585
const uint64_t isaExts
Definition misc.hh:586
const std::string name
Definition misc.hh:583
Vector Registers layout specification.

Generated on Sat Oct 18 2025 08:06:44 for gem5 by doxygen 1.14.0