isa.cc (12406:86bde4a026b5) isa.cc (12477:3d6c49bc7290)
1/*
2 * Copyright (c) 2010-2016 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 44 unchanged lines hidden (view full) ---

53#include "sim/system.hh"
54
55namespace ArmISA
56{
57
58
59/**
60 * Some registers alias with others, and therefore need to be translated.
1/*
2 * Copyright (c) 2010-2016 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 44 unchanged lines hidden (view full) ---

53#include "sim/system.hh"
54
55namespace ArmISA
56{
57
58
59/**
60 * Some registers alias with others, and therefore need to be translated.
61 * For each entry:
62 * The first value is the misc register that is to be looked up
63 * the second value is the lower part of the translation
64 * the third the upper part
61 * When two mapping registers are given, they are the 32b lower and
62 * upper halves, respectively, of the 64b register being mapped.
65 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543
66 */
63 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543
64 */
67const struct ISA::MiscRegInitializerEntry
68 ISA::MiscRegSwitch[] = {
69 {MISCREG_ACTLR_EL1, {MISCREG_ACTLR_NS, 0}},
70 {MISCREG_AFSR0_EL1, {MISCREG_ADFSR_NS, 0}},
71 {MISCREG_AFSR1_EL1, {MISCREG_AIFSR_NS, 0}},
72 {MISCREG_AMAIR_EL1, {MISCREG_AMAIR0_NS, MISCREG_AMAIR1_NS}},
73 {MISCREG_CONTEXTIDR_EL1, {MISCREG_CONTEXTIDR_NS, 0}},
74 {MISCREG_CPACR_EL1, {MISCREG_CPACR, 0}},
75 {MISCREG_CSSELR_EL1, {MISCREG_CSSELR_NS, 0}},
76 {MISCREG_DACR32_EL2, {MISCREG_DACR_NS, 0}},
77 {MISCREG_FAR_EL1, {MISCREG_DFAR_NS, MISCREG_IFAR_NS}},
65void
66ISA::initializeMiscRegMetadata()
67{
68 InitReg(MISCREG_ACTLR_EL1).mapsTo(MISCREG_ACTLR_NS);
69 InitReg(MISCREG_AFSR0_EL1).mapsTo(MISCREG_ADFSR_NS);
70 InitReg(MISCREG_AFSR1_EL1).mapsTo(MISCREG_AIFSR_NS);
71 InitReg(MISCREG_AMAIR_EL1).mapsTo(MISCREG_AMAIR0_NS,
72 MISCREG_AMAIR1_NS);
73 InitReg(MISCREG_CONTEXTIDR_EL1).mapsTo(MISCREG_CONTEXTIDR_NS);
74 InitReg(MISCREG_CPACR_EL1).mapsTo(MISCREG_CPACR);
75 InitReg(MISCREG_CSSELR_EL1).mapsTo(MISCREG_CSSELR_NS);
76 InitReg(MISCREG_DACR32_EL2).mapsTo(MISCREG_DACR_NS);
77 InitReg(MISCREG_FAR_EL1).mapsTo(MISCREG_DFAR_NS,
78 MISCREG_IFAR_NS);
78 // ESR_EL1 -> DFSR
79 // ESR_EL1 -> DFSR
79 {MISCREG_HACR_EL2, {MISCREG_HACR, 0}},
80 {MISCREG_ACTLR_EL2, {MISCREG_HACTLR, 0}},
81 {MISCREG_AFSR0_EL2, {MISCREG_HADFSR, 0}},
82 {MISCREG_AFSR1_EL2, {MISCREG_HAIFSR, 0}},
83 {MISCREG_AMAIR_EL2, {MISCREG_HAMAIR0, MISCREG_HAMAIR1}},
84 {MISCREG_CPTR_EL2, {MISCREG_HCPTR, 0}},
85 {MISCREG_HCR_EL2, {MISCREG_HCR, 0 /*MISCREG_HCR2*/}},
86 {MISCREG_MDCR_EL2, {MISCREG_HDCR, 0}},
87 {MISCREG_FAR_EL2, {MISCREG_HDFAR, MISCREG_HIFAR}},
88 {MISCREG_MAIR_EL2, {MISCREG_HMAIR0, MISCREG_HMAIR1}},
89 {MISCREG_HPFAR_EL2, {MISCREG_HPFAR, 0}},
90 {MISCREG_SCTLR_EL2, {MISCREG_HSCTLR, 0}},
91 {MISCREG_ESR_EL2, {MISCREG_HSR, 0}},
92 {MISCREG_HSTR_EL2, {MISCREG_HSTR, 0}},
93 {MISCREG_TCR_EL2, {MISCREG_HTCR, 0}},
94 {MISCREG_TPIDR_EL2, {MISCREG_HTPIDR, 0}},
95 {MISCREG_TTBR0_EL2, {MISCREG_HTTBR, 0}},
96 {MISCREG_VBAR_EL2, {MISCREG_HVBAR, 0}},
97 {MISCREG_IFSR32_EL2, {MISCREG_IFSR_NS, 0}},
98 {MISCREG_MAIR_EL1, {MISCREG_PRRR_NS, MISCREG_NMRR_NS}},
99 {MISCREG_PAR_EL1, {MISCREG_PAR_NS, 0}},
80 InitReg(MISCREG_HACR_EL2).mapsTo(MISCREG_HACR);
81 InitReg(MISCREG_ACTLR_EL2).mapsTo(MISCREG_HACTLR);
82 InitReg(MISCREG_AFSR0_EL2).mapsTo(MISCREG_HADFSR);
83 InitReg(MISCREG_AFSR1_EL2).mapsTo(MISCREG_HAIFSR);
84 InitReg(MISCREG_AMAIR_EL2).mapsTo(MISCREG_HAMAIR0,
85 MISCREG_HAMAIR1);
86 InitReg(MISCREG_CPTR_EL2).mapsTo(MISCREG_HCPTR);
87 InitReg(MISCREG_HCR_EL2).mapsTo(MISCREG_HCR /*,
88 MISCREG_HCR2*/);
89 InitReg(MISCREG_MDCR_EL2).mapsTo(MISCREG_HDCR);
90 InitReg(MISCREG_FAR_EL2).mapsTo(MISCREG_HDFAR,
91 MISCREG_HIFAR);
92 InitReg(MISCREG_MAIR_EL2).mapsTo(MISCREG_HMAIR0,
93 MISCREG_HMAIR1);
94 InitReg(MISCREG_HPFAR_EL2).mapsTo(MISCREG_HPFAR);
95 InitReg(MISCREG_SCTLR_EL2).mapsTo(MISCREG_HSCTLR);
96 InitReg(MISCREG_ESR_EL2).mapsTo(MISCREG_HSR);
97 InitReg(MISCREG_HSTR_EL2).mapsTo(MISCREG_HSTR);
98 InitReg(MISCREG_TCR_EL2).mapsTo(MISCREG_HTCR);
99 InitReg(MISCREG_TPIDR_EL2).mapsTo(MISCREG_HTPIDR);
100 InitReg(MISCREG_TTBR0_EL2).mapsTo(MISCREG_HTTBR);
101 InitReg(MISCREG_VBAR_EL2).mapsTo(MISCREG_HVBAR);
102 InitReg(MISCREG_IFSR32_EL2).mapsTo(MISCREG_IFSR_NS);
103 InitReg(MISCREG_MAIR_EL1).mapsTo(MISCREG_PRRR_NS,
104 MISCREG_NMRR_NS);
105 InitReg(MISCREG_PAR_EL1).mapsTo(MISCREG_PAR_NS);
100 // RMR_EL1 -> RMR
101 // RMR_EL2 -> HRMR
106 // RMR_EL1 -> RMR
107 // RMR_EL2 -> HRMR
102 {MISCREG_SCTLR_EL1, {MISCREG_SCTLR_NS, 0}},
103 {MISCREG_SDER32_EL3, {MISCREG_SDER, 0}},
104 {MISCREG_TPIDR_EL1, {MISCREG_TPIDRPRW_NS, 0}},
105 {MISCREG_TPIDRRO_EL0, {MISCREG_TPIDRURO_NS, 0}},
106 {MISCREG_TPIDR_EL0, {MISCREG_TPIDRURW_NS, 0}},
107 {MISCREG_TCR_EL1, {MISCREG_TTBCR_NS, 0}},
108 {MISCREG_TTBR0_EL1, {MISCREG_TTBR0_NS, 0}},
109 {MISCREG_TTBR1_EL1, {MISCREG_TTBR1_NS, 0}},
110 {MISCREG_VBAR_EL1, {MISCREG_VBAR_NS, 0}},
111 {MISCREG_VMPIDR_EL2, {MISCREG_VMPIDR, 0}},
112 {MISCREG_VPIDR_EL2, {MISCREG_VPIDR, 0}},
113 {MISCREG_VTCR_EL2, {MISCREG_VTCR, 0}},
114 {MISCREG_VTTBR_EL2, {MISCREG_VTTBR, 0}},
115 {MISCREG_CNTFRQ_EL0, {MISCREG_CNTFRQ, 0}},
116 {MISCREG_CNTHCTL_EL2, {MISCREG_CNTHCTL, 0}},
117 {MISCREG_CNTHP_CTL_EL2, {MISCREG_CNTHP_CTL, 0}},
118 {MISCREG_CNTHP_CVAL_EL2, {MISCREG_CNTHP_CVAL, 0}}, /* 64b */
119 {MISCREG_CNTHP_TVAL_EL2, {MISCREG_CNTHP_TVAL, 0}},
120 {MISCREG_CNTKCTL_EL1, {MISCREG_CNTKCTL, 0}},
121 {MISCREG_CNTP_CTL_EL0, {MISCREG_CNTP_CTL_NS, 0}},
122 {MISCREG_CNTP_CVAL_EL0, {MISCREG_CNTP_CVAL_NS, 0}}, /* 64b */
123 {MISCREG_CNTP_TVAL_EL0, {MISCREG_CNTP_TVAL_NS, 0}},
124 {MISCREG_CNTPCT_EL0, {MISCREG_CNTPCT, 0}}, /* 64b */
125 {MISCREG_CNTV_CTL_EL0, {MISCREG_CNTV_CTL, 0}},
126 {MISCREG_CNTV_CVAL_EL0, {MISCREG_CNTV_CVAL, 0}}, /* 64b */
127 {MISCREG_CNTV_TVAL_EL0, {MISCREG_CNTV_TVAL, 0}},
128 {MISCREG_CNTVCT_EL0, {MISCREG_CNTVCT, 0}}, /* 64b */
129 {MISCREG_CNTVOFF_EL2, {MISCREG_CNTVOFF, 0}}, /* 64b */
130 {MISCREG_DBGAUTHSTATUS_EL1, {MISCREG_DBGAUTHSTATUS, 0}},
131 {MISCREG_DBGBCR0_EL1, {MISCREG_DBGBCR0, 0}},
132 {MISCREG_DBGBCR1_EL1, {MISCREG_DBGBCR1, 0}},
133 {MISCREG_DBGBCR2_EL1, {MISCREG_DBGBCR2, 0}},
134 {MISCREG_DBGBCR3_EL1, {MISCREG_DBGBCR3, 0}},
135 {MISCREG_DBGBCR4_EL1, {MISCREG_DBGBCR4, 0}},
136 {MISCREG_DBGBCR5_EL1, {MISCREG_DBGBCR5, 0}},
137 {MISCREG_DBGBVR0_EL1, {MISCREG_DBGBVR0, 0 /* MISCREG_DBGBXVR0 */}},
138 {MISCREG_DBGBVR1_EL1, {MISCREG_DBGBVR1, 0 /* MISCREG_DBGBXVR1 */}},
139 {MISCREG_DBGBVR2_EL1, {MISCREG_DBGBVR2, 0 /* MISCREG_DBGBXVR2 */}},
140 {MISCREG_DBGBVR3_EL1, {MISCREG_DBGBVR3, 0 /* MISCREG_DBGBXVR3 */}},
141 {MISCREG_DBGBVR4_EL1, {MISCREG_DBGBVR4, MISCREG_DBGBXVR4}},
142 {MISCREG_DBGBVR5_EL1, {MISCREG_DBGBVR5, MISCREG_DBGBXVR5}},
143 {MISCREG_DBGCLAIMSET_EL1, {MISCREG_DBGCLAIMSET, 0}},
144 {MISCREG_DBGCLAIMCLR_EL1, {MISCREG_DBGCLAIMCLR, 0}},
108 InitReg(MISCREG_SCTLR_EL1).mapsTo(MISCREG_SCTLR_NS);
109 InitReg(MISCREG_SDER32_EL3).mapsTo(MISCREG_SDER);
110 InitReg(MISCREG_TPIDR_EL1).mapsTo(MISCREG_TPIDRPRW_NS);
111 InitReg(MISCREG_TPIDRRO_EL0).mapsTo(MISCREG_TPIDRURO_NS);
112 InitReg(MISCREG_TPIDR_EL0).mapsTo(MISCREG_TPIDRURW_NS);
113 InitReg(MISCREG_TCR_EL1).mapsTo(MISCREG_TTBCR_NS);
114 InitReg(MISCREG_TTBR0_EL1).mapsTo(MISCREG_TTBR0_NS);
115 InitReg(MISCREG_TTBR1_EL1).mapsTo(MISCREG_TTBR1_NS);
116 InitReg(MISCREG_VBAR_EL1).mapsTo(MISCREG_VBAR_NS);
117 InitReg(MISCREG_VMPIDR_EL2).mapsTo(MISCREG_VMPIDR);
118 InitReg(MISCREG_VPIDR_EL2).mapsTo(MISCREG_VPIDR);
119 InitReg(MISCREG_VTCR_EL2).mapsTo(MISCREG_VTCR);
120 InitReg(MISCREG_VTTBR_EL2).mapsTo(MISCREG_VTTBR);
121 InitReg(MISCREG_CNTFRQ_EL0).mapsTo(MISCREG_CNTFRQ);
122 InitReg(MISCREG_CNTHCTL_EL2).mapsTo(MISCREG_CNTHCTL);
123 InitReg(MISCREG_CNTHP_CTL_EL2).mapsTo(MISCREG_CNTHP_CTL);
124 InitReg(MISCREG_CNTHP_CVAL_EL2).mapsTo(MISCREG_CNTHP_CVAL); /* 64b */
125 InitReg(MISCREG_CNTHP_TVAL_EL2).mapsTo(MISCREG_CNTHP_TVAL);
126 InitReg(MISCREG_CNTKCTL_EL1).mapsTo(MISCREG_CNTKCTL);
127 InitReg(MISCREG_CNTP_CTL_EL0).mapsTo(MISCREG_CNTP_CTL_NS);
128 InitReg(MISCREG_CNTP_CVAL_EL0).mapsTo(MISCREG_CNTP_CVAL_NS); /* 64b */
129 InitReg(MISCREG_CNTP_TVAL_EL0).mapsTo(MISCREG_CNTP_TVAL_NS);
130 InitReg(MISCREG_CNTPCT_EL0).mapsTo(MISCREG_CNTPCT); /* 64b */
131 InitReg(MISCREG_CNTV_CTL_EL0).mapsTo(MISCREG_CNTV_CTL);
132 InitReg(MISCREG_CNTV_CVAL_EL0).mapsTo(MISCREG_CNTV_CVAL); /* 64b */
133 InitReg(MISCREG_CNTV_TVAL_EL0).mapsTo(MISCREG_CNTV_TVAL);
134 InitReg(MISCREG_CNTVCT_EL0).mapsTo(MISCREG_CNTVCT); /* 64b */
135 InitReg(MISCREG_CNTVOFF_EL2).mapsTo(MISCREG_CNTVOFF); /* 64b */
136 InitReg(MISCREG_DBGAUTHSTATUS_EL1).mapsTo(MISCREG_DBGAUTHSTATUS);
137 InitReg(MISCREG_DBGBCR0_EL1).mapsTo(MISCREG_DBGBCR0);
138 InitReg(MISCREG_DBGBCR1_EL1).mapsTo(MISCREG_DBGBCR1);
139 InitReg(MISCREG_DBGBCR2_EL1).mapsTo(MISCREG_DBGBCR2);
140 InitReg(MISCREG_DBGBCR3_EL1).mapsTo(MISCREG_DBGBCR3);
141 InitReg(MISCREG_DBGBCR4_EL1).mapsTo(MISCREG_DBGBCR4);
142 InitReg(MISCREG_DBGBCR5_EL1).mapsTo(MISCREG_DBGBCR5);
143 InitReg(MISCREG_DBGBVR0_EL1).mapsTo(MISCREG_DBGBVR0 /*,
144 MISCREG_DBGBXVR0 */);
145 InitReg(MISCREG_DBGBVR1_EL1).mapsTo(MISCREG_DBGBVR1 /*,
146 MISCREG_DBGBXVR1 */);
147 InitReg(MISCREG_DBGBVR2_EL1).mapsTo(MISCREG_DBGBVR2 /*,
148 MISCREG_DBGBXVR2 */);
149 InitReg(MISCREG_DBGBVR3_EL1).mapsTo(MISCREG_DBGBVR3 /*,
150 MISCREG_DBGBXVR3 */);
151 InitReg(MISCREG_DBGBVR4_EL1).mapsTo(MISCREG_DBGBVR4 /*,
152 MISCREG_DBGBXVR4 */);
153 InitReg(MISCREG_DBGBVR5_EL1).mapsTo(MISCREG_DBGBVR5 /*,
154 MISCREG_DBGBXVR5 */);
155 InitReg(MISCREG_DBGCLAIMSET_EL1).mapsTo(MISCREG_DBGCLAIMSET);
156 InitReg(MISCREG_DBGCLAIMCLR_EL1).mapsTo(MISCREG_DBGCLAIMCLR);
145 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
146 // DBGDTRRX_EL0 -> DBGDTRRXint
147 // DBGDTRTX_EL0 -> DBGDTRRXint
157 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
158 // DBGDTRRX_EL0 -> DBGDTRRXint
159 // DBGDTRTX_EL0 -> DBGDTRRXint
148 {MISCREG_DBGPRCR_EL1, {MISCREG_DBGPRCR, 0}},
149 {MISCREG_DBGVCR32_EL2, {MISCREG_DBGVCR, 0}},
150 {MISCREG_DBGWCR0_EL1, {MISCREG_DBGWCR0, 0}},
151 {MISCREG_DBGWCR1_EL1, {MISCREG_DBGWCR1, 0}},
152 {MISCREG_DBGWCR2_EL1, {MISCREG_DBGWCR2, 0}},
153 {MISCREG_DBGWCR3_EL1, {MISCREG_DBGWCR3, 0}},
154 {MISCREG_DBGWVR0_EL1, {MISCREG_DBGWVR0, 0}},
155 {MISCREG_DBGWVR1_EL1, {MISCREG_DBGWVR1, 0}},
156 {MISCREG_DBGWVR2_EL1, {MISCREG_DBGWVR2, 0}},
157 {MISCREG_DBGWVR3_EL1, {MISCREG_DBGWVR3, 0}},
158 {MISCREG_ID_DFR0_EL1, {MISCREG_ID_DFR0, 0}},
159 {MISCREG_MDCCSR_EL0, {MISCREG_DBGDSCRint, 0}},
160 {MISCREG_MDRAR_EL1, {MISCREG_DBGDRAR, 0}},
161 {MISCREG_MDSCR_EL1, {MISCREG_DBGDSCRext, 0}},
162 {MISCREG_OSDLR_EL1, {MISCREG_DBGOSDLR, 0}},
163 {MISCREG_OSDTRRX_EL1, {MISCREG_DBGDTRRXext, 0}},
164 {MISCREG_OSDTRTX_EL1, {MISCREG_DBGDTRTXext, 0}},
165 {MISCREG_OSECCR_EL1, {MISCREG_DBGOSECCR, 0}},
166 {MISCREG_OSLAR_EL1, {MISCREG_DBGOSLAR, 0}},
167 {MISCREG_OSLSR_EL1, {MISCREG_DBGOSLSR, 0}},
168 {MISCREG_PMCCNTR_EL0, {MISCREG_PMCCNTR, 0}},
169 {MISCREG_PMCEID0_EL0, {MISCREG_PMCEID0, 0}},
170 {MISCREG_PMCEID1_EL0, {MISCREG_PMCEID1, 0}},
171 {MISCREG_PMCNTENSET_EL0, {MISCREG_PMCNTENSET, 0}},
172 {MISCREG_PMCNTENCLR_EL0, {MISCREG_PMCNTENCLR, 0}},
173 {MISCREG_PMCR_EL0, {MISCREG_PMCR, 0}},
174/* {MISCREG_PMEVCNTR0_EL0, {MISCREG_PMEVCNTR0, 0}},
175 {MISCREG_PMEVCNTR1_EL0, {MISCREG_PMEVCNTR1, 0}},
176 {MISCREG_PMEVCNTR2_EL0, {MISCREG_PMEVCNTR2, 0}},
177 {MISCREG_PMEVCNTR3_EL0, {MISCREG_PMEVCNTR3, 0}},
178 {MISCREG_PMEVCNTR4_EL0, {MISCREG_PMEVCNTR4, 0}},
179 {MISCREG_PMEVCNTR5_EL0, {MISCREG_PMEVCNTR5, 0}},
180 {MISCREG_PMEVTYPER0_EL0, {MISCREG_PMEVTYPER0, 0}},
181 {MISCREG_PMEVTYPER1_EL0, {MISCREG_PMEVTYPER1, 0}},
182 {MISCREG_PMEVTYPER2_EL0, {MISCREG_PMEVTYPER2, 0}},
183 {MISCREG_PMEVTYPER3_EL0, {MISCREG_PMEVTYPER3, 0}},
184 {MISCREG_PMEVTYPER4_EL0, {MISCREG_PMEVTYPER4, 0}},
185 {MISCREG_PMEVTYPER5_EL0, {MISCREG_PMEVTYPER5, 0}}, */
186 {MISCREG_PMINTENCLR_EL1, {MISCREG_PMINTENCLR, 0}},
187 {MISCREG_PMINTENSET_EL1, {MISCREG_PMINTENSET, 0}},
188// {MISCREG_PMOVSCLR_EL0, {MISCREG_PMOVSCLR, 0}},
189 {MISCREG_PMOVSSET_EL0, {MISCREG_PMOVSSET, 0}},
190 {MISCREG_PMSELR_EL0, {MISCREG_PMSELR, 0}},
191 {MISCREG_PMSWINC_EL0, {MISCREG_PMSWINC, 0}},
192 {MISCREG_PMUSERENR_EL0, {MISCREG_PMUSERENR, 0}},
193 {MISCREG_PMXEVCNTR_EL0, {MISCREG_PMXEVCNTR, 0}},
194 {MISCREG_PMXEVTYPER_EL0, {MISCREG_PMXEVTYPER, 0}},
160 InitReg(MISCREG_DBGPRCR_EL1).mapsTo(MISCREG_DBGPRCR);
161 InitReg(MISCREG_DBGVCR32_EL2).mapsTo(MISCREG_DBGVCR);
162 InitReg(MISCREG_DBGWCR0_EL1).mapsTo(MISCREG_DBGWCR0);
163 InitReg(MISCREG_DBGWCR1_EL1).mapsTo(MISCREG_DBGWCR1);
164 InitReg(MISCREG_DBGWCR2_EL1).mapsTo(MISCREG_DBGWCR2);
165 InitReg(MISCREG_DBGWCR3_EL1).mapsTo(MISCREG_DBGWCR3);
166 InitReg(MISCREG_DBGWVR0_EL1).mapsTo(MISCREG_DBGWVR0);
167 InitReg(MISCREG_DBGWVR1_EL1).mapsTo(MISCREG_DBGWVR1);
168 InitReg(MISCREG_DBGWVR2_EL1).mapsTo(MISCREG_DBGWVR2);
169 InitReg(MISCREG_DBGWVR3_EL1).mapsTo(MISCREG_DBGWVR3);
170 InitReg(MISCREG_ID_DFR0_EL1).mapsTo(MISCREG_ID_DFR0);
171 InitReg(MISCREG_MDCCSR_EL0).mapsTo(MISCREG_DBGDSCRint);
172 InitReg(MISCREG_MDRAR_EL1).mapsTo(MISCREG_DBGDRAR);
173 InitReg(MISCREG_MDSCR_EL1).mapsTo(MISCREG_DBGDSCRext);
174 InitReg(MISCREG_OSDLR_EL1).mapsTo(MISCREG_DBGOSDLR);
175 InitReg(MISCREG_OSDTRRX_EL1).mapsTo(MISCREG_DBGDTRRXext);
176 InitReg(MISCREG_OSDTRTX_EL1).mapsTo(MISCREG_DBGDTRTXext);
177 InitReg(MISCREG_OSECCR_EL1).mapsTo(MISCREG_DBGOSECCR);
178 InitReg(MISCREG_OSLAR_EL1).mapsTo(MISCREG_DBGOSLAR);
179 InitReg(MISCREG_OSLSR_EL1).mapsTo(MISCREG_DBGOSLSR);
180 InitReg(MISCREG_PMCCNTR_EL0).mapsTo(MISCREG_PMCCNTR);
181 InitReg(MISCREG_PMCEID0_EL0).mapsTo(MISCREG_PMCEID0);
182 InitReg(MISCREG_PMCEID1_EL0).mapsTo(MISCREG_PMCEID1);
183 InitReg(MISCREG_PMCNTENSET_EL0).mapsTo(MISCREG_PMCNTENSET);
184 InitReg(MISCREG_PMCNTENCLR_EL0).mapsTo(MISCREG_PMCNTENCLR);
185 InitReg(MISCREG_PMCR_EL0).mapsTo(MISCREG_PMCR);
186/* InitReg(MISCREG_PMEVCNTR0_EL0).mapsTo(MISCREG_PMEVCNTR0);
187 InitReg(MISCREG_PMEVCNTR1_EL0).mapsTo(MISCREG_PMEVCNTR1);
188 InitReg(MISCREG_PMEVCNTR2_EL0).mapsTo(MISCREG_PMEVCNTR2);
189 InitReg(MISCREG_PMEVCNTR3_EL0).mapsTo(MISCREG_PMEVCNTR3);
190 InitReg(MISCREG_PMEVCNTR4_EL0).mapsTo(MISCREG_PMEVCNTR4);
191 InitReg(MISCREG_PMEVCNTR5_EL0).mapsTo(MISCREG_PMEVCNTR5);
192 InitReg(MISCREG_PMEVTYPER0_EL0).mapsTo(MISCREG_PMEVTYPER0);
193 InitReg(MISCREG_PMEVTYPER1_EL0).mapsTo(MISCREG_PMEVTYPER1);
194 InitReg(MISCREG_PMEVTYPER2_EL0).mapsTo(MISCREG_PMEVTYPER2);
195 InitReg(MISCREG_PMEVTYPER3_EL0).mapsTo(MISCREG_PMEVTYPER3);
196 InitReg(MISCREG_PMEVTYPER4_EL0).mapsTo(MISCREG_PMEVTYPER4);
197 InitReg(MISCREG_PMEVTYPER5_EL0).mapsTo(MISCREG_PMEVTYPER5); */
198 InitReg(MISCREG_PMINTENCLR_EL1).mapsTo(MISCREG_PMINTENCLR);
199 InitReg(MISCREG_PMINTENSET_EL1).mapsTo(MISCREG_PMINTENSET);
200// InitReg(MISCREG_PMOVSCLR_EL0).mapsTo(MISCREG_PMOVSCLR);
201 InitReg(MISCREG_PMOVSSET_EL0).mapsTo(MISCREG_PMOVSSET);
202 InitReg(MISCREG_PMSELR_EL0).mapsTo(MISCREG_PMSELR);
203 InitReg(MISCREG_PMSWINC_EL0).mapsTo(MISCREG_PMSWINC);
204 InitReg(MISCREG_PMUSERENR_EL0).mapsTo(MISCREG_PMUSERENR);
205 InitReg(MISCREG_PMXEVCNTR_EL0).mapsTo(MISCREG_PMXEVCNTR);
206 InitReg(MISCREG_PMXEVTYPER_EL0).mapsTo(MISCREG_PMXEVTYPER);
195
196 // from ARM DDI 0487A.i, template text
197 // "AArch64 System register ___ can be mapped to
198 // AArch32 System register ___, but this is not
199 // architecturally mandated."
207
208 // from ARM DDI 0487A.i, template text
209 // "AArch64 System register ___ can be mapped to
210 // AArch32 System register ___, but this is not
211 // architecturally mandated."
200 {MISCREG_SCR_EL3, {MISCREG_SCR, 0}}, // D7-2005
212 InitReg(MISCREG_SCR_EL3).mapsTo(MISCREG_SCR); // D7-2005
201 // MDCR_EL3 -> SDCR, D7-2108 (the latter is unimpl. in gem5)
213 // MDCR_EL3 -> SDCR, D7-2108 (the latter is unimpl. in gem5)
202 {MISCREG_SPSR_EL1, {MISCREG_SPSR_SVC, 0}}, // C5.2.17 SPSR_EL1
203 {MISCREG_SPSR_EL2, {MISCREG_SPSR_HYP, 0}}, // C5.2.18 SPSR_EL2
204 {MISCREG_SPSR_EL3, {MISCREG_SPSR_MON, 0}}, // C5.2.19 SPSR_EL3
205};
214 InitReg(MISCREG_SPSR_EL1).mapsTo(MISCREG_SPSR_SVC); // C5.2.17 SPSR_EL1
215 InitReg(MISCREG_SPSR_EL2).mapsTo(MISCREG_SPSR_HYP); // C5.2.18 SPSR_EL2
216 InitReg(MISCREG_SPSR_EL3).mapsTo(MISCREG_SPSR_MON); // C5.2.19 SPSR_EL3
217}
206
218
207
208ISA::ISA(Params *p)
209 : SimObject(p),
210 system(NULL),
211 _decoderFlavour(p->decoderFlavour),
212 _vecRegRenameMode(p->vecRegRenameMode),
213 pmu(p->pmu),
219ISA::ISA(Params *p)
220 : SimObject(p),
221 system(NULL),
222 _decoderFlavour(p->decoderFlavour),
223 _vecRegRenameMode(p->vecRegRenameMode),
224 pmu(p->pmu),
214 lookUpMiscReg(NUM_MISCREGS, {0,0})
225 lookUpMiscReg(NUM_MISCREGS)
215{
216 miscRegs[MISCREG_SCTLR_RST] = 0;
217
218 // Hook up a dummy device if we haven't been configured with a
219 // real PMU. By using a dummy device, we don't need to check that
220 // the PMU exist every time we try to access a PMU register.
221 if (!pmu)
222 pmu = &dummyDevice;

--- 13 unchanged lines hidden (view full) ---

236 physAddrRange64 = system->physAddrRange64();
237 } else {
238 highestELIs64 = true; // ArmSystem::highestELIs64 does the same
239 haveSecurity = haveLPAE = haveVirtualization = false;
240 haveLargeAsid64 = false;
241 physAddrRange64 = 32; // dummy value
242 }
243
226{
227 miscRegs[MISCREG_SCTLR_RST] = 0;
228
229 // Hook up a dummy device if we haven't been configured with a
230 // real PMU. By using a dummy device, we don't need to check that
231 // the PMU exist every time we try to access a PMU register.
232 if (!pmu)
233 pmu = &dummyDevice;

--- 13 unchanged lines hidden (view full) ---

247 physAddrRange64 = system->physAddrRange64();
248 } else {
249 highestELIs64 = true; // ArmSystem::highestELIs64 does the same
250 haveSecurity = haveLPAE = haveVirtualization = false;
251 haveLargeAsid64 = false;
252 physAddrRange64 = 32; // dummy value
253 }
254
244 /** Fill in the miscReg translation table */
245 for (auto sw : MiscRegSwitch) {
246 lookUpMiscReg[sw.index] = sw.entry;
247 }
248
255 initializeMiscRegMetadata();
249 preUnflattenMiscReg();
250
251 clear();
252}
253
254const ArmISAParams *
255ISA::params() const
256{

--- 1770 unchanged lines hidden ---
256 preUnflattenMiscReg();
257
258 clear();
259}
260
261const ArmISAParams *
262ISA::params() const
263{

--- 1770 unchanged lines hidden ---