gem5 [DEVELOP-FOR-25.1]
Loading...
Searching...
No Matches
misc.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2010-2013, 2015-2025 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
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
38#include "arch/arm/regs/misc.hh"
39
40#include <tuple>
41
43#include "arch/arm/isa.hh"
44#include "base/bitfield.hh"
45#include "base/logging.hh"
46#include "cpu/thread_context.hh"
48#include "params/ArmISA.hh"
49#include "sim/full_system.hh"
50
51namespace gem5
52{
53
54namespace ArmISA
55{
56
57namespace
58{
59
60std::unordered_map<MiscRegNum32, MiscRegIndex> miscRegNum32ToIdx{
61 // MCR/MRC regs
62 { MiscRegNum32(14, 0, 0, 0, 0), MISCREG_DBGDIDR },
63 { MiscRegNum32(14, 0, 0, 0, 2), MISCREG_DBGDTRRXext },
64 { MiscRegNum32(14, 0, 0, 0, 4), MISCREG_DBGBVR0 },
65 { MiscRegNum32(14, 0, 0, 0, 5), MISCREG_DBGBCR0 },
66 { MiscRegNum32(14, 0, 0, 0, 6), MISCREG_DBGWVR0 },
67 { MiscRegNum32(14, 0, 0, 0, 7), MISCREG_DBGWCR0 },
68 { MiscRegNum32(14, 0, 0, 1, 0), MISCREG_DBGDSCRint },
69 { MiscRegNum32(14, 0, 0, 1, 4), MISCREG_DBGBVR1 },
70 { MiscRegNum32(14, 0, 0, 1, 5), MISCREG_DBGBCR1 },
71 { MiscRegNum32(14, 0, 0, 1, 6), MISCREG_DBGWVR1 },
72 { MiscRegNum32(14, 0, 0, 1, 7), MISCREG_DBGWCR1 },
73 { MiscRegNum32(14, 0, 0, 2, 2), MISCREG_DBGDSCRext },
74 { MiscRegNum32(14, 0, 0, 2, 4), MISCREG_DBGBVR2 },
75 { MiscRegNum32(14, 0, 0, 2, 5), MISCREG_DBGBCR2 },
76 { MiscRegNum32(14, 0, 0, 2, 6), MISCREG_DBGWVR2 },
77 { MiscRegNum32(14, 0, 0, 2, 7), MISCREG_DBGWCR2 },
78 { MiscRegNum32(14, 0, 0, 3, 2), MISCREG_DBGDTRTXext },
79 { MiscRegNum32(14, 0, 0, 3, 4), MISCREG_DBGBVR3 },
80 { MiscRegNum32(14, 0, 0, 3, 5), MISCREG_DBGBCR3 },
81 { MiscRegNum32(14, 0, 0, 3, 6), MISCREG_DBGWVR3 },
82 { MiscRegNum32(14, 0, 0, 3, 7), MISCREG_DBGWCR3 },
83 { MiscRegNum32(14, 0, 0, 4, 4), MISCREG_DBGBVR4 },
84 { MiscRegNum32(14, 0, 0, 4, 5), MISCREG_DBGBCR4 },
85 { MiscRegNum32(14, 0, 0, 4, 6), MISCREG_DBGWVR4 },
86 { MiscRegNum32(14, 0, 0, 4, 7), MISCREG_DBGWCR4 },
87 { MiscRegNum32(14, 0, 0, 5, 4), MISCREG_DBGBVR5 },
88 { MiscRegNum32(14, 0, 0, 5, 5), MISCREG_DBGBCR5 },
89 { MiscRegNum32(14, 0, 0, 5, 6), MISCREG_DBGWVR5 },
90 { MiscRegNum32(14, 0, 0, 5, 7), MISCREG_DBGWCR5 },
91 { MiscRegNum32(14, 0, 0, 6, 2), MISCREG_DBGOSECCR },
92 { MiscRegNum32(14, 0, 0, 6, 4), MISCREG_DBGBVR6 },
93 { MiscRegNum32(14, 0, 0, 6, 5), MISCREG_DBGBCR6 },
94 { MiscRegNum32(14, 0, 0, 6, 6), MISCREG_DBGWVR6 },
95 { MiscRegNum32(14, 0, 0, 6, 7), MISCREG_DBGWCR6 },
96 { MiscRegNum32(14, 0, 0, 7, 0), MISCREG_DBGVCR },
97 { MiscRegNum32(14, 0, 0, 7, 4), MISCREG_DBGBVR7 },
98 { MiscRegNum32(14, 0, 0, 7, 5), MISCREG_DBGBCR7 },
99 { MiscRegNum32(14, 0, 0, 7, 6), MISCREG_DBGWVR7 },
100 { MiscRegNum32(14, 0, 0, 7, 7), MISCREG_DBGWCR7 },
101 { MiscRegNum32(14, 0, 0, 8, 4), MISCREG_DBGBVR8 },
102 { MiscRegNum32(14, 0, 0, 8, 5), MISCREG_DBGBCR8 },
103 { MiscRegNum32(14, 0, 0, 8, 6), MISCREG_DBGWVR8 },
104 { MiscRegNum32(14, 0, 0, 8, 7), MISCREG_DBGWCR8 },
105 { MiscRegNum32(14, 0, 0, 9, 4), MISCREG_DBGBVR9 },
106 { MiscRegNum32(14, 0, 0, 9, 5), MISCREG_DBGBCR9 },
107 { MiscRegNum32(14, 0, 0, 9, 6), MISCREG_DBGWVR9 },
108 { MiscRegNum32(14, 0, 0, 9, 7), MISCREG_DBGWCR9 },
109 { MiscRegNum32(14, 0, 0, 10, 4), MISCREG_DBGBVR10 },
110 { MiscRegNum32(14, 0, 0, 10, 5), MISCREG_DBGBCR10 },
111 { MiscRegNum32(14, 0, 0, 10, 6), MISCREG_DBGWVR10 },
112 { MiscRegNum32(14, 0, 0, 10, 7), MISCREG_DBGWCR10 },
113 { MiscRegNum32(14, 0, 0, 11, 4), MISCREG_DBGBVR11 },
114 { MiscRegNum32(14, 0, 0, 11, 5), MISCREG_DBGBCR11 },
115 { MiscRegNum32(14, 0, 0, 11, 6), MISCREG_DBGWVR11 },
116 { MiscRegNum32(14, 0, 0, 11, 7), MISCREG_DBGWCR11 },
117 { MiscRegNum32(14, 0, 0, 12, 4), MISCREG_DBGBVR12 },
118 { MiscRegNum32(14, 0, 0, 12, 5), MISCREG_DBGBCR12 },
119 { MiscRegNum32(14, 0, 0, 12, 6), MISCREG_DBGWVR12 },
120 { MiscRegNum32(14, 0, 0, 12, 7), MISCREG_DBGWCR12 },
121 { MiscRegNum32(14, 0, 0, 13, 4), MISCREG_DBGBVR13 },
122 { MiscRegNum32(14, 0, 0, 13, 5), MISCREG_DBGBCR13 },
123 { MiscRegNum32(14, 0, 0, 13, 6), MISCREG_DBGWVR13 },
124 { MiscRegNum32(14, 0, 0, 13, 7), MISCREG_DBGWCR13 },
125 { MiscRegNum32(14, 0, 0, 14, 4), MISCREG_DBGBVR14 },
126 { MiscRegNum32(14, 0, 0, 14, 5), MISCREG_DBGBCR14 },
127 { MiscRegNum32(14, 0, 0, 14, 6), MISCREG_DBGWVR14 },
128 { MiscRegNum32(14, 0, 0, 14, 7), MISCREG_DBGWCR14 },
129 { MiscRegNum32(14, 0, 0, 15, 4), MISCREG_DBGBVR15 },
130 { MiscRegNum32(14, 0, 0, 15, 5), MISCREG_DBGBCR15 },
131 { MiscRegNum32(14, 0, 0, 15, 6), MISCREG_DBGWVR15 },
132 { MiscRegNum32(14, 0, 0, 15, 7), MISCREG_DBGWCR15 },
133 { MiscRegNum32(14, 0, 1, 0, 1), MISCREG_DBGBXVR0 },
134 { MiscRegNum32(14, 0, 1, 0, 4), MISCREG_DBGOSLAR },
135 { MiscRegNum32(14, 0, 1, 1, 1), MISCREG_DBGBXVR1 },
136 { MiscRegNum32(14, 0, 1, 1, 4), MISCREG_DBGOSLSR },
137 { MiscRegNum32(14, 0, 1, 2, 1), MISCREG_DBGBXVR2 },
138 { MiscRegNum32(14, 0, 1, 3, 1), MISCREG_DBGBXVR3 },
139 { MiscRegNum32(14, 0, 1, 3, 4), MISCREG_DBGOSDLR },
140 { MiscRegNum32(14, 0, 1, 4, 1), MISCREG_DBGBXVR4 },
141 { MiscRegNum32(14, 0, 1, 4, 4), MISCREG_DBGPRCR },
142 { MiscRegNum32(14, 0, 1, 5, 1), MISCREG_DBGBXVR5 },
143 { MiscRegNum32(14, 0, 1, 6, 1), MISCREG_DBGBXVR6 },
144 { MiscRegNum32(14, 0, 1, 7, 1), MISCREG_DBGBXVR7 },
145 { MiscRegNum32(14, 0, 1, 8, 1), MISCREG_DBGBXVR8 },
146 { MiscRegNum32(14, 0, 1, 9, 1), MISCREG_DBGBXVR9 },
147 { MiscRegNum32(14, 0, 1, 10, 1), MISCREG_DBGBXVR10 },
148 { MiscRegNum32(14, 0, 1, 11, 1), MISCREG_DBGBXVR11 },
149 { MiscRegNum32(14, 0, 1, 12, 1), MISCREG_DBGBXVR12 },
150 { MiscRegNum32(14, 0, 1, 13, 1), MISCREG_DBGBXVR13 },
151 { MiscRegNum32(14, 0, 1, 14, 1), MISCREG_DBGBXVR14 },
152 { MiscRegNum32(14, 0, 1, 15, 1), MISCREG_DBGBXVR15 },
153 { MiscRegNum32(14, 6, 1, 0, 0), MISCREG_TEEHBR },
154 { MiscRegNum32(14, 7, 0, 0, 0), MISCREG_JIDR },
155 { MiscRegNum32(14, 7, 1, 0, 0), MISCREG_JOSCR },
156 { MiscRegNum32(14, 7, 2, 0, 0), MISCREG_JMCR },
157 { MiscRegNum32(15, 0, 0, 0, 0), MISCREG_MIDR },
158 { MiscRegNum32(15, 0, 0, 0, 1), MISCREG_CTR },
159 { MiscRegNum32(15, 0, 0, 0, 2), MISCREG_TCMTR },
160 { MiscRegNum32(15, 0, 0, 0, 3), MISCREG_TLBTR },
161 { MiscRegNum32(15, 0, 0, 0, 4), MISCREG_MIDR },
162 { MiscRegNum32(15, 0, 0, 0, 5), MISCREG_MPIDR },
163 { MiscRegNum32(15, 0, 0, 0, 6), MISCREG_REVIDR },
164 { MiscRegNum32(15, 0, 0, 0, 7), MISCREG_MIDR },
165 { MiscRegNum32(15, 0, 0, 1, 0), MISCREG_ID_PFR0 },
166 { MiscRegNum32(15, 0, 0, 1, 1), MISCREG_ID_PFR1 },
167 { MiscRegNum32(15, 0, 0, 1, 2), MISCREG_ID_DFR0 },
168 { MiscRegNum32(15, 0, 0, 1, 3), MISCREG_ID_AFR0 },
169 { MiscRegNum32(15, 0, 0, 1, 4), MISCREG_ID_MMFR0 },
170 { MiscRegNum32(15, 0, 0, 1, 5), MISCREG_ID_MMFR1 },
171 { MiscRegNum32(15, 0, 0, 1, 6), MISCREG_ID_MMFR2 },
172 { MiscRegNum32(15, 0, 0, 1, 7), MISCREG_ID_MMFR3 },
173 { MiscRegNum32(15, 0, 0, 2, 0), MISCREG_ID_ISAR0 },
174 { MiscRegNum32(15, 0, 0, 2, 1), MISCREG_ID_ISAR1 },
175 { MiscRegNum32(15, 0, 0, 2, 2), MISCREG_ID_ISAR2 },
176 { MiscRegNum32(15, 0, 0, 2, 3), MISCREG_ID_ISAR3 },
177 { MiscRegNum32(15, 0, 0, 2, 4), MISCREG_ID_ISAR4 },
178 { MiscRegNum32(15, 0, 0, 2, 5), MISCREG_ID_ISAR5 },
179 { MiscRegNum32(15, 0, 0, 2, 6), MISCREG_ID_MMFR4 },
180 { MiscRegNum32(15, 0, 0, 2, 7), MISCREG_ID_ISAR6 },
181 { MiscRegNum32(15, 0, 0, 3, 0), MISCREG_RAZ },
182 { MiscRegNum32(15, 0, 0, 3, 1), MISCREG_RAZ },
183 { MiscRegNum32(15, 0, 0, 3, 2), MISCREG_RAZ },
184 { MiscRegNum32(15, 0, 0, 3, 3), MISCREG_RAZ },
185 { MiscRegNum32(15, 0, 0, 3, 4), MISCREG_RAZ },
186 { MiscRegNum32(15, 0, 0, 3, 5), MISCREG_RAZ },
187 { MiscRegNum32(15, 0, 0, 3, 6), MISCREG_RAZ },
188 { MiscRegNum32(15, 0, 0, 3, 7), MISCREG_RAZ },
189 { MiscRegNum32(15, 0, 0, 4, 0), MISCREG_RAZ },
190 { MiscRegNum32(15, 0, 0, 4, 1), MISCREG_RAZ },
191 { MiscRegNum32(15, 0, 0, 4, 2), MISCREG_RAZ },
192 { MiscRegNum32(15, 0, 0, 4, 3), MISCREG_RAZ },
193 { MiscRegNum32(15, 0, 0, 4, 4), MISCREG_RAZ },
194 { MiscRegNum32(15, 0, 0, 4, 5), MISCREG_RAZ },
195 { MiscRegNum32(15, 0, 0, 4, 6), MISCREG_RAZ },
196 { MiscRegNum32(15, 0, 0, 4, 7), MISCREG_RAZ },
197 { MiscRegNum32(15, 0, 0, 5, 0), MISCREG_RAZ },
198 { MiscRegNum32(15, 0, 0, 5, 1), MISCREG_RAZ },
199 { MiscRegNum32(15, 0, 0, 5, 2), MISCREG_RAZ },
200 { MiscRegNum32(15, 0, 0, 5, 3), MISCREG_RAZ },
201 { MiscRegNum32(15, 0, 0, 5, 4), MISCREG_RAZ },
202 { MiscRegNum32(15, 0, 0, 5, 5), MISCREG_RAZ },
203 { MiscRegNum32(15, 0, 0, 5, 6), MISCREG_RAZ },
204 { MiscRegNum32(15, 0, 0, 5, 7), MISCREG_RAZ },
205 { MiscRegNum32(15, 0, 0, 6, 0), MISCREG_RAZ },
206 { MiscRegNum32(15, 0, 0, 6, 1), MISCREG_RAZ },
207 { MiscRegNum32(15, 0, 0, 6, 2), MISCREG_RAZ },
208 { MiscRegNum32(15, 0, 0, 6, 3), MISCREG_RAZ },
209 { MiscRegNum32(15, 0, 0, 6, 4), MISCREG_RAZ },
210 { MiscRegNum32(15, 0, 0, 6, 5), MISCREG_RAZ },
211 { MiscRegNum32(15, 0, 0, 6, 6), MISCREG_RAZ },
212 { MiscRegNum32(15, 0, 0, 6, 7), MISCREG_RAZ },
213 { MiscRegNum32(15, 0, 0, 7, 0), MISCREG_RAZ },
214 { MiscRegNum32(15, 0, 0, 7, 1), MISCREG_RAZ },
215 { MiscRegNum32(15, 0, 0, 7, 2), MISCREG_RAZ },
216 { MiscRegNum32(15, 0, 0, 7, 3), MISCREG_RAZ },
217 { MiscRegNum32(15, 0, 0, 7, 4), MISCREG_RAZ },
218 { MiscRegNum32(15, 0, 0, 7, 5), MISCREG_RAZ },
219 { MiscRegNum32(15, 0, 0, 7, 6), MISCREG_RAZ },
220 { MiscRegNum32(15, 0, 0, 7, 7), MISCREG_RAZ },
221 { MiscRegNum32(15, 0, 0, 8, 0), MISCREG_RAZ },
222 { MiscRegNum32(15, 0, 0, 8, 1), MISCREG_RAZ },
223 { MiscRegNum32(15, 0, 0, 8, 2), MISCREG_RAZ },
224 { MiscRegNum32(15, 0, 0, 8, 3), MISCREG_RAZ },
225 { MiscRegNum32(15, 0, 0, 8, 4), MISCREG_RAZ },
226 { MiscRegNum32(15, 0, 0, 8, 5), MISCREG_RAZ },
227 { MiscRegNum32(15, 0, 0, 8, 6), MISCREG_RAZ },
228 { MiscRegNum32(15, 0, 0, 8, 7), MISCREG_RAZ },
229 { MiscRegNum32(15, 0, 0, 9, 0), MISCREG_RAZ },
230 { MiscRegNum32(15, 0, 0, 9, 1), MISCREG_RAZ },
231 { MiscRegNum32(15, 0, 0, 9, 2), MISCREG_RAZ },
232 { MiscRegNum32(15, 0, 0, 9, 3), MISCREG_RAZ },
233 { MiscRegNum32(15, 0, 0, 9, 4), MISCREG_RAZ },
234 { MiscRegNum32(15, 0, 0, 9, 5), MISCREG_RAZ },
235 { MiscRegNum32(15, 0, 0, 9, 6), MISCREG_RAZ },
236 { MiscRegNum32(15, 0, 0, 9, 7), MISCREG_RAZ },
237 { MiscRegNum32(15, 0, 0, 10, 0), MISCREG_RAZ },
238 { MiscRegNum32(15, 0, 0, 10, 1), MISCREG_RAZ },
239 { MiscRegNum32(15, 0, 0, 10, 2), MISCREG_RAZ },
240 { MiscRegNum32(15, 0, 0, 10, 3), MISCREG_RAZ },
241 { MiscRegNum32(15, 0, 0, 10, 4), MISCREG_RAZ },
242 { MiscRegNum32(15, 0, 0, 10, 5), MISCREG_RAZ },
243 { MiscRegNum32(15, 0, 0, 10, 6), MISCREG_RAZ },
244 { MiscRegNum32(15, 0, 0, 10, 7), MISCREG_RAZ },
245 { MiscRegNum32(15, 0, 0, 11, 0), MISCREG_RAZ },
246 { MiscRegNum32(15, 0, 0, 11, 1), MISCREG_RAZ },
247 { MiscRegNum32(15, 0, 0, 11, 2), MISCREG_RAZ },
248 { MiscRegNum32(15, 0, 0, 11, 3), MISCREG_RAZ },
249 { MiscRegNum32(15, 0, 0, 11, 4), MISCREG_RAZ },
250 { MiscRegNum32(15, 0, 0, 11, 5), MISCREG_RAZ },
251 { MiscRegNum32(15, 0, 0, 11, 6), MISCREG_RAZ },
252 { MiscRegNum32(15, 0, 0, 11, 7), MISCREG_RAZ },
253 { MiscRegNum32(15, 0, 0, 12, 0), MISCREG_RAZ },
254 { MiscRegNum32(15, 0, 0, 12, 1), MISCREG_RAZ },
255 { MiscRegNum32(15, 0, 0, 12, 2), MISCREG_RAZ },
256 { MiscRegNum32(15, 0, 0, 12, 3), MISCREG_RAZ },
257 { MiscRegNum32(15, 0, 0, 12, 4), MISCREG_RAZ },
258 { MiscRegNum32(15, 0, 0, 12, 5), MISCREG_RAZ },
259 { MiscRegNum32(15, 0, 0, 12, 6), MISCREG_RAZ },
260 { MiscRegNum32(15, 0, 0, 12, 7), MISCREG_RAZ },
261 { MiscRegNum32(15, 0, 0, 13, 0), MISCREG_RAZ },
262 { MiscRegNum32(15, 0, 0, 13, 1), MISCREG_RAZ },
263 { MiscRegNum32(15, 0, 0, 13, 2), MISCREG_RAZ },
264 { MiscRegNum32(15, 0, 0, 13, 3), MISCREG_RAZ },
265 { MiscRegNum32(15, 0, 0, 13, 4), MISCREG_RAZ },
266 { MiscRegNum32(15, 0, 0, 13, 5), MISCREG_RAZ },
267 { MiscRegNum32(15, 0, 0, 13, 6), MISCREG_RAZ },
268 { MiscRegNum32(15, 0, 0, 13, 7), MISCREG_RAZ },
269 { MiscRegNum32(15, 0, 0, 14, 0), MISCREG_RAZ },
270 { MiscRegNum32(15, 0, 0, 14, 1), MISCREG_RAZ },
271 { MiscRegNum32(15, 0, 0, 14, 2), MISCREG_RAZ },
272 { MiscRegNum32(15, 0, 0, 14, 3), MISCREG_RAZ },
273 { MiscRegNum32(15, 0, 0, 14, 4), MISCREG_RAZ },
274 { MiscRegNum32(15, 0, 0, 14, 5), MISCREG_RAZ },
275 { MiscRegNum32(15, 0, 0, 14, 6), MISCREG_RAZ },
276 { MiscRegNum32(15, 0, 0, 14, 7), MISCREG_RAZ },
277 { MiscRegNum32(15, 0, 0, 15, 0), MISCREG_RAZ },
278 { MiscRegNum32(15, 0, 0, 15, 1), MISCREG_RAZ },
279 { MiscRegNum32(15, 0, 0, 15, 2), MISCREG_RAZ },
280 { MiscRegNum32(15, 0, 0, 15, 3), MISCREG_RAZ },
281 { MiscRegNum32(15, 0, 0, 15, 4), MISCREG_RAZ },
282 { MiscRegNum32(15, 0, 0, 15, 5), MISCREG_RAZ },
283 { MiscRegNum32(15, 0, 0, 15, 6), MISCREG_RAZ },
284 { MiscRegNum32(15, 0, 0, 15, 7), MISCREG_RAZ },
285 { MiscRegNum32(15, 0, 1, 0, 0), MISCREG_SCTLR },
286 { MiscRegNum32(15, 0, 1, 0, 1), MISCREG_ACTLR },
287 { MiscRegNum32(15, 0, 1, 0, 2), MISCREG_CPACR },
288 { MiscRegNum32(15, 0, 1, 1, 0), MISCREG_SCR },
289 { MiscRegNum32(15, 0, 1, 1, 1), MISCREG_SDER },
290 { MiscRegNum32(15, 0, 1, 1, 2), MISCREG_NSACR },
291 { MiscRegNum32(15, 0, 1, 3, 1), MISCREG_SDCR },
292 { MiscRegNum32(15, 0, 2, 0, 0), MISCREG_TTBR0 },
293 { MiscRegNum32(15, 0, 2, 0, 1), MISCREG_TTBR1 },
294 { MiscRegNum32(15, 0, 2, 0, 2), MISCREG_TTBCR },
295 { MiscRegNum32(15, 0, 3, 0, 0), MISCREG_DACR },
296 { MiscRegNum32(15, 0, 4, 6, 0), MISCREG_ICC_PMR },
297 { MiscRegNum32(15, 0, 5, 0, 0), MISCREG_DFSR },
298 { MiscRegNum32(15, 0, 5, 0, 1), MISCREG_IFSR },
299 { MiscRegNum32(15, 0, 5, 1, 0), MISCREG_ADFSR },
300 { MiscRegNum32(15, 0, 5, 1, 1), MISCREG_AIFSR },
301 { MiscRegNum32(15, 0, 6, 0, 0), MISCREG_DFAR },
302 { MiscRegNum32(15, 0, 6, 0, 2), MISCREG_IFAR },
303 { MiscRegNum32(15, 0, 7, 0, 4), MISCREG_NOP },
304 { MiscRegNum32(15, 0, 7, 1, 0), MISCREG_ICIALLUIS },
305 { MiscRegNum32(15, 0, 7, 1, 6), MISCREG_BPIALLIS },
306 { MiscRegNum32(15, 0, 7, 2, 7), MISCREG_DBGDEVID0 },
307 { MiscRegNum32(15, 0, 7, 4, 0), MISCREG_PAR },
308 { MiscRegNum32(15, 0, 7, 5, 0), MISCREG_ICIALLU },
309 { MiscRegNum32(15, 0, 7, 5, 1), MISCREG_ICIMVAU },
310 { MiscRegNum32(15, 0, 7, 5, 4), MISCREG_CP15ISB },
311 { MiscRegNum32(15, 0, 7, 5, 6), MISCREG_BPIALL },
312 { MiscRegNum32(15, 0, 7, 5, 7), MISCREG_BPIMVA },
313 { MiscRegNum32(15, 0, 7, 6, 1), MISCREG_DCIMVAC },
314 { MiscRegNum32(15, 0, 7, 6, 2), MISCREG_DCISW },
315 { MiscRegNum32(15, 0, 7, 8, 0), MISCREG_ATS1CPR },
316 { MiscRegNum32(15, 0, 7, 8, 1), MISCREG_ATS1CPW },
317 { MiscRegNum32(15, 0, 7, 8, 2), MISCREG_ATS1CUR },
318 { MiscRegNum32(15, 0, 7, 8, 3), MISCREG_ATS1CUW },
319 { MiscRegNum32(15, 0, 7, 8, 4), MISCREG_ATS12NSOPR },
320 { MiscRegNum32(15, 0, 7, 8, 5), MISCREG_ATS12NSOPW },
321 { MiscRegNum32(15, 0, 7, 8, 6), MISCREG_ATS12NSOUR },
322 { MiscRegNum32(15, 0, 7, 8, 7), MISCREG_ATS12NSOUW },
323 { MiscRegNum32(15, 0, 7, 10, 1), MISCREG_DCCMVAC },
324 { MiscRegNum32(15, 0, 7, 10, 2), MISCREG_DCCSW },
325 { MiscRegNum32(15, 0, 7, 10, 4), MISCREG_CP15DSB },
326 { MiscRegNum32(15, 0, 7, 10, 5), MISCREG_CP15DMB },
327 { MiscRegNum32(15, 0, 7, 11, 1), MISCREG_DCCMVAU },
328 { MiscRegNum32(15, 0, 7, 13, 1), MISCREG_NOP },
329 { MiscRegNum32(15, 0, 7, 14, 1), MISCREG_DCCIMVAC },
330 { MiscRegNum32(15, 0, 7, 14, 2), MISCREG_DCCISW },
331 { MiscRegNum32(15, 0, 8, 3, 0), MISCREG_TLBIALLIS },
332 { MiscRegNum32(15, 0, 8, 3, 1), MISCREG_TLBIMVAIS },
333 { MiscRegNum32(15, 0, 8, 3, 2), MISCREG_TLBIASIDIS },
334 { MiscRegNum32(15, 0, 8, 3, 3), MISCREG_TLBIMVAAIS },
335 { MiscRegNum32(15, 0, 8, 3, 5), MISCREG_TLBIMVALIS },
336 { MiscRegNum32(15, 0, 8, 3, 7), MISCREG_TLBIMVAALIS },
337 { MiscRegNum32(15, 0, 8, 5, 0), MISCREG_ITLBIALL },
338 { MiscRegNum32(15, 0, 8, 5, 1), MISCREG_ITLBIMVA },
339 { MiscRegNum32(15, 0, 8, 5, 2), MISCREG_ITLBIASID },
340 { MiscRegNum32(15, 0, 8, 6, 0), MISCREG_DTLBIALL },
341 { MiscRegNum32(15, 0, 8, 6, 1), MISCREG_DTLBIMVA },
342 { MiscRegNum32(15, 0, 8, 6, 2), MISCREG_DTLBIASID },
343 { MiscRegNum32(15, 0, 8, 7, 0), MISCREG_TLBIALL },
344 { MiscRegNum32(15, 0, 8, 7, 1), MISCREG_TLBIMVA },
345 { MiscRegNum32(15, 0, 8, 7, 2), MISCREG_TLBIASID },
346 { MiscRegNum32(15, 0, 8, 7, 3), MISCREG_TLBIMVAA },
347 { MiscRegNum32(15, 0, 8, 7, 5), MISCREG_TLBIMVAL },
348 { MiscRegNum32(15, 0, 8, 7, 7), MISCREG_TLBIMVAAL },
349 { MiscRegNum32(15, 0, 9, 12, 0), MISCREG_PMCR },
350 { MiscRegNum32(15, 0, 9, 12, 1), MISCREG_PMCNTENSET },
351 { MiscRegNum32(15, 0, 9, 12, 2), MISCREG_PMCNTENCLR },
352 { MiscRegNum32(15, 0, 9, 12, 3), MISCREG_PMOVSR },
353 { MiscRegNum32(15, 0, 9, 12, 4), MISCREG_PMSWINC },
354 { MiscRegNum32(15, 0, 9, 12, 5), MISCREG_PMSELR },
355 { MiscRegNum32(15, 0, 9, 12, 6), MISCREG_PMCEID0 },
356 { MiscRegNum32(15, 0, 9, 12, 7), MISCREG_PMCEID1 },
357 { MiscRegNum32(15, 0, 9, 13, 0), MISCREG_PMCCNTR },
358 { MiscRegNum32(15, 0, 9, 13, 1), MISCREG_PMXEVTYPER_PMCCFILTR },
359 { MiscRegNum32(15, 0, 9, 13, 2), MISCREG_PMXEVCNTR },
360 { MiscRegNum32(15, 0, 9, 14, 0), MISCREG_PMUSERENR },
361 { MiscRegNum32(15, 0, 9, 14, 1), MISCREG_PMINTENSET },
362 { MiscRegNum32(15, 0, 9, 14, 2), MISCREG_PMINTENCLR },
363 { MiscRegNum32(15, 0, 9, 14, 3), MISCREG_PMOVSSET },
364 { MiscRegNum32(15, 0, 10, 2, 0), MISCREG_PRRR_MAIR0 },
365 { MiscRegNum32(15, 0, 10, 2, 1), MISCREG_NMRR_MAIR1 },
366 { MiscRegNum32(15, 0, 10, 3, 0), MISCREG_AMAIR0 },
367 { MiscRegNum32(15, 0, 10, 3, 1), MISCREG_AMAIR1 },
368 { MiscRegNum32(15, 0, 12, 0, 0), MISCREG_VBAR },
369 { MiscRegNum32(15, 0, 12, 0, 1), MISCREG_MVBAR },
370 { MiscRegNum32(15, 0, 12, 1, 0), MISCREG_ISR },
371 { MiscRegNum32(15, 0, 12, 8, 0), MISCREG_ICC_IAR0 },
372 { MiscRegNum32(15, 0, 12, 8, 1), MISCREG_ICC_EOIR0 },
373 { MiscRegNum32(15, 0, 12, 8, 2), MISCREG_ICC_HPPIR0 },
374 { MiscRegNum32(15, 0, 12, 8, 3), MISCREG_ICC_BPR0 },
375 { MiscRegNum32(15, 0, 12, 8, 4), MISCREG_ICC_AP0R0 },
376 { MiscRegNum32(15, 0, 12, 8, 5), MISCREG_ICC_AP0R1 },
377 { MiscRegNum32(15, 0, 12, 8, 6), MISCREG_ICC_AP0R2 },
378 { MiscRegNum32(15, 0, 12, 8, 7), MISCREG_ICC_AP0R3 },
379 { MiscRegNum32(15, 0, 12, 9, 0), MISCREG_ICC_AP1R0 },
380 { MiscRegNum32(15, 0, 12, 9, 1), MISCREG_ICC_AP1R1 },
381 { MiscRegNum32(15, 0, 12, 9, 2), MISCREG_ICC_AP1R2 },
382 { MiscRegNum32(15, 0, 12, 9, 3), MISCREG_ICC_AP1R3 },
383 { MiscRegNum32(15, 0, 12, 11, 1), MISCREG_ICC_DIR },
384 { MiscRegNum32(15, 0, 12, 11, 3), MISCREG_ICC_RPR },
385 { MiscRegNum32(15, 0, 12, 12, 0), MISCREG_ICC_IAR1 },
386 { MiscRegNum32(15, 0, 12, 12, 1), MISCREG_ICC_EOIR1 },
387 { MiscRegNum32(15, 0, 12, 12, 2), MISCREG_ICC_HPPIR1 },
388 { MiscRegNum32(15, 0, 12, 12, 3), MISCREG_ICC_BPR1 },
389 { MiscRegNum32(15, 0, 12, 12, 4), MISCREG_ICC_CTLR },
390 { MiscRegNum32(15, 0, 12, 12, 5), MISCREG_ICC_SRE },
391 { MiscRegNum32(15, 0, 12, 12, 6), MISCREG_ICC_IGRPEN0 },
392 { MiscRegNum32(15, 0, 12, 12, 7), MISCREG_ICC_IGRPEN1 },
393 { MiscRegNum32(15, 0, 13, 0, 0), MISCREG_FCSEIDR },
394 { MiscRegNum32(15, 0, 13, 0, 1), MISCREG_CONTEXTIDR },
395 { MiscRegNum32(15, 0, 13, 0, 2), MISCREG_TPIDRURW },
396 { MiscRegNum32(15, 0, 13, 0, 3), MISCREG_TPIDRURO },
397 { MiscRegNum32(15, 0, 13, 0, 4), MISCREG_TPIDRPRW },
398 { MiscRegNum32(15, 0, 14, 0, 0), MISCREG_CNTFRQ },
399 { MiscRegNum32(15, 0, 14, 1, 0), MISCREG_CNTKCTL },
400 { MiscRegNum32(15, 0, 14, 2, 0), MISCREG_CNTP_TVAL },
401 { MiscRegNum32(15, 0, 14, 2, 1), MISCREG_CNTP_CTL },
402 { MiscRegNum32(15, 0, 14, 3, 0), MISCREG_CNTV_TVAL },
403 { MiscRegNum32(15, 0, 14, 3, 1), MISCREG_CNTV_CTL },
404 { MiscRegNum32(15, 0, 14, 8, 0), MISCREG_PMEVCNTR0 },
405 { MiscRegNum32(15, 0, 14, 8, 1), MISCREG_PMEVCNTR1 },
406 { MiscRegNum32(15, 0, 14, 8, 2), MISCREG_PMEVCNTR2 },
407 { MiscRegNum32(15, 0, 14, 8, 3), MISCREG_PMEVCNTR3 },
408 { MiscRegNum32(15, 0, 14, 8, 4), MISCREG_PMEVCNTR4 },
409 { MiscRegNum32(15, 0, 14, 8, 5), MISCREG_PMEVCNTR5 },
410 { MiscRegNum32(15, 0, 14, 12, 0), MISCREG_PMEVTYPER0 },
411 { MiscRegNum32(15, 0, 14, 12, 1), MISCREG_PMEVTYPER1 },
412 { MiscRegNum32(15, 0, 14, 12, 2), MISCREG_PMEVTYPER2 },
413 { MiscRegNum32(15, 0, 14, 12, 3), MISCREG_PMEVTYPER3 },
414 { MiscRegNum32(15, 0, 14, 12, 4), MISCREG_PMEVTYPER4 },
415 { MiscRegNum32(15, 0, 14, 12, 5), MISCREG_PMEVTYPER5 },
416 { MiscRegNum32(15, 0, 14, 15, 7), MISCREG_PMCCFILTR },
417 { MiscRegNum32(15, 1, 0, 0, 0), MISCREG_CCSIDR },
418 { MiscRegNum32(15, 1, 0, 0, 1), MISCREG_CLIDR },
419 { MiscRegNum32(15, 1, 0, 0, 7), MISCREG_AIDR },
420 { MiscRegNum32(15, 2, 0, 0, 0), MISCREG_CSSELR },
421 { MiscRegNum32(15, 4, 0, 0, 0), MISCREG_VPIDR },
422 { MiscRegNum32(15, 4, 0, 0, 5), MISCREG_VMPIDR },
423 { MiscRegNum32(15, 4, 1, 0, 0), MISCREG_HSCTLR },
424 { MiscRegNum32(15, 4, 1, 0, 1), MISCREG_HACTLR },
425 { MiscRegNum32(15, 4, 1, 1, 0), MISCREG_HCR },
426 { MiscRegNum32(15, 4, 1, 1, 1), MISCREG_HDCR },
427 { MiscRegNum32(15, 4, 1, 1, 2), MISCREG_HCPTR },
428 { MiscRegNum32(15, 4, 1, 1, 3), MISCREG_HSTR },
429 { MiscRegNum32(15, 4, 1, 1, 4), MISCREG_HCR2 },
430 { MiscRegNum32(15, 4, 1, 1, 7), MISCREG_HACR },
431 { MiscRegNum32(15, 4, 2, 0, 2), MISCREG_HTCR },
432 { MiscRegNum32(15, 4, 2, 1, 2), MISCREG_VTCR },
433 { MiscRegNum32(15, 4, 5, 1, 0), MISCREG_HADFSR },
434 { MiscRegNum32(15, 4, 5, 1, 1), MISCREG_HAIFSR },
435 { MiscRegNum32(15, 4, 5, 2, 0), MISCREG_HSR },
436 { MiscRegNum32(15, 4, 6, 0, 0), MISCREG_HDFAR },
437 { MiscRegNum32(15, 4, 6, 0, 2), MISCREG_HIFAR },
438 { MiscRegNum32(15, 4, 6, 0, 4), MISCREG_HPFAR },
439 { MiscRegNum32(15, 4, 7, 8, 0), MISCREG_ATS1HR },
440 { MiscRegNum32(15, 4, 7, 8, 1), MISCREG_ATS1HW },
441 { MiscRegNum32(15, 4, 8, 0, 1), MISCREG_TLBIIPAS2IS },
442 { MiscRegNum32(15, 4, 8, 0, 5), MISCREG_TLBIIPAS2LIS },
443 { MiscRegNum32(15, 4, 8, 3, 0), MISCREG_TLBIALLHIS },
444 { MiscRegNum32(15, 4, 8, 3, 1), MISCREG_TLBIMVAHIS },
445 { MiscRegNum32(15, 4, 8, 3, 4), MISCREG_TLBIALLNSNHIS },
446 { MiscRegNum32(15, 4, 8, 3, 5), MISCREG_TLBIMVALHIS },
447 { MiscRegNum32(15, 4, 8, 4, 1), MISCREG_TLBIIPAS2 },
448 { MiscRegNum32(15, 4, 8, 4, 5), MISCREG_TLBIIPAS2L },
449 { MiscRegNum32(15, 4, 8, 7, 0), MISCREG_TLBIALLH },
450 { MiscRegNum32(15, 4, 8, 7, 1), MISCREG_TLBIMVAH },
451 { MiscRegNum32(15, 4, 8, 7, 4), MISCREG_TLBIALLNSNH },
452 { MiscRegNum32(15, 4, 8, 7, 5), MISCREG_TLBIMVALH },
453 { MiscRegNum32(15, 4, 10, 2, 0), MISCREG_HMAIR0 },
454 { MiscRegNum32(15, 4, 10, 2, 1), MISCREG_HMAIR1 },
455 { MiscRegNum32(15, 4, 10, 3, 0), MISCREG_HAMAIR0 },
456 { MiscRegNum32(15, 4, 10, 3, 1), MISCREG_HAMAIR1 },
457 { MiscRegNum32(15, 4, 12, 0, 0), MISCREG_HVBAR },
458 { MiscRegNum32(15, 4, 12, 8, 0), MISCREG_ICH_AP0R0 },
459 { MiscRegNum32(15, 4, 12, 8, 1), MISCREG_ICH_AP0R1 },
460 { MiscRegNum32(15, 4, 12, 8, 2), MISCREG_ICH_AP0R2 },
461 { MiscRegNum32(15, 4, 12, 8, 3), MISCREG_ICH_AP0R3 },
462 { MiscRegNum32(15, 4, 12, 9, 0), MISCREG_ICH_AP1R0 },
463 { MiscRegNum32(15, 4, 12, 9, 1), MISCREG_ICH_AP1R1 },
464 { MiscRegNum32(15, 4, 12, 9, 2), MISCREG_ICH_AP1R2 },
465 { MiscRegNum32(15, 4, 12, 9, 3), MISCREG_ICH_AP1R3 },
466 { MiscRegNum32(15, 4, 12, 9, 5), MISCREG_ICC_HSRE },
467 { MiscRegNum32(15, 4, 12, 11, 0), MISCREG_ICH_HCR },
468 { MiscRegNum32(15, 4, 12, 11, 1), MISCREG_ICH_VTR },
469 { MiscRegNum32(15, 4, 12, 11, 2), MISCREG_ICH_MISR },
470 { MiscRegNum32(15, 4, 12, 11, 3), MISCREG_ICH_EISR },
471 { MiscRegNum32(15, 4, 12, 11, 5), MISCREG_ICH_ELRSR },
472 { MiscRegNum32(15, 4, 12, 11, 7), MISCREG_ICH_VMCR },
473 { MiscRegNum32(15, 4, 12, 12, 0), MISCREG_ICH_LR0 },
474 { MiscRegNum32(15, 4, 12, 12, 1), MISCREG_ICH_LR1 },
475 { MiscRegNum32(15, 4, 12, 12, 2), MISCREG_ICH_LR2 },
476 { MiscRegNum32(15, 4, 12, 12, 3), MISCREG_ICH_LR3 },
477 { MiscRegNum32(15, 4, 12, 12, 4), MISCREG_ICH_LR4 },
478 { MiscRegNum32(15, 4, 12, 12, 5), MISCREG_ICH_LR5 },
479 { MiscRegNum32(15, 4, 12, 12, 6), MISCREG_ICH_LR6 },
480 { MiscRegNum32(15, 4, 12, 12, 7), MISCREG_ICH_LR7 },
481 { MiscRegNum32(15, 4, 12, 13, 0), MISCREG_ICH_LR8 },
482 { MiscRegNum32(15, 4, 12, 13, 1), MISCREG_ICH_LR9 },
483 { MiscRegNum32(15, 4, 12, 13, 2), MISCREG_ICH_LR10 },
484 { MiscRegNum32(15, 4, 12, 13, 3), MISCREG_ICH_LR11 },
485 { MiscRegNum32(15, 4, 12, 13, 4), MISCREG_ICH_LR12 },
486 { MiscRegNum32(15, 4, 12, 13, 5), MISCREG_ICH_LR13 },
487 { MiscRegNum32(15, 4, 12, 13, 6), MISCREG_ICH_LR14 },
488 { MiscRegNum32(15, 4, 12, 13, 7), MISCREG_ICH_LR15 },
489 { MiscRegNum32(15, 4, 12, 14, 0), MISCREG_ICH_LRC0 },
490 { MiscRegNum32(15, 4, 12, 14, 1), MISCREG_ICH_LRC1 },
491 { MiscRegNum32(15, 4, 12, 14, 2), MISCREG_ICH_LRC2 },
492 { MiscRegNum32(15, 4, 12, 14, 3), MISCREG_ICH_LRC3 },
493 { MiscRegNum32(15, 4, 12, 14, 4), MISCREG_ICH_LRC4 },
494 { MiscRegNum32(15, 4, 12, 14, 5), MISCREG_ICH_LRC5 },
495 { MiscRegNum32(15, 4, 12, 14, 6), MISCREG_ICH_LRC6 },
496 { MiscRegNum32(15, 4, 12, 14, 7), MISCREG_ICH_LRC7 },
497 { MiscRegNum32(15, 4, 12, 15, 0), MISCREG_ICH_LRC8 },
498 { MiscRegNum32(15, 4, 12, 15, 1), MISCREG_ICH_LRC9 },
499 { MiscRegNum32(15, 4, 12, 15, 2), MISCREG_ICH_LRC10 },
500 { MiscRegNum32(15, 4, 12, 15, 3), MISCREG_ICH_LRC11 },
501 { MiscRegNum32(15, 4, 12, 15, 4), MISCREG_ICH_LRC12 },
502 { MiscRegNum32(15, 4, 12, 15, 5), MISCREG_ICH_LRC13 },
503 { MiscRegNum32(15, 4, 12, 15, 6), MISCREG_ICH_LRC14 },
504 { MiscRegNum32(15, 4, 12, 15, 7), MISCREG_ICH_LRC15 },
505 { MiscRegNum32(15, 4, 13, 0, 2), MISCREG_HTPIDR },
506 { MiscRegNum32(15, 4, 14, 1, 0), MISCREG_CNTHCTL },
507 { MiscRegNum32(15, 4, 14, 2, 0), MISCREG_CNTHP_TVAL },
508 { MiscRegNum32(15, 4, 14, 2, 1), MISCREG_CNTHP_CTL },
509 { MiscRegNum32(15, 6, 12, 12, 4), MISCREG_ICC_MCTLR },
510 { MiscRegNum32(15, 6, 12, 12, 5), MISCREG_ICC_MSRE },
511 { MiscRegNum32(15, 6, 12, 12, 7), MISCREG_ICC_MGRPEN1 },
512 // MCRR/MRRC regs
513 { MiscRegNum32(15, 0, 2), MISCREG_TTBR0 },
514 { MiscRegNum32(15, 0, 7), MISCREG_PAR },
515 { MiscRegNum32(15, 0, 9), MISCREG_PMCCNTR }, // ARMv8 AArch32 register
516 { MiscRegNum32(15, 0, 12), MISCREG_ICC_SGI1R },
517 { MiscRegNum32(15, 0, 14), MISCREG_CNTPCT },
518 { MiscRegNum32(15, 0, 15), MISCREG_CPUMERRSR },
519 { MiscRegNum32(15, 1, 2), MISCREG_TTBR1 },
520 { MiscRegNum32(15, 1, 12), MISCREG_ICC_ASGI1R },
521 { MiscRegNum32(15, 1, 14), MISCREG_CNTVCT },
522 { MiscRegNum32(15, 1, 15), MISCREG_L2MERRSR },
523 { MiscRegNum32(15, 2, 12), MISCREG_ICC_SGI0R },
524 { MiscRegNum32(15, 2, 14), MISCREG_CNTP_CVAL },
525 { MiscRegNum32(15, 3, 14), MISCREG_CNTV_CVAL },
526 { MiscRegNum32(15, 4, 2), MISCREG_HTTBR },
527 { MiscRegNum32(15, 4, 14), MISCREG_CNTVOFF },
528 { MiscRegNum32(15, 6, 2), MISCREG_VTTBR },
529 { MiscRegNum32(15, 6, 14), MISCREG_CNTHP_CVAL },
530};
531
532}
533
535decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
536{
537 MiscRegNum32 cop_reg(14, opc1, crn, crm, opc2);
538 auto it = miscRegNum32ToIdx.find(cop_reg);
539 if (it != miscRegNum32ToIdx.end()) {
540 return it->second;
541 } else {
542 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
543 crn, opc1, crm, opc2);
544 return MISCREG_UNKNOWN;
545 }
546}
547
549decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
550{
551 MiscRegNum32 cop_reg(15, opc1, crn, crm, opc2);
552 auto it = miscRegNum32ToIdx.find(cop_reg);
553 if (it != miscRegNum32ToIdx.end()) {
554 return it->second;
555 } else {
556 if ((crn == 15) ||
557 (crn == 9 && (crm <= 2 || crm >= 5)) ||
558 (crn == 10 && opc1 == 0 && crm <= 1) ||
559 (crn == 11 && opc1 <= 7 && (crm <= 8 || crm ==15))) {
561 } else {
562 return MISCREG_UNKNOWN;
563 }
564 }
565}
566
568decodeCP15Reg64(unsigned crm, unsigned opc1)
569{
570 MiscRegNum32 cop_reg(15, opc1, crm);
571 auto it = miscRegNum32ToIdx.find(cop_reg);
572 if (it != miscRegNum32ToIdx.end()) {
573 return it->second;
574 } else {
575 return MISCREG_UNKNOWN;
576 }
577}
578
579std::tuple<bool, bool>
581{
582 bool secure = !scr.ns;
583 bool can_read = false;
584 bool undefined = false;
585 auto& miscreg_info = lookUpMiscReg[reg].info;
586
587 switch (cpsr.mode) {
588 case MODE_USER:
589 can_read = secure ? miscreg_info[MISCREG_USR_S_RD] :
590 miscreg_info[MISCREG_USR_NS_RD];
591 break;
592 case MODE_FIQ:
593 case MODE_IRQ:
594 case MODE_SVC:
595 case MODE_ABORT:
596 case MODE_UNDEFINED:
597 case MODE_SYSTEM:
598 can_read = secure ? miscreg_info[MISCREG_PRI_S_RD] :
599 miscreg_info[MISCREG_PRI_NS_RD];
600 break;
601 case MODE_MON:
602 can_read = secure ? miscreg_info[MISCREG_MON_NS0_RD] :
603 miscreg_info[MISCREG_MON_NS1_RD];
604 break;
605 case MODE_HYP:
606 can_read = miscreg_info[MISCREG_HYP_NS_RD];
607 break;
608 default:
609 undefined = true;
610 }
611
612 switch (reg) {
614 if (!undefined)
615 undefined = AArch32isUndefinedGenericTimer(reg, tc);
616 break;
617 default:
618 break;
619 }
620
621 // can't do permissions checkes on the root of a banked pair of regs
622 assert(!miscreg_info[MISCREG_BANKED]);
623 return std::make_tuple(can_read, undefined);
624}
625
626std::tuple<bool, bool>
628{
629 bool secure = !scr.ns;
630 bool can_write = false;
631 bool undefined = false;
632 const auto& miscreg_info = lookUpMiscReg[reg].info;
633
634 switch (cpsr.mode) {
635 case MODE_USER:
636 can_write = secure ? miscreg_info[MISCREG_USR_S_WR] :
637 miscreg_info[MISCREG_USR_NS_WR];
638 break;
639 case MODE_FIQ:
640 case MODE_IRQ:
641 case MODE_SVC:
642 case MODE_ABORT:
643 case MODE_UNDEFINED:
644 case MODE_SYSTEM:
645 can_write = secure ? miscreg_info[MISCREG_PRI_S_WR] :
646 miscreg_info[MISCREG_PRI_NS_WR];
647 break;
648 case MODE_MON:
649 can_write = secure ? miscreg_info[MISCREG_MON_NS0_WR] :
650 miscreg_info[MISCREG_MON_NS1_WR];
651 break;
652 case MODE_HYP:
653 can_write = miscreg_info[MISCREG_HYP_NS_WR];
654 break;
655 default:
656 undefined = true;
657 }
658
659 switch (reg) {
661 if (!undefined)
662 undefined = AArch32isUndefinedGenericTimer(reg, tc);
663 break;
664 default:
665 break;
666 }
667
668 // can't do permissions checkes on the root of a banked pair of regs
669 assert(!miscreg_info[MISCREG_BANKED]);
670 return std::make_tuple(can_write, undefined);
671}
672
673bool
675{
676 if (currEL(tc) == EL0 && ELIs32(tc, EL1)) {
677 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
678 bool trap_cond = condGenericTimerSystemAccessTrapEL1(reg, tc);
679 if (trap_cond && (!EL2Enabled(tc) || !hcr.tge))
680 return true;
681 }
682 return false;
683}
684
685int
687{
688 SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
689 return snsBankedIndex(reg, tc, scr.ns);
690}
691
692int
694{
695 int reg_as_int = static_cast<int>(reg);
696 if (lookUpMiscReg[reg].info[MISCREG_BANKED]) {
697 reg_as_int += (ArmSystem::haveEL(tc, EL3) &&
698 !ArmSystem::highestELIs64(tc) && !ns) ? 2 : 1;
699 }
700 return reg_as_int;
701}
702
703int
705{
706 auto *isa = static_cast<ArmISA::ISA *>(tc->getIsaPtr());
707 SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
708 return isa->snsBankedIndex64(reg, scr.ns);
709}
710
718
720
721void
723{
724 int reg = -1;
725 for (int i = 0 ; i < NUM_MISCREGS; i++){
726 if (lookUpMiscReg[i].info[MISCREG_BANKED])
727 reg = i;
730 else
732 // if this assert fails, no parent was found, and something is broken
733 assert(unflattenResultMiscReg[i] > -1);
734 }
735}
736
737int
739{
741}
742
743Fault
745 ThreadContext *tc, const MiscRegOp64 &inst)
746{
747 return lookUpMiscReg[reg].checkFault(tc, inst, currEL(cpsr));
748}
749
751
752namespace {
753// The map is translating a MiscRegIndex into AArch64 system register
754// numbers (op0, op1, crn, crm, op2)
755std::unordered_map<MiscRegIndex, MiscRegNum64> idxToMiscRegNum;
756
757// The map is translating AArch64 system register numbers
758// (op0, op1, crn, crm, op2) into a MiscRegIndex
759std::unordered_map<MiscRegNum64, MiscRegIndex> miscRegNumToIdx{
760 { MiscRegNum64(1, 0, 7, 1, 0), MISCREG_IC_IALLUIS },
761 { MiscRegNum64(1, 0, 7, 5, 0), MISCREG_IC_IALLU },
762 { MiscRegNum64(1, 0, 7, 6, 1), MISCREG_DC_IVAC_Xt },
763 { MiscRegNum64(1, 0, 7, 6, 2), MISCREG_DC_ISW_Xt },
764 { MiscRegNum64(1, 0, 7, 8, 0), MISCREG_AT_S1E1R_Xt },
765 { MiscRegNum64(1, 0, 7, 8, 1), MISCREG_AT_S1E1W_Xt },
766 { MiscRegNum64(1, 0, 7, 8, 2), MISCREG_AT_S1E0R_Xt },
767 { MiscRegNum64(1, 0, 7, 8, 3), MISCREG_AT_S1E0W_Xt },
768 { MiscRegNum64(1, 0, 7, 10, 2), MISCREG_DC_CSW_Xt },
769 { MiscRegNum64(1, 0, 7, 14, 2), MISCREG_DC_CISW_Xt },
770 { MiscRegNum64(1, 0, 8, 1, 0), MISCREG_TLBI_VMALLE1OS },
771 { MiscRegNum64(1, 0, 8, 1, 1), MISCREG_TLBI_VAE1OS },
772 { MiscRegNum64(1, 0, 8, 1, 2), MISCREG_TLBI_ASIDE1OS },
773 { MiscRegNum64(1, 0, 8, 1, 3), MISCREG_TLBI_VAAE1OS },
774 { MiscRegNum64(1, 0, 8, 1, 5), MISCREG_TLBI_VALE1OS },
775 { MiscRegNum64(1, 0, 8, 1, 7), MISCREG_TLBI_VAALE1OS },
776 { MiscRegNum64(1, 0, 8, 2, 1), MISCREG_TLBI_RVAE1IS },
777 { MiscRegNum64(1, 0, 8, 2, 3), MISCREG_TLBI_RVAAE1IS },
778 { MiscRegNum64(1, 0, 8, 2, 5), MISCREG_TLBI_RVALE1IS },
779 { MiscRegNum64(1, 0, 8, 2, 7), MISCREG_TLBI_RVAALE1IS },
780 { MiscRegNum64(1, 0, 8, 3, 0), MISCREG_TLBI_VMALLE1IS },
781 { MiscRegNum64(1, 0, 8, 3, 1), MISCREG_TLBI_VAE1IS },
782 { MiscRegNum64(1, 0, 8, 3, 2), MISCREG_TLBI_ASIDE1IS },
783 { MiscRegNum64(1, 0, 8, 3, 3), MISCREG_TLBI_VAAE1IS },
784 { MiscRegNum64(1, 0, 8, 3, 5), MISCREG_TLBI_VALE1IS },
785 { MiscRegNum64(1, 0, 8, 3, 7), MISCREG_TLBI_VAALE1IS },
786 { MiscRegNum64(1, 0, 8, 5, 1), MISCREG_TLBI_RVAE1OS },
787 { MiscRegNum64(1, 0, 8, 5, 3), MISCREG_TLBI_RVAAE1OS },
788 { MiscRegNum64(1, 0, 8, 5, 5), MISCREG_TLBI_RVALE1OS },
789 { MiscRegNum64(1, 0, 8, 5, 7), MISCREG_TLBI_RVAALE1OS },
790 { MiscRegNum64(1, 0, 8, 6, 1), MISCREG_TLBI_RVAE1 },
791 { MiscRegNum64(1, 0, 8, 6, 3), MISCREG_TLBI_RVAAE1 },
792 { MiscRegNum64(1, 0, 8, 6, 5), MISCREG_TLBI_RVALE1 },
793 { MiscRegNum64(1, 0, 8, 6, 7), MISCREG_TLBI_RVAALE1 },
794 { MiscRegNum64(1, 0, 8, 7, 0), MISCREG_TLBI_VMALLE1 },
795 { MiscRegNum64(1, 0, 8, 7, 1), MISCREG_TLBI_VAE1 },
796 { MiscRegNum64(1, 0, 8, 7, 2), MISCREG_TLBI_ASIDE1 },
797 { MiscRegNum64(1, 0, 8, 7, 3), MISCREG_TLBI_VAAE1 },
798 { MiscRegNum64(1, 0, 8, 7, 5), MISCREG_TLBI_VALE1 },
799 { MiscRegNum64(1, 0, 8, 7, 7), MISCREG_TLBI_VAALE1 },
800 { MiscRegNum64(1, 0, 9, 1, 0), MISCREG_TLBI_VMALLE1OSNXS },
801 { MiscRegNum64(1, 0, 9, 1, 1), MISCREG_TLBI_VAE1OSNXS },
802 { MiscRegNum64(1, 0, 9, 1, 2), MISCREG_TLBI_ASIDE1OSNXS },
803 { MiscRegNum64(1, 0, 9, 1, 3), MISCREG_TLBI_VAAE1OSNXS },
804 { MiscRegNum64(1, 0, 9, 1, 5), MISCREG_TLBI_VALE1OSNXS },
805 { MiscRegNum64(1, 0, 9, 1, 7), MISCREG_TLBI_VAALE1OSNXS },
806 { MiscRegNum64(1, 0, 9, 2, 1), MISCREG_TLBI_RVAE1ISNXS },
807 { MiscRegNum64(1, 0, 9, 2, 3), MISCREG_TLBI_RVAAE1ISNXS },
808 { MiscRegNum64(1, 0, 9, 2, 5), MISCREG_TLBI_RVALE1ISNXS },
809 { MiscRegNum64(1, 0, 9, 2, 7), MISCREG_TLBI_RVAALE1ISNXS },
810 { MiscRegNum64(1, 0, 9, 3, 0), MISCREG_TLBI_VMALLE1ISNXS },
811 { MiscRegNum64(1, 0, 9, 3, 1), MISCREG_TLBI_VAE1ISNXS },
812 { MiscRegNum64(1, 0, 9, 3, 2), MISCREG_TLBI_ASIDE1ISNXS },
813 { MiscRegNum64(1, 0, 9, 3, 3), MISCREG_TLBI_VAAE1ISNXS },
814 { MiscRegNum64(1, 0, 9, 3, 5), MISCREG_TLBI_VALE1ISNXS },
815 { MiscRegNum64(1, 0, 9, 3, 7), MISCREG_TLBI_VAALE1ISNXS },
816 { MiscRegNum64(1, 0, 9, 5, 1), MISCREG_TLBI_RVAE1OSNXS },
817 { MiscRegNum64(1, 0, 9, 5, 3), MISCREG_TLBI_RVAAE1OSNXS },
818 { MiscRegNum64(1, 0, 9, 5, 5), MISCREG_TLBI_RVALE1OSNXS },
819 { MiscRegNum64(1, 0, 9, 5, 7), MISCREG_TLBI_RVAALE1OSNXS },
820 { MiscRegNum64(1, 0, 9, 6, 1), MISCREG_TLBI_RVAE1NXS },
821 { MiscRegNum64(1, 0, 9, 6, 3), MISCREG_TLBI_RVAAE1NXS },
822 { MiscRegNum64(1, 0, 9, 6, 5), MISCREG_TLBI_RVALE1NXS },
823 { MiscRegNum64(1, 0, 9, 6, 7), MISCREG_TLBI_RVAALE1NXS },
824 { MiscRegNum64(1, 0, 9, 7, 0), MISCREG_TLBI_VMALLE1NXS },
825 { MiscRegNum64(1, 0, 9, 7, 1), MISCREG_TLBI_VAE1NXS },
826 { MiscRegNum64(1, 0, 9, 7, 2), MISCREG_TLBI_ASIDE1NXS },
827 { MiscRegNum64(1, 0, 9, 7, 3), MISCREG_TLBI_VAAE1NXS },
828 { MiscRegNum64(1, 0, 9, 7, 5), MISCREG_TLBI_VALE1NXS },
829 { MiscRegNum64(1, 0, 9, 7, 7), MISCREG_TLBI_VAALE1NXS },
830 { MiscRegNum64(1, 3, 7, 4, 1), MISCREG_DC_ZVA_Xt },
831 { MiscRegNum64(1, 3, 7, 5, 1), MISCREG_IC_IVAU_Xt },
832 { MiscRegNum64(1, 3, 7, 10, 1), MISCREG_DC_CVAC_Xt },
833 { MiscRegNum64(1, 3, 7, 11, 1), MISCREG_DC_CVAU_Xt },
834 { MiscRegNum64(1, 3, 7, 14, 1), MISCREG_DC_CIVAC_Xt },
835 { MiscRegNum64(1, 4, 7, 8, 0), MISCREG_AT_S1E2R_Xt },
836 { MiscRegNum64(1, 4, 7, 8, 1), MISCREG_AT_S1E2W_Xt },
837 { MiscRegNum64(1, 4, 7, 8, 4), MISCREG_AT_S12E1R_Xt },
838 { MiscRegNum64(1, 4, 7, 8, 5), MISCREG_AT_S12E1W_Xt },
839 { MiscRegNum64(1, 4, 7, 8, 6), MISCREG_AT_S12E0R_Xt },
840 { MiscRegNum64(1, 4, 7, 8, 7), MISCREG_AT_S12E0W_Xt },
841 { MiscRegNum64(1, 4, 8, 0, 1), MISCREG_TLBI_IPAS2E1IS },
842 { MiscRegNum64(1, 4, 8, 0, 2), MISCREG_TLBI_RIPAS2E1IS },
843 { MiscRegNum64(1, 4, 8, 0, 5), MISCREG_TLBI_IPAS2LE1IS },
844 { MiscRegNum64(1, 4, 8, 1, 0), MISCREG_TLBI_ALLE2OS },
845 { MiscRegNum64(1, 4, 8, 1, 1), MISCREG_TLBI_VAE2OS },
846 { MiscRegNum64(1, 4, 8, 1, 4), MISCREG_TLBI_ALLE1OS },
847 { MiscRegNum64(1, 4, 8, 1, 5), MISCREG_TLBI_VALE2OS },
848 { MiscRegNum64(1, 4, 8, 1, 6), MISCREG_TLBI_VMALLS12E1OS },
849 { MiscRegNum64(1, 4, 8, 0, 6), MISCREG_TLBI_RIPAS2LE1IS },
850 { MiscRegNum64(1, 4, 8, 2, 1), MISCREG_TLBI_RVAE2IS },
851 { MiscRegNum64(1, 4, 8, 2, 5), MISCREG_TLBI_RVALE2IS },
852 { MiscRegNum64(1, 4, 8, 3, 0), MISCREG_TLBI_ALLE2IS },
853 { MiscRegNum64(1, 4, 8, 3, 1), MISCREG_TLBI_VAE2IS },
854 { MiscRegNum64(1, 4, 8, 3, 4), MISCREG_TLBI_ALLE1IS },
855 { MiscRegNum64(1, 4, 8, 3, 5), MISCREG_TLBI_VALE2IS },
856 { MiscRegNum64(1, 4, 8, 3, 6), MISCREG_TLBI_VMALLS12E1IS },
857 { MiscRegNum64(1, 4, 8, 4, 0), MISCREG_TLBI_IPAS2E1OS },
858 { MiscRegNum64(1, 4, 8, 4, 1), MISCREG_TLBI_IPAS2E1 },
859 { MiscRegNum64(1, 4, 8, 4, 2), MISCREG_TLBI_RIPAS2E1 },
860 { MiscRegNum64(1, 4, 8, 4, 3), MISCREG_TLBI_RIPAS2E1OS },
861 { MiscRegNum64(1, 4, 8, 4, 4), MISCREG_TLBI_IPAS2LE1OS },
862 { MiscRegNum64(1, 4, 8, 4, 5), MISCREG_TLBI_IPAS2LE1 },
863 { MiscRegNum64(1, 4, 8, 4, 6), MISCREG_TLBI_RIPAS2LE1 },
864 { MiscRegNum64(1, 4, 8, 4, 7), MISCREG_TLBI_RIPAS2LE1OS },
865 { MiscRegNum64(1, 4, 8, 5, 1), MISCREG_TLBI_RVAE2OS },
866 { MiscRegNum64(1, 4, 8, 5, 5), MISCREG_TLBI_RVALE2OS },
867 { MiscRegNum64(1, 4, 8, 6, 1), MISCREG_TLBI_RVAE2 },
868 { MiscRegNum64(1, 4, 8, 6, 5), MISCREG_TLBI_RVALE2 },
869 { MiscRegNum64(1, 4, 8, 7, 0), MISCREG_TLBI_ALLE2 },
870 { MiscRegNum64(1, 4, 8, 7, 1), MISCREG_TLBI_VAE2 },
871 { MiscRegNum64(1, 4, 8, 7, 4), MISCREG_TLBI_ALLE1 },
872 { MiscRegNum64(1, 4, 8, 7, 5), MISCREG_TLBI_VALE2 },
873 { MiscRegNum64(1, 4, 8, 7, 6), MISCREG_TLBI_VMALLS12E1 },
874 { MiscRegNum64(1, 4, 9, 0, 1), MISCREG_TLBI_IPAS2E1ISNXS },
875 { MiscRegNum64(1, 4, 9, 0, 2), MISCREG_TLBI_RIPAS2E1ISNXS },
876 { MiscRegNum64(1, 4, 9, 0, 5), MISCREG_TLBI_IPAS2LE1ISNXS },
877 { MiscRegNum64(1, 4, 9, 1, 0), MISCREG_TLBI_ALLE2OSNXS },
878 { MiscRegNum64(1, 4, 9, 1, 1), MISCREG_TLBI_VAE2OSNXS },
879 { MiscRegNum64(1, 4, 9, 1, 4), MISCREG_TLBI_ALLE1OSNXS },
880 { MiscRegNum64(1, 4, 9, 1, 5), MISCREG_TLBI_VALE2OSNXS },
881 { MiscRegNum64(1, 4, 9, 1, 6), MISCREG_TLBI_VMALLS12E1OSNXS },
882 { MiscRegNum64(1, 4, 9, 0, 6), MISCREG_TLBI_RIPAS2LE1ISNXS },
883 { MiscRegNum64(1, 4, 9, 2, 1), MISCREG_TLBI_RVAE2ISNXS },
884 { MiscRegNum64(1, 4, 9, 2, 5), MISCREG_TLBI_RVALE2ISNXS },
885 { MiscRegNum64(1, 4, 9, 3, 0), MISCREG_TLBI_ALLE2ISNXS },
886 { MiscRegNum64(1, 4, 9, 3, 1), MISCREG_TLBI_VAE2ISNXS },
887 { MiscRegNum64(1, 4, 9, 3, 4), MISCREG_TLBI_ALLE1ISNXS },
888 { MiscRegNum64(1, 4, 9, 3, 5), MISCREG_TLBI_VALE2ISNXS },
889 { MiscRegNum64(1, 4, 9, 3, 6), MISCREG_TLBI_VMALLS12E1ISNXS },
890 { MiscRegNum64(1, 4, 9, 4, 0), MISCREG_TLBI_IPAS2E1OSNXS },
891 { MiscRegNum64(1, 4, 9, 4, 1), MISCREG_TLBI_IPAS2E1NXS },
892 { MiscRegNum64(1, 4, 9, 4, 2), MISCREG_TLBI_RIPAS2E1NXS },
893 { MiscRegNum64(1, 4, 9, 4, 3), MISCREG_TLBI_RIPAS2E1OSNXS },
894 { MiscRegNum64(1, 4, 9, 4, 4), MISCREG_TLBI_IPAS2LE1OSNXS },
895 { MiscRegNum64(1, 4, 9, 4, 5), MISCREG_TLBI_IPAS2LE1NXS },
896 { MiscRegNum64(1, 4, 9, 4, 6), MISCREG_TLBI_RIPAS2LE1NXS },
897 { MiscRegNum64(1, 4, 9, 4, 7), MISCREG_TLBI_RIPAS2LE1OSNXS },
898 { MiscRegNum64(1, 4, 9, 5, 1), MISCREG_TLBI_RVAE2OSNXS },
899 { MiscRegNum64(1, 4, 9, 5, 5), MISCREG_TLBI_RVALE2OSNXS },
900 { MiscRegNum64(1, 4, 9, 6, 1), MISCREG_TLBI_RVAE2NXS },
901 { MiscRegNum64(1, 4, 9, 6, 5), MISCREG_TLBI_RVALE2NXS },
902 { MiscRegNum64(1, 4, 9, 7, 0), MISCREG_TLBI_ALLE2NXS },
903 { MiscRegNum64(1, 4, 9, 7, 1), MISCREG_TLBI_VAE2NXS },
904 { MiscRegNum64(1, 4, 9, 7, 4), MISCREG_TLBI_ALLE1NXS },
905 { MiscRegNum64(1, 4, 9, 7, 5), MISCREG_TLBI_VALE2NXS },
906 { MiscRegNum64(1, 4, 9, 7, 6), MISCREG_TLBI_VMALLS12E1NXS },
907 { MiscRegNum64(1, 6, 7, 8, 0), MISCREG_AT_S1E3R_Xt },
908 { MiscRegNum64(1, 6, 7, 8, 1), MISCREG_AT_S1E3W_Xt },
909 { MiscRegNum64(1, 6, 8, 1, 0), MISCREG_TLBI_ALLE3OS },
910 { MiscRegNum64(1, 6, 8, 1, 1), MISCREG_TLBI_VAE3OS },
911 { MiscRegNum64(1, 6, 8, 1, 5), MISCREG_TLBI_VALE3OS },
912 { MiscRegNum64(1, 6, 8, 2, 1), MISCREG_TLBI_RVAE3IS },
913 { MiscRegNum64(1, 6, 8, 2, 5), MISCREG_TLBI_RVALE3IS },
914 { MiscRegNum64(1, 6, 8, 3, 0), MISCREG_TLBI_ALLE3IS },
915 { MiscRegNum64(1, 6, 8, 3, 1), MISCREG_TLBI_VAE3IS },
916 { MiscRegNum64(1, 6, 8, 3, 5), MISCREG_TLBI_VALE3IS },
917 { MiscRegNum64(1, 6, 8, 5, 1), MISCREG_TLBI_RVAE3OS },
918 { MiscRegNum64(1, 6, 8, 5, 5), MISCREG_TLBI_RVALE3OS },
919 { MiscRegNum64(1, 6, 8, 6, 1), MISCREG_TLBI_RVAE3 },
920 { MiscRegNum64(1, 6, 8, 6, 5), MISCREG_TLBI_RVALE3 },
921 { MiscRegNum64(1, 6, 8, 7, 0), MISCREG_TLBI_ALLE3 },
922 { MiscRegNum64(1, 6, 8, 7, 1), MISCREG_TLBI_VAE3 },
923 { MiscRegNum64(1, 6, 8, 7, 5), MISCREG_TLBI_VALE3 },
924 { MiscRegNum64(1, 6, 9, 1, 0), MISCREG_TLBI_ALLE3OSNXS },
925 { MiscRegNum64(1, 6, 9, 1, 1), MISCREG_TLBI_VAE3OSNXS },
926 { MiscRegNum64(1, 6, 9, 1, 5), MISCREG_TLBI_VALE3OSNXS },
927 { MiscRegNum64(1, 6, 9, 2, 1), MISCREG_TLBI_RVAE3ISNXS },
928 { MiscRegNum64(1, 6, 9, 2, 5), MISCREG_TLBI_RVALE3ISNXS },
929 { MiscRegNum64(1, 6, 9, 3, 0), MISCREG_TLBI_ALLE3ISNXS },
930 { MiscRegNum64(1, 6, 9, 3, 1), MISCREG_TLBI_VAE3ISNXS },
931 { MiscRegNum64(1, 6, 9, 3, 5), MISCREG_TLBI_VALE3ISNXS },
932 { MiscRegNum64(1, 6, 9, 5, 1), MISCREG_TLBI_RVAE3OSNXS },
933 { MiscRegNum64(1, 6, 9, 5, 5), MISCREG_TLBI_RVALE3OSNXS },
934 { MiscRegNum64(1, 6, 9, 6, 1), MISCREG_TLBI_RVAE3NXS },
935 { MiscRegNum64(1, 6, 9, 6, 5), MISCREG_TLBI_RVALE3NXS },
936 { MiscRegNum64(1, 6, 9, 7, 0), MISCREG_TLBI_ALLE3NXS },
937 { MiscRegNum64(1, 6, 9, 7, 1), MISCREG_TLBI_VAE3NXS },
938 { MiscRegNum64(1, 6, 9, 7, 5), MISCREG_TLBI_VALE3NXS },
939 { MiscRegNum64(2, 0, 0, 0, 2), MISCREG_OSDTRRX_EL1 },
940 { MiscRegNum64(2, 0, 0, 0, 4), MISCREG_DBGBVR0_EL1 },
941 { MiscRegNum64(2, 0, 0, 0, 5), MISCREG_DBGBCR0_EL1 },
942 { MiscRegNum64(2, 0, 0, 0, 6), MISCREG_DBGWVR0_EL1 },
943 { MiscRegNum64(2, 0, 0, 0, 7), MISCREG_DBGWCR0_EL1 },
944 { MiscRegNum64(2, 0, 0, 1, 4), MISCREG_DBGBVR1_EL1 },
945 { MiscRegNum64(2, 0, 0, 1, 5), MISCREG_DBGBCR1_EL1 },
946 { MiscRegNum64(2, 0, 0, 1, 6), MISCREG_DBGWVR1_EL1 },
947 { MiscRegNum64(2, 0, 0, 1, 7), MISCREG_DBGWCR1_EL1 },
948 { MiscRegNum64(2, 0, 0, 2, 0), MISCREG_MDCCINT_EL1 },
949 { MiscRegNum64(2, 0, 0, 2, 2), MISCREG_MDSCR_EL1 },
950 { MiscRegNum64(2, 0, 0, 2, 4), MISCREG_DBGBVR2_EL1 },
951 { MiscRegNum64(2, 0, 0, 2, 5), MISCREG_DBGBCR2_EL1 },
952 { MiscRegNum64(2, 0, 0, 2, 6), MISCREG_DBGWVR2_EL1 },
953 { MiscRegNum64(2, 0, 0, 2, 7), MISCREG_DBGWCR2_EL1 },
954 { MiscRegNum64(2, 0, 0, 3, 2), MISCREG_OSDTRTX_EL1 },
955 { MiscRegNum64(2, 0, 0, 3, 4), MISCREG_DBGBVR3_EL1 },
956 { MiscRegNum64(2, 0, 0, 3, 5), MISCREG_DBGBCR3_EL1 },
957 { MiscRegNum64(2, 0, 0, 3, 6), MISCREG_DBGWVR3_EL1 },
958 { MiscRegNum64(2, 0, 0, 3, 7), MISCREG_DBGWCR3_EL1 },
959 { MiscRegNum64(2, 0, 0, 4, 4), MISCREG_DBGBVR4_EL1 },
960 { MiscRegNum64(2, 0, 0, 4, 5), MISCREG_DBGBCR4_EL1 },
961 { MiscRegNum64(2, 0, 0, 4, 6), MISCREG_DBGWVR4_EL1 },
962 { MiscRegNum64(2, 0, 0, 4, 7), MISCREG_DBGWCR4_EL1 },
963 { MiscRegNum64(2, 0, 0, 5, 4), MISCREG_DBGBVR5_EL1 },
964 { MiscRegNum64(2, 0, 0, 5, 5), MISCREG_DBGBCR5_EL1 },
965 { MiscRegNum64(2, 0, 0, 5, 6), MISCREG_DBGWVR5_EL1 },
966 { MiscRegNum64(2, 0, 0, 5, 7), MISCREG_DBGWCR5_EL1 },
967 { MiscRegNum64(2, 0, 0, 6, 2), MISCREG_OSECCR_EL1 },
968 { MiscRegNum64(2, 0, 0, 6, 4), MISCREG_DBGBVR6_EL1 },
969 { MiscRegNum64(2, 0, 0, 6, 5), MISCREG_DBGBCR6_EL1 },
970 { MiscRegNum64(2, 0, 0, 6, 6), MISCREG_DBGWVR6_EL1 },
971 { MiscRegNum64(2, 0, 0, 6, 7), MISCREG_DBGWCR6_EL1 },
972 { MiscRegNum64(2, 0, 0, 7, 4), MISCREG_DBGBVR7_EL1 },
973 { MiscRegNum64(2, 0, 0, 7, 5), MISCREG_DBGBCR7_EL1 },
974 { MiscRegNum64(2, 0, 0, 7, 6), MISCREG_DBGWVR7_EL1 },
975 { MiscRegNum64(2, 0, 0, 7, 7), MISCREG_DBGWCR7_EL1 },
976 { MiscRegNum64(2, 0, 0, 8, 4), MISCREG_DBGBVR8_EL1 },
977 { MiscRegNum64(2, 0, 0, 8, 5), MISCREG_DBGBCR8_EL1 },
978 { MiscRegNum64(2, 0, 0, 8, 6), MISCREG_DBGWVR8_EL1 },
979 { MiscRegNum64(2, 0, 0, 8, 7), MISCREG_DBGWCR8_EL1 },
980 { MiscRegNum64(2, 0, 0, 9, 4), MISCREG_DBGBVR9_EL1 },
981 { MiscRegNum64(2, 0, 0, 9, 5), MISCREG_DBGBCR9_EL1 },
982 { MiscRegNum64(2, 0, 0, 9, 6), MISCREG_DBGWVR9_EL1 },
983 { MiscRegNum64(2, 0, 0, 9, 7), MISCREG_DBGWCR9_EL1 },
984 { MiscRegNum64(2, 0, 0, 10, 4), MISCREG_DBGBVR10_EL1 },
985 { MiscRegNum64(2, 0, 0, 10, 5), MISCREG_DBGBCR10_EL1 },
986 { MiscRegNum64(2, 0, 0, 10, 6), MISCREG_DBGWVR10_EL1 },
987 { MiscRegNum64(2, 0, 0, 10, 7), MISCREG_DBGWCR10_EL1 },
988 { MiscRegNum64(2, 0, 0, 11, 4), MISCREG_DBGBVR11_EL1 },
989 { MiscRegNum64(2, 0, 0, 11, 5), MISCREG_DBGBCR11_EL1 },
990 { MiscRegNum64(2, 0, 0, 11, 6), MISCREG_DBGWVR11_EL1 },
991 { MiscRegNum64(2, 0, 0, 11, 7), MISCREG_DBGWCR11_EL1 },
992 { MiscRegNum64(2, 0, 0, 12, 4), MISCREG_DBGBVR12_EL1 },
993 { MiscRegNum64(2, 0, 0, 12, 5), MISCREG_DBGBCR12_EL1 },
994 { MiscRegNum64(2, 0, 0, 12, 6), MISCREG_DBGWVR12_EL1 },
995 { MiscRegNum64(2, 0, 0, 12, 7), MISCREG_DBGWCR12_EL1 },
996 { MiscRegNum64(2, 0, 0, 13, 4), MISCREG_DBGBVR13_EL1 },
997 { MiscRegNum64(2, 0, 0, 13, 5), MISCREG_DBGBCR13_EL1 },
998 { MiscRegNum64(2, 0, 0, 13, 6), MISCREG_DBGWVR13_EL1 },
999 { MiscRegNum64(2, 0, 0, 13, 7), MISCREG_DBGWCR13_EL1 },
1000 { MiscRegNum64(2, 0, 0, 14, 4), MISCREG_DBGBVR14_EL1 },
1001 { MiscRegNum64(2, 0, 0, 14, 5), MISCREG_DBGBCR14_EL1 },
1002 { MiscRegNum64(2, 0, 0, 14, 6), MISCREG_DBGWVR14_EL1 },
1003 { MiscRegNum64(2, 0, 0, 14, 7), MISCREG_DBGWCR14_EL1 },
1004 { MiscRegNum64(2, 0, 0, 15, 4), MISCREG_DBGBVR15_EL1 },
1005 { MiscRegNum64(2, 0, 0, 15, 5), MISCREG_DBGBCR15_EL1 },
1006 { MiscRegNum64(2, 0, 0, 15, 6), MISCREG_DBGWVR15_EL1 },
1007 { MiscRegNum64(2, 0, 0, 15, 7), MISCREG_DBGWCR15_EL1 },
1008 { MiscRegNum64(2, 0, 1, 0, 0), MISCREG_MDRAR_EL1 },
1009 { MiscRegNum64(2, 0, 1, 0, 4), MISCREG_OSLAR_EL1 },
1010 { MiscRegNum64(2, 0, 1, 1, 4), MISCREG_OSLSR_EL1 },
1011 { MiscRegNum64(2, 0, 1, 3, 4), MISCREG_OSDLR_EL1 },
1012 { MiscRegNum64(2, 0, 1, 4, 4), MISCREG_DBGPRCR_EL1 },
1013 { MiscRegNum64(2, 0, 7, 8, 6), MISCREG_DBGCLAIMSET_EL1 },
1014 { MiscRegNum64(2, 0, 7, 9, 6), MISCREG_DBGCLAIMCLR_EL1 },
1015 { MiscRegNum64(2, 0, 7, 14, 6), MISCREG_DBGAUTHSTATUS_EL1 },
1016 { MiscRegNum64(2, 2, 0, 0, 0), MISCREG_TEECR32_EL1 },
1017 { MiscRegNum64(2, 2, 1, 0, 0), MISCREG_TEEHBR32_EL1 },
1018 { MiscRegNum64(2, 3, 0, 1, 0), MISCREG_MDCCSR_EL0 },
1019 { MiscRegNum64(2, 3, 0, 4, 0), MISCREG_MDDTR_EL0 },
1020 { MiscRegNum64(2, 3, 0, 5, 0), MISCREG_MDDTRRX_EL0 },
1021 { MiscRegNum64(2, 4, 0, 7, 0), MISCREG_DBGVCR32_EL2 },
1022 { MiscRegNum64(3, 0, 0, 0, 0), MISCREG_MIDR_EL1 },
1023 { MiscRegNum64(3, 0, 0, 0, 5), MISCREG_MPIDR_EL1 },
1024 { MiscRegNum64(3, 0, 0, 0, 6), MISCREG_REVIDR_EL1 },
1025 { MiscRegNum64(3, 0, 0, 1, 0), MISCREG_ID_PFR0_EL1 },
1026 { MiscRegNum64(3, 0, 0, 1, 1), MISCREG_ID_PFR1_EL1 },
1027 { MiscRegNum64(3, 0, 0, 1, 2), MISCREG_ID_DFR0_EL1 },
1028 { MiscRegNum64(3, 0, 0, 1, 3), MISCREG_ID_AFR0_EL1 },
1029 { MiscRegNum64(3, 0, 0, 1, 4), MISCREG_ID_MMFR0_EL1 },
1030 { MiscRegNum64(3, 0, 0, 1, 5), MISCREG_ID_MMFR1_EL1 },
1031 { MiscRegNum64(3, 0, 0, 1, 6), MISCREG_ID_MMFR2_EL1 },
1032 { MiscRegNum64(3, 0, 0, 1, 7), MISCREG_ID_MMFR3_EL1 },
1033 { MiscRegNum64(3, 0, 0, 2, 0), MISCREG_ID_ISAR0_EL1 },
1034 { MiscRegNum64(3, 0, 0, 2, 1), MISCREG_ID_ISAR1_EL1 },
1035 { MiscRegNum64(3, 0, 0, 2, 2), MISCREG_ID_ISAR2_EL1 },
1036 { MiscRegNum64(3, 0, 0, 2, 3), MISCREG_ID_ISAR3_EL1 },
1037 { MiscRegNum64(3, 0, 0, 2, 4), MISCREG_ID_ISAR4_EL1 },
1038 { MiscRegNum64(3, 0, 0, 2, 5), MISCREG_ID_ISAR5_EL1 },
1039 { MiscRegNum64(3, 0, 0, 2, 6), MISCREG_ID_MMFR4_EL1 },
1040 { MiscRegNum64(3, 0, 0, 2, 7), MISCREG_ID_ISAR6_EL1 },
1041 { MiscRegNum64(3, 0, 0, 3, 0), MISCREG_MVFR0_EL1 },
1042 { MiscRegNum64(3, 0, 0, 3, 1), MISCREG_MVFR1_EL1 },
1043 { MiscRegNum64(3, 0, 0, 3, 2), MISCREG_MVFR2_EL1 },
1044 { MiscRegNum64(3, 0, 0, 3, 3), MISCREG_RAZ },
1045 { MiscRegNum64(3, 0, 0, 3, 4), MISCREG_RAZ },
1046 { MiscRegNum64(3, 0, 0, 3, 5), MISCREG_RAZ },
1047 { MiscRegNum64(3, 0, 0, 3, 6), MISCREG_RAZ },
1048 { MiscRegNum64(3, 0, 0, 3, 7), MISCREG_RAZ },
1049 { MiscRegNum64(3, 0, 0, 4, 0), MISCREG_ID_AA64PFR0_EL1 },
1050 { MiscRegNum64(3, 0, 0, 4, 1), MISCREG_ID_AA64PFR1_EL1 },
1051 { MiscRegNum64(3, 0, 0, 4, 2), MISCREG_RAZ },
1052 { MiscRegNum64(3, 0, 0, 4, 3), MISCREG_RAZ },
1053 { MiscRegNum64(3, 0, 0, 4, 4), MISCREG_ID_AA64ZFR0_EL1 },
1054 { MiscRegNum64(3, 0, 0, 4, 5), MISCREG_ID_AA64SMFR0_EL1 },
1055 { MiscRegNum64(3, 0, 0, 4, 6), MISCREG_RAZ },
1056 { MiscRegNum64(3, 0, 0, 4, 7), MISCREG_RAZ },
1057 { MiscRegNum64(3, 0, 0, 5, 0), MISCREG_ID_AA64DFR0_EL1 },
1058 { MiscRegNum64(3, 0, 0, 5, 1), MISCREG_ID_AA64DFR1_EL1 },
1059 { MiscRegNum64(3, 0, 0, 5, 2), MISCREG_RAZ },
1060 { MiscRegNum64(3, 0, 0, 5, 3), MISCREG_RAZ },
1061 { MiscRegNum64(3, 0, 0, 5, 4), MISCREG_ID_AA64AFR0_EL1 },
1062 { MiscRegNum64(3, 0, 0, 5, 5), MISCREG_ID_AA64AFR1_EL1 },
1063 { MiscRegNum64(3, 0, 0, 5, 6), MISCREG_RAZ },
1064 { MiscRegNum64(3, 0, 0, 5, 7), MISCREG_RAZ },
1065 { MiscRegNum64(3, 0, 0, 6, 0), MISCREG_ID_AA64ISAR0_EL1 },
1066 { MiscRegNum64(3, 0, 0, 6, 1), MISCREG_ID_AA64ISAR1_EL1 },
1067 { MiscRegNum64(3, 0, 0, 6, 2), MISCREG_RAZ },
1068 { MiscRegNum64(3, 0, 0, 6, 3), MISCREG_RAZ },
1069 { MiscRegNum64(3, 0, 0, 6, 4), MISCREG_RAZ },
1070 { MiscRegNum64(3, 0, 0, 6, 5), MISCREG_RAZ },
1071 { MiscRegNum64(3, 0, 0, 6, 6), MISCREG_RAZ },
1072 { MiscRegNum64(3, 0, 0, 6, 7), MISCREG_RAZ },
1073 { MiscRegNum64(3, 0, 0, 7, 0), MISCREG_ID_AA64MMFR0_EL1 },
1074 { MiscRegNum64(3, 0, 0, 7, 1), MISCREG_ID_AA64MMFR1_EL1 },
1075 { MiscRegNum64(3, 0, 0, 7, 2), MISCREG_ID_AA64MMFR2_EL1 },
1076 { MiscRegNum64(3, 0, 0, 7, 3), MISCREG_ID_AA64MMFR3_EL1 },
1077 { MiscRegNum64(3, 0, 0, 7, 4), MISCREG_RAZ },
1078 { MiscRegNum64(3, 0, 0, 7, 5), MISCREG_RAZ },
1079 { MiscRegNum64(3, 0, 0, 7, 6), MISCREG_RAZ },
1080 { MiscRegNum64(3, 0, 0, 7, 7), MISCREG_RAZ },
1081 { MiscRegNum64(3, 0, 1, 0, 0), MISCREG_SCTLR_EL1 },
1082 { MiscRegNum64(3, 0, 1, 0, 1), MISCREG_ACTLR_EL1 },
1083 { MiscRegNum64(3, 0, 1, 0, 2), MISCREG_CPACR_EL1 },
1084 { MiscRegNum64(3, 0, 1, 0, 3), MISCREG_SCTLR2_EL1 },
1085 { MiscRegNum64(3, 0, 1, 2, 0), MISCREG_ZCR_EL1 },
1086 { MiscRegNum64(3, 0, 1, 2, 4), MISCREG_SMPRI_EL1 },
1087 { MiscRegNum64(3, 0, 1, 2, 6), MISCREG_SMCR_EL1 },
1088 { MiscRegNum64(3, 0, 2, 0, 0), MISCREG_TTBR0_EL1 },
1089 { MiscRegNum64(3, 0, 2, 0, 1), MISCREG_TTBR1_EL1 },
1090 { MiscRegNum64(3, 0, 2, 0, 2), MISCREG_TCR_EL1 },
1091 { MiscRegNum64(3, 0, 2, 0, 3), MISCREG_TCR2_EL1 },
1092 { MiscRegNum64(3, 0, 2, 1, 0), MISCREG_APIAKeyLo_EL1 },
1093 { MiscRegNum64(3, 0, 2, 1, 1), MISCREG_APIAKeyHi_EL1 },
1094 { MiscRegNum64(3, 0, 2, 1, 2), MISCREG_APIBKeyLo_EL1 },
1095 { MiscRegNum64(3, 0, 2, 1, 3), MISCREG_APIBKeyHi_EL1 },
1096 { MiscRegNum64(3, 0, 2, 2, 0), MISCREG_APDAKeyLo_EL1 },
1097 { MiscRegNum64(3, 0, 2, 2, 1), MISCREG_APDAKeyHi_EL1 },
1098 { MiscRegNum64(3, 0, 2, 2, 2), MISCREG_APDBKeyLo_EL1 },
1099 { MiscRegNum64(3, 0, 2, 2, 3), MISCREG_APDBKeyHi_EL1 },
1100 { MiscRegNum64(3, 0, 2, 3, 0), MISCREG_APGAKeyLo_EL1 },
1101 { MiscRegNum64(3, 0, 2, 3, 1), MISCREG_APGAKeyHi_EL1 },
1102 { MiscRegNum64(3, 0, 4, 0, 0), MISCREG_SPSR_EL1 },
1103 { MiscRegNum64(3, 0, 4, 0, 1), MISCREG_ELR_EL1 },
1104 { MiscRegNum64(3, 0, 4, 1, 0), MISCREG_SP_EL0 },
1105 { MiscRegNum64(3, 0, 4, 2, 0), MISCREG_SPSEL },
1106 { MiscRegNum64(3, 0, 4, 2, 2), MISCREG_CURRENTEL },
1107 { MiscRegNum64(3, 0, 4, 2, 3), MISCREG_PAN },
1108 { MiscRegNum64(3, 0, 4, 2, 4), MISCREG_UAO },
1109 { MiscRegNum64(3, 0, 4, 6, 0), MISCREG_ICC_PMR_EL1 },
1110 { MiscRegNum64(3, 0, 5, 1, 0), MISCREG_AFSR0_EL1 },
1111 { MiscRegNum64(3, 0, 5, 1, 1), MISCREG_AFSR1_EL1 },
1112 { MiscRegNum64(3, 0, 5, 2, 0), MISCREG_ESR_EL1 },
1113 { MiscRegNum64(3, 0, 5, 3, 0), MISCREG_ERRIDR_EL1 },
1114 { MiscRegNum64(3, 0, 5, 3, 1), MISCREG_ERRSELR_EL1 },
1115 { MiscRegNum64(3, 0, 5, 4, 0), MISCREG_ERXFR_EL1 },
1116 { MiscRegNum64(3, 0, 5, 4, 1), MISCREG_ERXCTLR_EL1 },
1117 { MiscRegNum64(3, 0, 5, 4, 2), MISCREG_ERXSTATUS_EL1 },
1118 { MiscRegNum64(3, 0, 5, 4, 3), MISCREG_ERXADDR_EL1 },
1119 { MiscRegNum64(3, 0, 5, 5, 0), MISCREG_ERXMISC0_EL1 },
1120 { MiscRegNum64(3, 0, 5, 5, 1), MISCREG_ERXMISC1_EL1 },
1121 { MiscRegNum64(3, 0, 6, 0, 0), MISCREG_FAR_EL1 },
1122 { MiscRegNum64(3, 0, 7, 4, 0), MISCREG_PAR_EL1 },
1123 { MiscRegNum64(3, 0, 9, 14, 1), MISCREG_PMINTENSET_EL1 },
1124 { MiscRegNum64(3, 0, 9, 14, 2), MISCREG_PMINTENCLR_EL1 },
1125 { MiscRegNum64(3, 0, 10, 2, 0), MISCREG_MAIR_EL1 },
1126 { MiscRegNum64(3, 0, 10, 2, 2), MISCREG_PIRE0_EL1 },
1127 { MiscRegNum64(3, 0, 10, 2, 3), MISCREG_PIR_EL1 },
1128 { MiscRegNum64(3, 0, 10, 3, 0), MISCREG_AMAIR_EL1 },
1129 { MiscRegNum64(3, 0, 10, 4, 4), MISCREG_MPAMIDR_EL1 },
1130 { MiscRegNum64(3, 0, 10, 5, 0), MISCREG_MPAM1_EL1 },
1131 { MiscRegNum64(3, 0, 10, 5, 1), MISCREG_MPAM0_EL1 },
1132 { MiscRegNum64(3, 0, 10, 5, 3), MISCREG_MPAMSM_EL1 },
1133 { MiscRegNum64(3, 0, 12, 0, 0), MISCREG_VBAR_EL1 },
1134 { MiscRegNum64(3, 0, 12, 0, 1), MISCREG_RVBAR_EL1 },
1135 { MiscRegNum64(3, 0, 12, 1, 0), MISCREG_ISR_EL1 },
1136 { MiscRegNum64(3, 0, 12, 1, 1), MISCREG_DISR_EL1 },
1137 { MiscRegNum64(3, 0, 12, 8, 0), MISCREG_ICC_IAR0_EL1 },
1138 { MiscRegNum64(3, 0, 12, 8, 1), MISCREG_ICC_EOIR0_EL1 },
1139 { MiscRegNum64(3, 0, 12, 8, 2), MISCREG_ICC_HPPIR0_EL1 },
1140 { MiscRegNum64(3, 0, 12, 8, 3), MISCREG_ICC_BPR0_EL1 },
1141 { MiscRegNum64(3, 0, 12, 8, 4), MISCREG_ICC_AP0R0_EL1 },
1142 { MiscRegNum64(3, 0, 12, 8, 5), MISCREG_ICC_AP0R1_EL1 },
1143 { MiscRegNum64(3, 0, 12, 8, 6), MISCREG_ICC_AP0R2_EL1 },
1144 { MiscRegNum64(3, 0, 12, 8, 7), MISCREG_ICC_AP0R3_EL1 },
1145 { MiscRegNum64(3, 0, 12, 9, 0), MISCREG_ICC_AP1R0_EL1 },
1146 { MiscRegNum64(3, 0, 12, 9, 1), MISCREG_ICC_AP1R1_EL1 },
1147 { MiscRegNum64(3, 0, 12, 9, 2), MISCREG_ICC_AP1R2_EL1 },
1148 { MiscRegNum64(3, 0, 12, 9, 3), MISCREG_ICC_AP1R3_EL1 },
1149 { MiscRegNum64(3, 0, 12, 11, 1), MISCREG_ICC_DIR_EL1 },
1150 { MiscRegNum64(3, 0, 12, 11, 3), MISCREG_ICC_RPR_EL1 },
1151 { MiscRegNum64(3, 0, 12, 11, 5), MISCREG_ICC_SGI1R_EL1 },
1152 { MiscRegNum64(3, 0, 12, 11, 6), MISCREG_ICC_ASGI1R_EL1 },
1153 { MiscRegNum64(3, 0, 12, 11, 7), MISCREG_ICC_SGI0R_EL1 },
1154 { MiscRegNum64(3, 0, 12, 12, 0), MISCREG_ICC_IAR1_EL1 },
1155 { MiscRegNum64(3, 0, 12, 12, 1), MISCREG_ICC_EOIR1_EL1 },
1156 { MiscRegNum64(3, 0, 12, 12, 2), MISCREG_ICC_HPPIR1_EL1 },
1157 { MiscRegNum64(3, 0, 12, 12, 3), MISCREG_ICC_BPR1_EL1 },
1158 { MiscRegNum64(3, 0, 12, 12, 4), MISCREG_ICC_CTLR_EL1 },
1159 { MiscRegNum64(3, 0, 12, 12, 5), MISCREG_ICC_SRE_EL1 },
1160 { MiscRegNum64(3, 0, 12, 12, 6), MISCREG_ICC_IGRPEN0_EL1 },
1161 { MiscRegNum64(3, 0, 12, 12, 7), MISCREG_ICC_IGRPEN1_EL1 },
1162 { MiscRegNum64(3, 0, 13, 0, 1), MISCREG_CONTEXTIDR_EL1 },
1163 { MiscRegNum64(3, 0, 13, 0, 4), MISCREG_TPIDR_EL1 },
1164 { MiscRegNum64(3, 0, 14, 1, 0), MISCREG_CNTKCTL_EL1 },
1165 { MiscRegNum64(3, 0, 15, 0, 0), MISCREG_IL1DATA0_EL1 },
1166 { MiscRegNum64(3, 0, 15, 0, 1), MISCREG_IL1DATA1_EL1 },
1167 { MiscRegNum64(3, 0, 15, 0, 2), MISCREG_IL1DATA2_EL1 },
1168 { MiscRegNum64(3, 0, 15, 0, 3), MISCREG_IL1DATA3_EL1 },
1169 { MiscRegNum64(3, 0, 15, 1, 0), MISCREG_DL1DATA0_EL1 },
1170 { MiscRegNum64(3, 0, 15, 1, 1), MISCREG_DL1DATA1_EL1 },
1171 { MiscRegNum64(3, 0, 15, 1, 2), MISCREG_DL1DATA2_EL1 },
1172 { MiscRegNum64(3, 0, 15, 1, 3), MISCREG_DL1DATA3_EL1 },
1173 { MiscRegNum64(3, 0, 15, 1, 4), MISCREG_DL1DATA4_EL1 },
1174 { MiscRegNum64(3, 1, 0, 0, 0), MISCREG_CCSIDR_EL1 },
1175 { MiscRegNum64(3, 1, 0, 0, 1), MISCREG_CLIDR_EL1 },
1176 { MiscRegNum64(3, 1, 0, 0, 6), MISCREG_SMIDR_EL1 },
1177 { MiscRegNum64(3, 1, 0, 0, 7), MISCREG_AIDR_EL1 },
1178 { MiscRegNum64(3, 1, 11, 0, 2), MISCREG_L2CTLR_EL1 },
1179 { MiscRegNum64(3, 1, 11, 0, 3), MISCREG_L2ECTLR_EL1 },
1180 { MiscRegNum64(3, 1, 15, 0, 0), MISCREG_L2ACTLR_EL1 },
1181 { MiscRegNum64(3, 1, 15, 2, 0), MISCREG_CPUACTLR_EL1 },
1182 { MiscRegNum64(3, 1, 15, 2, 1), MISCREG_CPUECTLR_EL1 },
1183 { MiscRegNum64(3, 1, 15, 2, 2), MISCREG_CPUMERRSR_EL1 },
1184 { MiscRegNum64(3, 1, 15, 2, 3), MISCREG_L2MERRSR_EL1 },
1185 { MiscRegNum64(3, 1, 15, 3, 0), MISCREG_CBAR_EL1 },
1186 { MiscRegNum64(3, 2, 0, 0, 0), MISCREG_CSSELR_EL1 },
1187 { MiscRegNum64(3, 3, 0, 0, 1), MISCREG_CTR_EL0 },
1188 { MiscRegNum64(3, 3, 0, 0, 7), MISCREG_DCZID_EL0 },
1189 { MiscRegNum64(3, 3, 2, 4, 0), MISCREG_RNDR },
1190 { MiscRegNum64(3, 3, 2, 4, 1), MISCREG_RNDRRS },
1191 { MiscRegNum64(3, 3, 4, 2, 0), MISCREG_NZCV },
1192 { MiscRegNum64(3, 3, 4, 2, 1), MISCREG_DAIF },
1193 { MiscRegNum64(3, 3, 4, 2, 2), MISCREG_SVCR },
1194 { MiscRegNum64(3, 3, 4, 4, 0), MISCREG_FPCR },
1195 { MiscRegNum64(3, 3, 4, 4, 1), MISCREG_FPSR },
1196 { MiscRegNum64(3, 3, 4, 5, 0), MISCREG_DSPSR_EL0 },
1197 { MiscRegNum64(3, 3, 4, 5, 1), MISCREG_DLR_EL0 },
1198 { MiscRegNum64(3, 3, 9, 12, 0), MISCREG_PMCR_EL0 },
1199 { MiscRegNum64(3, 3, 9, 12, 1), MISCREG_PMCNTENSET_EL0 },
1200 { MiscRegNum64(3, 3, 9, 12, 2), MISCREG_PMCNTENCLR_EL0 },
1201 { MiscRegNum64(3, 3, 9, 12, 3), MISCREG_PMOVSCLR_EL0 },
1202 { MiscRegNum64(3, 3, 9, 12, 4), MISCREG_PMSWINC_EL0 },
1203 { MiscRegNum64(3, 3, 9, 12, 5), MISCREG_PMSELR_EL0 },
1204 { MiscRegNum64(3, 3, 9, 12, 6), MISCREG_PMCEID0_EL0 },
1205 { MiscRegNum64(3, 3, 9, 12, 7), MISCREG_PMCEID1_EL0 },
1206 { MiscRegNum64(3, 3, 9, 13, 0), MISCREG_PMCCNTR_EL0 },
1207 { MiscRegNum64(3, 3, 9, 13, 1), MISCREG_PMXEVTYPER_EL0 },
1208 { MiscRegNum64(3, 3, 9, 13, 2), MISCREG_PMXEVCNTR_EL0 },
1209 { MiscRegNum64(3, 3, 9, 14, 0), MISCREG_PMUSERENR_EL0 },
1210 { MiscRegNum64(3, 3, 9, 14, 3), MISCREG_PMOVSSET_EL0 },
1211 { MiscRegNum64(3, 3, 13, 0, 2), MISCREG_TPIDR_EL0 },
1212 { MiscRegNum64(3, 3, 13, 0, 3), MISCREG_TPIDRRO_EL0 },
1213 { MiscRegNum64(3, 3, 13, 0, 5), MISCREG_TPIDR2_EL0 },
1214 { MiscRegNum64(3, 3, 14, 0, 0), MISCREG_CNTFRQ_EL0 },
1215 { MiscRegNum64(3, 3, 14, 0, 1), MISCREG_CNTPCT_EL0 },
1216 { MiscRegNum64(3, 3, 14, 0, 2), MISCREG_CNTVCT_EL0 },
1217 { MiscRegNum64(3, 3, 14, 2, 0), MISCREG_CNTP_TVAL_EL0 },
1218 { MiscRegNum64(3, 3, 14, 2, 1), MISCREG_CNTP_CTL_EL0 },
1219 { MiscRegNum64(3, 3, 14, 2, 2), MISCREG_CNTP_CVAL_EL0 },
1220 { MiscRegNum64(3, 3, 14, 3, 0), MISCREG_CNTV_TVAL_EL0 },
1221 { MiscRegNum64(3, 3, 14, 3, 1), MISCREG_CNTV_CTL_EL0 },
1222 { MiscRegNum64(3, 3, 14, 3, 2), MISCREG_CNTV_CVAL_EL0 },
1223 { MiscRegNum64(3, 3, 14, 8, 0), MISCREG_PMEVCNTR0_EL0 },
1224 { MiscRegNum64(3, 3, 14, 8, 1), MISCREG_PMEVCNTR1_EL0 },
1225 { MiscRegNum64(3, 3, 14, 8, 2), MISCREG_PMEVCNTR2_EL0 },
1226 { MiscRegNum64(3, 3, 14, 8, 3), MISCREG_PMEVCNTR3_EL0 },
1227 { MiscRegNum64(3, 3, 14, 8, 4), MISCREG_PMEVCNTR4_EL0 },
1228 { MiscRegNum64(3, 3, 14, 8, 5), MISCREG_PMEVCNTR5_EL0 },
1229 { MiscRegNum64(3, 3, 14, 12, 0), MISCREG_PMEVTYPER0_EL0 },
1230 { MiscRegNum64(3, 3, 14, 12, 1), MISCREG_PMEVTYPER1_EL0 },
1231 { MiscRegNum64(3, 3, 14, 12, 2), MISCREG_PMEVTYPER2_EL0 },
1232 { MiscRegNum64(3, 3, 14, 12, 3), MISCREG_PMEVTYPER3_EL0 },
1233 { MiscRegNum64(3, 3, 14, 12, 4), MISCREG_PMEVTYPER4_EL0 },
1234 { MiscRegNum64(3, 3, 14, 12, 5), MISCREG_PMEVTYPER5_EL0 },
1235 { MiscRegNum64(3, 3, 14, 15, 7), MISCREG_PMCCFILTR_EL0 },
1236 { MiscRegNum64(3, 4, 0, 0, 0), MISCREG_VPIDR_EL2 },
1237 { MiscRegNum64(3, 4, 0, 0, 5), MISCREG_VMPIDR_EL2 },
1238 { MiscRegNum64(3, 4, 1, 0, 0), MISCREG_SCTLR_EL2 },
1239 { MiscRegNum64(3, 4, 1, 0, 1), MISCREG_ACTLR_EL2 },
1240 { MiscRegNum64(3, 4, 1, 0, 3), MISCREG_SCTLR2_EL2 },
1241 { MiscRegNum64(3, 4, 1, 1, 0), MISCREG_HCR_EL2 },
1242 { MiscRegNum64(3, 4, 1, 1, 1), MISCREG_MDCR_EL2 },
1243 { MiscRegNum64(3, 4, 1, 1, 2), MISCREG_CPTR_EL2 },
1244 { MiscRegNum64(3, 4, 1, 1, 3), MISCREG_HSTR_EL2 },
1245 { MiscRegNum64(3, 4, 1, 1, 4), MISCREG_HFGRTR_EL2 },
1246 { MiscRegNum64(3, 4, 1, 1, 5), MISCREG_HFGWTR_EL2 },
1247 { MiscRegNum64(3, 4, 1, 1, 6), MISCREG_HFGITR_EL2 },
1248 { MiscRegNum64(3, 4, 1, 1, 7), MISCREG_HACR_EL2 },
1249 { MiscRegNum64(3, 4, 1, 2, 0), MISCREG_ZCR_EL2 },
1250 { MiscRegNum64(3, 4, 1, 2, 2), MISCREG_HCRX_EL2 },
1251 { MiscRegNum64(3, 4, 1, 2, 5), MISCREG_SMPRIMAP_EL2 },
1252 { MiscRegNum64(3, 4, 1, 2, 6), MISCREG_SMCR_EL2 },
1253 { MiscRegNum64(3, 4, 2, 0, 0), MISCREG_TTBR0_EL2 },
1254 { MiscRegNum64(3, 4, 2, 0, 1), MISCREG_TTBR1_EL2 },
1255 { MiscRegNum64(3, 4, 2, 0, 2), MISCREG_TCR_EL2 },
1256 { MiscRegNum64(3, 4, 2, 0, 3), MISCREG_TCR2_EL2 },
1257 { MiscRegNum64(3, 4, 2, 1, 0), MISCREG_VTTBR_EL2 },
1258 { MiscRegNum64(3, 4, 2, 1, 2), MISCREG_VTCR_EL2 },
1259 { MiscRegNum64(3, 4, 2, 6, 0), MISCREG_VSTTBR_EL2 },
1260 { MiscRegNum64(3, 4, 2, 6, 2), MISCREG_VSTCR_EL2 },
1261 { MiscRegNum64(3, 4, 3, 0, 0), MISCREG_DACR32_EL2 },
1262 { MiscRegNum64(3, 4, 3, 1, 4), MISCREG_HDFGRTR_EL2 },
1263 { MiscRegNum64(3, 4, 3, 1, 5), MISCREG_HDFGWTR_EL2 },
1264 { MiscRegNum64(3, 4, 3, 1, 6), MISCREG_HAFGRTR_EL2 },
1265 { MiscRegNum64(3, 4, 4, 0, 0), MISCREG_SPSR_EL2 },
1266 { MiscRegNum64(3, 4, 4, 0, 1), MISCREG_ELR_EL2 },
1267 { MiscRegNum64(3, 4, 4, 1, 0), MISCREG_SP_EL1 },
1268 { MiscRegNum64(3, 4, 4, 3, 0), MISCREG_SPSR_IRQ_AA64 },
1269 { MiscRegNum64(3, 4, 4, 3, 1), MISCREG_SPSR_ABT_AA64 },
1270 { MiscRegNum64(3, 4, 4, 3, 2), MISCREG_SPSR_UND_AA64 },
1271 { MiscRegNum64(3, 4, 4, 3, 3), MISCREG_SPSR_FIQ_AA64 },
1272 { MiscRegNum64(3, 4, 5, 0, 1), MISCREG_IFSR32_EL2 },
1273 { MiscRegNum64(3, 4, 5, 1, 0), MISCREG_AFSR0_EL2 },
1274 { MiscRegNum64(3, 4, 5, 1, 1), MISCREG_AFSR1_EL2 },
1275 { MiscRegNum64(3, 4, 5, 2, 0), MISCREG_ESR_EL2 },
1276 { MiscRegNum64(3, 4, 5, 2, 3), MISCREG_VSESR_EL2 },
1277 { MiscRegNum64(3, 4, 5, 3, 0), MISCREG_FPEXC32_EL2 },
1278 { MiscRegNum64(3, 4, 6, 0, 0), MISCREG_FAR_EL2 },
1279 { MiscRegNum64(3, 4, 6, 0, 4), MISCREG_HPFAR_EL2 },
1280 { MiscRegNum64(3, 4, 10, 2, 0), MISCREG_MAIR_EL2 },
1281 { MiscRegNum64(3, 4, 10, 2, 2), MISCREG_PIRE0_EL2 },
1282 { MiscRegNum64(3, 4, 10, 2, 3), MISCREG_PIR_EL2 },
1283 { MiscRegNum64(3, 4, 10, 3, 0), MISCREG_AMAIR_EL2 },
1284 { MiscRegNum64(3, 4, 10, 4, 0), MISCREG_MPAMHCR_EL2 },
1285 { MiscRegNum64(3, 4, 10, 4, 1), MISCREG_MPAMVPMV_EL2 },
1286 { MiscRegNum64(3, 4, 10, 5, 0), MISCREG_MPAM2_EL2 },
1287 { MiscRegNum64(3, 4, 10, 6, 0), MISCREG_MPAMVPM0_EL2 },
1288 { MiscRegNum64(3, 4, 10, 6, 1), MISCREG_MPAMVPM1_EL2 },
1289 { MiscRegNum64(3, 4, 10, 6, 2), MISCREG_MPAMVPM2_EL2 },
1290 { MiscRegNum64(3, 4, 10, 6, 3), MISCREG_MPAMVPM3_EL2 },
1291 { MiscRegNum64(3, 4, 10, 6, 4), MISCREG_MPAMVPM4_EL2 },
1292 { MiscRegNum64(3, 4, 10, 6, 5), MISCREG_MPAMVPM5_EL2 },
1293 { MiscRegNum64(3, 4, 10, 6, 6), MISCREG_MPAMVPM6_EL2 },
1294 { MiscRegNum64(3, 4, 10, 6, 7), MISCREG_MPAMVPM7_EL2 },
1295 { MiscRegNum64(3, 4, 12, 0, 0), MISCREG_VBAR_EL2 },
1296 { MiscRegNum64(3, 4, 12, 0, 1), MISCREG_RVBAR_EL2 },
1297 { MiscRegNum64(3, 4, 12, 1, 1), MISCREG_VDISR_EL2 },
1298 { MiscRegNum64(3, 4, 12, 8, 0), MISCREG_ICH_AP0R0_EL2 },
1299 { MiscRegNum64(3, 4, 12, 8, 1), MISCREG_ICH_AP0R1_EL2 },
1300 { MiscRegNum64(3, 4, 12, 8, 2), MISCREG_ICH_AP0R2_EL2 },
1301 { MiscRegNum64(3, 4, 12, 8, 3), MISCREG_ICH_AP0R3_EL2 },
1302 { MiscRegNum64(3, 4, 12, 9, 0), MISCREG_ICH_AP1R0_EL2 },
1303 { MiscRegNum64(3, 4, 12, 9, 1), MISCREG_ICH_AP1R1_EL2 },
1304 { MiscRegNum64(3, 4, 12, 9, 2), MISCREG_ICH_AP1R2_EL2 },
1305 { MiscRegNum64(3, 4, 12, 9, 3), MISCREG_ICH_AP1R3_EL2 },
1306 { MiscRegNum64(3, 4, 12, 9, 5), MISCREG_ICC_SRE_EL2 },
1307 { MiscRegNum64(3, 4, 12, 11, 0), MISCREG_ICH_HCR_EL2 },
1308 { MiscRegNum64(3, 4, 12, 11, 1), MISCREG_ICH_VTR_EL2 },
1309 { MiscRegNum64(3, 4, 12, 11, 2), MISCREG_ICH_MISR_EL2 },
1310 { MiscRegNum64(3, 4, 12, 11, 3), MISCREG_ICH_EISR_EL2 },
1311 { MiscRegNum64(3, 4, 12, 11, 5), MISCREG_ICH_ELRSR_EL2 },
1312 { MiscRegNum64(3, 4, 12, 11, 7), MISCREG_ICH_VMCR_EL2 },
1313 { MiscRegNum64(3, 4, 12, 12, 0), MISCREG_ICH_LR0_EL2 },
1314 { MiscRegNum64(3, 4, 12, 12, 1), MISCREG_ICH_LR1_EL2 },
1315 { MiscRegNum64(3, 4, 12, 12, 2), MISCREG_ICH_LR2_EL2 },
1316 { MiscRegNum64(3, 4, 12, 12, 3), MISCREG_ICH_LR3_EL2 },
1317 { MiscRegNum64(3, 4, 12, 12, 4), MISCREG_ICH_LR4_EL2 },
1318 { MiscRegNum64(3, 4, 12, 12, 5), MISCREG_ICH_LR5_EL2 },
1319 { MiscRegNum64(3, 4, 12, 12, 6), MISCREG_ICH_LR6_EL2 },
1320 { MiscRegNum64(3, 4, 12, 12, 7), MISCREG_ICH_LR7_EL2 },
1321 { MiscRegNum64(3, 4, 12, 13, 0), MISCREG_ICH_LR8_EL2 },
1322 { MiscRegNum64(3, 4, 12, 13, 1), MISCREG_ICH_LR9_EL2 },
1323 { MiscRegNum64(3, 4, 12, 13, 2), MISCREG_ICH_LR10_EL2 },
1324 { MiscRegNum64(3, 4, 12, 13, 3), MISCREG_ICH_LR11_EL2 },
1325 { MiscRegNum64(3, 4, 12, 13, 4), MISCREG_ICH_LR12_EL2 },
1326 { MiscRegNum64(3, 4, 12, 13, 5), MISCREG_ICH_LR13_EL2 },
1327 { MiscRegNum64(3, 4, 12, 13, 6), MISCREG_ICH_LR14_EL2 },
1328 { MiscRegNum64(3, 4, 12, 13, 7), MISCREG_ICH_LR15_EL2 },
1329 { MiscRegNum64(3, 4, 13, 0, 1), MISCREG_CONTEXTIDR_EL2 },
1330 { MiscRegNum64(3, 4, 13, 0, 2), MISCREG_TPIDR_EL2 },
1331 { MiscRegNum64(3, 4, 14, 0, 3), MISCREG_CNTVOFF_EL2 },
1332 { MiscRegNum64(3, 4, 14, 1, 0), MISCREG_CNTHCTL_EL2 },
1333 { MiscRegNum64(3, 4, 14, 2, 0), MISCREG_CNTHP_TVAL_EL2 },
1334 { MiscRegNum64(3, 4, 14, 2, 1), MISCREG_CNTHP_CTL_EL2 },
1335 { MiscRegNum64(3, 4, 14, 2, 2), MISCREG_CNTHP_CVAL_EL2 },
1336 { MiscRegNum64(3, 4, 14, 3, 0), MISCREG_CNTHV_TVAL_EL2 },
1337 { MiscRegNum64(3, 4, 14, 3, 1), MISCREG_CNTHV_CTL_EL2 },
1338 { MiscRegNum64(3, 4, 14, 3, 2), MISCREG_CNTHV_CVAL_EL2 },
1339 { MiscRegNum64(3, 4, 14, 4, 0), MISCREG_CNTHVS_TVAL_EL2 },
1340 { MiscRegNum64(3, 4, 14, 4, 1), MISCREG_CNTHVS_CTL_EL2 },
1341 { MiscRegNum64(3, 4, 14, 4, 2), MISCREG_CNTHVS_CVAL_EL2 },
1342 { MiscRegNum64(3, 4, 14, 5, 0), MISCREG_CNTHPS_TVAL_EL2 },
1343 { MiscRegNum64(3, 4, 14, 5, 1), MISCREG_CNTHPS_CTL_EL2 },
1344 { MiscRegNum64(3, 4, 14, 5, 2), MISCREG_CNTHPS_CVAL_EL2 },
1345 { MiscRegNum64(3, 5, 1, 0, 0), MISCREG_SCTLR_EL12 },
1346 { MiscRegNum64(3, 5, 1, 0, 2), MISCREG_CPACR_EL12 },
1347 { MiscRegNum64(3, 5, 1, 0, 3), MISCREG_SCTLR2_EL12 },
1348 { MiscRegNum64(3, 5, 1, 2, 0), MISCREG_ZCR_EL12 },
1349 { MiscRegNum64(3, 5, 1, 2, 6), MISCREG_SMCR_EL12 },
1350 { MiscRegNum64(3, 5, 2, 0, 0), MISCREG_TTBR0_EL12 },
1351 { MiscRegNum64(3, 5, 2, 0, 1), MISCREG_TTBR1_EL12 },
1352 { MiscRegNum64(3, 5, 2, 0, 2), MISCREG_TCR_EL12 },
1353 { MiscRegNum64(3, 5, 2, 0, 3), MISCREG_TCR2_EL12 },
1354 { MiscRegNum64(3, 5, 4, 0, 0), MISCREG_SPSR_EL12 },
1355 { MiscRegNum64(3, 5, 4, 0, 1), MISCREG_ELR_EL12 },
1356 { MiscRegNum64(3, 5, 5, 1, 0), MISCREG_AFSR0_EL12 },
1357 { MiscRegNum64(3, 5, 5, 1, 1), MISCREG_AFSR1_EL12 },
1358 { MiscRegNum64(3, 5, 5, 2, 0), MISCREG_ESR_EL12 },
1359 { MiscRegNum64(3, 5, 6, 0, 0), MISCREG_FAR_EL12 },
1360 { MiscRegNum64(3, 5, 10, 2, 0), MISCREG_MAIR_EL12 },
1361 { MiscRegNum64(3, 5, 10, 2, 2), MISCREG_PIRE0_EL12 },
1362 { MiscRegNum64(3, 5, 10, 2, 3), MISCREG_PIR_EL12 },
1363 { MiscRegNum64(3, 5, 10, 3, 0), MISCREG_AMAIR_EL12 },
1364 { MiscRegNum64(3, 5, 10, 5, 0), MISCREG_MPAM1_EL12 },
1365 { MiscRegNum64(3, 5, 12, 0, 0), MISCREG_VBAR_EL12 },
1366 { MiscRegNum64(3, 5, 13, 0, 1), MISCREG_CONTEXTIDR_EL12 },
1367 { MiscRegNum64(3, 5, 14, 1, 0), MISCREG_CNTKCTL_EL12 },
1368 { MiscRegNum64(3, 5, 14, 2, 0), MISCREG_CNTP_TVAL_EL02 },
1369 { MiscRegNum64(3, 5, 14, 2, 1), MISCREG_CNTP_CTL_EL02 },
1370 { MiscRegNum64(3, 5, 14, 2, 2), MISCREG_CNTP_CVAL_EL02 },
1371 { MiscRegNum64(3, 5, 14, 3, 0), MISCREG_CNTV_TVAL_EL02 },
1372 { MiscRegNum64(3, 5, 14, 3, 1), MISCREG_CNTV_CTL_EL02 },
1373 { MiscRegNum64(3, 5, 14, 3, 2), MISCREG_CNTV_CVAL_EL02 },
1374 { MiscRegNum64(3, 6, 1, 0, 0), MISCREG_SCTLR_EL3 },
1375 { MiscRegNum64(3, 6, 1, 0, 1), MISCREG_ACTLR_EL3 },
1376 { MiscRegNum64(3, 6, 1, 0, 3), MISCREG_SCTLR2_EL3 },
1377 { MiscRegNum64(3, 6, 1, 1, 0), MISCREG_SCR_EL3 },
1378 { MiscRegNum64(3, 6, 1, 1, 1), MISCREG_SDER32_EL3 },
1379 { MiscRegNum64(3, 6, 1, 1, 2), MISCREG_CPTR_EL3 },
1380 { MiscRegNum64(3, 6, 1, 2, 0), MISCREG_ZCR_EL3 },
1381 { MiscRegNum64(3, 6, 1, 2, 6), MISCREG_SMCR_EL3 },
1382 { MiscRegNum64(3, 6, 1, 3, 1), MISCREG_MDCR_EL3 },
1383 { MiscRegNum64(3, 6, 2, 0, 0), MISCREG_TTBR0_EL3 },
1384 { MiscRegNum64(3, 6, 2, 0, 2), MISCREG_TCR_EL3 },
1385 { MiscRegNum64(3, 6, 4, 0, 0), MISCREG_SPSR_EL3 },
1386 { MiscRegNum64(3, 6, 4, 0, 1), MISCREG_ELR_EL3 },
1387 { MiscRegNum64(3, 6, 4, 1, 0), MISCREG_SP_EL2 },
1388 { MiscRegNum64(3, 6, 5, 1, 0), MISCREG_AFSR0_EL3 },
1389 { MiscRegNum64(3, 6, 5, 1, 1), MISCREG_AFSR1_EL3 },
1390 { MiscRegNum64(3, 6, 5, 2, 0), MISCREG_ESR_EL3 },
1391 { MiscRegNum64(3, 6, 6, 0, 0), MISCREG_FAR_EL3 },
1392 { MiscRegNum64(3, 6, 10, 2, 0), MISCREG_MAIR_EL3 },
1393 { MiscRegNum64(3, 6, 10, 2, 3), MISCREG_PIR_EL3 },
1394 { MiscRegNum64(3, 6, 10, 3, 0), MISCREG_AMAIR_EL3 },
1395 { MiscRegNum64(3, 6, 10, 5, 0), MISCREG_MPAM3_EL3 },
1396 { MiscRegNum64(3, 6, 12, 0, 0), MISCREG_VBAR_EL3 },
1397 { MiscRegNum64(3, 6, 12, 0, 1), MISCREG_RVBAR_EL3 },
1398 { MiscRegNum64(3, 6, 12, 0, 2), MISCREG_RMR_EL3 },
1399 { MiscRegNum64(3, 6, 12, 12, 4), MISCREG_ICC_CTLR_EL3 },
1400 { MiscRegNum64(3, 6, 12, 12, 5), MISCREG_ICC_SRE_EL3 },
1401 { MiscRegNum64(3, 6, 12, 12, 7), MISCREG_ICC_IGRPEN1_EL3 },
1402 { MiscRegNum64(3, 6, 13, 0, 2), MISCREG_TPIDR_EL3 },
1403 { MiscRegNum64(3, 7, 14, 2, 0), MISCREG_CNTPS_TVAL_EL1 },
1404 { MiscRegNum64(3, 7, 14, 2, 1), MISCREG_CNTPS_CTL_EL1 },
1405 { MiscRegNum64(3, 7, 14, 2, 2), MISCREG_CNTPS_CVAL_EL1 }
1406};
1407
1408template <bool read>
1409HFGTR
1410fgtRegister(ThreadContext *tc)
1411{
1412 if constexpr (read) {
1413 return tc->readMiscReg(MISCREG_HFGRTR_EL2);
1414 } else {
1415 return tc->readMiscReg(MISCREG_HFGWTR_EL2);
1416 }
1417}
1418
1419template <bool read>
1420HDFGTR
1421fgtDebugRegister(ThreadContext *tc)
1422{
1423 if constexpr (read) {
1424 return tc->readMiscReg(MISCREG_HDFGRTR_EL2);
1425 } else {
1426 return tc->readMiscReg(MISCREG_HDFGWTR_EL2);
1427 }
1428}
1429
1436template<bool read, auto r_bitfield>
1437Fault
1438faultFgtEL0(const MiscRegLUTEntry &entry,
1439 ThreadContext *tc, const MiscRegOp64 &inst)
1440{
1441 if (!FullSystem) {
1442 return NoFault;
1443 }
1444 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1445 const bool in_host = EL2Enabled(tc) && hcr.e2h && hcr.tge;
1446 if (fgtEnabled(tc) && !in_host &&
1447 fgtRegister<read>(tc).*r_bitfield) {
1448 return inst.generateTrap(EL2);
1449 } else {
1450 return NoFault;
1451 }
1452}
1453
1460template<bool read, auto r_bitfield, RegVal r_match=0b1>
1461Fault
1462faultFgtEL1(const MiscRegLUTEntry &entry,
1463 ThreadContext *tc, const MiscRegOp64 &inst)
1464{
1465 if (fgtEnabled(tc) && (fgtRegister<read>(tc).*r_bitfield == r_match)) {
1466 return inst.generateTrap(EL2);
1467 } else {
1468 return NoFault;
1469 }
1470}
1471
1477template<auto r_bitfield>
1478Fault
1479faultFgtInstEL1(const MiscRegLUTEntry &entry,
1480 ThreadContext *tc, const MiscRegOp64 &inst)
1481{
1482 if (fgtEnabled(tc) &&
1483 static_cast<HFGITR>(tc->readMiscReg(MISCREG_HFGITR_EL2)).*r_bitfield) {
1484 return inst.generateTrap(EL2);
1485 } else {
1486 return NoFault;
1487 }
1488}
1489
1496template<auto r_bitfield>
1497Fault
1498faultFgtTlbiNxsEL1(const MiscRegLUTEntry &entry,
1499 ThreadContext *tc, const MiscRegOp64 &inst)
1500{
1501 if (HaveExt(tc, ArmExtension::FEAT_HCX)) {
1502 const HCRX hcrx = tc->readMiscReg(MISCREG_HCRX_EL2);
1503 if (auto fault = faultFgtInstEL1<r_bitfield>(entry, tc, inst);
1504 fault != NoFault && (!isHcrxEL2Enabled(tc) || !hcrx.fgtnxs)) {
1505 return fault;
1506 } else {
1507 return NoFault;
1508 }
1509 } else {
1510 return NoFault;
1511 }
1512}
1513
1520template<bool read, auto r_bitfield>
1521Fault
1522faultFgtDebugEL1(const MiscRegLUTEntry &entry,
1523 ThreadContext *tc, const MiscRegOp64 &inst)
1524{
1525 if (fgtEnabled(tc) && fgtDebugRegister<read>(tc).*r_bitfield) {
1526 return inst.generateTrap(EL2);
1527 } else {
1528 return NoFault;
1529 }
1530}
1531
1537template <auto g_bitfield>
1538Fault
1539faultHcrEL1(const MiscRegLUTEntry &entry,
1540 ThreadContext *tc, const MiscRegOp64 &inst)
1541{
1542 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1543 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1544 return inst.generateTrap(EL2);
1545 } else {
1546 return NoFault;
1547 }
1548}
1549
1557template<bool read, auto g_bitfield, auto r_bitfield>
1558Fault
1559faultHcrFgtEL0(const MiscRegLUTEntry &entry,
1560 ThreadContext *tc, const MiscRegOp64 &inst)
1561{
1562 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1563 const bool in_host = EL2Enabled(tc) && hcr.e2h && hcr.tge;
1564
1565 if (EL2Enabled(tc) && !in_host && hcr.*g_bitfield) {
1566 return inst.generateTrap(EL2);
1567 } else if (auto fault = faultFgtEL0<read, r_bitfield>(entry, tc, inst);
1568 fault != NoFault) {
1569 return fault;
1570 } else {
1571 return NoFault;
1572 }
1573}
1574
1582template<bool read, auto g_bitfield, auto r_bitfield, RegVal r_match=0b1>
1583Fault
1584faultHcrFgtEL1(const MiscRegLUTEntry &entry,
1585 ThreadContext *tc, const MiscRegOp64 &inst)
1586{
1587 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1588
1589 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1590 return inst.generateTrap(EL2);
1591 } else if (auto fault = faultFgtEL1<read, r_bitfield, r_match>(entry, tc, inst);
1592 fault != NoFault) {
1593 return fault;
1594 } else {
1595 return NoFault;
1596 }
1597}
1598
1605template<auto g_bitfield, auto r_bitfield>
1606Fault
1607faultHcrFgtInstEL1(const MiscRegLUTEntry &entry,
1608 ThreadContext *tc, const MiscRegOp64 &inst)
1609{
1610 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1611
1612 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1613 return inst.generateTrap(EL2);
1614 } else if (auto fault = faultFgtInstEL1<r_bitfield>(entry, tc, inst);
1615 fault != NoFault) {
1616 return fault;
1617 } else {
1618 return NoFault;
1619 }
1620}
1621
1629template<auto g_bitfield, auto r_bitfield>
1630Fault
1631faultTlbiNxsEL1(const MiscRegLUTEntry &entry,
1632 ThreadContext *tc, const MiscRegOp64 &inst)
1633{
1634 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1635
1636 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1637 return inst.generateTrap(EL2);
1638 } else if (auto fault = faultFgtTlbiNxsEL1<r_bitfield>(entry, tc, inst);
1639 fault != NoFault) {
1640 return fault;
1641 } else {
1642 return NoFault;
1643 }
1644}
1645
1646Fault
1647faultSpEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1648 const MiscRegOp64 &inst)
1649{
1650 if (tc->readMiscReg(MISCREG_SPSEL) == 0)
1651 return inst.undefined();
1652 else
1653 return NoFault;
1654}
1655
1656Fault
1657faultDaif(const MiscRegLUTEntry &entry, ThreadContext *tc,
1658 const MiscRegOp64 &inst)
1659{
1660 const bool el2_enabled = EL2Enabled(tc);
1661 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
1662 const SCTLR sctlr = tc->readMiscRegNoEffect(MISCREG_SCTLR_EL1);
1663 if ((el2_enabled && hcr.e2h && hcr.tge) || sctlr.uma == 0) {
1664 if (el2_enabled && hcr.tge) {
1665 return inst.generateTrap(EL2);
1666 } else {
1667 return inst.generateTrap(EL1);
1668 }
1669 } else {
1670 return NoFault;
1671 }
1672}
1673
1674Fault
1675faultDczvaEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1676 const MiscRegOp64 &inst)
1677{
1678 if (!FullSystem)
1679 return NoFault;
1680
1681 const SCTLR sctlr = tc->readMiscRegNoEffect(MISCREG_SCTLR_EL1);
1682 const SCTLR sctlr2 = tc->readMiscRegNoEffect(MISCREG_SCTLR_EL2);
1683 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
1684
1685 const bool el2_enabled = EL2Enabled(tc);
1686 const bool in_host = hcr.e2h && hcr.tge;
1687 if (!(el2_enabled && in_host) && !sctlr.dze) {
1688 if (el2_enabled && hcr.tge) {
1689 return inst.generateTrap(EL2);
1690 } else {
1691 return inst.generateTrap(EL1);
1692 }
1693 } else if (el2_enabled && !in_host && hcr.tdz) {
1694 return inst.generateTrap(EL2);
1695 } else if (el2_enabled && in_host && !sctlr2.dze) {
1696 return inst.generateTrap(EL2);
1697 } else {
1698 return NoFault;
1699 }
1700}
1701
1702Fault
1703faultCvacEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1704 const MiscRegOp64 &inst)
1705{
1706 const SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1707 const SCTLR sctlr2 = tc->readMiscReg(MISCREG_SCTLR_EL2);
1708 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1709
1710 const bool el2_enabled = EL2Enabled(tc);
1711 const bool in_host = hcr.e2h && hcr.tge;
1712 if (!(el2_enabled && in_host) && !sctlr.uci) {
1713 if (el2_enabled && hcr.tge) {
1714 return inst.generateTrap(EL2);
1715 } else {
1716 return inst.generateTrap(EL1);
1717 }
1718 } else if (el2_enabled && !in_host && hcr.tpc) {
1719 return inst.generateTrap(EL2);
1720 } else if (el2_enabled && in_host && !sctlr2.uci) {
1721 return inst.generateTrap(EL2);
1722 } else {
1723 return NoFault;
1724 }
1725}
1726
1727Fault
1728faultFpcrEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1729 const MiscRegOp64 &inst)
1730{
1731 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
1732 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
1733 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1734
1735 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1736 const bool el2_enabled = EL2Enabled(tc);
1737 const bool in_host = hcr.e2h && hcr.tge;
1738 if (!(el2_enabled && in_host) && cpacr.fpen != 0b11) {
1739 if (el2_enabled && hcr.tge) {
1740 return inst.generateTrap(EL2, ExceptionClass::UNKNOWN, inst.iss());
1741 } else {
1742 return inst.generateTrap(EL1,
1744 }
1745 } else if (el2_enabled && in_host && cptr_el2.fpen != 0b11) {
1746 return inst.generateTrap(EL2,
1748 } else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
1749 return inst.generateTrap(EL2,
1751 } else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
1752 return inst.generateTrap(EL2,
1754 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
1755 return inst.generateTrap(EL3,
1757 } else {
1758 return NoFault;
1759 }
1760}
1761
1762Fault
1763faultFpcrEL1(const MiscRegLUTEntry &entry, ThreadContext *tc,
1764 const MiscRegOp64 &inst)
1765{
1766 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
1767 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
1768 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1769
1770 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1771 const bool el2_enabled = EL2Enabled(tc);
1772 if ((cpacr.fpen & 0b1) == 0b0) {
1773 return inst.generateTrap(EL1,
1775 } else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
1776 return inst.generateTrap(EL2,
1778 } else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
1779 return inst.generateTrap(EL2,
1781 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
1782 return inst.generateTrap(EL3,
1784 } else {
1785 return NoFault;
1786 }
1787}
1788
1789Fault
1790faultFpcrEL2(const MiscRegLUTEntry &entry, ThreadContext *tc,
1791 const MiscRegOp64 &inst)
1792{
1793 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
1794 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1795
1796 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1797 if (!hcr.e2h && cptr_el2.tfp) {
1798 return inst.generateTrap(EL2,
1800 } else if (hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
1801 return inst.generateTrap(EL2,
1803 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
1804 return inst.generateTrap(EL3,
1806 } else {
1807 return NoFault;
1808 }
1809}
1810
1811Fault
1812faultFpcrEL3(const MiscRegLUTEntry &entry,
1813 ThreadContext *tc, const MiscRegOp64 &inst)
1814{
1815 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1816 if (cptr_el3.tfp) {
1817 return inst.generateTrap(EL3,
1819 } else {
1820 return NoFault;
1821 }
1822}
1823
1824Fault
1825faultPouEL0(const MiscRegLUTEntry &entry,
1826 ThreadContext *tc, const MiscRegOp64 &inst)
1827{
1828 const SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1829 const SCTLR sctlr2 = tc->readMiscReg(MISCREG_SCTLR_EL2);
1830 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1831
1832 const bool el2_enabled = EL2Enabled(tc);
1833 const bool in_host = hcr.e2h && hcr.tge;
1834 if (!(el2_enabled && in_host) && !sctlr.uci) {
1835 if (el2_enabled && hcr.tge) {
1836 return inst.generateTrap(EL2);
1837 } else {
1838 return inst.generateTrap(EL1);
1839 }
1840 } else if (el2_enabled && !in_host && hcr.tpu) {
1841 return inst.generateTrap(EL2);
1842 } else if (el2_enabled && !in_host &&
1843 HaveExt(tc, ArmExtension::FEAT_EVT) && hcr.tocu) {
1844 return inst.generateTrap(EL2);
1845 } else if (el2_enabled && in_host && !sctlr2.uci) {
1846 return inst.generateTrap(EL2);
1847 } else {
1848 return NoFault;
1849 }
1850}
1851
1852template <auto bitfield>
1853Fault
1854faultPouEL1(const MiscRegLUTEntry &entry,
1855 ThreadContext *tc, const MiscRegOp64 &inst)
1856{
1857 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1858 const bool el2_enabled = EL2Enabled(tc);
1859 if (el2_enabled && hcr.tpu) {
1860 return inst.generateTrap(EL2);
1861 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
1862 hcr.tocu) {
1863 return inst.generateTrap(EL2);
1864 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
1865 fault != NoFault) {
1866 return fault;
1867 } else {
1868 return NoFault;
1869 }
1870}
1871
1872template <auto bitfield>
1873Fault
1874faultPouIsEL1(const MiscRegLUTEntry &entry,
1875 ThreadContext *tc, const MiscRegOp64 &inst)
1876{
1877 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1878 const bool el2_enabled = EL2Enabled(tc);
1879 if (el2_enabled && hcr.tpu) {
1880 return inst.generateTrap(EL2);
1881 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
1882 hcr.ticab) {
1883 return inst.generateTrap(EL2);
1884 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
1885 fault != NoFault) {
1886 return fault;
1887 } else {
1888 return NoFault;
1889 }
1890}
1891
1892Fault
1893faultCtrEL0(const MiscRegLUTEntry &entry,
1894 ThreadContext *tc, const MiscRegOp64 &inst)
1895{
1896 if (!FullSystem) {
1897 return NoFault;
1898 }
1899 const SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1900 const SCTLR sctlr2 = tc->readMiscReg(MISCREG_SCTLR_EL2);
1901 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1902
1903 const bool el2_enabled = EL2Enabled(tc);
1904 const bool in_host = hcr.e2h && hcr.tge;
1905 if (!(el2_enabled && in_host) && !sctlr.uct) {
1906 if (el2_enabled && hcr.tge) {
1907 return inst.generateTrap(EL2);
1908 } else {
1909 return inst.generateTrap(EL1);
1910 }
1911 } else if (auto fault = faultHcrFgtEL0<
1912 true, &HCR::tid2, &HFGTR::ctrEL0>(entry, tc, inst);
1913 fault != NoFault) {
1914 return fault;
1915 } else if (el2_enabled && in_host && !sctlr2.uct) {
1916 return inst.generateTrap(EL2);
1917 } else {
1918 return NoFault;
1919 }
1920}
1921
1922Fault
1923faultMdccsrEL0(const MiscRegLUTEntry &entry,
1924 ThreadContext *tc, const MiscRegOp64 &inst)
1925{
1926 if (!FullSystem) {
1927 return NoFault;
1928 }
1929 const DBGDS32 mdscr = tc->readMiscReg(MISCREG_MDSCR_EL1);
1930 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
1931 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1932
1933 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1934 const bool el2_enabled = EL2Enabled(tc);
1935 if (mdscr.tdcc) {
1936 if (el2_enabled && hcr.tge) {
1937 return inst.generateTrap(EL2);
1938 } else {
1939 return inst.generateTrap(EL1);
1940 }
1941 } else if (el2_enabled && mdcr_el2.tdcc) {
1942 return inst.generateTrap(EL2);
1943 } else if (el2_enabled && (hcr.tge || (mdcr_el2.tde || mdcr_el2.tda))) {
1944 return inst.generateTrap(EL2);
1945 } else if (ArmSystem::haveEL(tc, EL3) && (mdcr_el3.tdcc || mdcr_el3.tda)) {
1946 return inst.generateTrap(EL3);
1947 } else {
1948 return NoFault;
1949 }
1950}
1951
1952Fault
1953faultMdccsrEL1(const MiscRegLUTEntry &entry,
1954 ThreadContext *tc, const MiscRegOp64 &inst)
1955{
1956 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
1957 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1958
1959 const bool el2_enabled = EL2Enabled(tc);
1960 if (el2_enabled && mdcr_el2.tdcc) {
1961 return inst.generateTrap(EL2);
1962 } else if (el2_enabled && (mdcr_el2.tde || mdcr_el2.tda)) {
1963 return inst.generateTrap(EL2);
1964 } else if (ArmSystem::haveEL(tc, EL3) && (mdcr_el3.tdcc || mdcr_el3.tda)) {
1965 return inst.generateTrap(EL3);
1966 } else {
1967 return NoFault;
1968 }
1969}
1970
1971Fault
1972faultMdccsrEL2(const MiscRegLUTEntry &entry,
1973 ThreadContext *tc, const MiscRegOp64 &inst)
1974{
1975 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1976 if (ArmSystem::haveEL(tc, EL3) && (mdcr_el3.tdcc || mdcr_el3.tda)) {
1977 return inst.generateTrap(EL3);
1978 } else {
1979 return NoFault;
1980 }
1981}
1982
1983Fault
1984faultDebugEL1(const MiscRegLUTEntry &entry,
1985 ThreadContext *tc, const MiscRegOp64 &inst)
1986{
1987 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
1988 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1989
1990 const bool el2_enabled = EL2Enabled(tc);
1991 if (el2_enabled && (mdcr_el2.tde || mdcr_el2.tda)) {
1992 return inst.generateTrap(EL2);
1993 } else if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tda) {
1994 return inst.generateTrap(EL3);
1995 } else {
1996 return NoFault;
1997 }
1998}
1999
2000Fault
2001faultDebugEL2(const MiscRegLUTEntry &entry,
2002 ThreadContext *tc, const MiscRegOp64 &inst)
2003{
2004 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
2005 if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tda) {
2006 return inst.generateTrap(EL3);
2007 } else {
2008 return NoFault;
2009 }
2010}
2011
2012template<bool read, auto r_bitfield>
2013Fault
2014faultDebugWithFgtEL1(const MiscRegLUTEntry &entry,
2015 ThreadContext *tc, const MiscRegOp64 &inst)
2016{
2017 if (auto fault = faultFgtDebugEL1<read, r_bitfield>(entry, tc, inst);
2018 fault != NoFault) {
2019 return fault;
2020 } else {
2021 return faultDebugEL1(entry, tc, inst);
2022 }
2023}
2024
2025template<bool read, auto r_bitfield>
2026Fault
2027faultDebugOsEL1(const MiscRegLUTEntry &entry,
2028 ThreadContext *tc, const MiscRegOp64 &inst)
2029{
2030 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
2031 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
2032
2033 if (auto fault = faultFgtDebugEL1<read, r_bitfield>(entry, tc, inst);
2034 fault != NoFault) {
2035 return fault;
2036 } else if (EL2Enabled(tc) && (mdcr_el2.tde || mdcr_el2.tdosa)) {
2037 return inst.generateTrap(EL2);
2038 } else if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tdosa) {
2039 return inst.generateTrap(EL3);
2040 } else {
2041 return NoFault;
2042 }
2043}
2044
2045Fault
2046faultDebugOsEL2(const MiscRegLUTEntry &entry,
2047 ThreadContext *tc, const MiscRegOp64 &inst)
2048{
2049 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
2050 if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tdosa) {
2051 return inst.generateTrap(EL3);
2052 } else {
2053 return NoFault;
2054 }
2055}
2056
2057Fault
2058faultHcrxEL2(const MiscRegLUTEntry &entry,
2059 ThreadContext *tc, const MiscRegOp64 &inst)
2060{
2061 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2062 if (ArmSystem::haveEL(tc, EL3) && !scr.hxen) {
2063 return inst.generateTrap(EL3);
2064 } else {
2065 return NoFault;
2066 }
2067}
2068
2069Fault
2070faultZcrEL1(const MiscRegLUTEntry &entry,
2071 ThreadContext *tc, const MiscRegOp64 &inst)
2072{
2073 const CPACR cpacr_el1 = tc->readMiscReg(MISCREG_CPACR_EL1);
2074 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2075 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2076
2077 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2078 const bool el2_enabled = EL2Enabled(tc);
2079 if (!(cpacr_el1.zen & 0x1)) {
2080 return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SVE, 0);
2081 } else if (el2_enabled && !hcr.e2h && cptr_el2.tz) {
2082 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2083 } else if (el2_enabled && hcr.e2h && !(cptr_el2.zen & 0x1)) {
2084 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2085 } else if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.ez) {
2086 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
2087 } else {
2088 return NoFault;
2089 }
2090}
2091
2092Fault
2093faultZcrEL2(const MiscRegLUTEntry &entry,
2094 ThreadContext *tc, const MiscRegOp64 &inst)
2095{
2096 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2097 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2098
2099 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2100 if (!hcr.e2h && cptr_el2.tz) {
2101 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2102 } else if (hcr.e2h && !(cptr_el2.zen & 0x1)) {
2103 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2104 } else if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.ez) {
2105 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
2106 } else {
2107 return NoFault;
2108 }
2109}
2110
2111Fault
2112faultZcrEL3(const MiscRegLUTEntry &entry,
2113 ThreadContext *tc, const MiscRegOp64 &inst)
2114{
2115 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2116 if (!cptr_el3.ez) {
2117 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
2118 } else {
2119 return NoFault;
2120 }
2121}
2122
2123Fault
2124faultGicv3(const MiscRegLUTEntry &entry,
2125 ThreadContext *tc, const MiscRegOp64 &inst)
2126{
2127 auto gic = static_cast<ArmSystem*>(tc->getSystemPtr())->getGIC();
2128 if (!gic->supportsVersion(BaseGic::GicVersion::GIC_V3)) {
2129 return inst.undefined();
2130 } else {
2131 return NoFault;
2132 }
2133}
2134
2135Fault
2136faultIccSgiEL1(const MiscRegLUTEntry &entry,
2137 ThreadContext *tc, const MiscRegOp64 &inst)
2138{
2139 if (auto fault = faultGicv3(entry, tc, inst); fault != NoFault) {
2140 return fault;
2141 }
2142
2143 const Gicv3CPUInterface::ICH_HCR_EL2 ich_hcr =
2144 tc->readMiscReg(MISCREG_ICH_HCR_EL2);
2145 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2146 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2147 if (EL2Enabled(tc) && (hcr.fmo || hcr.imo || ich_hcr.TC)) {
2148 return inst.generateTrap(EL2);
2149 } else if (ArmSystem::haveEL(tc, EL3) && scr.irq && scr.fiq) {
2150 return inst.generateTrap(EL3);
2151 } else {
2152 return NoFault;
2153 }
2154}
2155
2156Fault
2157faultIccSgiEL2(const MiscRegLUTEntry &entry,
2158 ThreadContext *tc, const MiscRegOp64 &inst)
2159{
2160 if (auto fault = faultGicv3(entry, tc, inst); fault != NoFault) {
2161 return fault;
2162 }
2163
2164 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2165 if (ArmSystem::haveEL(tc, EL3) && scr.irq && scr.fiq) {
2166 return inst.generateTrap(EL3);
2167 } else {
2168 return NoFault;
2169 }
2170}
2171
2172template<bool read, auto g_bitfield>
2173Fault
2174faultSctlr2EL1(const MiscRegLUTEntry &entry,
2175 ThreadContext *tc, const MiscRegOp64 &inst)
2176{
2177 if (HaveExt(tc, ArmExtension::FEAT_SCTLR2)) {
2178 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2179 const HCRX hcrx = tc->readMiscReg(MISCREG_HCRX_EL2);
2180 if (
2181 auto fault = faultHcrFgtEL1<read, g_bitfield, &HFGTR::sctlrEL1>
2182 (
2183 entry,
2184 tc,
2185 inst
2186 );
2187 fault != NoFault
2188 ) {
2189 return fault;
2190 } else if (
2191 EL2Enabled(tc) && (!isHcrxEL2Enabled(tc) || !hcrx.sctlr2En)
2192 ) {
2193 return inst.generateTrap(EL2);
2194 } else if (ArmSystem::haveEL(tc, EL3) && !scr.sctlr2En) {
2195 return inst.generateTrap(EL3);
2196 } else {
2197 return NoFault;
2198 }
2199 } else {
2200 return inst.undefined();
2201 }
2202}
2203
2204Fault
2205faultSctlr2EL2(const MiscRegLUTEntry &entry,
2206 ThreadContext *tc, const MiscRegOp64 &inst)
2207{
2208 if (HaveExt(tc, ArmExtension::FEAT_SCTLR2)) {
2209 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2210 if (ArmSystem::haveEL(tc, EL3) && !scr.sctlr2En) {
2211 return inst.generateTrap(EL3);
2212 } else {
2213 return NoFault;
2214 }
2215 } else {
2216 return inst.undefined();
2217 }
2218}
2219
2220template<bool read, auto g_bitfield>
2221Fault
2222faultTcr2EL1(const MiscRegLUTEntry &entry,
2223 ThreadContext *tc, const MiscRegOp64 &inst)
2224{
2225 if (HaveExt(tc, ArmExtension::FEAT_TCR2)) {
2226 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2227 const HCRX hcrx = tc->readMiscReg(MISCREG_HCRX_EL2);
2228 if (
2229 auto fault = faultHcrFgtEL1<read, g_bitfield, &HFGTR::sctlrEL1>
2230 (
2231 entry,
2232 tc,
2233 inst
2234 );
2235 fault != NoFault
2236 ) {
2237 return fault;
2238 } else if (EL2Enabled(tc) && (!isHcrxEL2Enabled(tc) || !hcrx.tcr2En)) {
2239 return inst.generateTrap(EL2);
2240 } else if (ArmSystem::haveEL(tc, EL3) && !scr.tcr2En) {
2241 return inst.generateTrap(EL3);
2242 } else {
2243 return NoFault;
2244 }
2245 } else {
2246 return inst.undefined();
2247 }
2248}
2249
2250Fault
2251faultTcr2EL2(const MiscRegLUTEntry &entry,
2252 ThreadContext *tc, const MiscRegOp64 &inst)
2253{
2254 if (HaveExt(tc, ArmExtension::FEAT_TCR2)) {
2255 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2256 if (ArmSystem::haveEL(tc, EL3) && !scr.tcr2En) {
2257 return inst.generateTrap(EL3);
2258 } else {
2259 return NoFault;
2260 }
2261 } else {
2262 return inst.undefined();
2263 }
2264}
2265
2266Fault
2267faultTcr2VheEL3(const MiscRegLUTEntry &entry,
2268 ThreadContext *tc, const MiscRegOp64 &inst)
2269{
2270 if (HaveExt(tc, ArmExtension::FEAT_TCR2)) {
2271 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2272 const bool el2_host = EL2Enabled(tc) && hcr.e2h;
2273 if (el2_host) {
2274 return NoFault;
2275 } else {
2276 return inst.undefined();
2277 }
2278 } else {
2279 return inst.undefined();
2280 }
2281}
2282
2283template<bool read, auto r_bitfield>
2284Fault
2285faultCpacrEL1(const MiscRegLUTEntry &entry,
2286 ThreadContext *tc, const MiscRegOp64 &inst)
2287{
2288 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2289 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2290
2291 const bool el2_enabled = EL2Enabled(tc);
2292 if (el2_enabled && cptr_el2.tcpac) {
2293 return inst.generateTrap(EL2);
2294 } else if (auto fault = faultFgtEL1<read, r_bitfield>(entry, tc, inst);
2295 fault != NoFault) {
2296 return fault;
2297 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tcpac) {
2298 return inst.generateTrap(EL3);
2299 } else {
2300 return NoFault;
2301 }
2302}
2303
2304Fault
2305faultCpacrEL2(const MiscRegLUTEntry &entry,
2306 ThreadContext *tc, const MiscRegOp64 &inst)
2307{
2308 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2309 if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tcpac) {
2310 return inst.generateTrap(EL3);
2311 } else {
2312 return NoFault;
2313 }
2314}
2315
2316template <auto bitfield>
2317Fault
2318faultTlbiOsEL1(const MiscRegLUTEntry &entry,
2319 ThreadContext *tc, const MiscRegOp64 &inst)
2320{
2321 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2322 const bool el2_enabled = EL2Enabled(tc);
2323 if (el2_enabled && hcr.ttlb) {
2324 return inst.generateTrap(EL2);
2325 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2326 hcr.ttlbos) {
2327 return inst.generateTrap(EL2);
2328 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
2329 fault != NoFault) {
2330 return fault;
2331 } else {
2332 return NoFault;
2333 }
2334}
2335
2336template <auto bitfield>
2337Fault
2338faultTlbiOsNxsEL1(const MiscRegLUTEntry &entry,
2339 ThreadContext *tc, const MiscRegOp64 &inst)
2340{
2341 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2342 const bool el2_enabled = EL2Enabled(tc);
2343 if (el2_enabled && hcr.ttlb) {
2344 return inst.generateTrap(EL2);
2345 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2346 hcr.ttlbos) {
2347 return inst.generateTrap(EL2);
2348 } else if (auto fault = faultFgtTlbiNxsEL1<bitfield>(entry, tc, inst);
2349 fault != NoFault) {
2350 return fault;
2351 } else {
2352 return NoFault;
2353 }
2354}
2355
2356template <auto bitfield>
2357Fault
2358faultTlbiIsEL1(const MiscRegLUTEntry &entry,
2359 ThreadContext *tc, const MiscRegOp64 &inst)
2360{
2361 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2362 const bool el2_enabled = EL2Enabled(tc);
2363 if (el2_enabled && hcr.ttlb) {
2364 return inst.generateTrap(EL2);
2365 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2366 hcr.ttlbis) {
2367 return inst.generateTrap(EL2);
2368 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
2369 fault != NoFault) {
2370 return fault;
2371 } else {
2372 return NoFault;
2373 }
2374}
2375
2376template <auto bitfield>
2377Fault
2378faultTlbiIsNxsEL1(const MiscRegLUTEntry &entry,
2379 ThreadContext *tc, const MiscRegOp64 &inst)
2380{
2381 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2382 const bool el2_enabled = EL2Enabled(tc);
2383 if (el2_enabled && hcr.ttlb) {
2384 return inst.generateTrap(EL2);
2385 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2386 hcr.ttlbis) {
2387 return inst.generateTrap(EL2);
2388 } else if (auto fault = faultFgtTlbiNxsEL1<bitfield>(entry, tc, inst);
2389 fault != NoFault) {
2390 return fault;
2391 } else {
2392 return NoFault;
2393 }
2394}
2395
2396template <bool read, auto r_bitfield>
2397Fault
2398faultCacheEL1(const MiscRegLUTEntry &entry,
2399 ThreadContext *tc, const MiscRegOp64 &inst)
2400{
2401 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2402 const bool el2_enabled = EL2Enabled(tc);
2403 if (el2_enabled && hcr.tid2) {
2404 return inst.generateTrap(EL2);
2405 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2406 hcr.tid4) {
2407 return inst.generateTrap(EL2);
2408 } else if (auto fault = faultFgtEL1<read, r_bitfield>(entry, tc, inst);
2409 fault != NoFault) {
2410 return fault;
2411 } else {
2412 return NoFault;
2413 }
2414}
2415
2416template <bool read, auto r_bitfield>
2417Fault
2418faultPauthEL1(const MiscRegLUTEntry &entry,
2419 ThreadContext *tc, const MiscRegOp64 &inst)
2420{
2421 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2422 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2423 const bool el2_enabled = EL2Enabled(tc);
2424
2425 if (el2_enabled && !hcr.apk) {
2426 return inst.generateTrap(EL2);
2427 } else if (auto fault = faultFgtEL1<read, r_bitfield>(entry, tc, inst);
2428 fault != NoFault) {
2429 return fault;
2430 } else if (ArmSystem::haveEL(tc, EL3) && !scr.apk) {
2431 return inst.generateTrap(EL3);
2432 } else {
2433 return NoFault;
2434 }
2435}
2436
2437Fault
2438faultPauthEL2(const MiscRegLUTEntry &entry,
2439 ThreadContext *tc, const MiscRegOp64 &inst)
2440{
2441 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2442 if (ArmSystem::haveEL(tc, EL3) && !scr.apk) {
2443 return inst.generateTrap(EL3);
2444 } else {
2445 return NoFault;
2446 }
2447}
2448
2449Fault
2450faultGenericTimerEL0(const MiscRegLUTEntry &entry,
2451 ThreadContext *tc, const MiscRegOp64 &inst)
2452{
2453 if (!FullSystem) {
2454 return NoFault;
2455 }
2456 const bool el2_enabled = EL2Enabled(tc);
2457 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2458 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2459 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2460 const CNTHCTL_E2H cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2461 if (!(in_host) && !cntkctl_el1.el0pcten && !cntkctl_el1.el0vcten) {
2462 if (el2_enabled && hcr.tge)
2463 return inst.generateTrap(EL2);
2464 else
2465 return inst.generateTrap(EL1);
2466 } else if (in_host && !cnthctl_el2.el0pcten && !cnthctl_el2.el0vcten) {
2467 return inst.generateTrap(EL2);
2468 } else {
2469 return NoFault;
2470 }
2471}
2472
2473Fault
2474faultCntpctEL0(const MiscRegLUTEntry &entry,
2475 ThreadContext *tc, const MiscRegOp64 &inst)
2476{
2477 if (!FullSystem) {
2478 return NoFault;
2479 }
2480 const bool el2_enabled = EL2Enabled(tc);
2481 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2482 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2483 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2484 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2485 if (!(in_host) && !cntkctl_el1.el0pcten) {
2486 if (el2_enabled && hcr.tge)
2487 return inst.generateTrap(EL2);
2488 else
2489 return inst.generateTrap(EL1);
2490 } else if (el2_enabled && !hcr.e2h &&
2491 !static_cast<CNTHCTL>(cnthctl_el2).el1pcten) {
2492 return inst.generateTrap(EL2);
2493 } else if (el2_enabled && hcr.e2h && !hcr.tge &&
2494 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pcten) {
2495 return inst.generateTrap(EL2);
2496 } else if (in_host &&
2497 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el0pcten) {
2498 return inst.generateTrap(EL2);
2499 } else {
2500 return NoFault;
2501 }
2502}
2503
2504Fault
2505faultCntpctEL1(const MiscRegLUTEntry &entry,
2506 ThreadContext *tc, const MiscRegOp64 &inst)
2507{
2508 const bool el2_enabled = EL2Enabled(tc);
2509 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2510 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2511 if (el2_enabled && hcr.e2h &&
2512 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pcten) {
2513 return inst.generateTrap(EL2);
2514 } else if (el2_enabled && !hcr.e2h &&
2515 !static_cast<CNTHCTL>(cnthctl_el2).el1pcten) {
2516 return inst.generateTrap(EL2);
2517 } else {
2518 return NoFault;
2519 }
2520}
2521
2522Fault
2523faultCntvctEL0(const MiscRegLUTEntry &entry,
2524 ThreadContext *tc, const MiscRegOp64 &inst)
2525{
2526 if (!FullSystem) {
2527 return NoFault;
2528 }
2529 const bool el2_enabled = EL2Enabled(tc);
2530 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2531 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2532 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2533 const CNTHCTL_E2H cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2534 if (!(in_host) && !cntkctl_el1.el0vcten) {
2535 if (el2_enabled && hcr.tge)
2536 return inst.generateTrap(EL2);
2537 else
2538 return inst.generateTrap(EL1);
2539 } else if (in_host && !cnthctl_el2.el0vcten) {
2540 return inst.generateTrap(EL2);
2541 } else if (el2_enabled && !(hcr.e2h && hcr.tge) && cnthctl_el2.el1tvct) {
2542 return inst.generateTrap(EL2);
2543 } else {
2544 return NoFault;
2545 }
2546}
2547
2548Fault
2549faultCntvctEL1(const MiscRegLUTEntry &entry,
2550 ThreadContext *tc, const MiscRegOp64 &inst)
2551{
2552 const CNTHCTL cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2553 if (EL2Enabled(tc) && cnthctl_el2.el1tvct) {
2554 return inst.generateTrap(EL2);
2555 } else {
2556 return NoFault;
2557 }
2558}
2559
2560//TODO: See faultCntpctEL0
2561Fault
2562faultCntpCtlEL0(const MiscRegLUTEntry &entry,
2563 ThreadContext *tc, const MiscRegOp64 &inst)
2564{
2565 if (!FullSystem) {
2566 return NoFault;
2567 }
2568 const bool el2_enabled = EL2Enabled(tc);
2569 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2570 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2571 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2572 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2573 if (!(in_host) && !cntkctl_el1.el0pten) {
2574 if (el2_enabled && hcr.tge)
2575 return inst.generateTrap(EL2);
2576 else
2577 return inst.generateTrap(EL1);
2578 } else if (el2_enabled && !hcr.e2h &&
2579 !static_cast<CNTHCTL>(cnthctl_el2).el1pcen) {
2580 return inst.generateTrap(EL2);
2581 } else if (el2_enabled && hcr.e2h && !hcr.tge &&
2582 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pten) {
2583 return inst.generateTrap(EL2);
2584 } else if (in_host &&
2585 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el0pten) {
2586 return inst.generateTrap(EL2);
2587 } else {
2588 return NoFault;
2589 }
2590}
2591
2592Fault
2593faultCntpCtlEL1(const MiscRegLUTEntry &entry,
2594 ThreadContext *tc, const MiscRegOp64 &inst)
2595{
2596 const bool el2_enabled = EL2Enabled(tc);
2597 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2598 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2599 if (el2_enabled && !hcr.e2h &&
2600 !static_cast<CNTHCTL>(cnthctl_el2).el1pcen) {
2601 return inst.generateTrap(EL2);
2602 } else if (el2_enabled && hcr.e2h &&
2603 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pten) {
2604 return inst.generateTrap(EL2);
2605 } else {
2606 return NoFault;
2607 }
2608}
2609
2610// TODO: see faultCntvctEL0
2611Fault
2612faultCntvCtlEL0(const MiscRegLUTEntry &entry,
2613 ThreadContext *tc, const MiscRegOp64 &inst)
2614{
2615 if (!FullSystem) {
2616 return NoFault;
2617 }
2618 const bool el2_enabled = EL2Enabled(tc);
2619 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2620 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2621 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2622 const CNTHCTL_E2H cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2623 if (!(in_host) && !cntkctl_el1.el0vten) {
2624 if (el2_enabled && hcr.tge)
2625 return inst.generateTrap(EL2);
2626 else
2627 return inst.generateTrap(EL1);
2628 } else if (in_host && !cnthctl_el2.el0vten) {
2629 return inst.generateTrap(EL2);
2630 } else if (el2_enabled && !(hcr.e2h && hcr.tge) && cnthctl_el2.el1tvt) {
2631 return inst.generateTrap(EL2);
2632 } else {
2633 return NoFault;
2634 }
2635}
2636
2637Fault
2638faultCntvCtlEL1(const MiscRegLUTEntry &entry,
2639 ThreadContext *tc, const MiscRegOp64 &inst)
2640{
2641 const CNTHCTL cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2642 if (EL2Enabled(tc) && cnthctl_el2.el1tvt) {
2643 return inst.generateTrap(EL2);
2644 } else {
2645 return NoFault;
2646 }
2647}
2648
2649Fault
2650faultCntpsCtlEL1(const MiscRegLUTEntry &entry,
2651 ThreadContext *tc, const MiscRegOp64 &inst)
2652{
2653 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2654 if (ArmSystem::haveEL(tc, EL3) && !scr.ns) {
2655 if (scr.eel2)
2656 return inst.undefined();
2657 else if (!scr.st)
2658 return inst.generateTrap(EL3);
2659 else
2660 return NoFault;
2661 } else {
2662 return inst.undefined();
2663 }
2664}
2665
2666Fault
2667faultUnimplemented(const MiscRegLUTEntry &entry,
2668 ThreadContext *tc, const MiscRegOp64 &inst)
2669{
2670 if (entry.info[MISCREG_WARN_NOT_FAIL]) {
2671 return NoFault;
2672 } else {
2673 return inst.undefined();
2674 }
2675}
2676
2677Fault
2678faultImpdefUnimplEL1(const MiscRegLUTEntry &entry,
2679 ThreadContext *tc, const MiscRegOp64 &inst)
2680{
2681 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2682 if (EL2Enabled(tc) && hcr.tidcp) {
2683 return inst.generateTrap(EL2);
2684 } else {
2685 return faultUnimplemented(entry, tc, inst);
2686 }
2687}
2688
2689Fault
2690faultEsm(const MiscRegLUTEntry &entry,
2691 ThreadContext *tc, const MiscRegOp64 &inst)
2692{
2693 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2694 if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.esm) {
2695 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SME, 0);
2696 } else {
2697 return NoFault;
2698 }
2699}
2700
2701Fault
2702faultTsmSmen(const MiscRegLUTEntry &entry,
2703 ThreadContext *tc, const MiscRegOp64 &inst)
2704{
2705 const HCR hcr_el2 = tc->readMiscReg(MISCREG_HCR_EL2);
2706 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2707 const bool el2_enabled = EL2Enabled(tc);
2708 if (el2_enabled && !hcr_el2.e2h && cptr_el2.tsm) {
2709 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2710 } else if (el2_enabled && hcr_el2.e2h && !(cptr_el2.smen & 0b1)) {
2711 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2712 } else {
2713 return faultEsm(entry, tc, inst);
2714 }
2715}
2716
2717Fault
2718faultSmenEL1(const MiscRegLUTEntry &entry,
2719 ThreadContext *tc, const MiscRegOp64 &inst)
2720{
2721 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
2722 if (!(cpacr.smen & 0b1)) {
2723 return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SME, 0);
2724 } else {
2725 return faultTsmSmen(entry, tc, inst);
2726 }
2727}
2728
2729Fault
2730faultSmenEL0(const MiscRegLUTEntry &entry,
2731 ThreadContext *tc, const MiscRegOp64 &inst)
2732{
2733 const bool el2_enabled = EL2Enabled(tc);
2734 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2735 const bool in_host = hcr.e2h && hcr.tge;
2736
2737 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
2738 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2739 if (!(el2_enabled && in_host) && cpacr.smen != 0b11) {
2740 if (el2_enabled && hcr.tge)
2741 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2742 else
2743 return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SME, 0);
2744 } else if (el2_enabled && in_host && cptr_el2.smen != 0b11) {
2745 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2746 } else {
2747 return faultTsmSmen(entry, tc, inst);
2748 }
2749}
2750
2751Fault
2752faultRng(const MiscRegLUTEntry &entry,
2753 ThreadContext *tc, const MiscRegOp64 &inst)
2754{
2755 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2756 if (HaveExt(tc, ArmExtension::FEAT_RNG_TRAP) && scr.trndr) {
2757 return inst.generateTrap(EL3);
2758 } else if (!HaveExt(tc, ArmExtension::FEAT_RNG)) {
2759 return inst.undefined();
2760 } else {
2761 return NoFault;
2762 }
2763}
2764
2765Fault
2766faultFgtCtrlRegs(const MiscRegLUTEntry &entry,
2767 ThreadContext *tc, const MiscRegOp64 &inst)
2768{
2769 if (HaveExt(tc, ArmExtension::FEAT_FGT)) {
2770 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2771 if (ArmSystem::haveEL(tc, EL3) && !scr.fgten) {
2772 return inst.generateTrap(EL3);
2773 } else {
2774 return NoFault;
2775 }
2776 } else {
2777 return inst.undefined();
2778 }
2779}
2780
2781Fault
2782faultIdst(const MiscRegLUTEntry &entry,
2783 ThreadContext *tc, const MiscRegOp64 &inst)
2784{
2785 if (HaveExt(tc, ArmExtension::FEAT_IDST)) {
2786 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2787 if (EL2Enabled(tc) && hcr.tge) {
2788 return inst.generateTrap(EL2);
2789 } else {
2790 return inst.generateTrap(EL1);
2791 }
2792 } else {
2793 return inst.undefined();
2794 }
2795}
2796
2797Fault
2798faultMpamIdrEL1(const MiscRegLUTEntry &entry,
2799 ThreadContext *tc, const MiscRegOp64 &inst)
2800{
2801 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2802 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2803 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2804 MPAMIDR mpamidr = tc->readMiscReg(MISCREG_MPAMIDR_EL1);
2805 MPAMHCR mpamhcr = tc->readMiscReg(MISCREG_MPAMHCR_EL2);
2806 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2807 return inst.generateTrap(EL3);
2808 } else if (EL2Enabled(tc) && mpamidr.hasHcr && mpamhcr.trapMpamIdrEL1) {
2809 return inst.generateTrap(EL2);
2810 } else if (EL2Enabled(tc) && mpamidr.hasTidr && mpam2.el2.tidr) {
2811 return inst.generateTrap(EL2);
2812 } else {
2813 return NoFault;
2814 }
2815 } else {
2816 return inst.undefined();
2817 }
2818}
2819
2820Fault
2821faultMpam0EL1(const MiscRegLUTEntry &entry,
2822 ThreadContext *tc, const MiscRegOp64 &inst)
2823{
2824 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2825 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2826 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2827 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2828 return inst.generateTrap(EL3);
2829 } else if (EL2Enabled(tc) && mpam2.el2.trapMpam0EL1) {
2830 return inst.generateTrap(EL2);
2831 } else {
2832 return NoFault;
2833 }
2834 } else {
2835 return inst.undefined();
2836 }
2837}
2838
2839Fault
2840faultMpam1EL1(const MiscRegLUTEntry &entry,
2841 ThreadContext *tc, const MiscRegOp64 &inst)
2842{
2843 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2844 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2845 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2846 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2847 return inst.generateTrap(EL3);
2848 } else if (EL2Enabled(tc) && mpam2.el2.trapMpam1EL1) {
2849 return inst.generateTrap(EL2);
2850 } else {
2851 return NoFault;
2852 }
2853 } else {
2854 return inst.undefined();
2855 }
2856}
2857
2858Fault
2859faultMpamEL2(const MiscRegLUTEntry &entry,
2860 ThreadContext *tc, const MiscRegOp64 &inst)
2861{
2862 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2863 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2864 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2865 return inst.generateTrap(EL3);
2866 } else {
2867 return NoFault;
2868 }
2869 } else {
2870 return inst.undefined();
2871 }
2872}
2873
2874Fault
2875faultMpam12EL2(const MiscRegLUTEntry &entry,
2876 ThreadContext *tc, const MiscRegOp64 &inst)
2877{
2878 if (ELIsInHost(tc, EL2)) {
2879 return faultMpamEL2(entry, tc, inst);
2880 } else {
2881 return inst.undefined();
2882 }
2883}
2884
2885Fault
2886faultMpamsmEL1(const MiscRegLUTEntry &entry,
2887 ThreadContext *tc, const MiscRegOp64 &inst)
2888{
2889 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2890 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2891 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2892 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2893 return inst.generateTrap(EL3);
2894 } else if (EL2Enabled(tc) && mpam2.el2.enMpamSm) {
2895 return inst.generateTrap(EL2);
2896 } else {
2897 return NoFault;
2898 }
2899 } else {
2900 return inst.undefined();
2901 }
2902}
2903
2904template <auto faultAtEL2>
2905Fault
2906faultVheEL2(const MiscRegLUTEntry &entry,
2907 ThreadContext *tc, const MiscRegOp64 &inst)
2908{
2909 if (ELIsInHost(tc, EL2)) {
2910 return faultAtEL2(entry, tc, inst);
2911 } else {
2912 return inst.undefined();
2913 }
2914}
2915
2916template <bool read, auto g_bitfield, auto r_bitifield>
2917Fault
2918faultPieEL1(const MiscRegLUTEntry &entry,
2919 ThreadContext *tc, const MiscRegOp64 &inst)
2920{
2921 if (HaveExt(tc, ArmExtension::FEAT_S1PIE)) {
2922 SCR scr_el3 = tc->readMiscReg(MISCREG_SCR_EL3);
2923 if (auto fault = faultHcrFgtEL1<read, g_bitfield, r_bitifield, 0>(entry, tc, inst);
2924 fault != NoFault) {
2925 return fault;
2926 } else if (ArmSystem::haveEL(tc, EL3) && !scr_el3.piEn) {
2927 return inst.generateTrap(EL3);
2928 } else {
2929 return NoFault;
2930 }
2931 } else {
2932 return inst.undefined();
2933 }
2934}
2935
2936Fault
2937faultPieEL2(const MiscRegLUTEntry &entry,
2938 ThreadContext *tc, const MiscRegOp64 &inst)
2939{
2940 if (HaveExt(tc, ArmExtension::FEAT_S1PIE)) {
2941 SCR scr_el3 = tc->readMiscReg(MISCREG_SCR_EL3);
2942 if (ArmSystem::haveEL(tc, EL3) && !scr_el3.piEn) {
2943 return inst.generateTrap(EL3);
2944 } else {
2945 return NoFault;
2946 }
2947 } else {
2948 return inst.undefined();
2949 }
2950}
2951
2952}
2953
2955decodeAArch64SysReg(unsigned op0, unsigned op1,
2956 unsigned crn, unsigned crm,
2957 unsigned op2)
2958{
2959 MiscRegNum64 sys_reg(op0, op1, crn, crm, op2);
2960 return decodeAArch64SysReg(sys_reg);
2961}
2962
2965{
2966 auto it = miscRegNumToIdx.find(sys_reg);
2967 if (it != miscRegNumToIdx.end()) {
2968 return it->second;
2969 } else {
2970 // Check for a pseudo register before returning MISCREG_UNKNOWN
2971 if ((sys_reg.op0 == 1 || sys_reg.op0 == 3) &&
2972 (sys_reg.crn == 11 || sys_reg.crn == 15)) {
2973 return MISCREG_IMPDEF_UNIMPL;
2974 } else {
2975 return MISCREG_UNKNOWN;
2976 }
2977 }
2978}
2979
2980std::optional<MiscRegNum64>
2982{
2983 if (auto it = idxToMiscRegNum.find(misc_reg);
2984 it != idxToMiscRegNum.end()) {
2985 return it->second;
2986 } else {
2987 return std::nullopt;
2988 }
2989}
2990
2991Fault
2993 const MiscRegOp64 &inst, ExceptionLevel el)
2994{
2995 return !inst.miscRead() ? faultWrite[el](*this, tc, inst) :
2996 faultRead[el](*this, tc, inst);
2997}
2998
2999template <MiscRegInfo Sec, MiscRegInfo NonSec>
3000Fault
3002 ThreadContext *tc, const MiscRegOp64 &inst)
3003{
3004 if (isSecureBelowEL3(tc) ? entry.info[Sec] : entry.info[NonSec]) {
3005 return NoFault;
3006 } else {
3007 return inst.undefined();
3008 }
3009}
3010
3011static Fault
3013 ThreadContext *tc, const MiscRegOp64 &inst)
3014{
3015 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
3016 if (hcr.e2h) {
3017 return NoFault;
3018 } else {
3019 return inst.undefined();
3020 }
3021}
3022
3023static Fault
3025 ThreadContext *tc, const MiscRegOp64 &inst)
3026{
3027 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
3028 const bool el2_host = EL2Enabled(tc) && hcr.e2h;
3029 if (el2_host) {
3030 return NoFault;
3031 } else {
3032 return inst.undefined();
3033 }
3034}
3035
3038{
3039 switch (FullSystem ? sys->highestEL() : EL1) {
3040 case EL0:
3041 case EL1: priv(); break;
3042 case EL2: hyp(); break;
3043 case EL3: mon(); break;
3044 }
3045 return *this;
3046}
3047
3048static CPSR
3050{
3051 CPSR cpsr = 0;
3052 if (!FullSystem) {
3053 cpsr.mode = MODE_USER;
3054 } else {
3055 switch (system->highestEL()) {
3056 // Set initial EL to highest implemented EL using associated stack
3057 // pointer (SP_ELx); set RVBAR_ELx to implementation defined reset
3058 // value
3059 case EL3:
3060 cpsr.mode = MODE_EL3H;
3061 break;
3062 case EL2:
3063 cpsr.mode = MODE_EL2H;
3064 break;
3065 case EL1:
3066 cpsr.mode = MODE_EL1H;
3067 break;
3068 default:
3069 panic("Invalid highest implemented exception level");
3070 break;
3071 }
3072
3073 // Initialize rest of CPSR
3074 cpsr.daif = 0xf; // Mask all interrupts
3075 cpsr.ss = 0;
3076 cpsr.il = 0;
3077 }
3078 return cpsr;
3079}
3080
3081void
3083{
3084 // the MiscReg metadata tables are shared across all instances of the
3085 // ISA object, so there's no need to initialize them multiple times.
3086 static bool completed = false;
3087 if (completed)
3088 return;
3089
3090 // This boolean variable specifies if the system is running in aarch32 at
3091 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
3092 // is running in aarch64 (aarch32EL3 = false)
3093 bool aarch32EL3 = release->has(ArmExtension::SECURITY) && !highestELIs64;
3094
3095 // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+),
3096 // unsupported
3097 bool SPAN = false;
3098
3099 // Implicit error synchronization event enable (Arm 8.2+), unsupported
3100 bool IESB = false;
3101
3102 // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+),
3103 // unsupported
3104 bool LSMAOE = false;
3105
3106 // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported
3107 bool nTLSMD = false;
3108
3109 // Pointer authentication (Arm 8.3+), unsupported
3110 bool EnDA = true; // using APDAKey_EL1 key of instr addrs in ELs 0,1
3111 bool EnDB = true; // using APDBKey_EL1 key of instr addrs in ELs 0,1
3112 bool EnIA = true; // using APIAKey_EL1 key of instr addrs in ELs 0,1
3113 bool EnIB = true; // using APIBKey_EL1 key of instr addrs in ELs 0,1
3114
3115 const bool vhe_implemented = release->has(ArmExtension::FEAT_VHE);
3116 const bool sel2_implemented = release->has(ArmExtension::FEAT_SEL2);
3117
3118 const Params &p(params());
3119
3120 uint32_t midr;
3121 if (p.midr != 0x0)
3122 midr = p.midr;
3123 else if (highestELIs64)
3124 // Cortex-A57 TRM r0p0 MIDR
3125 midr = 0x410fd070;
3126 else
3127 // Cortex-A15 TRM r0p0 MIDR
3128 midr = 0x410fc0f0;
3129
3142
3145 .allPrivileges();
3147 .allPrivileges();
3149 .allPrivileges();
3151 .allPrivileges();
3153 .allPrivileges();
3155 .allPrivileges();
3157 .allPrivileges();
3159 .allPrivileges();
3161 .allPrivileges();
3163 .allPrivileges();
3165 .reset(p.fpsid)
3166 .allPrivileges();
3168 .res0(mask(14, 13) | mask(6, 5))
3169 .allPrivileges();
3171 .reset([] () {
3172 MVFR1 mvfr1 = 0;
3173 mvfr1.flushToZero = 1;
3174 mvfr1.defaultNaN = 1;
3175 mvfr1.advSimdLoadStore = 1;
3176 mvfr1.advSimdInteger = 1;
3177 mvfr1.advSimdSinglePrecision = 1;
3178 mvfr1.advSimdHalfPrecision = 1;
3179 mvfr1.vfpHalfPrecision = 1;
3180 return mvfr1;
3181 }())
3182 .allPrivileges();
3184 .reset([] () {
3185 MVFR0 mvfr0 = 0;
3186 mvfr0.advSimdRegisters = 2;
3187 mvfr0.singlePrecision = 2;
3188 mvfr0.doublePrecision = 2;
3189 mvfr0.vfpExceptionTrapping = 0;
3190 mvfr0.divide = 1;
3191 mvfr0.squareRoot = 1;
3192 mvfr0.shortVectors = 1;
3193 mvfr0.roundingModes = 1;
3194 return mvfr0;
3195 }())
3196 .allPrivileges();
3198 .allPrivileges();
3199
3200 // Helper registers
3202 .allPrivileges();
3204 .allPrivileges();
3206 .allPrivileges();
3208 .allPrivileges();
3210 .allPrivileges();
3212 .allPrivileges();
3214 .mutex()
3215 .banked();
3217 .mutex()
3218 .privSecure(!aarch32EL3)
3219 .bankedChild();
3221 .mutex()
3222 .bankedChild();
3224 .mutex()
3225 .banked();
3227 .mutex()
3228 .privSecure(!aarch32EL3)
3229 .bankedChild();
3231 .mutex()
3232 .bankedChild();
3234 .mutex();
3236 .reset(1) // Start with an event in the mailbox
3237 .allPrivileges();
3240
3241 // AArch32 CP14 registers
3243 .reset(0x6 << 16) // Armv8 Debug architecture
3248 .unimplemented()
3249 .allPrivileges();
3251 .unimplemented()
3252 .allPrivileges();
3254 .unimplemented()
3255 .allPrivileges();
3257 .unimplemented()
3258 .allPrivileges();
3262 .unimplemented()
3263 .allPrivileges();
3265 .allPrivileges();
3267 .unimplemented()
3268 .allPrivileges();
3270 .unimplemented()
3271 .allPrivileges();
3401 .unimplemented()
3442 .unimplemented()
3443 .warnNotFail()
3444 .allPrivileges();
3446 .unimplemented()
3447 .allPrivileges();
3449 .unimplemented()
3452 .unimplemented()
3453 .allPrivileges();
3455 .unimplemented()
3456 .allPrivileges();
3458 .unimplemented()
3461 .unimplemented()
3464 .unimplemented()
3469 .unimplemented()
3470 .allPrivileges();
3472 .raz() // Jazelle trivial implementation, RAZ/WI
3473 .allPrivileges();
3475 .allPrivileges();
3477 .raz() // Jazelle trivial implementation, RAZ/WI
3478 .allPrivileges();
3480 .raz() // Jazelle trivial implementation, RAZ/WI
3481 .allPrivileges();
3482
3483 // AArch32 CP15 registers
3485 .reset(midr)
3488 .reset([system=p.system](){
3489 //all caches have the same line size in gem5
3490 //4 byte words in ARM
3491 unsigned line_size_words =
3492 system->cacheLineSize() / 4;
3493 unsigned log2_line_size_words = 0;
3494
3495 while (line_size_words >>= 1) {
3496 ++log2_line_size_words;
3497 }
3498
3499 CTR ctr = 0;
3500 //log2 of minimun i-cache line size (words)
3501 ctr.iCacheLineSize = log2_line_size_words;
3502 //b11 - gem5 uses pipt
3503 ctr.l1IndexPolicy = 0x3;
3504 //log2 of minimum d-cache line size (words)
3505 ctr.dCacheLineSize = log2_line_size_words;
3506 //log2 of max reservation size (words)
3507 ctr.erg = log2_line_size_words;
3508 //log2 of max writeback size (words)
3509 ctr.cwg = log2_line_size_words;
3510 //b100 - gem5 format is ARMv7
3511 ctr.format = 0x4;
3512
3513 return ctr;
3514 }())
3515 .unserialize(0)
3517 InitReg(MISCREG_TCMTR)
3518 .raz() // No TCM's
3520 InitReg(MISCREG_TLBTR)
3521 .reset(1) // Separate Instruction and Data TLBs
3523 InitReg(MISCREG_MPIDR)
3524 .reset(0x80000000)
3526 InitReg(MISCREG_REVIDR)
3527 .unimplemented()
3528 .warnNotFail()
3530 InitReg(MISCREG_ID_PFR0)
3531 .reset(0x00000031) // !ThumbEE | !Jazelle | Thumb | ARM
3533 InitReg(MISCREG_ID_PFR1)
3534 .reset([release=release,system=system](){
3535 // Timer | Virti | !M Profile | TrustZone | ARMv4
3536 bool have_timer = (system && system->getGenericTimer() != nullptr);
3537 return 0x00000001 |
3538 (release->has(ArmExtension::SECURITY) ?
3539 0x00000010 : 0x0) |
3540 (release->has(ArmExtension::VIRTUALIZATION) ?
3541 0x00001000 : 0x0) |
3542 (have_timer ? 0x00010000 : 0x0);
3543 }())
3544 .unserialize(0)
3546 InitReg(MISCREG_ID_DFR0)
3547 .reset(p.pmu ? 0x03000000 : 0)
3549 InitReg(MISCREG_ID_AFR0)
3551 InitReg(MISCREG_ID_MMFR0)
3552 .reset([p,release=release](){
3553 RegVal mmfr0 = p.id_mmfr0;
3554 if (release->has(ArmExtension::LPAE))
3555 mmfr0 = (mmfr0 & ~0xf) | 0x5;
3556 return mmfr0;
3557 }())
3558 .allPrivileges().exceptUserMode().writes(0);
3559 InitReg(MISCREG_ID_MMFR1)
3560 .reset(p.id_mmfr1)
3562 InitReg(MISCREG_ID_MMFR2)
3563 .reset(p.id_mmfr2)
3565 InitReg(MISCREG_ID_MMFR3)
3566 .reset(p.id_mmfr3)
3568 InitReg(MISCREG_ID_MMFR4)
3569 .reset(p.id_mmfr4)
3571 InitReg(MISCREG_ID_ISAR0)
3572 .reset(p.id_isar0)
3574 InitReg(MISCREG_ID_ISAR1)
3575 .reset(p.id_isar1)
3577 InitReg(MISCREG_ID_ISAR2)
3578 .reset(p.id_isar2)
3580 InitReg(MISCREG_ID_ISAR3)
3581 .reset(p.id_isar3)
3583 InitReg(MISCREG_ID_ISAR4)
3584 .reset(p.id_isar4)
3586 InitReg(MISCREG_ID_ISAR5)
3587 .reset([p,release=release] () {
3588 ISAR5 isar5 = p.id_isar5;
3589 isar5.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
3590 isar5.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
3591 isar5.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
3592 isar5.aes = release->has(ArmExtension::FEAT_PMULL) ?
3593 0x2 : release->has(ArmExtension::FEAT_AES) ?
3594 0x1 : 0x0;
3595 isar5.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
3596 isar5.vcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
3597 return isar5;
3598 }())
3599 .allPrivileges().exceptUserMode().writes(0);
3600 InitReg(MISCREG_ID_ISAR6)
3601 .reset([p,release=release] () {
3602 ISAR6 isar6 = p.id_isar6;
3603 isar6.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
3604 isar6.fhm = release->has(ArmExtension::FEAT_FP16) ? 0x1 :
3605 (release->has(ArmExtension::FEAT_FHM) ? 0x1 : 0x0);
3606 isar6.bf16 = release->has(ArmExtension::FEAT_AA32BF16) ? 0x1 : 0x0;
3607 return isar6;
3608 }())
3609 .allPrivileges().exceptUserMode().writes(0);
3610 InitReg(MISCREG_CCSIDR)
3612 InitReg(MISCREG_CLIDR)
3614 InitReg(MISCREG_AIDR)
3615 .raz() // AUX ID set to 0
3617 InitReg(MISCREG_CSSELR)
3618 .banked();
3619 InitReg(MISCREG_CSSELR_NS)
3620 .bankedChild()
3621 .privSecure(!aarch32EL3)
3623 InitReg(MISCREG_CSSELR_S)
3624 .bankedChild()
3626 InitReg(MISCREG_VPIDR)
3627 .reset(midr)
3628 .hyp().monNonSecure();
3629 InitReg(MISCREG_VMPIDR)
3630 .res1(mask(31, 31))
3631 .hyp().monNonSecure();
3632 InitReg(MISCREG_SCTLR)
3633 .banked()
3634 // readMiscRegNoEffect() uses this metadata
3635 // despite using children (below) as backing store
3636 .res0(0x8d22c600)
3637 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3638 | (LSMAOE ? 0 : 0x10)
3639 | (nTLSMD ? 0 : 0x8));
3640
3641 auto sctlr_reset = [aarch64=highestELIs64] ()
3642 {
3643 SCTLR sctlr = 0;
3644 if (aarch64) {
3645 sctlr.afe = 1;
3646 sctlr.tre = 1;
3647 sctlr.span = 1;
3648 sctlr.uwxn = 1;
3649 sctlr.ntwe = 1;
3650 sctlr.ntwi = 1;
3651 sctlr.cp15ben = 1;
3652 sctlr.sa0 = 1;
3653 } else {
3654 sctlr.u = 1;
3655 sctlr.xp = 1;
3656 sctlr.uci = 1;
3657 sctlr.dze = 1;
3658 sctlr.rao2 = 1;
3659 sctlr.rao3 = 1;
3660 sctlr.rao4 = 0xf;
3661 }
3662 return sctlr;
3663 }();
3664 InitReg(MISCREG_SCTLR_NS)
3665 .reset(sctlr_reset)
3666 .bankedChild()
3667 .privSecure(!aarch32EL3)
3669 InitReg(MISCREG_SCTLR_S)
3670 .reset(sctlr_reset)
3671 .bankedChild()
3673 InitReg(MISCREG_ACTLR)
3674 .banked();
3675 InitReg(MISCREG_ACTLR_NS)
3676 .bankedChild()
3677 .privSecure(!aarch32EL3)
3679 InitReg(MISCREG_ACTLR_S)
3680 .bankedChild()
3682 InitReg(MISCREG_CPACR)
3684 InitReg(MISCREG_SDCR)
3685 .mon();
3686 InitReg(MISCREG_SCR)
3687 .reset(release->has(ArmExtension::SECURITY) ? 0 : 1)
3689 .res0(0xff40) // [31:16], [6]
3690 .res1(0x0030); // [5:4]
3691 InitReg(MISCREG_SDER)
3692 .mon();
3693 InitReg(MISCREG_NSACR)
3695 InitReg(MISCREG_HSCTLR)
3696 .reset(0x30c50830)
3697 .hyp().monNonSecure()
3698 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3699 | (IESB ? 0 : 0x200000)
3700 | (EnDA ? 0 : 0x8000000)
3701 | (EnIB ? 0 : 0x40000000)
3702 | (EnIA ? 0 : 0x80000000))
3703 .res1(0x30c50830);
3704 InitReg(MISCREG_HACTLR)
3705 .hyp().monNonSecure();
3706 InitReg(MISCREG_HCR)
3707 .hyp().monNonSecure()
3708 .res0(release->has(ArmExtension::VIRTUALIZATION) ?
3709 0x90000000 : mask(31, 0));
3710 InitReg(MISCREG_HCR2)
3711 .hyp().monNonSecure()
3712 .res0(release->has(ArmExtension::VIRTUALIZATION) ?
3713 0xffa9ff8c : mask(31, 0));
3714 InitReg(MISCREG_HDCR)
3715 .hyp().monNonSecure();
3716 InitReg(MISCREG_HCPTR)
3717 .res0(mask(29, 21) | mask(19, 16) | mask(14, 14))
3718 .res1(mask(13, 12) | mask(9, 0))
3719 .hyp().monNonSecure();
3720 InitReg(MISCREG_HSTR)
3721 .hyp().monNonSecure();
3722 InitReg(MISCREG_HACR)
3723 .unimplemented()
3724 .warnNotFail()
3725 .hyp().monNonSecure();
3726 InitReg(MISCREG_TTBR0)
3727 .banked();
3728 InitReg(MISCREG_TTBR0_NS)
3729 .bankedChild()
3730 .privSecure(!aarch32EL3)
3732 InitReg(MISCREG_TTBR0_S)
3733 .bankedChild()
3735 InitReg(MISCREG_TTBR1)
3736 .banked();
3737 InitReg(MISCREG_TTBR1_NS)
3738 .bankedChild()
3739 .privSecure(!aarch32EL3)
3741 InitReg(MISCREG_TTBR1_S)
3742 .bankedChild()
3744 InitReg(MISCREG_TTBCR)
3745 .banked();
3746 InitReg(MISCREG_TTBCR_NS)
3747 .bankedChild()
3748 .privSecure(!aarch32EL3)
3750 InitReg(MISCREG_TTBCR_S)
3751 .bankedChild()
3753 InitReg(MISCREG_HTCR)
3754 .hyp().monNonSecure();
3755 InitReg(MISCREG_VTCR)
3756 .hyp().monNonSecure();
3757 InitReg(MISCREG_DACR)
3758 .banked();
3759 InitReg(MISCREG_DACR_NS)
3760 .bankedChild()
3761 .privSecure(!aarch32EL3)
3763 InitReg(MISCREG_DACR_S)
3764 .bankedChild()
3766 InitReg(MISCREG_DFSR)
3767 .banked()
3768 .res0(mask(31, 14) | mask(8, 8));
3769 InitReg(MISCREG_DFSR_NS)
3770 .bankedChild()
3771 .privSecure(!aarch32EL3)
3773 InitReg(MISCREG_DFSR_S)
3774 .bankedChild()
3776 InitReg(MISCREG_IFSR)
3777 .banked()
3778 .res0(mask(31, 13) | mask(11, 11) | mask(8, 6));
3779 InitReg(MISCREG_IFSR_NS)
3780 .bankedChild()
3781 .privSecure(!aarch32EL3)
3783 InitReg(MISCREG_IFSR_S)
3784 .bankedChild()
3786 InitReg(MISCREG_ADFSR)
3787 .unimplemented()
3788 .warnNotFail()
3789 .banked();
3790 InitReg(MISCREG_ADFSR_NS)
3791 .unimplemented()
3792 .warnNotFail()
3793 .bankedChild()
3794 .privSecure(!aarch32EL3)
3796 InitReg(MISCREG_ADFSR_S)
3797 .unimplemented()
3798 .warnNotFail()
3799 .bankedChild()
3801 InitReg(MISCREG_AIFSR)
3802 .unimplemented()
3803 .warnNotFail()
3804 .banked();
3805 InitReg(MISCREG_AIFSR_NS)
3806 .unimplemented()
3807 .warnNotFail()
3808 .bankedChild()
3809 .privSecure(!aarch32EL3)
3811 InitReg(MISCREG_AIFSR_S)
3812 .unimplemented()
3813 .warnNotFail()
3814 .bankedChild()
3816 InitReg(MISCREG_HADFSR)
3817 .hyp().monNonSecure();
3818 InitReg(MISCREG_HAIFSR)
3819 .hyp().monNonSecure();
3820 InitReg(MISCREG_HSR)
3821 .hyp().monNonSecure();
3822 InitReg(MISCREG_DFAR)
3823 .banked();
3824 InitReg(MISCREG_DFAR_NS)
3825 .bankedChild()
3826 .privSecure(!aarch32EL3)
3828 InitReg(MISCREG_DFAR_S)
3829 .bankedChild()
3831 InitReg(MISCREG_IFAR)
3832 .banked();
3833 InitReg(MISCREG_IFAR_NS)
3834 .bankedChild()
3835 .privSecure(!aarch32EL3)
3837 InitReg(MISCREG_IFAR_S)
3838 .bankedChild()
3840 InitReg(MISCREG_HDFAR)
3841 .hyp().monNonSecure();
3842 InitReg(MISCREG_HIFAR)
3843 .hyp().monNonSecure();
3844 InitReg(MISCREG_HPFAR)
3845 .hyp().monNonSecure();
3846 InitReg(MISCREG_ICIALLUIS)
3847 .unimplemented()
3848 .warnNotFail()
3849 .writes(1).exceptUserMode();
3850 InitReg(MISCREG_BPIALLIS)
3851 .unimplemented()
3852 .warnNotFail()
3853 .writes(1).exceptUserMode();
3854 InitReg(MISCREG_PAR)
3855 .banked();
3856 InitReg(MISCREG_PAR_NS)
3857 .bankedChild()
3858 .privSecure(!aarch32EL3)
3860 InitReg(MISCREG_PAR_S)
3861 .bankedChild()
3863 InitReg(MISCREG_ICIALLU)
3864 .writes(1).exceptUserMode();
3865 InitReg(MISCREG_ICIMVAU)
3866 .unimplemented()
3867 .warnNotFail()
3868 .writes(1).exceptUserMode();
3869 InitReg(MISCREG_CP15ISB)
3870 .writes(1);
3871 InitReg(MISCREG_BPIALL)
3872 .unimplemented()
3873 .warnNotFail()
3874 .writes(1).exceptUserMode();
3875 InitReg(MISCREG_BPIMVA)
3876 .unimplemented()
3877 .warnNotFail()
3878 .writes(1).exceptUserMode();
3879 InitReg(MISCREG_DCIMVAC)
3880 .unimplemented()
3881 .warnNotFail()
3882 .writes(1).exceptUserMode();
3883 InitReg(MISCREG_DCISW)
3884 .unimplemented()
3885 .warnNotFail()
3886 .writes(1).exceptUserMode();
3887 InitReg(MISCREG_ATS1CPR)
3888 .writes(1).exceptUserMode();
3889 InitReg(MISCREG_ATS1CPW)
3890 .writes(1).exceptUserMode();
3891 InitReg(MISCREG_ATS1CUR)
3892 .writes(1).exceptUserMode();
3893 InitReg(MISCREG_ATS1CUW)
3894 .writes(1).exceptUserMode();
3895 InitReg(MISCREG_ATS12NSOPR)
3897 InitReg(MISCREG_ATS12NSOPW)
3899 InitReg(MISCREG_ATS12NSOUR)
3901 InitReg(MISCREG_ATS12NSOUW)
3903 InitReg(MISCREG_DCCMVAC)
3904 .writes(1).exceptUserMode();
3905 InitReg(MISCREG_DCCSW)
3906 .unimplemented()
3907 .warnNotFail()
3908 .writes(1).exceptUserMode();
3909 InitReg(MISCREG_CP15DSB)
3910 .writes(1);
3911 InitReg(MISCREG_CP15DMB)
3912 .writes(1);
3913 InitReg(MISCREG_DCCMVAU)
3914 .unimplemented()
3915 .warnNotFail()
3916 .writes(1).exceptUserMode();
3917 InitReg(MISCREG_DCCIMVAC)
3918 .unimplemented()
3919 .warnNotFail()
3920 .writes(1).exceptUserMode();
3921 InitReg(MISCREG_DCCISW)
3922 .unimplemented()
3923 .warnNotFail()
3924 .writes(1).exceptUserMode();
3925 InitReg(MISCREG_ATS1HR)
3927 InitReg(MISCREG_ATS1HW)
3929 InitReg(MISCREG_TLBIALLIS)
3930 .writes(1).exceptUserMode();
3931 InitReg(MISCREG_TLBIMVAIS)
3932 .writes(1).exceptUserMode();
3933 InitReg(MISCREG_TLBIASIDIS)
3934 .writes(1).exceptUserMode();
3935 InitReg(MISCREG_TLBIMVAAIS)
3936 .writes(1).exceptUserMode();
3937 InitReg(MISCREG_TLBIMVALIS)
3938 .writes(1).exceptUserMode();
3939 InitReg(MISCREG_TLBIMVAALIS)
3940 .writes(1).exceptUserMode();
3941 InitReg(MISCREG_ITLBIALL)
3942 .writes(1).exceptUserMode();
3943 InitReg(MISCREG_ITLBIMVA)
3944 .writes(1).exceptUserMode();
3945 InitReg(MISCREG_ITLBIASID)
3946 .writes(1).exceptUserMode();
3947 InitReg(MISCREG_DTLBIALL)
3948 .writes(1).exceptUserMode();
3949 InitReg(MISCREG_DTLBIMVA)
3950 .writes(1).exceptUserMode();
3951 InitReg(MISCREG_DTLBIASID)
3952 .writes(1).exceptUserMode();
3953 InitReg(MISCREG_TLBIALL)
3954 .writes(1).exceptUserMode();
3955 InitReg(MISCREG_TLBIMVA)
3956 .writes(1).exceptUserMode();
3957 InitReg(MISCREG_TLBIASID)
3958 .writes(1).exceptUserMode();
3959 InitReg(MISCREG_TLBIMVAA)
3960 .writes(1).exceptUserMode();
3961 InitReg(MISCREG_TLBIMVAL)
3962 .writes(1).exceptUserMode();
3963 InitReg(MISCREG_TLBIMVAAL)
3964 .writes(1).exceptUserMode();
3965 InitReg(MISCREG_TLBIIPAS2IS)
3967 InitReg(MISCREG_TLBIIPAS2LIS)
3969 InitReg(MISCREG_TLBIALLHIS)
3971 InitReg(MISCREG_TLBIMVAHIS)
3973 InitReg(MISCREG_TLBIALLNSNHIS)
3975 InitReg(MISCREG_TLBIMVALHIS)
3977 InitReg(MISCREG_TLBIIPAS2)
3979 InitReg(MISCREG_TLBIIPAS2L)
3981 InitReg(MISCREG_TLBIALLH)
3983 InitReg(MISCREG_TLBIMVAH)
3985 InitReg(MISCREG_TLBIALLNSNH)
3987 InitReg(MISCREG_TLBIMVALH)
3989 InitReg(MISCREG_PMCR)
3990 .allPrivileges();
3991 InitReg(MISCREG_PMCNTENSET)
3992 .allPrivileges();
3993 InitReg(MISCREG_PMCNTENCLR)
3994 .allPrivileges();
3995 InitReg(MISCREG_PMOVSR)
3996 .allPrivileges();
3997 InitReg(MISCREG_PMSWINC)
3998 .allPrivileges();
3999 InitReg(MISCREG_PMSELR)
4000 .allPrivileges();
4001 InitReg(MISCREG_PMCEID0)
4002 .allPrivileges();
4003 InitReg(MISCREG_PMCEID1)
4004 .allPrivileges();
4005 InitReg(MISCREG_PMCCNTR)
4006 .allPrivileges();
4007 InitReg(MISCREG_PMXEVTYPER)
4008 .allPrivileges();
4009 InitReg(MISCREG_PMEVCNTR0)
4010 .allPrivileges();
4011 InitReg(MISCREG_PMEVCNTR1)
4012 .allPrivileges();
4013 InitReg(MISCREG_PMEVCNTR2)
4014 .allPrivileges();
4015 InitReg(MISCREG_PMEVCNTR3)
4016 .allPrivileges();
4017 InitReg(MISCREG_PMEVCNTR4)
4018 .allPrivileges();
4019 InitReg(MISCREG_PMEVCNTR5)
4020 .allPrivileges();
4021 InitReg(MISCREG_PMEVTYPER0)
4022 .allPrivileges();
4023 InitReg(MISCREG_PMEVTYPER1)
4024 .allPrivileges();
4025 InitReg(MISCREG_PMEVTYPER2)
4026 .allPrivileges();
4027 InitReg(MISCREG_PMEVTYPER3)
4028 .allPrivileges();
4029 InitReg(MISCREG_PMEVTYPER4)
4030 .allPrivileges();
4031 InitReg(MISCREG_PMEVTYPER5)
4032 .allPrivileges();
4033 InitReg(MISCREG_PMCCFILTR)
4034 .allPrivileges();
4035 InitReg(MISCREG_PMXEVCNTR)
4036 .allPrivileges();
4037 InitReg(MISCREG_PMUSERENR)
4039 InitReg(MISCREG_PMINTENSET)
4041 InitReg(MISCREG_PMINTENCLR)
4043 InitReg(MISCREG_PMOVSSET)
4044 .unimplemented()
4045 .allPrivileges();
4046 InitReg(MISCREG_L2CTLR)
4048 InitReg(MISCREG_L2ECTLR)
4049 .unimplemented()
4051 InitReg(MISCREG_PRRR)
4052 .banked();
4053 InitReg(MISCREG_PRRR_NS)
4054 .bankedChild()
4055 .reset(
4056 (1 << 19) | // 19
4057 (0 << 18) | // 18
4058 (0 << 17) | // 17
4059 (1 << 16) | // 16
4060 (2 << 14) | // 15:14
4061 (0 << 12) | // 13:12
4062 (2 << 10) | // 11:10
4063 (2 << 8) | // 9:8
4064 (2 << 6) | // 7:6
4065 (2 << 4) | // 5:4
4066 (1 << 2) | // 3:2
4067 0)
4068 .privSecure(!aarch32EL3)
4070 InitReg(MISCREG_PRRR_S)
4071 .bankedChild()
4073 InitReg(MISCREG_MAIR0)
4074 .banked();
4075 InitReg(MISCREG_MAIR0_NS)
4076 .bankedChild()
4077 .privSecure(!aarch32EL3)
4079 InitReg(MISCREG_MAIR0_S)
4080 .bankedChild()
4082 InitReg(MISCREG_NMRR)
4083 .banked();
4084 InitReg(MISCREG_NMRR_NS)
4085 .bankedChild()
4086 .reset(
4087 (1 << 30) | // 31:30
4088 (0 << 26) | // 27:26
4089 (0 << 24) | // 25:24
4090 (3 << 22) | // 23:22
4091 (2 << 20) | // 21:20
4092 (0 << 18) | // 19:18
4093 (0 << 16) | // 17:16
4094 (1 << 14) | // 15:14
4095 (0 << 12) | // 13:12
4096 (2 << 10) | // 11:10
4097 (0 << 8) | // 9:8
4098 (3 << 6) | // 7:6
4099 (2 << 4) | // 5:4
4100 (0 << 2) | // 3:2
4101 0)
4102 .privSecure(!aarch32EL3)
4104 InitReg(MISCREG_NMRR_S)
4105 .bankedChild()
4107 InitReg(MISCREG_MAIR1)
4108 .banked();
4109 InitReg(MISCREG_MAIR1_NS)
4110 .bankedChild()
4111 .privSecure(!aarch32EL3)
4113 InitReg(MISCREG_MAIR1_S)
4114 .bankedChild()
4116 InitReg(MISCREG_AMAIR0)
4117 .res0(release->has(ArmExtension::LPAE) ? 0 : mask(31, 0))
4118 .banked();
4119 InitReg(MISCREG_AMAIR0_NS)
4120 .bankedChild()
4121 .privSecure(!aarch32EL3)
4123 InitReg(MISCREG_AMAIR0_S)
4124 .bankedChild()
4126 InitReg(MISCREG_AMAIR1)
4127 .res0(release->has(ArmExtension::LPAE) ? 0 : mask(31, 0))
4128 .banked();
4129 InitReg(MISCREG_AMAIR1_NS)
4130 .bankedChild()
4131 .privSecure(!aarch32EL3)
4133 InitReg(MISCREG_AMAIR1_S)
4134 .bankedChild()
4136 InitReg(MISCREG_HMAIR0)
4137 .hyp().monNonSecure();
4138 InitReg(MISCREG_HMAIR1)
4139 .hyp().monNonSecure();
4140 InitReg(MISCREG_HAMAIR0)
4141 .unimplemented()
4142 .warnNotFail()
4143 .hyp().monNonSecure();
4144 InitReg(MISCREG_HAMAIR1)
4145 .unimplemented()
4146 .warnNotFail()
4147 .hyp().monNonSecure();
4148 InitReg(MISCREG_VBAR)
4149 .banked();
4150 InitReg(MISCREG_VBAR_NS)
4151 .bankedChild()
4152 .privSecure(!aarch32EL3)
4154 InitReg(MISCREG_VBAR_S)
4155 .bankedChild()
4157 InitReg(MISCREG_MVBAR)
4158 .reset(FullSystem ? system->resetAddr() : 0)
4159 .mon().secure()
4160 .hypRead(FullSystem && system->highestEL() == EL2)
4161 .privRead(FullSystem && system->highestEL() == EL1)
4162 .exceptUserMode();
4163 InitReg(MISCREG_RMR)
4164 .unimplemented()
4165 .mon().secure().exceptUserMode();
4166 InitReg(MISCREG_ISR)
4168 InitReg(MISCREG_HVBAR)
4169 .hyp().monNonSecure()
4170 .res0(0x1f);
4171 InitReg(MISCREG_FCSEIDR)
4172 .unimplemented()
4173 .warnNotFail()
4175 InitReg(MISCREG_CONTEXTIDR)
4176 .banked();
4177 InitReg(MISCREG_CONTEXTIDR_NS)
4178 .bankedChild()
4179 .privSecure(!aarch32EL3)
4181 InitReg(MISCREG_CONTEXTIDR_S)
4182 .bankedChild()
4184 InitReg(MISCREG_TPIDRURW)
4185 .banked();
4186 InitReg(MISCREG_TPIDRURW_NS)
4187 .bankedChild()
4188 .allPrivileges()
4189 .privSecure(!aarch32EL3)
4190 .monSecure(0);
4191 InitReg(MISCREG_TPIDRURW_S)
4192 .bankedChild()
4193 .secure();
4194 InitReg(MISCREG_TPIDRURO)
4195 .banked();
4196 InitReg(MISCREG_TPIDRURO_NS)
4197 .bankedChild()
4198 .allPrivileges()
4200 .privSecure(!aarch32EL3)
4201 .monSecure(0);
4202 InitReg(MISCREG_TPIDRURO_S)
4203 .bankedChild()
4204 .secure().userSecureWrite(0);
4205 InitReg(MISCREG_TPIDRPRW)
4206 .banked();
4207 InitReg(MISCREG_TPIDRPRW_NS)
4208 .bankedChild()
4210 .privSecure(!aarch32EL3);
4211 InitReg(MISCREG_TPIDRPRW_S)
4212 .bankedChild()
4214 InitReg(MISCREG_HTPIDR)
4215 .hyp().monNonSecure();
4216 // BEGIN Generic Timer (AArch32)
4217 InitReg(MISCREG_CNTFRQ)
4218 .reads(1)
4219 .highest(system)
4220 .privSecureWrite(aarch32EL3);
4221 InitReg(MISCREG_CNTPCT)
4222 .unverifiable()
4223 .reads(1);
4224 InitReg(MISCREG_CNTVCT)
4225 .unverifiable()
4226 .reads(1);
4227 InitReg(MISCREG_CNTP_CTL)
4228 .banked();
4229 InitReg(MISCREG_CNTP_CTL_NS)
4230 .bankedChild()
4231 .nonSecure()
4232 .privSecure(!aarch32EL3)
4233 .userSecureRead(!aarch32EL3)
4234 .userSecureWrite(!aarch32EL3)
4235 .res0(0xfffffff8);
4236 InitReg(MISCREG_CNTP_CTL_S)
4237 .bankedChild()
4238 .secure()
4239 .privSecure(aarch32EL3)
4240 .res0(0xfffffff8);
4241 InitReg(MISCREG_CNTP_CVAL)
4242 .banked();
4243 InitReg(MISCREG_CNTP_CVAL_NS)
4244 .bankedChild()
4245 .nonSecure()
4246 .privSecure(!aarch32EL3)
4247 .userSecureRead(!aarch32EL3)
4248 .userSecureWrite(!aarch32EL3);
4249 InitReg(MISCREG_CNTP_CVAL_S)
4250 .bankedChild()
4251 .secure()
4252 .privSecure(aarch32EL3);
4253 InitReg(MISCREG_CNTP_TVAL)
4254 .banked();
4255 InitReg(MISCREG_CNTP_TVAL_NS)
4256 .bankedChild()
4257 .nonSecure()
4258 .privSecure(!aarch32EL3)
4259 .userSecureRead(!aarch32EL3)
4260 .userSecureWrite(!aarch32EL3);
4261 InitReg(MISCREG_CNTP_TVAL_S)
4262 .bankedChild()
4263 .secure()
4264 .privSecure(aarch32EL3);
4265 InitReg(MISCREG_CNTV_CTL)
4266 .allPrivileges()
4267 .res0(0xfffffff8);
4268 InitReg(MISCREG_CNTV_CVAL)
4269 .allPrivileges();
4270 InitReg(MISCREG_CNTV_TVAL)
4271 .allPrivileges();
4272 InitReg(MISCREG_CNTKCTL)
4273 .allPrivileges()
4275 .res0(0xfffdfc00);
4276 InitReg(MISCREG_CNTHCTL)
4277 .monNonSecure()
4278 .hyp()
4279 .res0(0xfffdff00);
4280 InitReg(MISCREG_CNTHP_CTL)
4281 .monNonSecure()
4282 .hyp()
4283 .res0(0xfffffff8);
4284 InitReg(MISCREG_CNTHP_CVAL)
4285 .monNonSecure()
4286 .hyp();
4287 InitReg(MISCREG_CNTHP_TVAL)
4288 .monNonSecure()
4289 .hyp();
4290 InitReg(MISCREG_CNTVOFF)
4291 .monNonSecure()
4292 .hyp();
4293 // END Generic Timer (AArch32)
4294 InitReg(MISCREG_IL1DATA0)
4295 .unimplemented()
4297 InitReg(MISCREG_IL1DATA1)
4298 .unimplemented()
4300 InitReg(MISCREG_IL1DATA2)
4301 .unimplemented()
4303 InitReg(MISCREG_IL1DATA3)
4304 .unimplemented()
4306 InitReg(MISCREG_DL1DATA0)
4307 .unimplemented()
4309 InitReg(MISCREG_DL1DATA1)
4310 .unimplemented()
4312 InitReg(MISCREG_DL1DATA2)
4313 .unimplemented()
4315 InitReg(MISCREG_DL1DATA3)
4316 .unimplemented()
4318 InitReg(MISCREG_DL1DATA4)
4319 .unimplemented()
4321 InitReg(MISCREG_RAMINDEX)
4322 .unimplemented()
4323 .writes(1).exceptUserMode();
4324 InitReg(MISCREG_L2ACTLR)
4325 .unimplemented()
4327 InitReg(MISCREG_CBAR)
4328 .unimplemented()
4330 InitReg(MISCREG_HTTBR)
4331 .hyp().monNonSecure();
4332 InitReg(MISCREG_VTTBR)
4333 .hyp().monNonSecure();
4334 InitReg(MISCREG_CPUMERRSR)
4335 .unimplemented()
4337 InitReg(MISCREG_L2MERRSR)
4338 .unimplemented()
4339 .warnNotFail()
4341
4342 // AArch64 registers (Op0=2);
4343 InitReg(MISCREG_MDCCINT_EL1)
4344 .fault(EL1, faultMdccsrEL1)
4345 .fault(EL2, faultMdccsrEL2)
4347 InitReg(MISCREG_OSDTRRX_EL1)
4350 InitReg(MISCREG_MDSCR_EL1)
4352 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::mdscrEL1>)
4353 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::mdscrEL1>)
4354 .fault(EL2, faultDebugEL2)
4356 InitReg(MISCREG_OSDTRTX_EL1)
4359 InitReg(MISCREG_OSECCR_EL1)
4361 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::oseccrEL1>)
4362 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::oseccrEL1>)
4363 .fault(EL2, faultDebugEL2)
4365 InitReg(MISCREG_DBGBVR0_EL1)
4367 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4368 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4369 .fault(EL2, faultDebugEL2)
4371 InitReg(MISCREG_DBGBVR1_EL1)
4373 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4374 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4375 .fault(EL2, faultDebugEL2)
4377 InitReg(MISCREG_DBGBVR2_EL1)
4379 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4380 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4381 .fault(EL2, faultDebugEL2)
4383 InitReg(MISCREG_DBGBVR3_EL1)
4385 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4386 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4387 .fault(EL2, faultDebugEL2)
4389 InitReg(MISCREG_DBGBVR4_EL1)
4391 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4392 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4393 .fault(EL2, faultDebugEL2)
4395 InitReg(MISCREG_DBGBVR5_EL1)
4397 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4398 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4399 .fault(EL2, faultDebugEL2)
4401 InitReg(MISCREG_DBGBVR6_EL1)
4403 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4404 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4405 .fault(EL2, faultDebugEL2)
4407 InitReg(MISCREG_DBGBVR7_EL1)
4409 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4410 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4411 .fault(EL2, faultDebugEL2)
4413 InitReg(MISCREG_DBGBVR8_EL1)
4415 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4416 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4417 .fault(EL2, faultDebugEL2)
4419 InitReg(MISCREG_DBGBVR9_EL1)
4421 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4422 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4423 .fault(EL2, faultDebugEL2)
4425 InitReg(MISCREG_DBGBVR10_EL1)
4427 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4428 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4429 .fault(EL2, faultDebugEL2)
4431 InitReg(MISCREG_DBGBVR11_EL1)
4433 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4434 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4435 .fault(EL2, faultDebugEL2)
4437 InitReg(MISCREG_DBGBVR12_EL1)
4439 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4440 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4441 .fault(EL2, faultDebugEL2)
4443 InitReg(MISCREG_DBGBVR13_EL1)
4445 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4446 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4447 .fault(EL2, faultDebugEL2)
4449 InitReg(MISCREG_DBGBVR14_EL1)
4451 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4452 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4453 .fault(EL2, faultDebugEL2)
4455 InitReg(MISCREG_DBGBVR15_EL1)
4457 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4458 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4459 .fault(EL2, faultDebugEL2)
4461 InitReg(MISCREG_DBGBCR0_EL1)
4463 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4464 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4465 .fault(EL2, faultDebugEL2)
4467 InitReg(MISCREG_DBGBCR1_EL1)
4469 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4470 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4471 .fault(EL2, faultDebugEL2)
4473 InitReg(MISCREG_DBGBCR2_EL1)
4475 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4476 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4477 .fault(EL2, faultDebugEL2)
4479 InitReg(MISCREG_DBGBCR3_EL1)
4481 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4482 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4483 .fault(EL2, faultDebugEL2)
4485 InitReg(MISCREG_DBGBCR4_EL1)
4487 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4488 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4489 .fault(EL2, faultDebugEL2)
4491 InitReg(MISCREG_DBGBCR5_EL1)
4493 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4494 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4495 .fault(EL2, faultDebugEL2)
4497 InitReg(MISCREG_DBGBCR6_EL1)
4499 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4500 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4501 .fault(EL2, faultDebugEL2)
4503 InitReg(MISCREG_DBGBCR7_EL1)
4505 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4506 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4507 .fault(EL2, faultDebugEL2)
4509 InitReg(MISCREG_DBGBCR8_EL1)
4511 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4512 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4513 .fault(EL2, faultDebugEL2)
4515 InitReg(MISCREG_DBGBCR9_EL1)
4517 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4518 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4519 .fault(EL2, faultDebugEL2)
4521 InitReg(MISCREG_DBGBCR10_EL1)
4523 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4524 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4525 .fault(EL2, faultDebugEL2)
4527 InitReg(MISCREG_DBGBCR11_EL1)
4529 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4530 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4531 .fault(EL2, faultDebugEL2)
4533 InitReg(MISCREG_DBGBCR12_EL1)
4535 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4536 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4537 .fault(EL2, faultDebugEL2)
4539 InitReg(MISCREG_DBGBCR13_EL1)
4541 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4542 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4543 .fault(EL2, faultDebugEL2)
4545 InitReg(MISCREG_DBGBCR14_EL1)
4547 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4548 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4549 .fault(EL2, faultDebugEL2)
4551 InitReg(MISCREG_DBGBCR15_EL1)
4553 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4554 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4555 .fault(EL2, faultDebugEL2)
4557 InitReg(MISCREG_DBGWVR0_EL1)
4559 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4560 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4561 .fault(EL2, faultDebugEL2)
4563 InitReg(MISCREG_DBGWVR1_EL1)
4565 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4566 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4567 .fault(EL2, faultDebugEL2)
4569 InitReg(MISCREG_DBGWVR2_EL1)
4571 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4572 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4573 .fault(EL2, faultDebugEL2)
4575 InitReg(MISCREG_DBGWVR3_EL1)
4577 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4578 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4579 .fault(EL2, faultDebugEL2)
4581 InitReg(MISCREG_DBGWVR4_EL1)
4583 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4584 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4585 .fault(EL2, faultDebugEL2)
4587 InitReg(MISCREG_DBGWVR5_EL1)
4589 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4590 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4591 .fault(EL2, faultDebugEL2)
4593 InitReg(MISCREG_DBGWVR6_EL1)
4595 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4596 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4597 .fault(EL2, faultDebugEL2)
4599 InitReg(MISCREG_DBGWVR7_EL1)
4601 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4602 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4603 .fault(EL2, faultDebugEL2)
4605 InitReg(MISCREG_DBGWVR8_EL1)
4607 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4608 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4609 .fault(EL2, faultDebugEL2)
4611 InitReg(MISCREG_DBGWVR9_EL1)
4613 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4614 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4615 .fault(EL2, faultDebugEL2)
4617 InitReg(MISCREG_DBGWVR10_EL1)
4619 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4620 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4621 .fault(EL2, faultDebugEL2)
4623 InitReg(MISCREG_DBGWVR11_EL1)
4625 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4626 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4627 .fault(EL2, faultDebugEL2)
4629 InitReg(MISCREG_DBGWVR12_EL1)
4631 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4632 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4633 .fault(EL2, faultDebugEL2)
4635 InitReg(MISCREG_DBGWVR13_EL1)
4637 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4638 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4639 .fault(EL2, faultDebugEL2)
4641 InitReg(MISCREG_DBGWVR14_EL1)
4643 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4644 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4645 .fault(EL2, faultDebugEL2)
4647 InitReg(MISCREG_DBGWVR15_EL1)
4649 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4650 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4651 .fault(EL2, faultDebugEL2)
4653 InitReg(MISCREG_DBGWCR0_EL1)
4655 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4656 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4657 .fault(EL2, faultDebugEL2)
4659 InitReg(MISCREG_DBGWCR1_EL1)
4661 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4662 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4663 .fault(EL2, faultDebugEL2)
4665 InitReg(MISCREG_DBGWCR2_EL1)
4667 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4668 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4669 .fault(EL2, faultDebugEL2)
4671 InitReg(MISCREG_DBGWCR3_EL1)
4673 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4674 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4675 .fault(EL2, faultDebugEL2)
4677 InitReg(MISCREG_DBGWCR4_EL1)
4679 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4680 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4681 .fault(EL2, faultDebugEL2)
4683 InitReg(MISCREG_DBGWCR5_EL1)
4685 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4686 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4687 .fault(EL2, faultDebugEL2)
4689 InitReg(MISCREG_DBGWCR6_EL1)
4691 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4692 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4693 .fault(EL2, faultDebugEL2)
4695 InitReg(MISCREG_DBGWCR7_EL1)
4697 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4698 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4699 .fault(EL2, faultDebugEL2)
4701 InitReg(MISCREG_DBGWCR8_EL1)
4703 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4704 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4705 .fault(EL2, faultDebugEL2)
4707 InitReg(MISCREG_DBGWCR9_EL1)
4709 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4710 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4711 .fault(EL2, faultDebugEL2)
4713 InitReg(MISCREG_DBGWCR10_EL1)
4715 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4716 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4717 .fault(EL2, faultDebugEL2)
4719 InitReg(MISCREG_DBGWCR11_EL1)
4721 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4722 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4723 .fault(EL2, faultDebugEL2)
4725 InitReg(MISCREG_DBGWCR12_EL1)
4727 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4728 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4729 .fault(EL2, faultDebugEL2)
4731 InitReg(MISCREG_DBGWCR13_EL1)
4733 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4734 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4735 .fault(EL2, faultDebugEL2)
4737 InitReg(MISCREG_DBGWCR14_EL1)
4739 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4740 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4741 .fault(EL2, faultDebugEL2)
4743 InitReg(MISCREG_DBGWCR15_EL1)
4745 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4746 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4747 .fault(EL2, faultDebugEL2)
4749 InitReg(MISCREG_MDCCSR_EL0)
4750 .allPrivileges().writes(0)
4751 .faultRead(EL0, faultMdccsrEL0)
4752 .faultRead(EL1, faultMdccsrEL1)
4753 .faultRead(EL2, faultMdccsrEL2)
4755 InitReg(MISCREG_MDDTR_EL0)
4756 .allPrivileges();
4757 InitReg(MISCREG_MDDTRTX_EL0)
4758 .allPrivileges();
4759 InitReg(MISCREG_MDDTRRX_EL0)
4760 .allPrivileges();
4761 InitReg(MISCREG_DBGVCR32_EL2)
4762 .hyp().mon()
4763 .fault(EL2, faultDebugEL2)
4765 InitReg(MISCREG_MDRAR_EL1)
4767 .faultRead(EL1, faultDebugEL1)
4768 .faultRead(EL2, faultDebugEL2)
4770 InitReg(MISCREG_OSLAR_EL1)
4772 .faultWrite(EL1, faultDebugOsEL1<false, &HDFGTR::oslarEL1>)
4773 .faultWrite(EL2, faultDebugOsEL2)
4775 InitReg(MISCREG_OSLSR_EL1)
4777 .faultRead(EL1, faultDebugOsEL1<true, &HDFGTR::oslsrEL1>)
4778 .faultRead(EL2, faultDebugOsEL2)
4780 InitReg(MISCREG_OSDLR_EL1)
4782 .faultRead(EL1, faultDebugOsEL1<true, &HDFGTR::osdlrEL1>)
4783 .faultWrite(EL1, faultDebugOsEL1<false, &HDFGTR::osdlrEL1>)
4784 .fault(EL2, faultDebugOsEL2)
4786 InitReg(MISCREG_DBGPRCR_EL1)
4788 .faultRead(EL1, faultDebugOsEL1<true, &HDFGTR::dbgprcrEL1>)
4789 .faultWrite(EL1, faultDebugOsEL1<false, &HDFGTR::dbgprcrEL1>)
4790 .fault(EL2, faultDebugOsEL2)
4794 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4795 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4796 .fault(EL2, faultDebugEL2)
4800 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4801 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4802 .fault(EL2, faultDebugEL2)
4806 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgauthstatusEL1>)
4807 .faultRead(EL2, faultDebugEL2)
4809 InitReg(MISCREG_TEECR32_EL1);
4810 InitReg(MISCREG_TEEHBR32_EL1);
4811
4812 // AArch64 registers (Op0=1,3);
4813 InitReg(MISCREG_MIDR_EL1)
4814 .allPrivileges().exceptUserMode().writes(0)
4815 .faultRead(EL0, faultIdst)
4816 .faultRead(EL1, faultFgtEL1<true, &HFGTR::midrEL1>)
4817 .mapsTo(MISCREG_MIDR);
4818 InitReg(MISCREG_MPIDR_EL1)
4819 .allPrivileges().exceptUserMode().writes(0)
4820 .faultRead(EL0, faultIdst)
4821 .faultRead(EL1, faultFgtEL1<true, &HFGTR::mpidrEL1>)
4822 .mapsTo(MISCREG_MPIDR);
4823 InitReg(MISCREG_REVIDR_EL1)
4824 .faultRead(EL0, faultIdst)
4825 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::revidrEL1>)
4826 .allPrivileges().exceptUserMode().writes(0);
4827 InitReg(MISCREG_ID_PFR0_EL1)
4828 .allPrivileges().exceptUserMode().writes(0)
4829 .faultRead(EL0, faultIdst)
4830 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4831 .mapsTo(MISCREG_ID_PFR0);
4832 InitReg(MISCREG_ID_PFR1_EL1)
4833 .allPrivileges().exceptUserMode().writes(0)
4834 .faultRead(EL0, faultIdst)
4835 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4836 .mapsTo(MISCREG_ID_PFR1);
4837 InitReg(MISCREG_ID_DFR0_EL1)
4838 .allPrivileges().exceptUserMode().writes(0)
4839 .faultRead(EL0, faultIdst)
4840 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4841 .mapsTo(MISCREG_ID_DFR0);
4842 InitReg(MISCREG_ID_AFR0_EL1)
4843 .allPrivileges().exceptUserMode().writes(0)
4844 .faultRead(EL0, faultIdst)
4845 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4846 .mapsTo(MISCREG_ID_AFR0);
4847 InitReg(MISCREG_ID_MMFR0_EL1)
4848 .allPrivileges().exceptUserMode().writes(0)
4849 .faultRead(EL0, faultIdst)
4850 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4851 .mapsTo(MISCREG_ID_MMFR0);
4852 InitReg(MISCREG_ID_MMFR1_EL1)
4853 .allPrivileges().exceptUserMode().writes(0)
4854 .faultRead(EL0, faultIdst)
4855 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4856 .mapsTo(MISCREG_ID_MMFR1);
4857 InitReg(MISCREG_ID_MMFR2_EL1)
4858 .allPrivileges().exceptUserMode().writes(0)
4859 .faultRead(EL0, faultIdst)
4860 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4861 .mapsTo(MISCREG_ID_MMFR2);
4862 InitReg(MISCREG_ID_MMFR3_EL1)
4863 .allPrivileges().exceptUserMode().writes(0)
4864 .faultRead(EL0, faultIdst)
4865 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4866 .mapsTo(MISCREG_ID_MMFR3);
4867 InitReg(MISCREG_ID_MMFR4_EL1)
4868 .allPrivileges().exceptUserMode().writes(0)
4869 .faultRead(EL0, faultIdst)
4870 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4871 .mapsTo(MISCREG_ID_MMFR4);
4872 InitReg(MISCREG_ID_ISAR0_EL1)
4873 .allPrivileges().exceptUserMode().writes(0)
4874 .faultRead(EL0, faultIdst)
4875 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4876 .mapsTo(MISCREG_ID_ISAR0);
4877 InitReg(MISCREG_ID_ISAR1_EL1)
4878 .allPrivileges().exceptUserMode().writes(0)
4879 .faultRead(EL0, faultIdst)
4880 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4881 .mapsTo(MISCREG_ID_ISAR1);
4882 InitReg(MISCREG_ID_ISAR2_EL1)
4883 .allPrivileges().exceptUserMode().writes(0)
4884 .faultRead(EL0, faultIdst)
4885 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4886 .mapsTo(MISCREG_ID_ISAR2);
4887 InitReg(MISCREG_ID_ISAR3_EL1)
4888 .allPrivileges().exceptUserMode().writes(0)
4889 .faultRead(EL0, faultIdst)
4890 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4891 .mapsTo(MISCREG_ID_ISAR3);
4892 InitReg(MISCREG_ID_ISAR4_EL1)
4893 .allPrivileges().exceptUserMode().writes(0)
4894 .faultRead(EL0, faultIdst)
4895 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4896 .mapsTo(MISCREG_ID_ISAR4);
4897 InitReg(MISCREG_ID_ISAR5_EL1)
4898 .allPrivileges().exceptUserMode().writes(0)
4899 .faultRead(EL0, faultIdst)
4900 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4901 .mapsTo(MISCREG_ID_ISAR5);
4902 InitReg(MISCREG_ID_ISAR6_EL1)
4903 .allPrivileges().exceptUserMode().writes(0)
4904 .faultRead(EL0, faultIdst)
4905 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4906 .mapsTo(MISCREG_ID_ISAR6);
4907 InitReg(MISCREG_MVFR0_EL1)
4908 .faultRead(EL0, faultIdst)
4909 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4910 .allPrivileges().exceptUserMode().writes(0)
4911 .mapsTo(MISCREG_MVFR0);
4912 InitReg(MISCREG_MVFR1_EL1)
4913 .faultRead(EL0, faultIdst)
4914 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4915 .allPrivileges().exceptUserMode().writes(0)
4916 .mapsTo(MISCREG_MVFR1);
4917 InitReg(MISCREG_MVFR2_EL1)
4918 .faultRead(EL0, faultIdst)
4919 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4920 .allPrivileges().exceptUserMode().writes(0);
4922 .reset([this,release=release,tc=tc](){
4923 AA64PFR0 pfr0_el1 = 0;
4924 pfr0_el1.el0 = 0x2;
4925 pfr0_el1.el1 = 0x2;
4926 pfr0_el1.el2 = release->has(ArmExtension::VIRTUALIZATION)
4927 ? 0x2 : 0x0;
4928 pfr0_el1.el3 = release->has(ArmExtension::SECURITY) ? 0x2 : 0x0;
4929 pfr0_el1.fp = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4930 pfr0_el1.advsimd = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4931 pfr0_el1.sve = release->has(ArmExtension::FEAT_SVE) ? 0x1 : 0x0;
4932 pfr0_el1.sel2 = release->has(ArmExtension::FEAT_SEL2) ? 0x1 : 0x0;
4933 // See MPAM frac in MISCREG_ID_AA64PFR1_EL1. Currently supporting
4934 // MPAMv0p1
4935 pfr0_el1.mpam = 0x0;
4936 pfr0_el1.gic = FullSystem && getGICv3CPUInterface(tc) ? 0x1 : 0;
4937 return pfr0_el1;
4938 }())
4939 .unserialize(0)
4940 .faultRead(EL0, faultIdst)
4941 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4942 .allPrivileges().writes(0);
4944 .reset([release=release](){
4945 AA64PFR1 pfr1_el1 = 0;
4946 pfr1_el1.sme = release->has(ArmExtension::FEAT_SME) ? 0x1 : 0x0;
4947 pfr1_el1.mpamFrac = release->has(ArmExtension::FEAT_MPAM) ?
4948 0x1 : 0x0;
4949 return pfr1_el1;
4950 }())
4951 .unserialize(0)
4952 .faultRead(EL0, faultIdst)
4953 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4954 .allPrivileges().writes(0);
4956 .reset([p](){
4957 AA64DFR0 dfr0_el1 = p.id_aa64dfr0_el1;
4958 dfr0_el1.pmuver = p.pmu ? 1 : 0; // Enable PMUv3
4959 return dfr0_el1;
4960 }())
4961 .faultRead(EL0, faultIdst)
4962 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4963 .allPrivileges().writes(0);
4965 .reset(p.id_aa64dfr1_el1)
4966 .faultRead(EL0, faultIdst)
4967 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4968 .allPrivileges().writes(0);
4970 .reset(p.id_aa64afr0_el1)
4971 .faultRead(EL0, faultIdst)
4972 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4973 .allPrivileges().writes(0);
4975 .reset(p.id_aa64afr1_el1)
4976 .faultRead(EL0, faultIdst)
4977 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4978 .allPrivileges().writes(0);
4980 .reset([p,release=release](){
4981 AA64ISAR0 isar0_el1 = p.id_aa64isar0_el1;
4982 isar0_el1.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
4983 isar0_el1.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
4984 isar0_el1.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
4985 isar0_el1.aes = release->has(ArmExtension::FEAT_PMULL) ?
4986 0x2 : release->has(ArmExtension::FEAT_AES) ?
4987 0x1 : 0x0;
4988 isar0_el1.dp = release->has(ArmExtension::FEAT_DOTPROD) ? 0x1 : 0x0;
4989 isar0_el1.atomic = release->has(ArmExtension::FEAT_LSE) ? 0x2 : 0x0;
4990 isar0_el1.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
4991 isar0_el1.tme = release->has(ArmExtension::TME) ? 0x1 : 0x0;
4992 isar0_el1.tlb = release->has(ArmExtension::FEAT_TLBIRANGE) ?
4993 0x2 : release->has(ArmExtension::FEAT_TLBIOS) ?
4994 0x1 : 0x0;
4995 isar0_el1.ts = release->has(ArmExtension::FEAT_FLAGM2) ?
4996 0x2 : release->has(ArmExtension::FEAT_FLAGM) ?
4997 0x1 : 0x0;
4998 isar0_el1.rndr = release->has(ArmExtension::FEAT_RNG) ? 0x1 : 0x0;
4999 isar0_el1.fhm = release->has(ArmExtension::FEAT_FP16) ? 0x1 :
5000 (release->has(ArmExtension::FEAT_FHM) ? 0x1 : 0x0);
5001 return isar0_el1;
5002 }())
5003 .faultRead(EL0, faultIdst)
5004 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5005 .allPrivileges().writes(0);
5007 .reset([p,release=release](){
5008 AA64ISAR1 isar1_el1 = p.id_aa64isar1_el1;
5009 isar1_el1.xs = release->has(ArmExtension::FEAT_XS) ? 0x1 : 0x0;
5010 isar1_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 0x1 : 0x0;
5011 isar1_el1.apa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
5012 isar1_el1.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
5013 isar1_el1.fcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
5014 isar1_el1.gpa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
5015 isar1_el1.frintts =
5016 release->has(ArmExtension::FEAT_FRINTTS) ? 0x1 : 0x0;
5017 isar1_el1.bf16 = release->has(ArmExtension::FEAT_EBF16) ? 0x2 :
5018 (release->has(ArmExtension::FEAT_BF16) ? 0x1 : 0x0);
5019 return isar1_el1;
5020 }())
5021 .faultRead(EL0, faultIdst)
5022 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5023 .allPrivileges().writes(0);
5025 .reset([p,asidbits=haveLargeAsid64,parange=physAddrRange](){
5026 AA64MMFR0 mmfr0_el1 = p.id_aa64mmfr0_el1;
5027 mmfr0_el1.asidbits = asidbits ? 0x2 : 0x0;
5028 mmfr0_el1.parange = encodePhysAddrRange64(parange);
5029 return mmfr0_el1;
5030 }())
5031 .faultRead(EL0, faultIdst)
5032 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5033 .allPrivileges().writes(0);
5035 .reset([p,release=release](){
5036 AA64MMFR1 mmfr1_el1 = p.id_aa64mmfr1_el1;
5037 mmfr1_el1.vmidbits =
5038 release->has(ArmExtension::FEAT_VMID16) ? 0x2 : 0x0;
5039 mmfr1_el1.vh = release->has(ArmExtension::FEAT_VHE) ? 0x1 : 0x0;
5040 mmfr1_el1.hpds = release->has(ArmExtension::FEAT_HPDS) ? 0x1 : 0x0;
5041 mmfr1_el1.pan = release->has(ArmExtension::FEAT_PAN) ? 0x1 : 0x0;
5042 mmfr1_el1.hcx = release->has(ArmExtension::FEAT_HCX) ? 0x1 : 0x0;
5043 mmfr1_el1.afp = release->has(ArmExtension::FEAT_AFP) ? 0x1 : 0x0;
5044 return mmfr1_el1;
5045 }())
5046 .faultRead(EL0, faultIdst)
5047 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5048 .allPrivileges().writes(0);
5050 .reset([p,release=release](){
5051 AA64MMFR2 mmfr2_el1 = p.id_aa64mmfr2_el1;
5052 mmfr2_el1.uao = release->has(ArmExtension::FEAT_UAO) ? 0x1 : 0x0;
5053 mmfr2_el1.varange = release->has(ArmExtension::FEAT_LVA) ? 0x1 : 0x0;
5054 mmfr2_el1.st = release->has(ArmExtension::FEAT_TTST) ? 0x1 : 0x0;
5055 mmfr2_el1.ids = release->has(ArmExtension::FEAT_IDST) ? 0x1 : 0x0;
5056 mmfr2_el1.evt = release->has(ArmExtension::FEAT_EVT) ? 0x2 : 0x0;
5057 return mmfr2_el1;
5058 }())
5059 .faultRead(EL0, faultIdst)
5060 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5061 .allPrivileges().writes(0);
5063 .reset([p,release=release](){
5064 AA64MMFR3 mmfr3_el1 = 0;
5065 mmfr3_el1.sctlrx =
5066 release->has(ArmExtension::FEAT_SCTLR2) ? 0x1 : 0x0;
5067 mmfr3_el1.tcrx = release->has(ArmExtension::FEAT_TCR2) ? 0x1 : 0x0;
5068 mmfr3_el1.s1pie = release->has(ArmExtension::FEAT_S1PIE) ? 0x1 : 0x0;
5069 return mmfr3_el1;
5070 }())
5071 .faultRead(EL0, faultIdst)
5072 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5073 .allPrivileges().writes(0);
5074
5075 InitReg(MISCREG_APDAKeyHi_EL1)
5076 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5077 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5078 .fault(EL2, faultPauthEL2)
5079 .allPrivileges().exceptUserMode();
5080 InitReg(MISCREG_APDAKeyLo_EL1)
5081 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5082 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5083 .fault(EL2, faultPauthEL2)
5084 .allPrivileges().exceptUserMode();
5085 InitReg(MISCREG_APDBKeyHi_EL1)
5086 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5087 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5088 .fault(EL2, faultPauthEL2)
5089 .allPrivileges().exceptUserMode();
5090 InitReg(MISCREG_APDBKeyLo_EL1)
5091 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5092 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5093 .fault(EL2, faultPauthEL2)
5094 .allPrivileges().exceptUserMode();
5095 InitReg(MISCREG_APGAKeyHi_EL1)
5096 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5097 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5098 .fault(EL2, faultPauthEL2)
5099 .allPrivileges().exceptUserMode();
5100 InitReg(MISCREG_APGAKeyLo_EL1)
5101 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5102 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5103 .fault(EL2, faultPauthEL2)
5104 .allPrivileges().exceptUserMode();
5105 InitReg(MISCREG_APIAKeyHi_EL1)
5106 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5107 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5108 .fault(EL2, faultPauthEL2)
5109 .allPrivileges().exceptUserMode();
5110 InitReg(MISCREG_APIAKeyLo_EL1)
5111 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5112 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5113 .fault(EL2, faultPauthEL2)
5114 .allPrivileges().exceptUserMode();
5115 InitReg(MISCREG_APIBKeyHi_EL1)
5116 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5117 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5118 .fault(EL2, faultPauthEL2)
5119 .allPrivileges().exceptUserMode();
5120 InitReg(MISCREG_APIBKeyLo_EL1)
5121 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5122 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5123 .fault(EL2, faultPauthEL2)
5124 .allPrivileges().exceptUserMode();
5125
5126 InitReg(MISCREG_CCSIDR_EL1)
5127 .faultRead(EL0, faultIdst)
5128 .faultRead(EL1, faultCacheEL1<true, &HFGTR::ccsidrEL1>)
5129 .allPrivileges().writes(0);
5130 InitReg(MISCREG_CLIDR_EL1)
5131 .faultRead(EL0, faultIdst)
5132 .faultRead(EL1, faultCacheEL1<true, &HFGTR::clidrEL1>)
5133 .allPrivileges().writes(0);
5134 InitReg(MISCREG_AIDR_EL1)
5135 .faultRead(EL0, faultIdst)
5136 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::aidrEL1>)
5137 .allPrivileges().writes(0);
5138 InitReg(MISCREG_CSSELR_EL1)
5139 .allPrivileges().exceptUserMode()
5140 .faultRead(EL1, faultCacheEL1<true, &HFGTR::csselrEL1>)
5141 .faultWrite(EL1, faultCacheEL1<false, &HFGTR::csselrEL1>)
5142 .mapsTo(MISCREG_CSSELR_NS);
5143 InitReg(MISCREG_CTR_EL0)
5144 .faultRead(EL0, faultCtrEL0)
5145 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::tid2, &HFGTR::ctrEL0>)
5146 .reads(1)
5147 .mapsTo(MISCREG_CTR);
5148 InitReg(MISCREG_DCZID_EL0)
5149 .reset(0x04) // DC ZVA clear 64-byte chunks
5150 .faultRead(EL0, faultFgtEL0<true, &HFGTR::dczidEL0>)
5151 .faultRead(EL1, faultFgtEL1<true, &HFGTR::dczidEL0>)
5152 .reads(1);
5153 InitReg(MISCREG_VPIDR_EL2)
5154 .hyp().mon()
5155 .mapsTo(MISCREG_VPIDR);
5156 InitReg(MISCREG_VMPIDR_EL2)
5157 .hyp().mon()
5158 .res0(mask(63, 40) | mask(29, 25))
5159 .res1(mask(31, 31))
5160 .mapsTo(MISCREG_VMPIDR);
5161 InitReg(MISCREG_SCTLR_EL1)
5162 .allPrivileges().exceptUserMode()
5163 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::sctlrEL1>)
5164 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::sctlrEL1>)
5165 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5166 | (IESB ? 0 : 0x200000)
5167 | (EnDA ? 0 : 0x8000000)
5168 | (EnIB ? 0 : 0x40000000)
5169 | (EnIA ? 0 : 0x80000000))
5170 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5171 | (nTLSMD ? 0 : 0x8000000)
5172 | (LSMAOE ? 0 : 0x10000000))
5173 .mapsTo(MISCREG_SCTLR_NS);
5174 InitReg(MISCREG_SCTLR_EL12)
5175 .fault(EL2, defaultFaultE2H_EL2)
5176 .fault(EL3, defaultFaultE2H_EL3)
5177 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5178 | (IESB ? 0 : 0x200000)
5179 | (EnDA ? 0 : 0x8000000)
5180 | (EnIB ? 0 : 0x40000000)
5181 | (EnIA ? 0 : 0x80000000))
5182 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5183 | (nTLSMD ? 0 : 0x8000000)
5184 | (LSMAOE ? 0 : 0x10000000))
5185 .mapsTo(MISCREG_SCTLR_EL1);
5186 InitReg(MISCREG_SCTLR2_EL1)
5187 .allPrivileges().exceptUserMode()
5188 .faultRead(EL1, faultSctlr2EL1<true, &HCR::trvm>)
5189 .faultWrite(EL1, faultSctlr2EL1<false, &HCR::tvm>)
5190 .fault(EL2,faultSctlr2EL2);
5191 InitReg(MISCREG_SCTLR2_EL12)
5192 .fault(EL2, faultVheEL2<faultSctlr2EL2>)
5193 .fault(EL3, defaultFaultE2H_EL3)
5194 .mapsTo(MISCREG_SCTLR2_EL1);
5195 InitReg(MISCREG_ACTLR_EL1)
5196 .allPrivileges().exceptUserMode()
5197 .fault(EL1, faultHcrEL1<&HCR::tacr>)
5198 .mapsTo(MISCREG_ACTLR_NS);
5199 InitReg(MISCREG_CPACR_EL1)
5200 .allPrivileges().exceptUserMode()
5201 .faultRead(EL1, faultCpacrEL1<true, &HFGTR::cpacrEL1>)
5202 .faultWrite(EL1, faultCpacrEL1<false, &HFGTR::cpacrEL1>)
5203 .fault(EL2, faultCpacrEL2)
5204 .mapsTo(MISCREG_CPACR);
5205 InitReg(MISCREG_CPACR_EL12)
5206 .fault(EL2, faultVheEL2<faultCpacrEL2>)
5207 .fault(EL3, defaultFaultE2H_EL3)
5208 .mapsTo(MISCREG_CPACR_EL1);
5209 InitReg(MISCREG_SCTLR_EL2)
5210 .hyp().mon()
5211 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5212 | (IESB ? 0 : 0x200000)
5213 | (EnDA ? 0 : 0x8000000)
5214 | (EnIB ? 0 : 0x40000000)
5215 | (EnIA ? 0 : 0x80000000))
5216 .res1(0x30c50830)
5217 .mapsTo(MISCREG_HSCTLR);
5218 InitReg(MISCREG_SCTLR2_EL2)
5219 .hyp().mon()
5220 .fault(EL2, faultSctlr2EL2);
5221 InitReg(MISCREG_ACTLR_EL2)
5222 .hyp().mon()
5223 .mapsTo(MISCREG_HACTLR);
5224 InitReg(MISCREG_HCR_EL2)
5225 .hyp().mon()
5226 .mapsTo(MISCREG_HCR, MISCREG_HCR2);
5227 InitReg(MISCREG_HCRX_EL2)
5228 .hyp().mon()
5229 .fault(EL2, faultHcrxEL2);
5230 InitReg(MISCREG_MDCR_EL2)
5231 .hyp().mon()
5232 .fault(EL2, faultDebugEL2)
5233 .mapsTo(MISCREG_HDCR);
5234 InitReg(MISCREG_CPTR_EL2)
5235 .hyp().mon()
5236 .fault(EL2, faultCpacrEL2)
5237 .mapsTo(MISCREG_HCPTR);
5238 InitReg(MISCREG_HSTR_EL2)
5239 .hyp().mon()
5240 .mapsTo(MISCREG_HSTR);
5241 InitReg(MISCREG_HACR_EL2)
5242 .hyp().mon()
5243 .mapsTo(MISCREG_HACR);
5244 InitReg(MISCREG_SCTLR_EL3)
5245 .reset(0x30c50830)
5246 .mon()
5247 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5248 | (IESB ? 0 : 0x200000)
5249 | (EnDA ? 0 : 0x8000000)
5250 | (EnIB ? 0 : 0x40000000)
5251 | (EnIA ? 0 : 0x80000000))
5252 .res1(0x30c50830);
5253 InitReg(MISCREG_SCTLR2_EL3)
5254 .mon();
5255 InitReg(MISCREG_ACTLR_EL3)
5256 .mon();
5257 InitReg(MISCREG_SCR_EL3)
5258 .mon()
5259 .mapsTo(MISCREG_SCR); // NAM D7-2005
5260 InitReg(MISCREG_SDER32_EL3)
5261 .mon()
5262 .mapsTo(MISCREG_SDER);
5263 InitReg(MISCREG_CPTR_EL3)
5264 .mon();
5265 InitReg(MISCREG_MDCR_EL3)
5266 .mon()
5267 .mapsTo(MISCREG_SDCR);
5268 InitReg(MISCREG_TTBR0_EL1)
5269 .allPrivileges().exceptUserMode()
5270 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr0EL1>)
5271 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr0EL1>)
5272 .mapsTo(MISCREG_TTBR0_NS);
5273 InitReg(MISCREG_TTBR0_EL12)
5274 .fault(EL2, defaultFaultE2H_EL2)
5275 .fault(EL3, defaultFaultE2H_EL3)
5276 .mapsTo(MISCREG_TTBR0_EL1);
5277 InitReg(MISCREG_TTBR1_EL1)
5278 .allPrivileges().exceptUserMode()
5279 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr1EL1>)
5280 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr1EL1>)
5281 .mapsTo(MISCREG_TTBR1_NS);
5282 InitReg(MISCREG_TTBR1_EL12)
5283 .fault(EL2, defaultFaultE2H_EL2)
5284 .fault(EL3, defaultFaultE2H_EL3)
5285 .mapsTo(MISCREG_TTBR1_EL1);
5286 InitReg(MISCREG_TCR_EL1)
5287 .allPrivileges().exceptUserMode()
5288 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::tcrEL1>)
5289 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::tcrEL1>)
5290 .mapsTo(MISCREG_TTBCR_NS);
5291 InitReg(MISCREG_TCR_EL12)
5292 .fault(EL2, defaultFaultE2H_EL2)
5293 .fault(EL3, defaultFaultE2H_EL3)
5294 .mapsTo(MISCREG_TTBCR_NS);
5295 InitReg(MISCREG_TCR2_EL1)
5296 .allPrivileges().exceptUserMode()
5297 .faultRead(EL1, faultTcr2EL1<true, &HCR::trvm>)
5298 .faultWrite(EL1, faultTcr2EL1<false, &HCR::tvm>)
5299 .fault(EL2, faultTcr2EL2);
5300 InitReg(MISCREG_TCR2_EL12)
5301 .fault(EL2, faultVheEL2<faultTcr2EL2>)
5302 .fault(EL3, faultTcr2VheEL3)
5303 .mapsTo(MISCREG_TCR2_EL1);
5304 InitReg(MISCREG_TTBR0_EL2)
5305 .hyp().mon()
5306 .mapsTo(MISCREG_HTTBR);
5307 InitReg(MISCREG_TTBR1_EL2)
5308 .hyp().mon();
5309 InitReg(MISCREG_TCR_EL2)
5310 .hyp().mon()
5311 .mapsTo(MISCREG_HTCR);
5312 InitReg(MISCREG_TCR2_EL2)
5313 .hyp().mon()
5314 .fault(EL2, faultTcr2EL2);
5315 InitReg(MISCREG_VTTBR_EL2)
5316 .hyp().mon()
5317 .mapsTo(MISCREG_VTTBR);
5318 InitReg(MISCREG_VTCR_EL2)
5319 .hyp().mon()
5320 .mapsTo(MISCREG_VTCR);
5321 InitReg(MISCREG_VSTTBR_EL2)
5322 .hypSecure().mon();
5323 InitReg(MISCREG_VSTCR_EL2)
5324 .hypSecure().mon();
5325 InitReg(MISCREG_TTBR0_EL3)
5326 .mon();
5327 InitReg(MISCREG_TCR_EL3)
5328 .mon();
5329 InitReg(MISCREG_DACR32_EL2)
5330 .hyp().mon()
5331 .mapsTo(MISCREG_DACR_NS);
5332 InitReg(MISCREG_SPSR_EL1)
5333 .allPrivileges().exceptUserMode()
5334 .mapsTo(MISCREG_SPSR_SVC); // NAM C5.2.17 SPSR_EL1
5335 InitReg(MISCREG_SPSR_EL12)
5336 .fault(EL2, defaultFaultE2H_EL2)
5337 .fault(EL3, defaultFaultE2H_EL3)
5338 .mapsTo(MISCREG_SPSR_SVC);
5339 InitReg(MISCREG_ELR_EL1)
5340 .allPrivileges().exceptUserMode();
5341 InitReg(MISCREG_ELR_EL12)
5342 .fault(EL2, defaultFaultE2H_EL2)
5343 .fault(EL3, defaultFaultE2H_EL3)
5344 .mapsTo(MISCREG_ELR_EL1);
5345 InitReg(MISCREG_SP_EL0)
5346 .allPrivileges().exceptUserMode()
5347 .fault(EL1, faultSpEL0)
5348 .fault(EL2, faultSpEL0)
5349 .fault(EL3, faultSpEL0);
5350 InitReg(MISCREG_SPSEL)
5351 .allPrivileges().exceptUserMode();
5352 InitReg(MISCREG_CURRENTEL)
5353 .allPrivileges().exceptUserMode().writes(0);
5354 InitReg(MISCREG_PAN)
5355 .allPrivileges(release->has(ArmExtension::FEAT_PAN))
5356 .exceptUserMode();
5357 InitReg(MISCREG_UAO)
5358 .allPrivileges().exceptUserMode();
5359 InitReg(MISCREG_NZCV)
5360 .allPrivileges();
5361 InitReg(MISCREG_DAIF)
5362 .allPrivileges()
5363 .fault(EL0, faultDaif);
5364 InitReg(MISCREG_FPCR)
5365 .allPrivileges()
5366 .fault(EL0, faultFpcrEL0)
5367 .fault(EL1, faultFpcrEL1)
5368 .fault(EL2, faultFpcrEL2)
5369 .fault(EL3, faultFpcrEL3);
5370 InitReg(MISCREG_FPSR)
5371 .allPrivileges()
5372 .fault(EL0, faultFpcrEL0)
5373 .fault(EL1, faultFpcrEL1)
5374 .fault(EL2, faultFpcrEL2)
5375 .fault(EL3, faultFpcrEL3);
5376 InitReg(MISCREG_DSPSR_EL0)
5377 .allPrivileges();
5378 InitReg(MISCREG_DLR_EL0)
5379 .allPrivileges();
5380 InitReg(MISCREG_SPSR_EL2)
5381 .hyp().mon()
5382 .mapsTo(MISCREG_SPSR_HYP); // NAM C5.2.18 SPSR_EL2
5383 InitReg(MISCREG_ELR_EL2)
5384 .hyp().mon();
5385 InitReg(MISCREG_SP_EL1)
5386 .hyp().mon();
5387 InitReg(MISCREG_SPSR_IRQ_AA64)
5388 .hyp().mon();
5389 InitReg(MISCREG_SPSR_ABT_AA64)
5390 .hyp().mon();
5391 InitReg(MISCREG_SPSR_UND_AA64)
5392 .hyp().mon();
5393 InitReg(MISCREG_SPSR_FIQ_AA64)
5394 .hyp().mon();
5395 InitReg(MISCREG_SPSR_EL3)
5396 .mon()
5397 .mapsTo(MISCREG_SPSR_MON); // NAM C5.2.19 SPSR_EL3
5398 InitReg(MISCREG_ELR_EL3)
5399 .mon();
5400 InitReg(MISCREG_SP_EL2)
5401 .mon();
5402 InitReg(MISCREG_AFSR0_EL1)
5403 .allPrivileges().exceptUserMode()
5404 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr0EL1>)
5405 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr0EL1>)
5406 .mapsTo(MISCREG_ADFSR_NS);
5407 InitReg(MISCREG_AFSR0_EL12)
5408 .fault(EL2, defaultFaultE2H_EL2)
5409 .fault(EL3, defaultFaultE2H_EL3)
5410 .mapsTo(MISCREG_ADFSR_NS);
5411 InitReg(MISCREG_AFSR1_EL1)
5412 .allPrivileges().exceptUserMode()
5413 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr1EL1>)
5414 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr1EL1>)
5415 .mapsTo(MISCREG_AIFSR_NS);
5416 InitReg(MISCREG_AFSR1_EL12)
5417 .fault(EL2, defaultFaultE2H_EL2)
5418 .fault(EL3, defaultFaultE2H_EL3)
5419 .mapsTo(MISCREG_AIFSR_NS);
5420 InitReg(MISCREG_ESR_EL1)
5421 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::esrEL1>)
5422 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::esrEL1>)
5423 .allPrivileges().exceptUserMode();
5424 InitReg(MISCREG_ESR_EL12)
5425 .fault(EL2, defaultFaultE2H_EL2)
5426 .fault(EL3, defaultFaultE2H_EL3)
5427 .mapsTo(MISCREG_ESR_EL1);
5428 InitReg(MISCREG_IFSR32_EL2)
5429 .hyp().mon()
5430 .mapsTo(MISCREG_IFSR_NS);
5431 InitReg(MISCREG_AFSR0_EL2)
5432 .hyp().mon()
5433 .mapsTo(MISCREG_HADFSR);
5434 InitReg(MISCREG_AFSR1_EL2)
5435 .hyp().mon()
5436 .mapsTo(MISCREG_HAIFSR);
5437 InitReg(MISCREG_ESR_EL2)
5438 .hyp().mon()
5439 .mapsTo(MISCREG_HSR);
5440 InitReg(MISCREG_FPEXC32_EL2)
5441 .fault(EL2, faultFpcrEL2)
5442 .fault(EL3, faultFpcrEL3)
5443 .mapsTo(MISCREG_FPEXC);
5444 InitReg(MISCREG_AFSR0_EL3)
5445 .mon();
5446 InitReg(MISCREG_AFSR1_EL3)
5447 .mon();
5448 InitReg(MISCREG_ESR_EL3)
5449 .mon();
5450 InitReg(MISCREG_FAR_EL1)
5451 .allPrivileges().exceptUserMode()
5452 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::farEL1>)
5453 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::farEL1>)
5455 InitReg(MISCREG_FAR_EL12)
5456 .fault(EL2, defaultFaultE2H_EL2)
5457 .fault(EL3, defaultFaultE2H_EL3)
5459 InitReg(MISCREG_FAR_EL2)
5460 .hyp().mon()
5461 .mapsTo(MISCREG_HDFAR, MISCREG_HIFAR);
5462 InitReg(MISCREG_HPFAR_EL2)
5463 .hyp().mon()
5464 .mapsTo(MISCREG_HPFAR);
5465 InitReg(MISCREG_FAR_EL3)
5466 .mon();
5467 InitReg(MISCREG_IC_IALLUIS)
5468 .warnNotFail()
5469 .faultWrite(EL1, faultPouIsEL1<&HFGITR::icialluis>)
5470 .writes(1).exceptUserMode();
5471 InitReg(MISCREG_PAR_EL1)
5472 .allPrivileges().exceptUserMode()
5473 .mapsTo(MISCREG_PAR_NS);
5474 InitReg(MISCREG_IC_IALLU)
5475 .warnNotFail()
5476 .faultWrite(EL1, faultPouEL1<&HFGITR::iciallu>)
5477 .writes(1).exceptUserMode();
5478 InitReg(MISCREG_DC_IVAC_Xt)
5479 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dcivac>)
5480 .writes(1).exceptUserMode();
5481 InitReg(MISCREG_DC_ISW_Xt)
5482 .warnNotFail()
5483 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dcisw>)
5484 .writes(1).exceptUserMode();
5485 InitReg(MISCREG_AT_S1E1R_Xt)
5486 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1r>)
5487 .writes(1).exceptUserMode();
5488 InitReg(MISCREG_AT_S1E1W_Xt)
5489 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1w>)
5490 .writes(1).exceptUserMode();
5491 InitReg(MISCREG_AT_S1E0R_Xt)
5492 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0r>)
5493 .writes(1).exceptUserMode();
5494 InitReg(MISCREG_AT_S1E0W_Xt)
5495 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0w>)
5496 .writes(1).exceptUserMode();
5497 InitReg(MISCREG_DC_CSW_Xt)
5498 .warnNotFail()
5499 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccsw>)
5500 .writes(1).exceptUserMode();
5501 InitReg(MISCREG_DC_CISW_Xt)
5502 .warnNotFail()
5503 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccisw>)
5504 .writes(1).exceptUserMode();
5505 InitReg(MISCREG_DC_ZVA_Xt)
5506 .writes(1)
5507 .faultWrite(EL0, faultDczvaEL0)
5508 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tdz, &HFGITR::dczva>);
5509 InitReg(MISCREG_IC_IVAU_Xt)
5510 .faultWrite(EL0, faultPouEL0)
5511 .faultWrite(EL1, faultPouEL1<&HFGITR::icivau>)
5512 .writes(1);
5513 InitReg(MISCREG_DC_CVAC_Xt)
5514 .faultWrite(EL0, faultCvacEL0)
5515 .faultWrite(EL1, faultHcrEL1<&HCR::tpc>)
5516 .writes(1);
5517 InitReg(MISCREG_DC_CVAU_Xt)
5518 .faultWrite(EL0, faultPouEL0)
5519 .faultWrite(EL1, faultPouEL1<&HFGITR::dccvau>)
5520 .writes(1);
5521 InitReg(MISCREG_DC_CIVAC_Xt)
5522 .faultWrite(EL0, faultCvacEL0)
5523 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dccivac>)
5524 .writes(1);
5525 InitReg(MISCREG_AT_S1E2R_Xt)
5526 .monWrite().hypWrite();
5527 InitReg(MISCREG_AT_S1E2W_Xt)
5528 .monWrite().hypWrite();
5529 InitReg(MISCREG_AT_S12E1R_Xt)
5530 .hypWrite().monSecureWrite().monNonSecureWrite();
5531 InitReg(MISCREG_AT_S12E1W_Xt)
5532 .hypWrite().monSecureWrite().monNonSecureWrite();
5533 InitReg(MISCREG_AT_S12E0R_Xt)
5534 .hypWrite().monSecureWrite().monNonSecureWrite();
5535 InitReg(MISCREG_AT_S12E0W_Xt)
5536 .hypWrite().monSecureWrite().monNonSecureWrite();
5537 InitReg(MISCREG_AT_S1E3R_Xt)
5538 .monSecureWrite().monNonSecureWrite();
5539 InitReg(MISCREG_AT_S1E3W_Xt)
5540 .monSecureWrite().monNonSecureWrite();
5541 InitReg(MISCREG_TLBI_VMALLE1OS)
5542 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivmalle1os>)
5543 .writes(1).exceptUserMode();
5544 InitReg(MISCREG_TLBI_VAE1OS)
5545 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivae1os>)
5546 .writes(1).exceptUserMode();
5547 InitReg(MISCREG_TLBI_ASIDE1OS)
5548 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbiaside1os>)
5549 .writes(1).exceptUserMode();
5550 InitReg(MISCREG_TLBI_VAAE1OS)
5551 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivaae1os>)
5552 .writes(1).exceptUserMode();
5553 InitReg(MISCREG_TLBI_VALE1OS)
5554 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivale1os>)
5555 .writes(1).exceptUserMode();
5556 InitReg(MISCREG_TLBI_VAALE1OS)
5557 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivaale1os>)
5558 .writes(1).exceptUserMode();
5559 InitReg(MISCREG_TLBI_VMALLE1IS)
5560 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivmalle1is>)
5561 .writes(1).exceptUserMode();
5562 InitReg(MISCREG_TLBI_VAE1IS)
5563 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivae1is>)
5564 .writes(1).exceptUserMode();
5565 InitReg(MISCREG_TLBI_ASIDE1IS)
5566 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbiaside1is>)
5567 .writes(1).exceptUserMode();
5568 InitReg(MISCREG_TLBI_VAAE1IS)
5569 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivaae1is>)
5570 .writes(1).exceptUserMode();
5571 InitReg(MISCREG_TLBI_VALE1IS)
5572 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivale1is>)
5573 .writes(1).exceptUserMode();
5574 InitReg(MISCREG_TLBI_VAALE1IS)
5575 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivaale1is>)
5576 .writes(1).exceptUserMode();
5577 InitReg(MISCREG_TLBI_VMALLE1)
5578 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5579 .writes(1).exceptUserMode();
5580 InitReg(MISCREG_TLBI_VAE1)
5581 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5582 .writes(1).exceptUserMode();
5583 InitReg(MISCREG_TLBI_ASIDE1)
5584 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5585 .writes(1).exceptUserMode();
5586 InitReg(MISCREG_TLBI_VAAE1)
5587 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5588 .writes(1).exceptUserMode();
5589 InitReg(MISCREG_TLBI_VALE1)
5590 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5591 .writes(1).exceptUserMode();
5592 InitReg(MISCREG_TLBI_VAALE1)
5593 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5594 .writes(1).exceptUserMode();
5595 InitReg(MISCREG_TLBI_IPAS2E1OS)
5596 .monWrite().hypWrite();
5597 InitReg(MISCREG_TLBI_IPAS2LE1OS)
5598 .monWrite().hypWrite();
5599 InitReg(MISCREG_TLBI_ALLE2OS)
5600 .monWrite().hypWrite();
5601 InitReg(MISCREG_TLBI_VAE2OS)
5602 .monWrite().hypWrite();
5603 InitReg(MISCREG_TLBI_ALLE1OS)
5604 .monWrite().hypWrite();
5605 InitReg(MISCREG_TLBI_VALE2OS)
5606 .monWrite().hypWrite();
5607 InitReg(MISCREG_TLBI_VMALLS12E1OS)
5608 .monWrite().hypWrite();
5609 InitReg(MISCREG_TLBI_IPAS2E1IS)
5610 .monWrite().hypWrite();
5611 InitReg(MISCREG_TLBI_IPAS2LE1IS)
5612 .monWrite().hypWrite();
5613 InitReg(MISCREG_TLBI_ALLE2IS)
5614 .monWrite().hypWrite();
5615 InitReg(MISCREG_TLBI_VAE2IS)
5616 .monWrite().hypWrite();
5617 InitReg(MISCREG_TLBI_ALLE1IS)
5618 .monWrite().hypWrite();
5619 InitReg(MISCREG_TLBI_VALE2IS)
5620 .monWrite().hypWrite();
5621 InitReg(MISCREG_TLBI_VMALLS12E1IS)
5622 .monWrite().hypWrite();
5623 InitReg(MISCREG_TLBI_IPAS2E1)
5624 .monWrite().hypWrite();
5625 InitReg(MISCREG_TLBI_IPAS2LE1)
5626 .monWrite().hypWrite();
5627 InitReg(MISCREG_TLBI_ALLE2)
5628 .monWrite().hypWrite();
5629 InitReg(MISCREG_TLBI_VAE2)
5630 .monWrite().hypWrite();
5631 InitReg(MISCREG_TLBI_ALLE1)
5632 .monWrite().hypWrite();
5633 InitReg(MISCREG_TLBI_VALE2)
5634 .monWrite().hypWrite();
5635 InitReg(MISCREG_TLBI_VMALLS12E1)
5636 .monWrite().hypWrite();
5637 InitReg(MISCREG_TLBI_ALLE3OS)
5638 .monSecureWrite().monNonSecureWrite();
5639 InitReg(MISCREG_TLBI_VAE3OS)
5640 .monSecureWrite().monNonSecureWrite();
5641 InitReg(MISCREG_TLBI_VALE3OS)
5642 .monSecureWrite().monNonSecureWrite();
5643 InitReg(MISCREG_TLBI_ALLE3IS)
5644 .monSecureWrite().monNonSecureWrite();
5645 InitReg(MISCREG_TLBI_VAE3IS)
5646 .monSecureWrite().monNonSecureWrite();
5647 InitReg(MISCREG_TLBI_VALE3IS)
5648 .monSecureWrite().monNonSecureWrite();
5649 InitReg(MISCREG_TLBI_ALLE3)
5650 .monSecureWrite().monNonSecureWrite();
5651 InitReg(MISCREG_TLBI_VAE3)
5652 .monSecureWrite().monNonSecureWrite();
5653 InitReg(MISCREG_TLBI_VALE3)
5654 .monSecureWrite().monNonSecureWrite();
5655
5656 InitReg(MISCREG_TLBI_RVAE1)
5657 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5658 .writes(1).exceptUserMode();
5659 InitReg(MISCREG_TLBI_RVAAE1)
5660 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5661 .writes(1).exceptUserMode();
5662 InitReg(MISCREG_TLBI_RVALE1)
5663 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5664 .writes(1).exceptUserMode();
5665 InitReg(MISCREG_TLBI_RVAALE1)
5666 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5667 .writes(1).exceptUserMode();
5668 InitReg(MISCREG_TLBI_RIPAS2E1)
5669 .hypWrite().monWrite();
5670 InitReg(MISCREG_TLBI_RIPAS2LE1)
5671 .hypWrite().monWrite();
5672 InitReg(MISCREG_TLBI_RVAE2)
5673 .hypWrite().monWrite();
5674 InitReg(MISCREG_TLBI_RVALE2)
5675 .hypWrite().monWrite();
5676 InitReg(MISCREG_TLBI_RVAE3)
5677 .monWrite();
5678 InitReg(MISCREG_TLBI_RVALE3)
5679 .monWrite();
5680 InitReg(MISCREG_TLBI_RVAE1IS)
5681 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvae1is>)
5682 .writes(1).exceptUserMode();
5683 InitReg(MISCREG_TLBI_RVAAE1IS)
5684 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvaae1is>)
5685 .writes(1).exceptUserMode();
5686 InitReg(MISCREG_TLBI_RVALE1IS)
5687 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvale1is>)
5688 .writes(1).exceptUserMode();
5689 InitReg(MISCREG_TLBI_RVAALE1IS)
5690 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvaale1is>)
5691 .writes(1).exceptUserMode();
5692 InitReg(MISCREG_TLBI_RIPAS2E1IS)
5693 .hypWrite().monWrite();
5694 InitReg(MISCREG_TLBI_RIPAS2LE1IS)
5695 .hypWrite().monWrite();
5696 InitReg(MISCREG_TLBI_RVAE2IS)
5697 .hypWrite().monWrite();
5698 InitReg(MISCREG_TLBI_RVALE2IS)
5699 .hypWrite().monWrite();
5700 InitReg(MISCREG_TLBI_RVAE3IS)
5701 .monWrite();
5702 InitReg(MISCREG_TLBI_RVALE3IS)
5703 .monWrite();
5704 InitReg(MISCREG_TLBI_RVAE1OS)
5705 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvae1os>)
5706 .writes(1).exceptUserMode();
5707 InitReg(MISCREG_TLBI_RVAAE1OS)
5708 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvaae1os>)
5709 .writes(1).exceptUserMode();
5710 InitReg(MISCREG_TLBI_RVALE1OS)
5711 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvale1os>)
5712 .writes(1).exceptUserMode();
5713 InitReg(MISCREG_TLBI_RVAALE1OS)
5714 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvaale1os>)
5715 .writes(1).exceptUserMode();
5716 InitReg(MISCREG_TLBI_RIPAS2E1OS)
5717 .hypWrite().monWrite();
5718 InitReg(MISCREG_TLBI_RIPAS2LE1OS)
5719 .hypWrite().monWrite();
5720 InitReg(MISCREG_TLBI_RVAE2OS)
5721 .hypWrite().monWrite();
5722 InitReg(MISCREG_TLBI_RVALE2OS)
5723 .hypWrite().monWrite();
5724 InitReg(MISCREG_TLBI_RVAE3OS)
5725 .monWrite();
5726 InitReg(MISCREG_TLBI_RVALE3OS)
5727 .monWrite();
5728 InitReg(MISCREG_TLBI_VMALLE1OSNXS)
5729 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivmalle1os>)
5730 .writes(1).exceptUserMode();
5731 InitReg(MISCREG_TLBI_VAE1OSNXS)
5732 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivae1os>)
5733 .writes(1).exceptUserMode();
5734 InitReg(MISCREG_TLBI_ASIDE1OSNXS)
5735 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbiaside1os>)
5736 .writes(1).exceptUserMode();
5737 InitReg(MISCREG_TLBI_VAAE1OSNXS)
5738 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaae1os>)
5739 .writes(1).exceptUserMode();
5740 InitReg(MISCREG_TLBI_VALE1OSNXS)
5741 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivale1os>)
5742 .writes(1).exceptUserMode();
5743 InitReg(MISCREG_TLBI_VAALE1OSNXS)
5744 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaale1os>)
5745 .writes(1).exceptUserMode();
5746 InitReg(MISCREG_TLBI_VMALLE1ISNXS)
5747 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivmalle1is>)
5748 .writes(1).exceptUserMode();
5749 InitReg(MISCREG_TLBI_VAE1ISNXS)
5750 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivae1is>)
5751 .writes(1).exceptUserMode();
5752 InitReg(MISCREG_TLBI_ASIDE1ISNXS)
5753 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbiaside1is>)
5754 .writes(1).exceptUserMode();
5755 InitReg(MISCREG_TLBI_VAAE1ISNXS)
5756 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaae1is>)
5757 .writes(1).exceptUserMode();
5758 InitReg(MISCREG_TLBI_VALE1ISNXS)
5759 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivale1is>)
5760 .writes(1).exceptUserMode();
5761 InitReg(MISCREG_TLBI_VAALE1ISNXS)
5762 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaale1is>)
5763 .writes(1).exceptUserMode();
5764 InitReg(MISCREG_TLBI_VMALLE1NXS)
5765 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5766 .writes(1).exceptUserMode();
5767 InitReg(MISCREG_TLBI_VAE1NXS)
5768 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5769 .writes(1).exceptUserMode();
5770 InitReg(MISCREG_TLBI_ASIDE1NXS)
5771 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5772 .writes(1).exceptUserMode();
5773 InitReg(MISCREG_TLBI_VAAE1NXS)
5774 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5775 .writes(1).exceptUserMode();
5776 InitReg(MISCREG_TLBI_VALE1NXS)
5777 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5778 .writes(1).exceptUserMode();
5779 InitReg(MISCREG_TLBI_VAALE1NXS)
5780 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5781 .writes(1).exceptUserMode();
5782 InitReg(MISCREG_TLBI_IPAS2E1OSNXS)
5783 .hypWrite().monWrite();
5784 InitReg(MISCREG_TLBI_IPAS2LE1OSNXS)
5785 .hypWrite().monWrite();
5786 InitReg(MISCREG_TLBI_ALLE2OSNXS)
5787 .hypWrite().monWrite();
5788 InitReg(MISCREG_TLBI_VAE2OSNXS)
5789 .hypWrite().monWrite();
5790 InitReg(MISCREG_TLBI_ALLE1OSNXS)
5791 .hypWrite().monWrite();
5792 InitReg(MISCREG_TLBI_VALE2OSNXS)
5793 .hypWrite().monWrite();
5794 InitReg(MISCREG_TLBI_VMALLS12E1OSNXS)
5795 .hypWrite().monWrite();
5796 InitReg(MISCREG_TLBI_IPAS2E1ISNXS)
5797 .hypWrite().monWrite();
5798 InitReg(MISCREG_TLBI_IPAS2LE1ISNXS)
5799 .hypWrite().monWrite();
5800 InitReg(MISCREG_TLBI_ALLE2ISNXS)
5801 .hypWrite().monWrite();
5802 InitReg(MISCREG_TLBI_VAE2ISNXS)
5803 .hypWrite().monWrite();
5804 InitReg(MISCREG_TLBI_ALLE1ISNXS)
5805 .hypWrite().monWrite();
5806 InitReg(MISCREG_TLBI_VALE2ISNXS)
5807 .hypWrite().monWrite();
5808 InitReg(MISCREG_TLBI_VMALLS12E1ISNXS)
5809 .hypWrite().monWrite();
5810 InitReg(MISCREG_TLBI_IPAS2E1NXS)
5811 .hypWrite().monWrite();
5812 InitReg(MISCREG_TLBI_IPAS2LE1NXS)
5813 .hypWrite().monWrite();
5814 InitReg(MISCREG_TLBI_ALLE2NXS)
5815 .hypWrite().monWrite();
5816 InitReg(MISCREG_TLBI_VAE2NXS)
5817 .hypWrite().monWrite();
5818 InitReg(MISCREG_TLBI_ALLE1NXS)
5819 .hypWrite().monWrite();
5820 InitReg(MISCREG_TLBI_VALE2NXS)
5821 .hypWrite().monWrite();
5822 InitReg(MISCREG_TLBI_VMALLS12E1NXS)
5823 .hypWrite().monWrite();
5824 InitReg(MISCREG_TLBI_ALLE3OSNXS)
5825 .monWrite();
5826 InitReg(MISCREG_TLBI_VAE3OSNXS)
5827 .monWrite();
5828 InitReg(MISCREG_TLBI_VALE3OSNXS)
5829 .monWrite();
5830 InitReg(MISCREG_TLBI_ALLE3ISNXS)
5831 .monWrite();
5832 InitReg(MISCREG_TLBI_VAE3ISNXS)
5833 .monWrite();
5834 InitReg(MISCREG_TLBI_VALE3ISNXS)
5835 .monWrite();
5836 InitReg(MISCREG_TLBI_ALLE3NXS)
5837 .monWrite();
5838 InitReg(MISCREG_TLBI_VAE3NXS)
5839 .monWrite();
5840 InitReg(MISCREG_TLBI_VALE3NXS)
5841 .monWrite();
5842
5843 InitReg(MISCREG_TLBI_RVAE1NXS)
5844 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5845 .writes(1).exceptUserMode();
5846 InitReg(MISCREG_TLBI_RVAAE1NXS)
5847 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5848 .writes(1).exceptUserMode();
5849 InitReg(MISCREG_TLBI_RVALE1NXS)
5850 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5851 .writes(1).exceptUserMode();
5852 InitReg(MISCREG_TLBI_RVAALE1NXS)
5853 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5854 .writes(1).exceptUserMode();
5855 InitReg(MISCREG_TLBI_RIPAS2E1NXS)
5856 .hypWrite().monWrite();
5857 InitReg(MISCREG_TLBI_RIPAS2LE1NXS)
5858 .hypWrite().monWrite();
5859 InitReg(MISCREG_TLBI_RVAE2NXS)
5860 .hypWrite().monWrite();
5861 InitReg(MISCREG_TLBI_RVALE2NXS)
5862 .hypWrite().monWrite();
5863 InitReg(MISCREG_TLBI_RVAE3NXS)
5864 .monWrite();
5865 InitReg(MISCREG_TLBI_RVALE3NXS)
5866 .monWrite();
5867 InitReg(MISCREG_TLBI_RVAE1ISNXS)
5868 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvae1is>)
5869 .writes(1).exceptUserMode();
5870 InitReg(MISCREG_TLBI_RVAAE1ISNXS)
5871 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaae1is>)
5872 .writes(1).exceptUserMode();
5873 InitReg(MISCREG_TLBI_RVALE1ISNXS)
5874 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvale1is>)
5875 .writes(1).exceptUserMode();
5876 InitReg(MISCREG_TLBI_RVAALE1ISNXS)
5877 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaale1is>)
5878 .writes(1).exceptUserMode();
5879 InitReg(MISCREG_TLBI_RIPAS2E1ISNXS)
5880 .hypWrite().monWrite();
5881 InitReg(MISCREG_TLBI_RIPAS2LE1ISNXS)
5882 .hypWrite().monWrite();
5883 InitReg(MISCREG_TLBI_RVAE2ISNXS)
5884 .hypWrite().monWrite();
5885 InitReg(MISCREG_TLBI_RVALE2ISNXS)
5886 .hypWrite().monWrite();
5887 InitReg(MISCREG_TLBI_RVAE3ISNXS)
5888 .monWrite();
5889 InitReg(MISCREG_TLBI_RVALE3ISNXS)
5890 .monWrite();
5891 InitReg(MISCREG_TLBI_RVAE1OSNXS)
5892 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvae1os>)
5893 .writes(1).exceptUserMode();
5894 InitReg(MISCREG_TLBI_RVAAE1OSNXS)
5895 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaae1os>)
5896 .writes(1).exceptUserMode();
5897 InitReg(MISCREG_TLBI_RVALE1OSNXS)
5898 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvale1os>)
5899 .writes(1).exceptUserMode();
5900 InitReg(MISCREG_TLBI_RVAALE1OSNXS)
5901 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaale1os>)
5902 .writes(1).exceptUserMode();
5903 InitReg(MISCREG_TLBI_RIPAS2E1OSNXS)
5904 .hypWrite().monWrite();
5905 InitReg(MISCREG_TLBI_RIPAS2LE1OSNXS)
5906 .hypWrite().monWrite();
5907 InitReg(MISCREG_TLBI_RVAE2OSNXS)
5908 .hypWrite().monWrite();
5909 InitReg(MISCREG_TLBI_RVALE2OSNXS)
5910 .hypWrite().monWrite();
5911 InitReg(MISCREG_TLBI_RVAE3OSNXS)
5912 .monWrite();
5913 InitReg(MISCREG_TLBI_RVALE3OSNXS)
5914 .monWrite();
5915 InitReg(MISCREG_PMINTENSET_EL1)
5916 .allPrivileges().exceptUserMode()
5917 .mapsTo(MISCREG_PMINTENSET);
5918 InitReg(MISCREG_PMINTENCLR_EL1)
5919 .allPrivileges().exceptUserMode()
5920 .mapsTo(MISCREG_PMINTENCLR);
5921 InitReg(MISCREG_PMCR_EL0)
5922 .allPrivileges()
5923 .mapsTo(MISCREG_PMCR);
5924 InitReg(MISCREG_PMCNTENSET_EL0)
5925 .allPrivileges()
5926 .mapsTo(MISCREG_PMCNTENSET);
5927 InitReg(MISCREG_PMCNTENCLR_EL0)
5928 .allPrivileges()
5929 .mapsTo(MISCREG_PMCNTENCLR);
5930 InitReg(MISCREG_PMOVSCLR_EL0)
5931 .allPrivileges();
5932// .mapsTo(MISCREG_PMOVSCLR);
5933 InitReg(MISCREG_PMSWINC_EL0)
5934 .writes(1).user()
5935 .mapsTo(MISCREG_PMSWINC);
5936 InitReg(MISCREG_PMSELR_EL0)
5937 .allPrivileges()
5938 .mapsTo(MISCREG_PMSELR);
5939 InitReg(MISCREG_PMCEID0_EL0)
5940 .reads(1).user()
5941 .mapsTo(MISCREG_PMCEID0);
5942 InitReg(MISCREG_PMCEID1_EL0)
5943 .reads(1).user()
5944 .mapsTo(MISCREG_PMCEID1);
5945 InitReg(MISCREG_PMCCNTR_EL0)
5946 .allPrivileges()
5947 .mapsTo(MISCREG_PMCCNTR);
5948 InitReg(MISCREG_PMXEVTYPER_EL0)
5949 .allPrivileges()
5950 .mapsTo(MISCREG_PMXEVTYPER);
5951 InitReg(MISCREG_PMCCFILTR_EL0)
5952 .allPrivileges();
5953 InitReg(MISCREG_PMXEVCNTR_EL0)
5954 .allPrivileges()
5955 .mapsTo(MISCREG_PMXEVCNTR);
5956 InitReg(MISCREG_PMUSERENR_EL0)
5957 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5958 .mapsTo(MISCREG_PMUSERENR);
5959 InitReg(MISCREG_PMOVSSET_EL0)
5960 .allPrivileges()
5961 .mapsTo(MISCREG_PMOVSSET);
5962 InitReg(MISCREG_MAIR_EL1)
5963 .allPrivileges().exceptUserMode()
5964 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::mairEL1>)
5965 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::mairEL1>)
5967 InitReg(MISCREG_MAIR_EL12)
5968 .fault(EL2, defaultFaultE2H_EL2)
5969 .fault(EL3, defaultFaultE2H_EL3)
5971 InitReg(MISCREG_AMAIR_EL1)
5972 .allPrivileges().exceptUserMode()
5973 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::amairEL1>)
5974 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::amairEL1>)
5976 InitReg(MISCREG_AMAIR_EL12)
5977 .fault(EL2, defaultFaultE2H_EL2)
5978 .fault(EL3, defaultFaultE2H_EL3)
5980 InitReg(MISCREG_MAIR_EL2)
5981 .hyp().mon()
5983 InitReg(MISCREG_AMAIR_EL2)
5984 .hyp().mon()
5986 InitReg(MISCREG_MAIR_EL3)
5987 .mon();
5988 InitReg(MISCREG_AMAIR_EL3)
5989 .mon();
5990 InitReg(MISCREG_L2CTLR_EL1)
5991 .allPrivileges().exceptUserMode();
5992 InitReg(MISCREG_L2ECTLR_EL1)
5993 .allPrivileges().exceptUserMode();
5994 InitReg(MISCREG_VBAR_EL1)
5995 .allPrivileges().exceptUserMode()
5996 .faultRead(EL1, faultFgtEL1<true, &HFGTR::vbarEL1>)
5997 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::vbarEL1>)
5998 .mapsTo(MISCREG_VBAR_NS);
5999 InitReg(MISCREG_VBAR_EL12)
6000 .fault(EL2, defaultFaultE2H_EL2)
6001 .fault(EL3, defaultFaultE2H_EL3)
6002 .mapsTo(MISCREG_VBAR_NS);
6003 InitReg(MISCREG_RVBAR_EL1)
6004 .reset(FullSystem && system->highestEL() == EL1 ?
6005 system->resetAddr() : 0)
6006 .privRead(FullSystem && system->highestEL() == EL1);
6007 InitReg(MISCREG_ISR_EL1)
6008 .allPrivileges().exceptUserMode().writes(0);
6009 InitReg(MISCREG_VBAR_EL2)
6010 .hyp().mon()
6011 .res0(0x7ff)
6012 .mapsTo(MISCREG_HVBAR);
6013 InitReg(MISCREG_RVBAR_EL2)
6014 .reset(FullSystem && system->highestEL() == EL2 ?
6015 system->resetAddr() : 0)
6016 .hypRead(FullSystem && system->highestEL() == EL2);
6017 InitReg(MISCREG_VBAR_EL3)
6018 .mon();
6019 InitReg(MISCREG_RVBAR_EL3)
6020 .reset(FullSystem && system->highestEL() == EL3 ?
6021 system->resetAddr() : 0)
6022 .mon().writes(0);
6023 InitReg(MISCREG_RMR_EL3)
6024 .mon();
6025 InitReg(MISCREG_CONTEXTIDR_EL1)
6026 .allPrivileges().exceptUserMode()
6027 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::contextidrEL1>)
6028 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::contextidrEL1>)
6029 .mapsTo(MISCREG_CONTEXTIDR_NS);
6031 .fault(EL2, defaultFaultE2H_EL2)
6032 .fault(EL3, defaultFaultE2H_EL3)
6033 .mapsTo(MISCREG_CONTEXTIDR_NS);
6034 InitReg(MISCREG_TPIDR_EL1)
6035 .allPrivileges().exceptUserMode()
6036 .faultRead(EL1, faultFgtEL1<true, &HFGTR::tpidrEL1>)
6037 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::tpidrEL1>)
6038 .mapsTo(MISCREG_TPIDRPRW_NS);
6039 InitReg(MISCREG_TPIDR_EL0)
6040 .allPrivileges()
6041 .faultRead(EL0, faultFgtEL0<true, &HFGTR::tpidrEL0>)
6042 .faultWrite(EL0, faultFgtEL0<false, &HFGTR::tpidrEL0>)
6043 .faultRead(EL1, faultFgtEL1<true, &HFGTR::tpidrEL0>)
6044 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::tpidrEL0>)
6045 .mapsTo(MISCREG_TPIDRURW_NS);
6046 InitReg(MISCREG_TPIDRRO_EL0)
6047 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
6048 .faultRead(EL0, faultFgtEL0<true, &HFGTR::tpidrroEL0>)
6049 .faultRead(EL1, faultFgtEL1<true, &HFGTR::tpidrroEL0>)
6050 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::tpidrroEL0>)
6051 .mapsTo(MISCREG_TPIDRURO_NS);
6052 InitReg(MISCREG_TPIDR_EL2)
6053 .hyp().mon()
6054 .mapsTo(MISCREG_HTPIDR);
6055 InitReg(MISCREG_TPIDR_EL3)
6056 .mon();
6057 // BEGIN Generic Timer (AArch64)
6058 InitReg(MISCREG_CNTFRQ_EL0)
6059 .reads(1)
6060 .faultRead(EL0, faultGenericTimerEL0)
6061 .highest(system)
6062 .privSecureWrite(aarch32EL3)
6063 .mapsTo(MISCREG_CNTFRQ);
6064 InitReg(MISCREG_CNTPCT_EL0)
6065 .unverifiable()
6066 .faultRead(EL0, faultCntpctEL0)
6067 .faultRead(EL1, faultCntpctEL1)
6068 .reads(1)
6069 .mapsTo(MISCREG_CNTPCT);
6070 InitReg(MISCREG_CNTVCT_EL0)
6071 .unverifiable()
6072 .faultRead(EL0, faultCntvctEL0)
6073 .faultRead(EL1, faultCntvctEL1)
6074 .reads(1)
6075 .mapsTo(MISCREG_CNTVCT);
6076 InitReg(MISCREG_CNTP_CTL_EL0)
6077 .allPrivileges()
6078 .fault(EL0, faultCntpCtlEL0)
6079 .fault(EL1, faultCntpCtlEL1)
6080 .res0(0xfffffffffffffff8)
6081 .mapsTo(MISCREG_CNTP_CTL_NS);
6082 InitReg(MISCREG_CNTP_CVAL_EL0)
6083 .allPrivileges()
6084 .fault(EL0, faultCntpCtlEL0)
6085 .fault(EL1, faultCntpCtlEL1)
6086 .mapsTo(MISCREG_CNTP_CVAL_NS);
6087 InitReg(MISCREG_CNTP_TVAL_EL0)
6088 .allPrivileges()
6089 .fault(EL0, faultCntpCtlEL0)
6090 .fault(EL1, faultCntpCtlEL1)
6091 .res0(0xffffffff00000000)
6092 .mapsTo(MISCREG_CNTP_TVAL_NS);
6093 InitReg(MISCREG_CNTV_CTL_EL0)
6094 .allPrivileges()
6095 .fault(EL0, faultCntvCtlEL0)
6096 .fault(EL1, faultCntvCtlEL1)
6097 .res0(0xfffffffffffffff8)
6098 .mapsTo(MISCREG_CNTV_CTL);
6099 InitReg(MISCREG_CNTV_CVAL_EL0)
6100 .allPrivileges()
6101 .fault(EL0, faultCntvCtlEL0)
6102 .fault(EL1, faultCntvCtlEL1)
6103 .mapsTo(MISCREG_CNTV_CVAL);
6104 InitReg(MISCREG_CNTV_TVAL_EL0)
6105 .allPrivileges()
6106 .fault(EL0, faultCntvCtlEL0)
6107 .fault(EL1, faultCntvCtlEL1)
6108 .res0(0xffffffff00000000)
6109 .mapsTo(MISCREG_CNTV_TVAL);
6110 InitReg(MISCREG_CNTP_CTL_EL02)
6111 .fault(EL2, defaultFaultE2H_EL2)
6112 .fault(EL3, defaultFaultE2H_EL3)
6113 .res0(0xfffffffffffffff8)
6114 .mapsTo(MISCREG_CNTP_CTL_NS);
6115 InitReg(MISCREG_CNTP_CVAL_EL02)
6116 .fault(EL2, defaultFaultE2H_EL2)
6117 .fault(EL3, defaultFaultE2H_EL3)
6118 .mapsTo(MISCREG_CNTP_CVAL_NS);
6119 InitReg(MISCREG_CNTP_TVAL_EL02)
6120 .fault(EL2, defaultFaultE2H_EL2)
6121 .fault(EL3, defaultFaultE2H_EL3)
6122 .res0(0xffffffff00000000)
6123 .mapsTo(MISCREG_CNTP_TVAL_NS);
6124 InitReg(MISCREG_CNTV_CTL_EL02)
6125 .fault(EL2, defaultFaultE2H_EL2)
6126 .fault(EL3, defaultFaultE2H_EL3)
6127 .res0(0xfffffffffffffff8)
6128 .mapsTo(MISCREG_CNTV_CTL);
6129 InitReg(MISCREG_CNTV_CVAL_EL02)
6130 .fault(EL2, defaultFaultE2H_EL2)
6131 .fault(EL3, defaultFaultE2H_EL3)
6132 .mapsTo(MISCREG_CNTV_CVAL);
6133 InitReg(MISCREG_CNTV_TVAL_EL02)
6134 .fault(EL2, defaultFaultE2H_EL2)
6135 .fault(EL3, defaultFaultE2H_EL3)
6136 .res0(0xffffffff00000000)
6137 .mapsTo(MISCREG_CNTV_TVAL);
6138 InitReg(MISCREG_CNTKCTL_EL1)
6139 .allPrivileges()
6140 .exceptUserMode()
6141 .res0(0xfffffffffffdfc00)
6142 .mapsTo(MISCREG_CNTKCTL);
6143 InitReg(MISCREG_CNTKCTL_EL12)
6144 .fault(EL2, defaultFaultE2H_EL2)
6145 .fault(EL3, defaultFaultE2H_EL3)
6146 .res0(0xfffffffffffdfc00)
6147 .mapsTo(MISCREG_CNTKCTL);
6148 InitReg(MISCREG_CNTPS_CTL_EL1)
6149 .mon()
6150 .privSecure()
6151 .fault(EL1, faultCntpsCtlEL1)
6152 .res0(0xfffffffffffffff8);
6153 InitReg(MISCREG_CNTPS_CVAL_EL1)
6154 .mon()
6155 .privSecure()
6156 .fault(EL1, faultCntpsCtlEL1);
6157 InitReg(MISCREG_CNTPS_TVAL_EL1)
6158 .mon()
6159 .privSecure()
6160 .fault(EL1, faultCntpsCtlEL1)
6161 .res0(0xffffffff00000000);
6162 InitReg(MISCREG_CNTHCTL_EL2)
6163 .mon()
6164 .hyp()
6165 .res0(0xfffffffffffc0000)
6166 .mapsTo(MISCREG_CNTHCTL);
6167 InitReg(MISCREG_CNTHP_CTL_EL2)
6168 .mon()
6169 .hyp()
6170 .res0(0xfffffffffffffff8)
6171 .mapsTo(MISCREG_CNTHP_CTL);
6172 InitReg(MISCREG_CNTHP_CVAL_EL2)
6173 .mon()
6174 .hyp()
6175 .mapsTo(MISCREG_CNTHP_CVAL);
6176 InitReg(MISCREG_CNTHP_TVAL_EL2)
6177 .mon()
6178 .hyp()
6179 .res0(0xffffffff00000000)
6180 .mapsTo(MISCREG_CNTHP_TVAL);
6181 InitReg(MISCREG_CNTHPS_CTL_EL2)
6182 .mon(sel2_implemented)
6183 .hypSecure(sel2_implemented)
6184 .res0(0xfffffffffffffff8);
6186 .mon(sel2_implemented)
6187 .hypSecure(sel2_implemented);
6189 .mon(sel2_implemented)
6190 .hypSecure(sel2_implemented)
6191 .res0(0xffffffff00000000);
6192 InitReg(MISCREG_CNTHV_CTL_EL2)
6193 .mon(vhe_implemented)
6194 .hyp()
6195 .res0(0xfffffffffffffff8);
6196 InitReg(MISCREG_CNTHV_CVAL_EL2)
6197 .mon(vhe_implemented)
6198 .hyp(vhe_implemented);
6199 InitReg(MISCREG_CNTHV_TVAL_EL2)
6200 .mon(vhe_implemented)
6201 .hyp(vhe_implemented)
6202 .res0(0xffffffff00000000);
6203 InitReg(MISCREG_CNTHVS_CTL_EL2)
6204 .mon(vhe_implemented && sel2_implemented)
6205 .hypSecure(vhe_implemented && sel2_implemented)
6206 .res0(0xfffffffffffffff8);
6208 .mon(vhe_implemented && sel2_implemented)
6209 .hypSecure(vhe_implemented && sel2_implemented);
6211 .mon(vhe_implemented && sel2_implemented)
6212 .hypSecure(vhe_implemented && sel2_implemented)
6213 .res0(0xffffffff00000000);
6214 // ENDIF Armv8.1-VHE
6215 InitReg(MISCREG_CNTVOFF_EL2)
6216 .mon()
6217 .hyp()
6218 .mapsTo(MISCREG_CNTVOFF);
6219 // END Generic Timer (AArch64)
6220 InitReg(MISCREG_PMEVCNTR0_EL0)
6221 .allPrivileges()
6222 .mapsTo(MISCREG_PMEVCNTR0);
6223 InitReg(MISCREG_PMEVCNTR1_EL0)
6224 .allPrivileges()
6225 .mapsTo(MISCREG_PMEVCNTR1);
6226 InitReg(MISCREG_PMEVCNTR2_EL0)
6227 .allPrivileges()
6228 .mapsTo(MISCREG_PMEVCNTR2);
6229 InitReg(MISCREG_PMEVCNTR3_EL0)
6230 .allPrivileges()
6231 .mapsTo(MISCREG_PMEVCNTR3);
6232 InitReg(MISCREG_PMEVCNTR4_EL0)
6233 .allPrivileges()
6234 .mapsTo(MISCREG_PMEVCNTR4);
6235 InitReg(MISCREG_PMEVCNTR5_EL0)
6236 .allPrivileges()
6237 .mapsTo(MISCREG_PMEVCNTR5);
6238 InitReg(MISCREG_PMEVTYPER0_EL0)
6239 .allPrivileges()
6240 .mapsTo(MISCREG_PMEVTYPER0);
6241 InitReg(MISCREG_PMEVTYPER1_EL0)
6242 .allPrivileges()
6243 .mapsTo(MISCREG_PMEVTYPER1);
6244 InitReg(MISCREG_PMEVTYPER2_EL0)
6245 .allPrivileges()
6246 .mapsTo(MISCREG_PMEVTYPER2);
6247 InitReg(MISCREG_PMEVTYPER3_EL0)
6248 .allPrivileges()
6249 .mapsTo(MISCREG_PMEVTYPER3);
6250 InitReg(MISCREG_PMEVTYPER4_EL0)
6251 .allPrivileges()
6252 .mapsTo(MISCREG_PMEVTYPER4);
6253 InitReg(MISCREG_PMEVTYPER5_EL0)
6254 .allPrivileges()
6255 .mapsTo(MISCREG_PMEVTYPER5);
6256 InitReg(MISCREG_IL1DATA0_EL1)
6257 .allPrivileges().exceptUserMode();
6258 InitReg(MISCREG_IL1DATA1_EL1)
6259 .allPrivileges().exceptUserMode();
6260 InitReg(MISCREG_IL1DATA2_EL1)
6261 .allPrivileges().exceptUserMode();
6262 InitReg(MISCREG_IL1DATA3_EL1)
6263 .allPrivileges().exceptUserMode();
6264 InitReg(MISCREG_DL1DATA0_EL1)
6265 .allPrivileges().exceptUserMode();
6266 InitReg(MISCREG_DL1DATA1_EL1)
6267 .allPrivileges().exceptUserMode();
6268 InitReg(MISCREG_DL1DATA2_EL1)
6269 .allPrivileges().exceptUserMode();
6270 InitReg(MISCREG_DL1DATA3_EL1)
6271 .allPrivileges().exceptUserMode();
6272 InitReg(MISCREG_DL1DATA4_EL1)
6273 .allPrivileges().exceptUserMode();
6274 InitReg(MISCREG_L2ACTLR_EL1)
6275 .allPrivileges().exceptUserMode();
6276 InitReg(MISCREG_CPUACTLR_EL1)
6277 .allPrivileges().exceptUserMode();
6278 InitReg(MISCREG_CPUECTLR_EL1)
6279 .allPrivileges().exceptUserMode();
6280 InitReg(MISCREG_CPUMERRSR_EL1)
6281 .allPrivileges().exceptUserMode();
6282 InitReg(MISCREG_L2MERRSR_EL1)
6283 .warnNotFail()
6284 .fault(faultUnimplemented);
6285 InitReg(MISCREG_CBAR_EL1)
6286 .allPrivileges().exceptUserMode().writes(0);
6287 InitReg(MISCREG_CONTEXTIDR_EL2)
6288 .mon().hyp();
6289
6290 // GICv3 AArch64
6291 InitReg(MISCREG_ICC_PMR_EL1)
6292 .res0(0xffffff00) // [31:8]
6293 .allPrivileges().exceptUserMode()
6294 .mapsTo(MISCREG_ICC_PMR);
6295 InitReg(MISCREG_ICC_IAR0_EL1)
6296 .allPrivileges().exceptUserMode().writes(0)
6297 .mapsTo(MISCREG_ICC_IAR0);
6298 InitReg(MISCREG_ICC_EOIR0_EL1)
6299 .allPrivileges().exceptUserMode().reads(0)
6300 .mapsTo(MISCREG_ICC_EOIR0);
6301 InitReg(MISCREG_ICC_HPPIR0_EL1)
6302 .allPrivileges().exceptUserMode().writes(0)
6303 .mapsTo(MISCREG_ICC_HPPIR0);
6304 InitReg(MISCREG_ICC_BPR0_EL1)
6305 .res0(0xfffffff8) // [31:3]
6306 .allPrivileges().exceptUserMode()
6307 .mapsTo(MISCREG_ICC_BPR0);
6308 InitReg(MISCREG_ICC_AP0R0_EL1)
6309 .allPrivileges().exceptUserMode()
6310 .mapsTo(MISCREG_ICC_AP0R0);
6311 InitReg(MISCREG_ICC_AP0R1_EL1)
6312 .allPrivileges().exceptUserMode()
6313 .mapsTo(MISCREG_ICC_AP0R1);
6314 InitReg(MISCREG_ICC_AP0R2_EL1)
6315 .allPrivileges().exceptUserMode()
6316 .mapsTo(MISCREG_ICC_AP0R2);
6317 InitReg(MISCREG_ICC_AP0R3_EL1)
6318 .allPrivileges().exceptUserMode()
6319 .mapsTo(MISCREG_ICC_AP0R3);
6320 InitReg(MISCREG_ICC_AP1R0_EL1)
6321 .banked64()
6322 .mapsTo(MISCREG_ICC_AP1R0);
6324 .bankedChild()
6325 .allPrivileges().exceptUserMode()
6326 .mapsTo(MISCREG_ICC_AP1R0_NS);
6328 .bankedChild()
6329 .allPrivileges().exceptUserMode()
6330 .mapsTo(MISCREG_ICC_AP1R0_S);
6331 InitReg(MISCREG_ICC_AP1R1_EL1)
6332 .banked64()
6333 .mapsTo(MISCREG_ICC_AP1R1);
6335 .bankedChild()
6336 .allPrivileges().exceptUserMode()
6337 .mapsTo(MISCREG_ICC_AP1R1_NS);
6339 .bankedChild()
6340 .allPrivileges().exceptUserMode()
6341 .mapsTo(MISCREG_ICC_AP1R1_S);
6342 InitReg(MISCREG_ICC_AP1R2_EL1)
6343 .banked64()
6344 .mapsTo(MISCREG_ICC_AP1R2);
6346 .bankedChild()
6347 .allPrivileges().exceptUserMode()
6348 .mapsTo(MISCREG_ICC_AP1R2_NS);
6350 .bankedChild()
6351 .allPrivileges().exceptUserMode()
6352 .mapsTo(MISCREG_ICC_AP1R2_S);
6353 InitReg(MISCREG_ICC_AP1R3_EL1)
6354 .banked64()
6355 .mapsTo(MISCREG_ICC_AP1R3);
6357 .bankedChild()
6358 .allPrivileges().exceptUserMode()
6359 .mapsTo(MISCREG_ICC_AP1R3_NS);
6361 .bankedChild()
6362 .allPrivileges().exceptUserMode()
6363 .mapsTo(MISCREG_ICC_AP1R3_S);
6364 InitReg(MISCREG_ICC_DIR_EL1)
6365 .res0(0xFF000000) // [31:24]
6366 .allPrivileges().exceptUserMode().reads(0)
6367 .mapsTo(MISCREG_ICC_DIR);
6368 InitReg(MISCREG_ICC_RPR_EL1)
6369 .allPrivileges().exceptUserMode().writes(0)
6370 .mapsTo(MISCREG_ICC_RPR);
6371 InitReg(MISCREG_ICC_SGI1R_EL1)
6372 .allPrivileges().exceptUserMode().reads(0)
6373 .faultWrite(EL1, faultIccSgiEL1)
6374 .faultWrite(EL2, faultIccSgiEL2)
6375 .mapsTo(MISCREG_ICC_SGI1R);
6376 InitReg(MISCREG_ICC_ASGI1R_EL1)
6377 .allPrivileges().exceptUserMode().reads(0)
6378 .faultWrite(EL1, faultIccSgiEL1)
6379 .faultWrite(EL2, faultIccSgiEL2)
6380 .mapsTo(MISCREG_ICC_ASGI1R);
6381 InitReg(MISCREG_ICC_SGI0R_EL1)
6382 .allPrivileges().exceptUserMode().reads(0)
6383 .faultWrite(EL1, faultIccSgiEL1)
6384 .faultWrite(EL2, faultIccSgiEL2)
6385 .mapsTo(MISCREG_ICC_SGI0R);
6386 InitReg(MISCREG_ICC_IAR1_EL1)
6387 .allPrivileges().exceptUserMode().writes(0)
6388 .mapsTo(MISCREG_ICC_IAR1);
6389 InitReg(MISCREG_ICC_EOIR1_EL1)
6390 .res0(0xFF000000) // [31:24]
6391 .allPrivileges().exceptUserMode().reads(0)
6392 .mapsTo(MISCREG_ICC_EOIR1);
6393 InitReg(MISCREG_ICC_HPPIR1_EL1)
6394 .allPrivileges().exceptUserMode().writes(0)
6395 .mapsTo(MISCREG_ICC_HPPIR1);
6396 InitReg(MISCREG_ICC_BPR1_EL1)
6397 .banked64()
6398 .mapsTo(MISCREG_ICC_BPR1);
6400 .bankedChild()
6401 .res0(0xfffffff8) // [31:3]
6402 .allPrivileges().exceptUserMode()
6403 .mapsTo(MISCREG_ICC_BPR1_NS);
6404 InitReg(MISCREG_ICC_BPR1_EL1_S)
6405 .bankedChild()
6406 .res0(0xfffffff8) // [31:3]
6407 .secure().exceptUserMode()
6408 .mapsTo(MISCREG_ICC_BPR1_S);
6409 InitReg(MISCREG_ICC_CTLR_EL1)
6410 .banked64()
6411 .mapsTo(MISCREG_ICC_CTLR);
6413 .bankedChild()
6414 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
6415 .allPrivileges().exceptUserMode()
6416 .mapsTo(MISCREG_ICC_CTLR_NS);
6417 InitReg(MISCREG_ICC_CTLR_EL1_S)
6418 .bankedChild()
6419 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
6420 .secure().exceptUserMode()
6421 .mapsTo(MISCREG_ICC_CTLR_S);
6422 InitReg(MISCREG_ICC_SRE_EL1)
6423 .banked()
6424 .mapsTo(MISCREG_ICC_SRE);
6425 InitReg(MISCREG_ICC_SRE_EL1_NS)
6426 .bankedChild()
6427 .res0(0xFFFFFFF8) // [31:3]
6428 .allPrivileges().exceptUserMode()
6429 .mapsTo(MISCREG_ICC_SRE_NS);
6430 InitReg(MISCREG_ICC_SRE_EL1_S)
6431 .bankedChild()
6432 .res0(0xFFFFFFF8) // [31:3]
6433 .secure().exceptUserMode()
6434 .mapsTo(MISCREG_ICC_SRE_S);
6436 .res0(0xFFFFFFFE) // [31:1]
6437 .allPrivileges().exceptUserMode()
6438 .faultRead(EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6439 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6440 .mapsTo(MISCREG_ICC_IGRPEN0);
6442 .banked64()
6443 .faultRead(EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6444 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6445 .mapsTo(MISCREG_ICC_IGRPEN1);
6447 .bankedChild()
6448 .res0(0xFFFFFFFE) // [31:1]
6449 .allPrivileges().exceptUserMode()
6450 .mapsTo(MISCREG_ICC_IGRPEN1_NS);
6452 .bankedChild()
6453 .res0(0xFFFFFFFE) // [31:1]
6454 .secure().exceptUserMode()
6455 .mapsTo(MISCREG_ICC_IGRPEN1_S);
6456 InitReg(MISCREG_ICC_SRE_EL2)
6457 .hyp().mon()
6458 .mapsTo(MISCREG_ICC_HSRE);
6459 InitReg(MISCREG_ICC_CTLR_EL3)
6460 .mon()
6461 .mapsTo(MISCREG_ICC_MCTLR);
6462 InitReg(MISCREG_ICC_SRE_EL3)
6463 .mon()
6464 .mapsTo(MISCREG_ICC_MSRE);
6466 .mon()
6467 .mapsTo(MISCREG_ICC_MGRPEN1);
6468
6469 InitReg(MISCREG_ICH_AP0R0_EL2)
6470 .hyp().mon()
6471 .mapsTo(MISCREG_ICH_AP0R0);
6472 InitReg(MISCREG_ICH_AP0R1_EL2)
6473 .hyp().mon()
6474 .mapsTo(MISCREG_ICH_AP0R1);
6475 InitReg(MISCREG_ICH_AP0R2_EL2)
6476 .hyp().mon()
6477 .mapsTo(MISCREG_ICH_AP0R2);
6478 InitReg(MISCREG_ICH_AP0R3_EL2)
6479 .hyp().mon()
6480 .mapsTo(MISCREG_ICH_AP0R3);
6481 InitReg(MISCREG_ICH_AP1R0_EL2)
6482 .hyp().mon()
6483 .mapsTo(MISCREG_ICH_AP1R0);
6484 InitReg(MISCREG_ICH_AP1R1_EL2)
6485 .hyp().mon()
6486 .mapsTo(MISCREG_ICH_AP1R1);
6487 InitReg(MISCREG_ICH_AP1R2_EL2)
6488 .hyp().mon()
6489 .mapsTo(MISCREG_ICH_AP1R2);
6490 InitReg(MISCREG_ICH_AP1R3_EL2)
6491 .hyp().mon()
6492 .mapsTo(MISCREG_ICH_AP1R3);
6493 InitReg(MISCREG_ICH_HCR_EL2)
6494 .hyp().mon()
6495 .mapsTo(MISCREG_ICH_HCR);
6496 InitReg(MISCREG_ICH_VTR_EL2)
6497 .hyp().mon().writes(0)
6498 .mapsTo(MISCREG_ICH_VTR);
6499 InitReg(MISCREG_ICH_MISR_EL2)
6500 .hyp().mon().writes(0)
6501 .mapsTo(MISCREG_ICH_MISR);
6502 InitReg(MISCREG_ICH_EISR_EL2)
6503 .hyp().mon().writes(0)
6504 .mapsTo(MISCREG_ICH_EISR);
6505 InitReg(MISCREG_ICH_ELRSR_EL2)
6506 .hyp().mon().writes(0)
6507 .mapsTo(MISCREG_ICH_ELRSR);
6508 InitReg(MISCREG_ICH_VMCR_EL2)
6509 .hyp().mon()
6510 .mapsTo(MISCREG_ICH_VMCR);
6511 InitReg(MISCREG_ICH_LR0_EL2)
6512 .hyp().mon()
6514 InitReg(MISCREG_ICH_LR1_EL2)
6515 .hyp().mon()
6517 InitReg(MISCREG_ICH_LR2_EL2)
6518 .hyp().mon()
6520 InitReg(MISCREG_ICH_LR3_EL2)
6521 .hyp().mon()
6523 InitReg(MISCREG_ICH_LR4_EL2)
6524 .hyp().mon()
6526 InitReg(MISCREG_ICH_LR5_EL2)
6527 .hyp().mon()
6529 InitReg(MISCREG_ICH_LR6_EL2)
6530 .hyp().mon()
6532 InitReg(MISCREG_ICH_LR7_EL2)
6533 .hyp().mon()
6535 InitReg(MISCREG_ICH_LR8_EL2)
6536 .hyp().mon()
6538 InitReg(MISCREG_ICH_LR9_EL2)
6539 .hyp().mon()
6541 InitReg(MISCREG_ICH_LR10_EL2)
6542 .hyp().mon()
6544 InitReg(MISCREG_ICH_LR11_EL2)
6545 .hyp().mon()
6547 InitReg(MISCREG_ICH_LR12_EL2)
6548 .hyp().mon()
6550 InitReg(MISCREG_ICH_LR13_EL2)
6551 .hyp().mon()
6553 InitReg(MISCREG_ICH_LR14_EL2)
6554 .hyp().mon()
6556 InitReg(MISCREG_ICH_LR15_EL2)
6557 .hyp().mon()
6559
6560 // GICv3 AArch32
6561 InitReg(MISCREG_ICC_AP0R0)
6562 .allPrivileges().exceptUserMode();
6563 InitReg(MISCREG_ICC_AP0R1)
6564 .allPrivileges().exceptUserMode();
6565 InitReg(MISCREG_ICC_AP0R2)
6566 .allPrivileges().exceptUserMode();
6567 InitReg(MISCREG_ICC_AP0R3)
6568 .allPrivileges().exceptUserMode();
6569 InitReg(MISCREG_ICC_AP1R0)
6570 .allPrivileges().exceptUserMode();
6571 InitReg(MISCREG_ICC_AP1R0_NS)
6572 .allPrivileges().exceptUserMode();
6573 InitReg(MISCREG_ICC_AP1R0_S)
6574 .allPrivileges().exceptUserMode();
6575 InitReg(MISCREG_ICC_AP1R1)
6576 .allPrivileges().exceptUserMode();
6577 InitReg(MISCREG_ICC_AP1R1_NS)
6578 .allPrivileges().exceptUserMode();
6579 InitReg(MISCREG_ICC_AP1R1_S)
6580 .allPrivileges().exceptUserMode();
6581 InitReg(MISCREG_ICC_AP1R2)
6582 .allPrivileges().exceptUserMode();
6583 InitReg(MISCREG_ICC_AP1R2_NS)
6584 .allPrivileges().exceptUserMode();
6585 InitReg(MISCREG_ICC_AP1R2_S)
6586 .allPrivileges().exceptUserMode();
6587 InitReg(MISCREG_ICC_AP1R3)
6588 .allPrivileges().exceptUserMode();
6589 InitReg(MISCREG_ICC_AP1R3_NS)
6590 .allPrivileges().exceptUserMode();
6591 InitReg(MISCREG_ICC_AP1R3_S)
6592 .allPrivileges().exceptUserMode();
6593 InitReg(MISCREG_ICC_ASGI1R)
6594 .allPrivileges().exceptUserMode().reads(0);
6595 InitReg(MISCREG_ICC_BPR0)
6596 .allPrivileges().exceptUserMode();
6597 InitReg(MISCREG_ICC_BPR1)
6598 .allPrivileges().exceptUserMode();
6599 InitReg(MISCREG_ICC_BPR1_NS)
6600 .allPrivileges().exceptUserMode();
6601 InitReg(MISCREG_ICC_BPR1_S)
6602 .allPrivileges().exceptUserMode();
6603 InitReg(MISCREG_ICC_CTLR)
6604 .allPrivileges().exceptUserMode();
6605 InitReg(MISCREG_ICC_CTLR_NS)
6606 .allPrivileges().exceptUserMode();
6607 InitReg(MISCREG_ICC_CTLR_S)
6608 .allPrivileges().exceptUserMode();
6609 InitReg(MISCREG_ICC_DIR)
6610 .allPrivileges().exceptUserMode().reads(0);
6611 InitReg(MISCREG_ICC_EOIR0)
6612 .allPrivileges().exceptUserMode().reads(0);
6613 InitReg(MISCREG_ICC_EOIR1)
6614 .allPrivileges().exceptUserMode().reads(0);
6615 InitReg(MISCREG_ICC_HPPIR0)
6616 .allPrivileges().exceptUserMode().writes(0);
6617 InitReg(MISCREG_ICC_HPPIR1)
6618 .allPrivileges().exceptUserMode().writes(0);
6619 InitReg(MISCREG_ICC_HSRE)
6620 .hyp().mon();
6621 InitReg(MISCREG_ICC_IAR0)
6622 .allPrivileges().exceptUserMode().writes(0);
6623 InitReg(MISCREG_ICC_IAR1)
6624 .allPrivileges().exceptUserMode().writes(0);
6625 InitReg(MISCREG_ICC_IGRPEN0)
6626 .allPrivileges().exceptUserMode();
6627 InitReg(MISCREG_ICC_IGRPEN1)
6628 .allPrivileges().exceptUserMode();
6629 InitReg(MISCREG_ICC_IGRPEN1_NS)
6630 .allPrivileges().exceptUserMode();
6631 InitReg(MISCREG_ICC_IGRPEN1_S)
6632 .allPrivileges().exceptUserMode();
6633 InitReg(MISCREG_ICC_MCTLR)
6634 .mon();
6635 InitReg(MISCREG_ICC_MGRPEN1)
6636 .mon();
6637 InitReg(MISCREG_ICC_MSRE)
6638 .mon();
6639 InitReg(MISCREG_ICC_PMR)
6640 .allPrivileges().exceptUserMode();
6641 InitReg(MISCREG_ICC_RPR)
6642 .allPrivileges().exceptUserMode().writes(0);
6643 InitReg(MISCREG_ICC_SGI0R)
6644 .allPrivileges().exceptUserMode().reads(0);
6645 InitReg(MISCREG_ICC_SGI1R)
6646 .allPrivileges().exceptUserMode().reads(0);
6647 InitReg(MISCREG_ICC_SRE)
6648 .allPrivileges().exceptUserMode();
6649 InitReg(MISCREG_ICC_SRE_NS)
6650 .allPrivileges().exceptUserMode();
6651 InitReg(MISCREG_ICC_SRE_S)
6652 .allPrivileges().exceptUserMode();
6653
6654 InitReg(MISCREG_ICH_AP0R0)
6655 .hyp().mon();
6656 InitReg(MISCREG_ICH_AP0R1)
6657 .hyp().mon();
6658 InitReg(MISCREG_ICH_AP0R2)
6659 .hyp().mon();
6660 InitReg(MISCREG_ICH_AP0R3)
6661 .hyp().mon();
6662 InitReg(MISCREG_ICH_AP1R0)
6663 .hyp().mon();
6664 InitReg(MISCREG_ICH_AP1R1)
6665 .hyp().mon();
6666 InitReg(MISCREG_ICH_AP1R2)
6667 .hyp().mon();
6668 InitReg(MISCREG_ICH_AP1R3)
6669 .hyp().mon();
6670 InitReg(MISCREG_ICH_HCR)
6671 .hyp().mon();
6672 InitReg(MISCREG_ICH_VTR)
6673 .hyp().mon().writes(0);
6674 InitReg(MISCREG_ICH_MISR)
6675 .hyp().mon().writes(0);
6676 InitReg(MISCREG_ICH_EISR)
6677 .hyp().mon().writes(0);
6678 InitReg(MISCREG_ICH_ELRSR)
6679 .hyp().mon().writes(0);
6680 InitReg(MISCREG_ICH_VMCR)
6681 .hyp().mon();
6682 InitReg(MISCREG_ICH_LR0)
6683 .hyp().mon();
6684 InitReg(MISCREG_ICH_LR1)
6685 .hyp().mon();
6686 InitReg(MISCREG_ICH_LR2)
6687 .hyp().mon();
6688 InitReg(MISCREG_ICH_LR3)
6689 .hyp().mon();
6690 InitReg(MISCREG_ICH_LR4)
6691 .hyp().mon();
6692 InitReg(MISCREG_ICH_LR5)
6693 .hyp().mon();
6694 InitReg(MISCREG_ICH_LR6)
6695 .hyp().mon();
6696 InitReg(MISCREG_ICH_LR7)
6697 .hyp().mon();
6698 InitReg(MISCREG_ICH_LR8)
6699 .hyp().mon();
6700 InitReg(MISCREG_ICH_LR9)
6701 .hyp().mon();
6702 InitReg(MISCREG_ICH_LR10)
6703 .hyp().mon();
6704 InitReg(MISCREG_ICH_LR11)
6705 .hyp().mon();
6706 InitReg(MISCREG_ICH_LR12)
6707 .hyp().mon();
6708 InitReg(MISCREG_ICH_LR13)
6709 .hyp().mon();
6710 InitReg(MISCREG_ICH_LR14)
6711 .hyp().mon();
6712 InitReg(MISCREG_ICH_LR15)
6713 .hyp().mon();
6714 InitReg(MISCREG_ICH_LRC0)
6715 .hyp().mon();
6716 InitReg(MISCREG_ICH_LRC1)
6717 .hyp().mon();
6718 InitReg(MISCREG_ICH_LRC2)
6719 .hyp().mon();
6720 InitReg(MISCREG_ICH_LRC3)
6721 .hyp().mon();
6722 InitReg(MISCREG_ICH_LRC4)
6723 .hyp().mon();
6724 InitReg(MISCREG_ICH_LRC5)
6725 .hyp().mon();
6726 InitReg(MISCREG_ICH_LRC6)
6727 .hyp().mon();
6728 InitReg(MISCREG_ICH_LRC7)
6729 .hyp().mon();
6730 InitReg(MISCREG_ICH_LRC8)
6731 .hyp().mon();
6732 InitReg(MISCREG_ICH_LRC9)
6733 .hyp().mon();
6734 InitReg(MISCREG_ICH_LRC10)
6735 .hyp().mon();
6736 InitReg(MISCREG_ICH_LRC11)
6737 .hyp().mon();
6738 InitReg(MISCREG_ICH_LRC12)
6739 .hyp().mon();
6740 InitReg(MISCREG_ICH_LRC13)
6741 .hyp().mon();
6742 InitReg(MISCREG_ICH_LRC14)
6743 .hyp().mon();
6744 InitReg(MISCREG_ICH_LRC15)
6745 .hyp().mon();
6746
6747 // SVE
6749 .reset([this](){
6750 AA64ZFR0 zfr0_el1 = 0;
6751 zfr0_el1.f32mm = release->has(ArmExtension::FEAT_F32MM) ? 1 : 0;
6752 zfr0_el1.f64mm = release->has(ArmExtension::FEAT_F64MM) ? 1 : 0;
6753 zfr0_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 1 : 0;
6754 zfr0_el1.b16b16 =
6755 release->has(ArmExtension::FEAT_SVE_B16B16) ? 0x1 : 0x0;
6756 zfr0_el1.bf16 = release->has(ArmExtension::FEAT_EBF16) ? 0x2 :
6757 (release->has(ArmExtension::FEAT_BF16) ? 0x1 : 0x0);
6758 zfr0_el1.sveVer =
6759 release->has(ArmExtension::FEAT_SVE2p1)
6760 ? 0x2
6761 : (release->has(ArmExtension::FEAT_SVE2) ? 0x1 : 0x0);
6762 zfr0_el1.bitPerm =
6763 release->has(ArmExtension::FEAT_SVE_BitPerm) ? 0x1 : 0x0;
6764 return zfr0_el1;
6765 }())
6766 .faultRead(EL0, faultIdst)
6767 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
6768 .allPrivileges().exceptUserMode().writes(0);
6769 InitReg(MISCREG_ZCR_EL3)
6770 .reset(sveVL - 1)
6771 .fault(EL3, faultZcrEL3)
6772 .mon();
6773 InitReg(MISCREG_ZCR_EL2)
6774 .reset(sveVL - 1)
6775 .fault(EL2, faultZcrEL2)
6776 .fault(EL3, faultZcrEL3)
6777 .hyp().mon();
6778 InitReg(MISCREG_ZCR_EL12)
6779 .fault(EL2, faultVheEL2<faultZcrEL2>)
6780 .fault(EL3, defaultFaultE2H_EL3)
6781 .mapsTo(MISCREG_ZCR_EL1);
6782 InitReg(MISCREG_ZCR_EL1)
6783 .reset(sveVL - 1)
6784 .fault(EL1, faultZcrEL1)
6785 .fault(EL2, faultZcrEL2)
6786 .fault(EL3, faultZcrEL3)
6787 .allPrivileges().exceptUserMode();
6788
6789 // SME
6791 .reset([](){
6792 AA64SMFR0 smfr0_el1 = 0;
6793 smfr0_el1.f32f32 = 0x1;
6794 // The following BF16F32 is actually not implemented due to a
6795 // lack of BF16 support in gem5's fplib. However, as per the
6796 // SME spec the _only_ allowed value is 0x1.
6797 smfr0_el1.b16f32 = 0x1;
6798 smfr0_el1.f16f32 = 0x1;
6799 smfr0_el1.i8i32 = 0xF;
6800 smfr0_el1.f64f64 = 0x1;
6801 smfr0_el1.i16i64 = 0xF;
6802 smfr0_el1.smEver = 0;
6803 smfr0_el1.fa64 = 0x1;
6804 return smfr0_el1;
6805 }())
6806 .faultRead(EL0, faultIdst)
6807 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
6808 .allPrivileges().writes(0);
6809 InitReg(MISCREG_SVCR)
6810 .res0([](){
6811 SVCR svcr_mask = 0;
6812 svcr_mask.sm = 1;
6813 svcr_mask.za = 1;
6814 return ~svcr_mask;
6815 }())
6816 .fault(EL0, faultSmenEL0)
6817 .fault(EL1, faultSmenEL1)
6818 .fault(EL2, faultTsmSmen)
6819 .fault(EL3, faultEsm)
6820 .allPrivileges();
6821 InitReg(MISCREG_SMIDR_EL1)
6822 .reset([](){
6823 SMIDR smidr_el1 = 0;
6824 smidr_el1.affinity = 0;
6825 smidr_el1.smps = 0;
6826 smidr_el1.implementer = 0x41;
6827 return smidr_el1;
6828 }())
6829 .faultRead(EL0, faultIdst)
6830 .faultRead(EL1, faultHcrEL1<&HCR::tid1>)
6831 .allPrivileges().writes(0);
6832 InitReg(MISCREG_SMPRI_EL1)
6833 .res0(mask(63, 4))
6834 .fault(EL1, faultEsm)
6835 .fault(EL2, faultEsm)
6836 .fault(EL3, faultEsm)
6837 .allPrivileges().exceptUserMode();
6838 InitReg(MISCREG_SMPRIMAP_EL2)
6839 .fault(EL2, faultEsm)
6840 .fault(EL3, faultEsm)
6841 .hyp().mon();
6842 InitReg(MISCREG_SMCR_EL3)
6843 .reset([this](){
6844 // We want to support FEAT_SME_FA64. Therefore, we enable it in
6845 // all SMCR_ELx registers by default. Runtime software might
6846 // change this later, but given that gem5 doesn't disable
6847 // instructions based on this flag we default to the most
6848 // representative value.
6849 SMCR smcr_el3 = 0;
6850 smcr_el3.fa64 = 1;
6851 smcr_el3.len = smeVL - 1;
6852 return smcr_el3;
6853 }())
6854 .fault(EL3, faultEsm)
6855 .mon();
6856 InitReg(MISCREG_SMCR_EL2)
6857 .reset([this](){
6858 // We want to support FEAT_SME_FA64. Therefore, we enable it in
6859 // all SMCR_ELx registers by default. Runtime software might
6860 // change this later, but given that gem5 doesn't disable
6861 // instructions based on this flag we default to the most
6862 // representative value.
6863 SMCR smcr_el2 = 0;
6864 smcr_el2.fa64 = 1;
6865 smcr_el2.len = smeVL - 1;
6866 return smcr_el2;
6867 }())
6868 .fault(EL2, faultTsmSmen)
6869 .fault(EL3, faultEsm)
6870 .hyp().mon();
6871 InitReg(MISCREG_SMCR_EL12)
6872 .allPrivileges().exceptUserMode();
6873 InitReg(MISCREG_SMCR_EL1)
6874 .reset([this](){
6875 // We want to support FEAT_SME_FA64. Therefore, we enable it in
6876 // all SMCR_ELx registers by default. Runtime software might
6877 // change this later, but given that gem5 doesn't disable
6878 // instructions based on this flag we default to the most
6879 // representative value.
6880 SMCR smcr_el1 = 0;
6881 smcr_el1.fa64 = 1;
6882 smcr_el1.len = smeVL - 1;
6883 return smcr_el1;
6884 }())
6885 .fault(EL1, faultSmenEL1)
6886 .fault(EL2, faultTsmSmen)
6887 .fault(EL3, faultEsm)
6888 .allPrivileges().exceptUserMode();
6889 InitReg(MISCREG_TPIDR2_EL0)
6890 .allPrivileges();
6891
6892 InitReg(MISCREG_RNDR)
6893 .faultRead(EL0, faultRng)
6894 .faultRead(EL1, faultRng)
6895 .faultRead(EL2, faultRng)
6896 .faultRead(EL3, faultRng)
6897 .unverifiable()
6898 .allPrivileges().writes(0);
6899 InitReg(MISCREG_RNDRRS)
6900 .faultRead(EL0, faultRng)
6901 .faultRead(EL1, faultRng)
6902 .faultRead(EL2, faultRng)
6903 .faultRead(EL3, faultRng)
6904 .unverifiable()
6905 .allPrivileges().writes(0);
6906
6907 // FEAT_FGT extension
6908 InitReg(MISCREG_HFGRTR_EL2)
6909 .fault(EL2, faultFgtCtrlRegs)
6910 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6911 InitReg(MISCREG_HFGWTR_EL2)
6912 .fault(EL2, faultFgtCtrlRegs)
6913 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6914 InitReg(MISCREG_HFGITR_EL2)
6915 .fault(EL2, faultFgtCtrlRegs)
6916 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6917 InitReg(MISCREG_HDFGRTR_EL2)
6918 .fault(EL2, faultFgtCtrlRegs)
6919 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6920 InitReg(MISCREG_HDFGWTR_EL2)
6921 .fault(EL2, faultFgtCtrlRegs)
6922 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6923 InitReg(MISCREG_HAFGRTR_EL2)
6924 .fault(EL2, faultFgtCtrlRegs)
6925 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6926
6927 // Dummy registers
6928 InitReg(MISCREG_NOP)
6929 .allPrivileges();
6930 InitReg(MISCREG_RAZ)
6931 .allPrivileges().exceptUserMode().writes(0);
6932 InitReg(MISCREG_UNKNOWN);
6933 InitReg(MISCREG_IMPDEF_UNIMPL)
6934 .fault(EL1, faultImpdefUnimplEL1)
6935 .fault(EL2, faultUnimplemented)
6936 .fault(EL3, faultUnimplemented)
6937 .warnNotFail(impdefAsNop);
6938
6939 // RAS extension (unimplemented)
6940 InitReg(MISCREG_ERRIDR_EL1)
6941 .warnNotFail()
6942 .fault(faultUnimplemented);
6943 InitReg(MISCREG_ERRSELR_EL1)
6944 .warnNotFail()
6945 .fault(faultUnimplemented);
6946 InitReg(MISCREG_ERXFR_EL1)
6947 .warnNotFail()
6948 .fault(faultUnimplemented);
6949 InitReg(MISCREG_ERXCTLR_EL1)
6950 .warnNotFail()
6951 .fault(faultUnimplemented);
6952 InitReg(MISCREG_ERXSTATUS_EL1)
6953 .warnNotFail()
6954 .fault(faultUnimplemented);
6955 InitReg(MISCREG_ERXADDR_EL1)
6956 .warnNotFail()
6957 .fault(faultUnimplemented);
6958 InitReg(MISCREG_ERXMISC0_EL1)
6959 .warnNotFail()
6960 .fault(faultUnimplemented);
6961 InitReg(MISCREG_ERXMISC1_EL1)
6962 .warnNotFail()
6963 .fault(faultUnimplemented);
6964 InitReg(MISCREG_DISR_EL1)
6965 .warnNotFail()
6966 .fault(faultUnimplemented);
6967 InitReg(MISCREG_VSESR_EL2)
6968 .warnNotFail()
6969 .fault(faultUnimplemented);
6970 InitReg(MISCREG_VDISR_EL2)
6971 .warnNotFail()
6972 .fault(faultUnimplemented);
6973
6974 // MPAM extension
6975 InitReg(MISCREG_MPAMIDR_EL1)
6976 .reset(p.mpamidr_el1)
6977 .res0(mask(63, 62) | mask(56, 40) | mask(31, 21) | mask(16, 16))
6978 .faultRead(EL1, faultMpamIdrEL1)
6979 .faultRead(EL2, faultMpamEL2)
6980 .allPrivileges().exceptUserMode().writes(0);
6981 InitReg(MISCREG_MPAM0_EL1)
6982 .res0(mask(63, 48))
6983 .fault(EL1, faultMpam0EL1)
6984 .fault(EL2, faultMpamEL2)
6985 .priv().hyp().mon();
6986 InitReg(MISCREG_MPAM1_EL1)
6987 .res0(mask(62, 61) | mask(59, 48))
6988 .fault(EL1, faultMpam1EL1)
6989 .fault(EL2, faultMpamEL2)
6990 .priv().hyp().mon();
6991 InitReg(MISCREG_MPAM1_EL12)
6992 .res0(mask(59, 48))
6993 .fault(EL2, faultMpam12EL2)
6994 .fault(EL3, defaultFaultE2H_EL3)
6995 .hyp().mon();
6996 InitReg(MISCREG_MPAM2_EL2)
6997 .res0(mask(62, 59) | mask(57, 50))
6998 .fault(EL2, faultMpamEL2)
6999 .hyp().mon();
7000 InitReg(MISCREG_MPAMHCR_EL2)
7001 .res0(mask(63, 32) | mask(30, 9) | mask(7, 2))
7002 .fault(EL2, faultMpamEL2)
7003 .hyp().mon();
7004 InitReg(MISCREG_MPAMVPM0_EL2)
7005 .fault(EL2, faultMpamEL2)
7006 .hyp().mon();
7007 InitReg(MISCREG_MPAMVPM1_EL2)
7008 .fault(EL2, faultMpamEL2)
7009 .hyp().mon();
7010 InitReg(MISCREG_MPAMVPM2_EL2)
7011 .fault(EL2, faultMpamEL2)
7012 .hyp().mon();
7013 InitReg(MISCREG_MPAMVPM3_EL2)
7014 .fault(EL2, faultMpamEL2)
7015 .hyp().mon();
7016 InitReg(MISCREG_MPAMVPM4_EL2)
7017 .fault(EL2, faultMpamEL2)
7018 .hyp().mon();
7019 InitReg(MISCREG_MPAMVPM5_EL2)
7020 .fault(EL2, faultMpamEL2)
7021 .hyp().mon();
7022 InitReg(MISCREG_MPAMVPM6_EL2)
7023 .fault(EL2, faultMpamEL2)
7024 .hyp().mon();
7025 InitReg(MISCREG_MPAMVPM7_EL2)
7026 .fault(EL2, faultMpamEL2)
7027 .hyp().mon();
7028 InitReg(MISCREG_MPAMVPMV_EL2)
7029 .res0(mask(63, 32))
7030 .fault(EL2, faultMpamEL2)
7031 .hyp().mon();
7032 InitReg(MISCREG_MPAM3_EL3)
7033 .res0(mask(59, 48))
7034 .mon();
7035 InitReg(MISCREG_MPAMSM_EL1)
7036 .res0(mask(63, 48) | mask(39, 32) | mask(15, 0))
7037 .fault(EL1, faultMpamsmEL1)
7038 .fault(EL2, faultMpamEL2)
7039 .allPrivileges().exceptUserMode();
7040
7041 // FEAT_S1PIE
7042 InitReg(MISCREG_PIRE0_EL1)
7043 .faultRead(EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPire0EL1>)
7044 .faultWrite(EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPire0EL1>)
7045 .fault(EL2, faultPieEL2)
7046 .mon();
7047 InitReg(MISCREG_PIRE0_EL2)
7048 .fault(EL2, faultPieEL2)
7049 .mon();
7050 InitReg(MISCREG_PIR_EL1)
7051 .faultRead(EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPirEL1>)
7052 .faultWrite(EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPirEL1>)
7053 .fault(EL2, faultPieEL2)
7054 .mon();
7055 InitReg(MISCREG_PIRE0_EL12)
7056 .fault(EL2, faultVheEL2<faultPieEL2>)
7057 .fault(EL3, defaultFaultE2H_EL3)
7058 .mapsTo(MISCREG_PIRE0_EL1);
7059 InitReg(MISCREG_PIR_EL12)
7060 .fault(EL2, faultVheEL2<faultPieEL2>)
7061 .fault(EL3, defaultFaultE2H_EL3)
7062 .mapsTo(MISCREG_PIR_EL1);
7063 InitReg(MISCREG_PIR_EL2)
7064 .fault(EL2, faultPieEL2)
7065 .mon();
7066 InitReg(MISCREG_PIR_EL3)
7067 .mon();
7068
7069
7070 // Register mappings for some unimplemented registers:
7071 // ESR_EL1 -> DFSR
7072 // RMR_EL1 -> RMR
7073 // RMR_EL2 -> HRMR
7074 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
7075 // DBGDTRRX_EL0 -> DBGDTRRXint
7076 // DBGDTRTX_EL0 -> DBGDTRRXint
7077 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
7078
7079 // Populate the idxToMiscRegNum map
7080 assert(idxToMiscRegNum.empty());
7081 for (const auto& [key, val] : miscRegNumToIdx) {
7082 idxToMiscRegNum.insert({val, key});
7083 }
7084
7085 completed = true;
7086}
7087
7088} // namespace ArmISA
7089} // namespace gem5
Fault undefined(bool disabled=false) const
ArmSystem * system
Definition isa.hh:75
const MiscRegLUTEntryInitializer InitReg(uint32_t reg)
Definition isa.hh:118
void initializeMiscRegMetadata()
Definition misc.cc:3082
const ArmRelease * release
This could be either a FS or a SE release.
Definition isa.hh:105
bool highestELIs64
Definition isa.hh:93
chain userNonSecureWrite(bool v=true) const
Definition misc.hh:1435
const MiscRegLUTEntryInitializer & chain
Definition misc.hh:1336
chain userSecureWrite(bool v=true) const
Definition misc.hh:1447
chain warnNotFail(bool v=true) const
Definition misc.hh:1399
chain mapsTo(uint32_t l, uint32_t u=0) const
Definition misc.hh:1339
chain fault(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
Definition misc.hh:1709
chain userSecureRead(bool v=true) const
Definition misc.hh:1441
chain highest(ArmSystem *const sys) const
Definition misc.cc:3037
chain secure(bool v=true) const
Definition misc.hh:1652
chain mutex(bool v=true) const
Definition misc.hh:1405
chain raz(uint64_t mask=(uint64_t) -1) const
Definition misc.hh:1364
chain monSecure(bool v=true) const
Definition misc.hh:1606
chain privSecure(bool v=true) const
Definition misc.hh:1493
chain nonSecure(bool v=true) const
Definition misc.hh:1639
chain monNonSecureWrite(bool v=true) const
Definition misc.hh:1584
chain reset(uint64_t res_val) const
Definition misc.hh:1346
chain monNonSecureRead(bool v=true) const
Definition misc.hh:1578
chain unverifiable(bool v=true) const
Definition misc.hh:1387
chain banked(bool v=true) const
Definition misc.hh:1411
chain privRead(bool v=true) const
Definition misc.hh:1507
chain hypRead(bool v=true) const
Definition misc.hh:1526
chain res0(uint64_t mask) const
Definition misc.hh:1352
chain bankedChild(bool v=true) const
Definition misc.hh:1423
chain hypWrite(bool v=true) const
Definition misc.hh:1545
chain allPrivileges(bool v=true) const
Definition misc.hh:1620
chain monSecureRead(bool v=true) const
Definition misc.hh:1566
chain privSecureWrite(bool v=true) const
Definition misc.hh:1487
chain res1(uint64_t mask) const
Definition misc.hh:1358
chain faultRead(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
Definition misc.hh:1695
chain monNonSecure(bool v=true) const
Definition misc.hh:1613
chain monSecureWrite(bool v=true) const
Definition misc.hh:1572
chain mon(bool v=true) const
Definition misc.hh:1590
chain privNonSecureWrite(bool v=true) const
Definition misc.hh:1468
chain faultWrite(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
Definition misc.hh:1702
chain hyp(bool v=true) const
Definition misc.hh:1559
bool highestELIs64() const
Returns true if the register width of the highest implemented exception level is 64 bits (ARMv8)
Definition system.hh:188
ArmISA::ExceptionLevel highestEL() const
Returns the highest implemented exception level.
Definition system.hh:192
static bool haveEL(ThreadContext *tc, ArmISA::ExceptionLevel el)
Return true if the system implements a specific exception level.
Definition system.cc:133
This class is implementing the Base class for a generic AArch64 instruction which is making use of sy...
Definition misc64.hh:160
bool miscRead() const
Definition misc64.hh:176
SimObjectParams Params
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
virtual BaseISA * getIsaPtr() const =0
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
STL vector class.
Definition stl.hh:37
#define panic(...)
This implements a cprintf based panic() function.
Definition logging.hh:220
const Params & params() const
#define warn(...)
Definition logging.hh:288
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
Definition utility.cc:283
static CPSR resetCPSR(ArmSystem *system)
Definition misc.cc:3049
@ MODE_UNDEFINED
Definition types.hh:332
int unflattenResultMiscReg[NUM_MISCREGS]
If the reg is a child reg of a banked set, then the parent is the last banked one in the list.
Definition misc.cc:719
Bitfield< 7, 4 > asidbits
bool AArch32isUndefinedGenericTimer(MiscRegIndex reg, ThreadContext *tc)
Definition misc.cc:674
uint8_t encodePhysAddrRange64(int pa_size)
Returns the encoding corresponding to the specified n.
Definition utility.cc:1342
bool ELIsInHost(ThreadContext *tc, ExceptionLevel el)
Returns true if the current exception level el is executing a Host OS or an application of a Host OS ...
Definition utility.cc:291
Bitfield< 3, 0 > mask
Definition pcstate.hh:63
ExceptionLevel currEL(const ThreadContext *tc)
Returns the current Exception Level (EL) of the provided ThreadContext.
Definition utility.cc:134
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
Definition misc.cc:2955
Bitfield< 7 > i
Definition misc_types.hh:67
Bitfield< 27, 24 > gic
MiscRegIndex decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
Definition misc.cc:549
Fault checkFaultAccessAArch64SysReg(MiscRegIndex reg, CPSR cpsr, ThreadContext *tc, const MiscRegOp64 &inst)
Definition misc.cc:744
Bitfield< 3, 0 > parange
Bitfield< 7, 5 > opc2
Definition types.hh:106
bool isSecureBelowEL3(ThreadContext *tc)
Definition utility.cc:86
Bitfield< 0 > ns
bool fgtEnabled(ThreadContext *tc)
Definition utility.cc:1391
bool EL2Enabled(ThreadContext *tc)
Definition utility.cc:268
void preUnflattenMiscReg()
Definition misc.cc:722
bool isHcrxEL2Enabled(ThreadContext *tc)
Definition utility.cc:1399
@ MISCREG_PMXEVTYPER_EL0
Definition misc.hh:805
@ MISCREG_ERXSTATUS_EL1
Definition misc.hh:1219
@ MISCREG_AMAIR_EL3
Definition misc.hh:817
@ MISCREG_PMEVTYPER0
Definition misc.hh:385
@ MISCREG_DBGWVR1_EL1
Definition misc.hh:521
@ MISCREG_DBGDRAR
Definition misc.hh:188
@ MISCREG_NSACR
Definition misc.hh:263
@ MISCREG_DL1DATA1
Definition misc.hh:470
@ MISCREG_ID_AA64PFR0_EL1
Definition misc.hh:591
@ MISCREG_DBGWCR5
Definition misc.hh:177
@ MISCREG_ICH_VMCR
Definition misc.hh:1104
@ MISCREG_CSSELR_NS
Definition misc.hh:249
@ MISCREG_HSTR_EL2
Definition misc.hh:623
@ MISCREG_DBGWVR13_EL1
Definition misc.hh:533
@ MISCREG_PMUSERENR
Definition misc.hh:393
@ MISCREG_DBGBCR15
Definition misc.hh:155
@ MISCREG_DBGOSLSR
Definition misc.hh:206
@ MISCREG_DBGDTRRXext
Definition misc.hh:120
@ MISCREG_ID_MMFR2_EL1
Definition misc.hh:578
@ MISCREG_TTBR1_EL12
Definition misc.hh:635
@ MISCREG_DCCISW
Definition misc.hh:336
@ MISCREG_ERRIDR_EL1
Definition misc.hh:1215
@ MISCREG_DACR_S
Definition misc.hh:285
@ MISCREG_CNTV_CTL_EL0
Definition misc.hh:843
@ MISCREG_ICH_LR7
Definition misc.hh:1112
@ MISCREG_DBGWCR8
Definition misc.hh:180
@ MISCREG_HCR
Definition misc.hh:266
@ MISCREG_ICC_BPR1_EL1_NS
Definition misc.hh:952
@ MISCREG_NMRR_NS
Definition misc.hh:406
@ MISCREG_CPSR_MODE
Definition misc.hh:96
@ MISCREG_PRRR_MAIR0
Definition misc.hh:102
@ MISCREG_ICC_IGRPEN1_EL1_NS
Definition misc.hh:962
@ MISCREG_ICH_AP0R2_EL2
Definition misc.hh:972
@ MISCREG_VSTCR_EL2
Definition misc.hh:646
@ MISCREG_DBGWVR14
Definition misc.hh:170
@ MISCREG_HDFAR
Definition misc.hh:307
@ MISCREG_PIR_EL2
Definition misc.hh:1193
@ MISCREG_MPIDR_EL1
Definition misc.hh:570
@ MISCREG_ICC_IGRPEN1
Definition misc.hh:1077
@ MISCREG_DFSR_S
Definition misc.hh:288
@ MISCREG_IL1DATA1
Definition misc.hh:466
@ MISCREG_DBGWVR10_EL1
Definition misc.hh:530
@ MISCREG_DL1DATA0
Definition misc.hh:469
@ MISCREG_CPUECTLR_EL1
Definition misc.hh:897
@ MISCREG_ATS1HR
Definition misc.hh:337
@ MISCREG_ERXCTLR_EL1
Definition misc.hh:1218
@ MISCREG_SCTLR_EL2
Definition misc.hh:616
@ MISCREG_PMSELR_EL0
Definition misc.hh:801
@ MISCREG_ID_DFR0_EL1
Definition misc.hh:574
@ MISCREG_CNTV_CVAL_EL02
Definition misc.hh:850
@ MISCREG_CP15ISB
Definition misc.hh:317
@ MISCREG_PMEVTYPER5
Definition misc.hh:390
@ MISCREG_CNTP_CTL_EL0
Definition misc.hh:840
@ MISCREG_DFAR_NS
Definition misc.hh:302
@ MISCREG_DBGBXVR8
Definition misc.hh:197
@ MISCREG_TLBIMVALIS
Definition misc.hh:343
@ MISCREG_PMOVSSET
Definition misc.hh:396
@ MISCREG_FPEXC
Definition misc.hh:93
@ MISCREG_PIRE0_EL1
Definition misc.hh:1189
@ MISCREG_DBGWCR1
Definition misc.hh:173
@ MISCREG_MPAMVPM2_EL2
Definition misc.hh:1181
@ MISCREG_NMRR_MAIR1_S
Definition misc.hh:107
@ MISCREG_ICH_LR7_EL2
Definition misc.hh:991
@ MISCREG_CNTP_CTL_EL02
Definition misc.hh:846
@ MISCREG_ICC_IAR1_EL1
Definition misc.hh:948
@ MISCREG_SPSEL
Definition misc.hh:655
@ MISCREG_TCR_EL2
Definition misc.hh:641
@ MISCREG_AT_S1E1W_Xt
Definition misc.hh:698
@ MISCREG_ID_ISAR0_EL1
Definition misc.hh:581
@ MISCREG_DBGWCR5_EL1
Definition misc.hh:541
@ MISCREG_RNDRRS
Definition misc.hh:1160
@ MISCREG_DBGWVR2
Definition misc.hh:158
@ MISCREG_ICH_LR6_EL2
Definition misc.hh:990
@ MISCREG_PMEVCNTR5
Definition misc.hh:384
@ MISCREG_ICH_AP1R1
Definition misc.hh:1096
@ MISCREG_DBGDSCRint
Definition misc.hh:114
@ MISCREG_MVFR1
Definition misc.hh:91
@ MISCREG_PIR_EL1
Definition misc.hh:1192
@ MISCREG_IL1DATA0_EL1
Definition misc.hh:886
@ MISCREG_MIDR_EL1
Definition misc.hh:569
@ MISCREG_SDER
Definition misc.hh:262
@ MISCREG_DBGWCR12_EL1
Definition misc.hh:548
@ MISCREG_OSDLR_EL1
Definition misc.hh:560
@ MISCREG_DL1DATA3
Definition misc.hh:472
@ MISCREG_HTPIDR
Definition misc.hh:441
@ MISCREG_DBGBXVR15
Definition misc.hh:204
@ MISCREG_TLBIMVAALIS
Definition misc.hh:344
@ MISCREG_ICC_MGRPEN1
Definition misc.hh:1081
@ MISCREG_ZCR_EL2
Definition misc.hh:1141
@ MISCREG_ICC_IGRPEN1_EL3
Definition misc.hh:967
@ MISCREG_SPSR_HYP
Definition misc.hh:86
@ MISCREG_ID_AA64ZFR0_EL1
Definition misc.hh:1139
@ MISCREG_MPAMVPM7_EL2
Definition misc.hh:1186
@ MISCREG_DBGDEVID0
Definition misc.hh:215
@ MISCREG_CNTFRQ
Definition misc.hh:443
@ MISCREG_DBGDSAR
Definition misc.hh:209
@ MISCREG_AFSR1_EL12
Definition misc.hh:676
@ MISCREG_CPUMERRSR
Definition misc.hh:479
@ MISCREG_CPSR_Q
Definition misc.hh:97
@ MISCREG_DBGBVR5_EL1
Definition misc.hh:493
@ MISCREG_MAIR_EL1
Definition misc.hh:810
@ MISCREG_DBGBCR2_EL1
Definition misc.hh:506
@ MISCREG_ID_ISAR2_EL1
Definition misc.hh:583
@ MISCREG_TLBIMVAAL
Definition misc.hh:356
@ MISCREG_DBGBVR1_EL1
Definition misc.hh:489
@ MISCREG_PAR_NS
Definition misc.hh:313
@ MISCREG_ICC_IGRPEN1_EL1_S
Definition misc.hh:963
@ MISCREG_HAMAIR1
Definition misc.hh:420
@ MISCREG_PMXEVCNTR_EL0
Definition misc.hh:807
@ MISCREG_ICC_IGRPEN1_NS
Definition misc.hh:1078
@ MISCREG_ICC_PMR_EL1
Definition misc.hh:922
@ MISCREG_CONTEXTIDR_EL1
Definition misc.hh:829
@ MISCREG_CNTV_TVAL
Definition misc.hh:457
@ MISCREG_VBAR_EL3
Definition misc.hh:826
@ MISCREG_AIFSR_NS
Definition misc.hh:296
@ MISCREG_DBGWCR10
Definition misc.hh:182
@ MISCREG_DBGBXVR9
Definition misc.hh:198
@ MISCREG_ICC_CTLR_NS
Definition misc.hh:1066
@ MISCREG_PMEVTYPER1
Definition misc.hh:386
@ MISCREG_CNTPS_TVAL_EL1
Definition misc.hh:856
@ MISCREG_ICC_AP1R3
Definition misc.hh:1057
@ MISCREG_ICC_MCTLR
Definition misc.hh:1080
@ MISCREG_HCPTR
Definition misc.hh:269
@ MISCREG_SPSR_EL2
Definition misc.hh:663
@ MISCREG_ICH_LR8
Definition misc.hh:1113
@ MISCREG_MPAMVPM4_EL2
Definition misc.hh:1183
@ MISCREG_ICC_AP1R0_EL1
Definition misc.hh:931
@ MISCREG_ICC_BPR0_EL1
Definition misc.hh:926
@ MISCREG_DBGWFAR
Definition misc.hh:118
@ MISCREG_IFAR
Definition misc.hh:304
@ MISCREG_FCSEIDR
Definition misc.hh:428
@ MISCREG_DBGWVR7
Definition misc.hh:163
@ MISCREG_ID_MMFR1
Definition misc.hh:234
@ MISCREG_AT_S1E2W_Xt
Definition misc.hh:709
@ MISCREG_PMEVTYPER1_EL0
Definition misc.hh:881
@ MISCREG_LOCKFLAG
Definition misc.hh:101
@ MISCREG_ICH_LR15_EL2
Definition misc.hh:999
@ MISCREG_FPSID
Definition misc.hh:89
@ MISCREG_MPAM3_EL3
Definition misc.hh:1175
@ MISCREG_DBGBXVR12
Definition misc.hh:201
@ MISCREG_ICH_MISR
Definition misc.hh:1101
@ MISCREG_DBGWCR6_EL1
Definition misc.hh:542
@ MISCREG_ID_AFR0_EL1
Definition misc.hh:575
@ MISCREG_DBGBVR2
Definition misc.hh:126
@ MISCREG_MAIR_EL12
Definition misc.hh:811
@ MISCREG_DBGBVR7_EL1
Definition misc.hh:495
@ MISCREG_ICH_LRC0
Definition misc.hh:1121
@ MISCREG_SMIDR_EL1
Definition misc.hh:1148
@ MISCREG_SCTLR
Definition misc.hh:253
@ MISCREG_PAR_EL1
Definition misc.hh:693
@ MISCREG_TTBCR
Definition misc.hh:278
@ MISCREG_DBGWVR3_EL1
Definition misc.hh:523
@ MISCREG_ICH_LR5
Definition misc.hh:1110
@ MISCREG_AT_S12E1W_Xt
Definition misc.hh:711
@ MISCREG_TLBIIPAS2
Definition misc.hh:363
@ MISCREG_ATS12NSOUW
Definition misc.hh:329
@ MISCREG_MAIR_EL2
Definition misc.hh:814
@ MISCREG_CNTV_CVAL
Definition misc.hh:456
@ MISCREG_APDBKeyLo_EL1
Definition misc.hh:913
@ MISCREG_MDRAR_EL1
Definition misc.hh:557
@ MISCREG_CSSELR
Definition misc.hh:248
@ MISCREG_CPACR
Definition misc.hh:259
@ MISCREG_HAMAIR0
Definition misc.hh:419
@ MISCREG_TLBIIPAS2L
Definition misc.hh:364
@ MISCREG_ICC_BPR1_S
Definition misc.hh:1064
@ MISCREG_DBGBVR8
Definition misc.hh:132
@ MISCREG_ADFSR_S
Definition misc.hh:294
@ MISCREG_ICH_LRC11
Definition misc.hh:1132
@ MISCREG_SCR_EL3
Definition misc.hh:628
@ MISCREG_TTBR0_S
Definition misc.hh:274
@ MISCREG_TLBIALLHIS
Definition misc.hh:359
@ MISCREG_IL1DATA1_EL1
Definition misc.hh:887
@ MISCREG_CNTKCTL_EL12
Definition misc.hh:853
@ MISCREG_APDAKeyHi_EL1
Definition misc.hh:910
@ MISCREG_TLBIIPAS2LIS
Definition misc.hh:358
@ MISCREG_TLBIASIDIS
Definition misc.hh:341
@ MISCREG_ID_AA64DFR0_EL1
Definition misc.hh:593
@ MISCREG_ID_ISAR6
Definition misc.hh:244
@ MISCREG_DBGCLAIMCLR
Definition misc.hh:211
@ MISCREG_TPIDRRO_EL0
Definition misc.hh:833
@ MISCREG_DBGBVR3
Definition misc.hh:127
@ MISCREG_DBGWVR5_EL1
Definition misc.hh:525
@ MISCREG_DBGOSLAR
Definition misc.hh:205
@ MISCREG_PMEVTYPER3_EL0
Definition misc.hh:883
@ MISCREG_ICC_SRE_EL1_NS
Definition misc.hh:958
@ MISCREG_DBGBCR10
Definition misc.hh:150
@ MISCREG_SPSR_SVC
Definition misc.hh:83
@ MISCREG_REVIDR_EL1
Definition misc.hh:571
@ MISCREG_DBGDSCRext
Definition misc.hh:121
@ MISCREG_SCTLR2_EL12
Definition misc.hh:612
@ MISCREG_SCTLR2_EL1
Definition misc.hh:611
@ MISCREG_TCR_EL3
Definition misc.hh:648
@ MISCREG_SCTLR2_EL3
Definition misc.hh:626
@ MISCREG_SMCR_EL1
Definition misc.hh:1154
@ MISCREG_FPSR
Definition misc.hh:660
@ MISCREG_DBGDIDR
Definition misc.hh:113
@ MISCREG_DBGBVR9_EL1
Definition misc.hh:497
@ MISCREG_ICH_HCR_EL2
Definition misc.hh:978
@ MISCREG_CPACR_EL12
Definition misc.hh:615
@ MISCREG_HDCR
Definition misc.hh:268
@ MISCREG_AIFSR_S
Definition misc.hh:297
@ MISCREG_ESR_EL1
Definition misc.hh:677
@ MISCREG_DISR_EL1
Definition misc.hh:1223
@ MISCREG_ADFSR
Definition misc.hh:292
@ MISCREG_ICC_AP1R3_EL1_NS
Definition misc.hh:941
@ MISCREG_PMCCNTR_EL0
Definition misc.hh:804
@ MISCREG_CNTP_TVAL
Definition misc.hh:452
@ MISCREG_MDCCSR_EL0
Definition misc.hh:552
@ MISCREG_DTLBIMVA
Definition misc.hh:349
@ MISCREG_SPSR_UND_AA64
Definition misc.hh:668
@ MISCREG_DBGWVR13
Definition misc.hh:169
@ MISCREG_AT_S12E0W_Xt
Definition misc.hh:713
@ MISCREG_PMEVTYPER2
Definition misc.hh:387
@ MISCREG_DBGBXVR4
Definition misc.hh:193
@ MISCREG_TCR_EL1
Definition misc.hh:636
@ MISCREG_PMINTENSET
Definition misc.hh:394
@ MISCREG_TTBCR_NS
Definition misc.hh:279
@ MISCREG_PMXEVTYPER
Definition misc.hh:378
@ MISCREG_DBGBCR13_EL1
Definition misc.hh:517
@ MISCREG_TPIDR_EL3
Definition misc.hh:835
@ MISCREG_DBGBVR11
Definition misc.hh:135
@ MISCREG_HFGRTR_EL2
Definition misc.hh:1164
@ MISCREG_ICC_AP0R3
Definition misc.hh:1047
@ MISCREG_VMPIDR
Definition misc.hh:252
@ MISCREG_TPIDRURW_S
Definition misc.hh:434
@ MISCREG_CCSIDR_EL1
Definition misc.hh:601
@ MISCREG_DBGBXVR5
Definition misc.hh:194
@ MISCREG_CNTVCT
Definition misc.hh:445
@ MISCREG_ESR_EL12
Definition misc.hh:678
@ MISCREG_TLBIMVALH
Definition misc.hh:368
@ MISCREG_DL1DATA1_EL1
Definition misc.hh:891
@ MISCREG_ICC_AP1R0_EL1_S
Definition misc.hh:933
@ MISCREG_DBGWCR8_EL1
Definition misc.hh:544
@ MISCREG_ICC_IGRPEN1_S
Definition misc.hh:1079
@ MISCREG_AFSR0_EL1
Definition misc.hh:673
@ MISCREG_ICC_AP1R0_S
Definition misc.hh:1050
@ MISCREG_SPSR_UND
Definition misc.hh:87
@ MISCREG_TCMTR
Definition misc.hh:225
@ MISCREG_DBGWCR13_EL1
Definition misc.hh:549
@ MISCREG_DBGOSDLR
Definition misc.hh:207
@ MISCREG_DBGBXVR3
Definition misc.hh:192
@ MISCREG_DBGWCR11_EL1
Definition misc.hh:547
@ MISCREG_DBGWVR11_EL1
Definition misc.hh:531
@ MISCREG_SPSR_IRQ
Definition misc.hh:82
@ MISCREG_ID_ISAR5
Definition misc.hh:243
@ MISCREG_BPIALL
Definition misc.hh:318
@ MISCREG_DBGBVR10_EL1
Definition misc.hh:498
@ MISCREG_ID_ISAR3_EL1
Definition misc.hh:584
@ MISCREG_PMEVTYPER4_EL0
Definition misc.hh:884
@ MISCREG_ATS1CUR
Definition misc.hh:324
@ MISCREG_ICH_ELRSR_EL2
Definition misc.hh:982
@ MISCREG_DC_CVAC_Xt
Definition misc.hh:705
@ MISCREG_VPIDR_EL2
Definition misc.hh:607
@ MISCREG_DBGWCR2
Definition misc.hh:174
@ MISCREG_OSLAR_EL1
Definition misc.hh:558
@ MISCREG_CNTPCT_EL0
Definition misc.hh:838
@ MISCREG_DBGWCR4_EL1
Definition misc.hh:540
@ MISCREG_ERXADDR_EL1
Definition misc.hh:1220
@ MISCREG_AMAIR0_NS
Definition misc.hh:412
@ MISCREG_DBGBCR14_EL1
Definition misc.hh:518
@ MISCREG_ICH_AP1R3
Definition misc.hh:1098
@ MISCREG_MPAM1_EL1
Definition misc.hh:1173
@ MISCREG_SPSR_ABT
Definition misc.hh:85
@ MISCREG_DBGWVR0_EL1
Definition misc.hh:520
@ MISCREG_AFSR1_EL2
Definition misc.hh:681
@ MISCREG_CNTV_CTL_EL02
Definition misc.hh:849
@ MISCREG_CP15DMB
Definition misc.hh:333
@ MISCREG_DBGBCR0_EL1
Definition misc.hh:504
@ MISCREG_SCTLR2_EL2
Definition misc.hh:617
@ MISCREG_DBGWVR15
Definition misc.hh:171
@ MISCREG_TLBIMVA
Definition misc.hh:352
@ MISCREG_PIR_EL3
Definition misc.hh:1194
@ MISCREG_PMEVCNTR4_EL0
Definition misc.hh:878
@ MISCREG_CONTEXTIDR_NS
Definition misc.hh:430
@ MISCREG_ICH_AP1R3_EL2
Definition misc.hh:977
@ MISCREG_DBGBCR6_EL1
Definition misc.hh:510
@ MISCREG_HFGITR_EL2
Definition misc.hh:1163
@ MISCREG_ID_ISAR4
Definition misc.hh:242
@ MISCREG_DBGBCR3_EL1
Definition misc.hh:507
@ MISCREG_ICC_AP1R1_EL1_S
Definition misc.hh:936
@ MISCREG_SCTLR_EL1
Definition misc.hh:609
@ MISCREG_CNTP_TVAL_EL02
Definition misc.hh:848
@ MISCREG_ICH_AP0R3
Definition misc.hh:1094
@ MISCREG_DBGWVR4_EL1
Definition misc.hh:524
@ MISCREG_TPIDRPRW_NS
Definition misc.hh:439
@ MISCREG_PMEVCNTR3
Definition misc.hh:382
@ MISCREG_AIDR_EL1
Definition misc.hh:603
@ MISCREG_DC_CIVAC_Xt
Definition misc.hh:707
@ MISCREG_DBGDEVID1
Definition misc.hh:214
@ MISCREG_PRRR
Definition misc.hh:399
@ MISCREG_ICC_IGRPEN0
Definition misc.hh:1076
@ MISCREG_ICH_LRC7
Definition misc.hh:1128
@ MISCREG_TEECR
Definition misc.hh:216
@ MISCREG_DC_CVAU_Xt
Definition misc.hh:706
@ MISCREG_DBGBXVR7
Definition misc.hh:196
@ MISCREG_AMAIR1_S
Definition misc.hh:416
@ MISCREG_DBGWVR7_EL1
Definition misc.hh:527
@ MISCREG_DBGBVR9
Definition misc.hh:133
@ MISCREG_PMEVTYPER0_EL0
Definition misc.hh:880
@ MISCREG_ICH_LRC8
Definition misc.hh:1129
@ MISCREG_CPTR_EL2
Definition misc.hh:622
@ MISCREG_ICH_LR9_EL2
Definition misc.hh:993
@ MISCREG_DBGBCR8_EL1
Definition misc.hh:512
@ MISCREG_CCSIDR
Definition misc.hh:245
@ MISCREG_FAR_EL1
Definition misc.hh:687
@ MISCREG_ERXMISC0_EL1
Definition misc.hh:1221
@ MISCREG_TPIDR_EL1
Definition misc.hh:831
@ MISCREG_PMUSERENR_EL0
Definition misc.hh:808
@ MISCREG_APIAKeyLo_EL1
Definition misc.hh:917
@ MISCREG_DBGWCR0
Definition misc.hh:172
@ MISCREG_AT_S1E2R_Xt
Definition misc.hh:708
@ MISCREG_PMCR
Definition misc.hh:369
@ MISCREG_CNTHV_CTL_EL2
Definition misc.hh:865
@ MISCREG_ICC_DIR
Definition misc.hh:1068
@ MISCREG_CNTP_TVAL_NS
Definition misc.hh:453
@ MISCREG_CNTV_CTL
Definition misc.hh:455
@ MISCREG_AFSR1_EL3
Definition misc.hh:685
@ MISCREG_ADFSR_NS
Definition misc.hh:293
@ MISCREG_APIBKeyLo_EL1
Definition misc.hh:919
@ MISCREG_DFAR
Definition misc.hh:301
@ MISCREG_ID_AA64DFR1_EL1
Definition misc.hh:594
@ MISCREG_DC_CSW_Xt
Definition misc.hh:701
@ MISCREG_JMCR
Definition misc.hh:220
@ MISCREG_RMR_EL3
Definition misc.hh:828
@ MISCREG_ID_AA64ISAR1_EL1
Definition misc.hh:598
@ MISCREG_PMEVCNTR2
Definition misc.hh:381
@ MISCREG_TLBIMVAL
Definition misc.hh:355
@ MISCREG_SMCR_EL3
Definition misc.hh:1151
@ MISCREG_ELR_EL12
Definition misc.hh:653
@ MISCREG_DL1DATA2_EL1
Definition misc.hh:892
@ MISCREG_DBGBVR0
Definition misc.hh:124
@ MISCREG_ICC_HSRE
Definition misc.hh:1073
@ MISCREG_ICH_LR1
Definition misc.hh:1106
@ MISCREG_PMEVCNTR0_EL0
Definition misc.hh:874
@ MISCREG_TEECR32_EL1
Definition misc.hh:565
@ MISCREG_AFSR0_EL3
Definition misc.hh:684
@ MISCREG_CSSELR_EL1
Definition misc.hh:604
@ MISCREG_VBAR_EL12
Definition misc.hh:821
@ MISCREG_MAIR_EL3
Definition misc.hh:816
@ MISCREG_ITLBIALL
Definition misc.hh:345
@ MISCREG_L2MERRSR
Definition misc.hh:480
@ MISCREG_ID_AA64MMFR1_EL1
Definition misc.hh:600
@ MISCREG_DBGPRCR_EL1
Definition misc.hh:561
@ MISCREG_NMRR_MAIR1
Definition misc.hh:105
@ MISCREG_PIR_EL12
Definition misc.hh:1195
@ MISCREG_ICH_LR4_EL2
Definition misc.hh:988
@ MISCREG_UNKNOWN
Definition misc.hh:1207
@ MISCREG_PMOVSR
Definition misc.hh:372
@ MISCREG_ICH_ELRSR
Definition misc.hh:1103
@ MISCREG_TLBIALLNSNH
Definition misc.hh:367
@ MISCREG_TTBR0_EL12
Definition misc.hh:633
@ MISCREG_CNTHP_TVAL
Definition misc.hh:462
@ MISCREG_ATS12NSOUR
Definition misc.hh:328
@ MISCREG_ELR_HYP
Definition misc.hh:88
@ MISCREG_DBGWCR10_EL1
Definition misc.hh:546
@ MISCREG_CNTVCT_EL0
Definition misc.hh:839
@ MISCREG_DBGBVR14
Definition misc.hh:138
@ MISCREG_DBGBVR8_EL1
Definition misc.hh:496
@ MISCREG_ICH_LR11_EL2
Definition misc.hh:995
@ MISCREG_CBAR_EL1
Definition misc.hh:900
@ MISCREG_ICC_AP1R1_EL1
Definition misc.hh:934
@ MISCREG_DL1DATA3_EL1
Definition misc.hh:893
@ MISCREG_RVBAR_EL2
Definition misc.hh:825
@ MISCREG_DBGDEVID2
Definition misc.hh:213
@ MISCREG_SP_EL0
Definition misc.hh:654
@ MISCREG_PMCNTENCLR
Definition misc.hh:371
@ MISCREG_ERRSELR_EL1
Definition misc.hh:1216
@ MISCREG_DFAR_S
Definition misc.hh:303
@ MISCREG_DBGBVR0_EL1
Definition misc.hh:488
@ MISCREG_ICC_AP1R2_NS
Definition misc.hh:1055
@ MISCREG_DBGBCR4_EL1
Definition misc.hh:508
@ MISCREG_CPSR
Definition misc.hh:79
@ MISCREG_FPCR
Definition misc.hh:659
@ MISCREG_SDCR
Definition misc.hh:260
@ MISCREG_DBGWCR4
Definition misc.hh:176
@ MISCREG_ICH_LR14_EL2
Definition misc.hh:998
@ MISCREG_RMR
Definition misc.hh:425
@ MISCREG_CPACR_EL1
Definition misc.hh:614
@ MISCREG_PMEVTYPER3
Definition misc.hh:388
@ MISCREG_HACR
Definition misc.hh:271
@ MISCREG_ICC_RPR_EL1
Definition misc.hh:944
@ MISCREG_DBGBXVR13
Definition misc.hh:202
@ MISCREG_IFSR_NS
Definition misc.hh:290
@ MISCREG_SMPRI_EL1
Definition misc.hh:1149
@ MISCREG_ID_MMFR0
Definition misc.hh:233
@ MISCREG_PMEVTYPER5_EL0
Definition misc.hh:885
@ MISCREG_CNTP_CVAL
Definition misc.hh:449
@ MISCREG_ID_ISAR0
Definition misc.hh:238
@ MISCREG_DBGBVR2_EL1
Definition misc.hh:490
@ MISCREG_ICC_AP1R3_EL1_S
Definition misc.hh:942
@ MISCREG_DL1DATA4
Definition misc.hh:473
@ MISCREG_CNTKCTL_EL1
Definition misc.hh:852
@ MISCREG_HMAIR0
Definition misc.hh:417
@ MISCREG_DBGWVR11
Definition misc.hh:167
@ MISCREG_ICC_AP0R3_EL1
Definition misc.hh:930
@ MISCREG_MPAMHCR_EL2
Definition misc.hh:1177
@ MISCREG_ICC_BPR1_NS
Definition misc.hh:1063
@ MISCREG_CNTPCT
Definition misc.hh:444
@ MISCREG_ICH_LR10_EL2
Definition misc.hh:994
@ MISCREG_SP_EL2
Definition misc.hh:672
@ MISCREG_ICC_AP0R1
Definition misc.hh:1045
@ MISCREG_PMCCFILTR_EL0
Definition misc.hh:806
@ MISCREG_ICH_LR10
Definition misc.hh:1115
@ MISCREG_CNTPS_CTL_EL1
Definition misc.hh:854
@ MISCREG_ID_AA64MMFR3_EL1
Definition misc.hh:907
@ MISCREG_NMRR
Definition misc.hh:405
@ MISCREG_MPAMVPMV_EL2
Definition misc.hh:1178
@ MISCREG_ICC_SRE_EL1
Definition misc.hh:957
@ MISCREG_DBGBVR12_EL1
Definition misc.hh:500
@ MISCREG_PMSWINC_EL0
Definition misc.hh:800
@ MISCREG_SCTLR_EL12
Definition misc.hh:610
@ MISCREG_DBGBVR10
Definition misc.hh:134
@ MISCREG_TTBR1_EL1
Definition misc.hh:634
@ MISCREG_PMEVTYPER2_EL0
Definition misc.hh:882
@ MISCREG_MAIR1
Definition misc.hh:408
@ MISCREG_DAIF
Definition misc.hh:658
@ MISCREG_SPSR_ABT_AA64
Definition misc.hh:667
@ MISCREG_SEV_MAILBOX
Definition misc.hh:109
@ MISCREG_SPSR_EL12
Definition misc.hh:651
@ MISCREG_CNTP_CVAL_EL02
Definition misc.hh:847
@ MISCREG_ACTLR_NS
Definition misc.hh:257
@ MISCREG_PMINTENSET_EL1
Definition misc.hh:794
@ MISCREG_ICC_AP1R1_S
Definition misc.hh:1053
@ MISCREG_PMINTENCLR_EL1
Definition misc.hh:795
@ MISCREG_CNTHPS_CVAL_EL2
Definition misc.hh:862
@ MISCREG_REVIDR
Definition misc.hh:228
@ MISCREG_DBGBCR9
Definition misc.hh:149
@ MISCREG_MPAMVPM0_EL2
Definition misc.hh:1179
@ MISCREG_DL1DATA0_EL1
Definition misc.hh:890
@ MISCREG_PMCCFILTR
Definition misc.hh:391
@ MISCREG_ACTLR_EL3
Definition misc.hh:627
@ MISCREG_ID_PFR1_EL1
Definition misc.hh:573
@ MISCREG_DBGBCR11_EL1
Definition misc.hh:515
@ MISCREG_DBGBCR1_EL1
Definition misc.hh:505
@ MISCREG_TLBIIPAS2IS
Definition misc.hh:357
@ MISCREG_DBGBVR11_EL1
Definition misc.hh:499
@ MISCREG_DBGBCR14
Definition misc.hh:154
@ MISCREG_DBGBCR11
Definition misc.hh:151
@ MISCREG_APDBKeyHi_EL1
Definition misc.hh:912
@ MISCREG_TEEHBR32_EL1
Definition misc.hh:566
@ MISCREG_DBGBVR13
Definition misc.hh:137
@ MISCREG_ID_MMFR3
Definition misc.hh:236
@ MISCREG_CSSELR_S
Definition misc.hh:250
@ MISCREG_DBGBCR12
Definition misc.hh:152
@ MISCREG_ICH_LRC15
Definition misc.hh:1136
@ MISCREG_ICC_SRE_EL2
Definition misc.hh:964
@ MISCREG_ICH_HCR
Definition misc.hh:1099
@ MISCREG_MPAMSM_EL1
Definition misc.hh:1156
@ MISCREG_ICC_IAR0
Definition misc.hh:1074
@ MISCREG_ICC_ASGI1R_EL1
Definition misc.hh:946
@ MISCREG_DBGVCR32_EL2
Definition misc.hh:556
@ MISCREG_DBGWVR9_EL1
Definition misc.hh:529
@ MISCREG_L2ECTLR
Definition misc.hh:398
@ MISCREG_TCR2_EL12
Definition misc.hh:639
@ MISCREG_ID_PFR0_EL1
Definition misc.hh:572
@ MISCREG_ICC_CTLR
Definition misc.hh:1065
@ MISCREG_ICH_LR2_EL2
Definition misc.hh:986
@ MISCREG_DL1DATA4_EL1
Definition misc.hh:894
@ MISCREG_TLBIMVAAIS
Definition misc.hh:342
@ MISCREG_SMPRIMAP_EL2
Definition misc.hh:1150
@ MISCREG_ICC_EOIR0
Definition misc.hh:1069
@ MISCREG_CNTP_CVAL_NS
Definition misc.hh:450
@ MISCREG_OSECCR_EL1
Definition misc.hh:487
@ MISCREG_RVBAR_EL1
Definition misc.hh:822
@ MISCREG_ISR
Definition misc.hh:426
@ MISCREG_DBGWCR7_EL1
Definition misc.hh:543
@ MISCREG_HAIFSR
Definition misc.hh:299
@ MISCREG_TCR2_EL2
Definition misc.hh:642
@ MISCREG_ID_ISAR5_EL1
Definition misc.hh:586
@ MISCREG_CONTEXTIDR
Definition misc.hh:429
@ MISCREG_PMCEID1
Definition misc.hh:376
@ MISCREG_DBGBVR15_EL1
Definition misc.hh:503
@ MISCREG_ID_ISAR4_EL1
Definition misc.hh:585
@ MISCREG_CNTHPS_TVAL_EL2
Definition misc.hh:863
@ MISCREG_SCR
Definition misc.hh:261
@ MISCREG_DC_IVAC_Xt
Definition misc.hh:695
@ MISCREG_ICC_AP1R0
Definition misc.hh:1048
@ MISCREG_TPIDR2_EL0
Definition misc.hh:1155
@ MISCREG_ICC_HPPIR0_EL1
Definition misc.hh:925
@ MISCREG_PMCNTENSET
Definition misc.hh:370
@ MISCREG_DBGBVR7
Definition misc.hh:131
@ MISCREG_ICC_SGI1R_EL1
Definition misc.hh:945
@ MISCREG_DBGWVR9
Definition misc.hh:165
@ MISCREG_ELR_EL2
Definition misc.hh:664
@ MISCREG_HDFGWTR_EL2
Definition misc.hh:1167
@ MISCREG_MAIR0_S
Definition misc.hh:404
@ MISCREG_ICH_LR5_EL2
Definition misc.hh:989
@ MISCREG_CONTEXTIDR_EL2
Definition misc.hh:901
@ MISCREG_CNTP_TVAL_S
Definition misc.hh:454
@ MISCREG_TCR_EL12
Definition misc.hh:637
@ MISCREG_CNTHCTL_EL2
Definition misc.hh:857
@ MISCREG_DBGBXVR6
Definition misc.hh:195
@ MISCREG_DBGBXVR0
Definition misc.hh:189
@ MISCREG_TEEHBR
Definition misc.hh:218
@ MISCREG_ERXMISC1_EL1
Definition misc.hh:1222
@ MISCREG_MDSCR_EL1
Definition misc.hh:485
@ MISCREG_AMAIR1_NS
Definition misc.hh:415
@ MISCREG_DL1DATA2
Definition misc.hh:471
@ MISCREG_DBGWCR2_EL1
Definition misc.hh:538
@ MISCREG_ID_MMFR4_EL1
Definition misc.hh:580
@ MISCREG_PAR_S
Definition misc.hh:314
@ MISCREG_DBGBCR12_EL1
Definition misc.hh:516
@ MISCREG_ID_DFR0
Definition misc.hh:231
@ MISCREG_CNTP_CTL_S
Definition misc.hh:448
@ MISCREG_ICC_AP1R1_EL1_NS
Definition misc.hh:935
@ MISCREG_TTBR1_EL2
Definition misc.hh:904
@ MISCREG_ICC_SGI1R
Definition misc.hh:1086
@ MISCREG_DBGDTRTXint
Definition misc.hh:116
@ MISCREG_ID_AA64MMFR0_EL1
Definition misc.hh:599
@ MISCREG_HPFAR
Definition misc.hh:309
@ MISCREG_ICC_PMR
Definition misc.hh:1083
@ MISCREG_ICH_LRC5
Definition misc.hh:1126
@ MISCREG_TPIDRPRW_S
Definition misc.hh:440
@ MISCREG_ICH_LR6
Definition misc.hh:1111
@ MISCREG_TLBIMVAHIS
Definition misc.hh:360
@ MISCREG_IC_IALLU
Definition misc.hh:694
@ MISCREG_ICC_AP1R2
Definition misc.hh:1054
@ MISCREG_DBGWCR9
Definition misc.hh:181
@ MISCREG_APIAKeyHi_EL1
Definition misc.hh:916
@ MISCREG_MPAMIDR_EL1
Definition misc.hh:1171
@ MISCREG_SPSR_EL3
Definition misc.hh:670
@ MISCREG_APDAKeyLo_EL1
Definition misc.hh:911
@ MISCREG_AT_S1E1R_Xt
Definition misc.hh:697
@ MISCREG_ICH_AP1R2_EL2
Definition misc.hh:976
@ MISCREG_DTLBIALL
Definition misc.hh:348
@ MISCREG_TLBIALLIS
Definition misc.hh:339
@ MISCREG_AMAIR_EL1
Definition misc.hh:812
@ MISCREG_ICC_CTLR_EL1_NS
Definition misc.hh:955
@ MISCREG_ICC_CTLR_S
Definition misc.hh:1067
@ MISCREG_ESR_EL3
Definition misc.hh:686
@ MISCREG_IL1DATA0
Definition misc.hh:465
@ MISCREG_ATS1HW
Definition misc.hh:338
@ MISCREG_ICH_VTR
Definition misc.hh:1100
@ MISCREG_VBAR_S
Definition misc.hh:423
@ MISCREG_ICH_AP0R1_EL2
Definition misc.hh:971
@ MISCREG_AT_S1E3R_Xt
Definition misc.hh:714
@ MISCREG_ICC_SRE
Definition misc.hh:1087
@ MISCREG_DC_ZVA_Xt
Definition misc.hh:703
@ MISCREG_CNTHVS_TVAL_EL2
Definition misc.hh:870
@ MISCREG_ATS1CPR
Definition misc.hh:322
@ MISCREG_TLBIASID
Definition misc.hh:353
@ MISCREG_ICH_LRC12
Definition misc.hh:1133
@ MISCREG_DBGBXVR10
Definition misc.hh:199
@ MISCREG_APGAKeyLo_EL1
Definition misc.hh:915
@ MISCREG_ITLBIMVA
Definition misc.hh:346
@ MISCREG_NZCV
Definition misc.hh:657
@ MISCREG_HTTBR
Definition misc.hh:477
@ MISCREG_IFSR32_EL2
Definition misc.hh:679
@ MISCREG_ICH_LRC9
Definition misc.hh:1130
@ MISCREG_SPSR_EL1
Definition misc.hh:650
@ MISCREG_APIBKeyHi_EL1
Definition misc.hh:918
@ MISCREG_FAR_EL12
Definition misc.hh:688
@ MISCREG_MAIR0_NS
Definition misc.hh:403
@ MISCREG_CP15DSB
Definition misc.hh:332
@ MISCREG_ICH_LR13_EL2
Definition misc.hh:997
@ MISCREG_ICC_CTLR_EL3
Definition misc.hh:965
@ MISCREG_DBGDCCINT
Definition misc.hh:115
@ MISCREG_ICC_CTLR_EL1
Definition misc.hh:954
@ MISCREG_TLBIALLNSNHIS
Definition misc.hh:361
@ MISCREG_CNTP_CVAL_EL0
Definition misc.hh:841
@ MISCREG_HCR_EL2
Definition misc.hh:619
@ MISCREG_CNTHVS_CVAL_EL2
Definition misc.hh:869
@ MISCREG_SMCR_EL2
Definition misc.hh:1152
@ MISCREG_L2ACTLR_EL1
Definition misc.hh:895
@ MISCREG_DCIMVAC
Definition misc.hh:320
@ MISCREG_ATS1CPW
Definition misc.hh:323
@ MISCREG_TTBR1
Definition misc.hh:275
@ MISCREG_AT_S12E0R_Xt
Definition misc.hh:712
@ MISCREG_ICH_AP1R0
Definition misc.hh:1095
@ MISCREG_MPIDR
Definition misc.hh:227
@ MISCREG_ICC_AP0R2
Definition misc.hh:1046
@ MISCREG_DBGCLAIMSET
Definition misc.hh:210
@ MISCREG_TLBIMVALHIS
Definition misc.hh:362
@ MISCREG_MPAMVPM3_EL2
Definition misc.hh:1182
@ MISCREG_PRRR_NS
Definition misc.hh:400
@ MISCREG_ZCR_EL1
Definition misc.hh:1143
@ MISCREG_PMCEID0_EL0
Definition misc.hh:802
@ MISCREG_ID_AA64MMFR2_EL1
Definition misc.hh:906
@ MISCREG_ICC_DIR_EL1
Definition misc.hh:943
@ MISCREG_SDER32_EL3
Definition misc.hh:629
@ MISCREG_TPIDR_EL0
Definition misc.hh:832
@ MISCREG_DBGDTRTXext
Definition misc.hh:122
@ MISCREG_DBGOSECCR
Definition misc.hh:123
@ MISCREG_ICC_SRE_EL3
Definition misc.hh:966
@ MISCREG_VTCR_EL2
Definition misc.hh:644
@ MISCREG_DBGWCR3
Definition misc.hh:175
@ MISCREG_ELR_EL3
Definition misc.hh:671
@ MISCREG_ITLBIASID
Definition misc.hh:347
@ MISCREG_ICH_LR12
Definition misc.hh:1117
@ MISCREG_DBGWCR11
Definition misc.hh:183
@ MISCREG_DBGCLAIMSET_EL1
Definition misc.hh:562
@ MISCREG_ICH_LR3_EL2
Definition misc.hh:987
@ MISCREG_VTTBR
Definition misc.hh:478
@ MISCREG_MDDTRRX_EL0
Definition misc.hh:555
@ MISCREG_HDFGRTR_EL2
Definition misc.hh:1166
@ MISCREG_CNTVOFF_EL2
Definition misc.hh:872
@ MISCREG_AIFSR
Definition misc.hh:295
@ MISCREG_DBGWCR6
Definition misc.hh:178
@ MISCREG_ICH_AP1R1_EL2
Definition misc.hh:975
@ MISCREG_VPIDR
Definition misc.hh:251
@ MISCREG_ICH_AP1R2
Definition misc.hh:1097
@ MISCREG_BPIALLIS
Definition misc.hh:311
@ MISCREG_ICC_AP1R0_EL1_NS
Definition misc.hh:932
@ MISCREG_DBGWCR15
Definition misc.hh:187
@ MISCREG_CNTHCTL
Definition misc.hh:459
@ MISCREG_ICC_EOIR0_EL1
Definition misc.hh:924
@ MISCREG_TTBR1_NS
Definition misc.hh:276
@ MISCREG_FAR_EL3
Definition misc.hh:691
@ MISCREG_ACTLR_EL1
Definition misc.hh:613
@ MISCREG_ICH_LR8_EL2
Definition misc.hh:992
@ MISCREG_CNTHPS_CTL_EL2
Definition misc.hh:861
@ MISCREG_DBGBVR3_EL1
Definition misc.hh:491
@ MISCREG_DBGVCR
Definition misc.hh:119
@ MISCREG_MDCCINT_EL1
Definition misc.hh:483
@ MISCREG_DBGBVR6_EL1
Definition misc.hh:494
@ MISCREG_DBGWCR9_EL1
Definition misc.hh:545
@ MISCREG_ICC_IAR1
Definition misc.hh:1075
@ MISCREG_IL1DATA3_EL1
Definition misc.hh:889
@ MISCREG_ICH_LR15
Definition misc.hh:1120
@ MISCREG_DC_CISW_Xt
Definition misc.hh:702
@ MISCREG_ICH_AP0R0
Definition misc.hh:1091
@ MISCREG_VBAR_EL2
Definition misc.hh:824
@ MISCREG_ICC_AP1R2_EL1_S
Definition misc.hh:939
@ MISCREG_DBGBCR7_EL1
Definition misc.hh:511
@ MISCREG_ICC_EOIR1_EL1
Definition misc.hh:949
@ MISCREG_ICIMVAU
Definition misc.hh:316
@ MISCREG_ICH_AP0R3_EL2
Definition misc.hh:973
@ MISCREG_DBGWCR14
Definition misc.hh:186
@ MISCREG_DBGBCR5_EL1
Definition misc.hh:509
@ MISCREG_L2ACTLR
Definition misc.hh:475
@ MISCREG_ACTLR_EL2
Definition misc.hh:618
@ MISCREG_CPUMERRSR_EL1
Definition misc.hh:898
@ MISCREG_IFAR_NS
Definition misc.hh:305
@ MISCREG_DBGWVR15_EL1
Definition misc.hh:535
@ MISCREG_CTR
Definition misc.hh:224
@ MISCREG_HPFAR_EL2
Definition misc.hh:690
@ MISCREG_TPIDRURW
Definition misc.hh:432
@ MISCREG_DBGBXVR11
Definition misc.hh:200
@ MISCREG_ICH_LRC6
Definition misc.hh:1127
@ MISCREG_ICH_LR1_EL2
Definition misc.hh:985
@ MISCREG_CLIDR
Definition misc.hh:246
@ MISCREG_SCTLR_S
Definition misc.hh:255
@ MISCREG_PMEVCNTR4
Definition misc.hh:383
@ MISCREG_DBGDTRRXint
Definition misc.hh:117
@ MISCREG_ICH_AP0R1
Definition misc.hh:1092
@ MISCREG_MDCR_EL2
Definition misc.hh:621
@ MISCREG_VBAR
Definition misc.hh:421
@ MISCREG_PIRE0_EL2
Definition misc.hh:1190
@ MISCREG_IFSR
Definition misc.hh:289
@ MISCREG_PMSELR
Definition misc.hh:374
@ MISCREG_ICIALLUIS
Definition misc.hh:310
@ MISCREG_HACTLR
Definition misc.hh:265
@ MISCREG_ID_MMFR0_EL1
Definition misc.hh:576
@ MISCREG_AMAIR1
Definition misc.hh:414
@ MISCREG_CNTHV_TVAL_EL2
Definition misc.hh:867
@ MISCREG_VBAR_EL1
Definition misc.hh:820
@ MISCREG_MIDR
Definition misc.hh:223
@ MISCREG_ICH_EISR
Definition misc.hh:1102
@ MISCREG_PMEVCNTR2_EL0
Definition misc.hh:876
@ MISCREG_CNTPS_CVAL_EL1
Definition misc.hh:855
@ MISCREG_HTCR
Definition misc.hh:281
@ MISCREG_AMAIR_EL2
Definition misc.hh:815
@ MISCREG_ICC_BPR0
Definition misc.hh:1061
@ MISCREG_TLBIMVAIS
Definition misc.hh:340
@ MISCREG_TTBR1_S
Definition misc.hh:277
@ MISCREG_ICH_LR2
Definition misc.hh:1107
@ MISCREG_HVBAR
Definition misc.hh:427
@ MISCREG_MPAM0_EL1
Definition misc.hh:1172
@ MISCREG_JIDR
Definition misc.hh:217
@ MISCREG_DC_ISW_Xt
Definition misc.hh:696
@ MISCREG_L2CTLR
Definition misc.hh:397
@ MISCREG_DBGPRCR
Definition misc.hh:208
@ MISCREG_DBGWVR10
Definition misc.hh:166
@ MISCREG_CNTP_CTL
Definition misc.hh:446
@ MISCREG_TTBR0_EL3
Definition misc.hh:647
@ MISCREG_ICC_AP0R0_EL1
Definition misc.hh:927
@ MISCREG_ICC_IGRPEN0_EL1
Definition misc.hh:960
@ MISCREG_DBGWCR0_EL1
Definition misc.hh:536
@ MISCREG_ICC_AP1R2_S
Definition misc.hh:1056
@ MISCREG_DCZID_EL0
Definition misc.hh:606
@ MISCREG_ICH_LRC13
Definition misc.hh:1134
@ MISCREG_TLBIALLH
Definition misc.hh:365
@ MISCREG_ICC_AP1R2_EL1_NS
Definition misc.hh:938
@ MISCREG_ICH_VMCR_EL2
Definition misc.hh:983
@ MISCREG_ATS12NSOPW
Definition misc.hh:327
@ MISCREG_ICH_LRC14
Definition misc.hh:1135
@ MISCREG_DACR_NS
Definition misc.hh:284
@ MISCREG_TLBIMVAH
Definition misc.hh:366
@ MISCREG_ICC_EOIR1
Definition misc.hh:1070
@ MISCREG_DBGWVR12
Definition misc.hh:168
@ MISCREG_ISR_EL1
Definition misc.hh:823
@ MISCREG_ICC_SGI0R_EL1
Definition misc.hh:947
@ MISCREG_HACR_EL2
Definition misc.hh:624
@ MISCREG_DBGBCR4
Definition misc.hh:144
@ MISCREG_OSDTRTX_EL1
Definition misc.hh:486
@ MISCREG_CNTVOFF
Definition misc.hh:463
@ MISCREG_ICH_LR12_EL2
Definition misc.hh:996
@ MISCREG_DBGCLAIMCLR_EL1
Definition misc.hh:563
@ MISCREG_ICH_LRC3
Definition misc.hh:1124
@ MISCREG_AT_S1E0W_Xt
Definition misc.hh:700
@ MISCREG_AMAIR0_S
Definition misc.hh:413
@ MISCREG_DCCSW
Definition misc.hh:331
@ MISCREG_AT_S12E1R_Xt
Definition misc.hh:710
@ MISCREG_DBGBXVR2
Definition misc.hh:191
@ MISCREG_PIRE0_EL12
Definition misc.hh:1191
@ MISCREG_TLBTR
Definition misc.hh:226
@ MISCREG_DBGWVR0
Definition misc.hh:156
@ MISCREG_ID_AA64AFR1_EL1
Definition misc.hh:596
@ MISCREG_DBGWCR12
Definition misc.hh:184
@ MISCREG_HAFGRTR_EL2
Definition misc.hh:1168
@ MISCREG_AFSR0_EL12
Definition misc.hh:674
@ MISCREG_DCCMVAU
Definition misc.hh:334
@ MISCREG_IL1DATA2_EL1
Definition misc.hh:888
@ MISCREG_ICH_LR3
Definition misc.hh:1108
@ MISCREG_DBGBVR14_EL1
Definition misc.hh:502
@ MISCREG_DTLBIASID
Definition misc.hh:350
@ MISCREG_TLBINEEDSYNC
Definition misc.hh:110
@ MISCREG_ID_ISAR6_EL1
Definition misc.hh:587
@ MISCREG_ELR_EL1
Definition misc.hh:652
@ MISCREG_AMAIR_EL12
Definition misc.hh:813
@ MISCREG_PMXEVCNTR
Definition misc.hh:392
@ MISCREG_DBGBVR1
Definition misc.hh:125
@ MISCREG_CNTHP_CTL
Definition misc.hh:460
@ MISCREG_DBGWCR15_EL1
Definition misc.hh:551
@ MISCREG_PMCEID0
Definition misc.hh:375
@ MISCREG_ICH_LR9
Definition misc.hh:1114
@ MISCREG_TPIDR_EL2
Definition misc.hh:834
@ MISCREG_DBGBXVR14
Definition misc.hh:203
@ MISCREG_ICC_SRE_NS
Definition misc.hh:1088
@ MISCREG_TCR2_EL1
Definition misc.hh:638
@ MISCREG_DFSR_NS
Definition misc.hh:287
@ MISCREG_ID_PFR1
Definition misc.hh:230
@ MISCREG_CNTHP_CVAL_EL2
Definition misc.hh:859
@ MISCREG_CNTV_TVAL_EL0
Definition misc.hh:845
@ MISCREG_HFGWTR_EL2
Definition misc.hh:1165
@ MISCREG_MPAM2_EL2
Definition misc.hh:1174
@ MISCREG_ZCR_EL3
Definition misc.hh:1140
@ MISCREG_DBGBCR2
Definition misc.hh:142
@ MISCREG_DBGWCR14_EL1
Definition misc.hh:550
@ MISCREG_SPSR_MON
Definition misc.hh:84
@ MISCREG_DCCIMVAC
Definition misc.hh:335
@ MISCREG_L2CTLR_EL1
Definition misc.hh:818
@ MISCREG_VTCR
Definition misc.hh:282
@ MISCREG_FPSCR
Definition misc.hh:90
@ MISCREG_TTBR0
Definition misc.hh:272
@ MISCREG_DBGWVR14_EL1
Definition misc.hh:534
@ MISCREG_DBGWVR1
Definition misc.hh:157
@ MISCREG_DACR
Definition misc.hh:283
@ MISCREG_TTBR0_EL2
Definition misc.hh:640
@ MISCREG_HSCTLR
Definition misc.hh:264
@ MISCREG_SCTLR_NS
Definition misc.hh:254
@ MISCREG_DBGWVR2_EL1
Definition misc.hh:522
@ MISCREG_PMEVTYPER4
Definition misc.hh:389
@ MISCREG_ICC_IGRPEN1_EL1
Definition misc.hh:961
@ MISCREG_ICC_AP0R0
Definition misc.hh:1044
@ MISCREG_ACTLR_S
Definition misc.hh:258
@ MISCREG_BPIMVA
Definition misc.hh:319
@ MISCREG_PMINTENCLR
Definition misc.hh:395
@ MISCREG_PMCNTENCLR_EL0
Definition misc.hh:798
@ MISCREG_MPAMVPM6_EL2
Definition misc.hh:1185
@ MISCREG_IL1DATA2
Definition misc.hh:467
@ MISCREG_TTBR0_EL1
Definition misc.hh:632
@ MISCREG_ICC_HPPIR0
Definition misc.hh:1071
@ MISCREG_JOSCR
Definition misc.hh:219
@ MISCREG_ICIALLU
Definition misc.hh:315
@ MISCREG_IL1DATA3
Definition misc.hh:468
@ MISCREG_CNTP_CTL_NS
Definition misc.hh:447
@ MISCREG_HCRX_EL2
Definition misc.hh:620
@ MISCREG_PMEVCNTR5_EL0
Definition misc.hh:879
@ MISCREG_TLBIALL
Definition misc.hh:351
@ MISCREG_ICC_AP0R2_EL1
Definition misc.hh:929
@ MISCREG_SCTLR_EL3
Definition misc.hh:625
@ MISCREG_CNTP_TVAL_EL0
Definition misc.hh:842
@ MISCREG_FPSCR_QC
Definition misc.hh:99
@ MISCREG_CURRENTEL
Definition misc.hh:656
@ MISCREG_DBGBVR13_EL1
Definition misc.hh:501
@ MISCREG_DBGWVR6
Definition misc.hh:162
@ MISCREG_VSESR_EL2
Definition misc.hh:1224
@ MISCREG_DBGAUTHSTATUS
Definition misc.hh:212
@ MISCREG_ICC_SGI0R
Definition misc.hh:1085
@ MISCREG_PMEVCNTR1
Definition misc.hh:380
@ MISCREG_MVFR0_EL1
Definition misc.hh:588
@ MISCREG_ICH_AP0R0_EL2
Definition misc.hh:970
@ MISCREG_ID_ISAR1
Definition misc.hh:239
@ MISCREG_DBGBCR0
Definition misc.hh:140
@ MISCREG_ICH_MISR_EL2
Definition misc.hh:980
@ MISCREG_TTBCR_S
Definition misc.hh:280
@ MISCREG_IFSR_S
Definition misc.hh:291
@ MISCREG_PMSWINC
Definition misc.hh:373
@ MISCREG_MVFR1_EL1
Definition misc.hh:589
@ MISCREG_ID_AA64AFR0_EL1
Definition misc.hh:595
@ MISCREG_ATS12NSOPR
Definition misc.hh:326
@ MISCREG_MVFR2_EL1
Definition misc.hh:590
@ MISCREG_SMCR_EL12
Definition misc.hh:1153
@ MISCREG_DBGBCR3
Definition misc.hh:143
@ MISCREG_OSLSR_EL1
Definition misc.hh:559
@ MISCREG_DBGBCR9_EL1
Definition misc.hh:513
@ MISCREG_PMCNTENSET_EL0
Definition misc.hh:797
@ MISCREG_ID_ISAR1_EL1
Definition misc.hh:582
@ MISCREG_AIDR
Definition misc.hh:247
@ MISCREG_DFSR
Definition misc.hh:286
@ MISCREG_DBGWVR12_EL1
Definition misc.hh:532
@ MISCREG_ICC_AP1R1
Definition misc.hh:1051
@ MISCREG_CPUACTLR_EL1
Definition misc.hh:896
@ MISCREG_DBGBCR15_EL1
Definition misc.hh:519
@ MISCREG_DLR_EL0
Definition misc.hh:662
@ MISCREG_DBGBVR5
Definition misc.hh:129
@ MISCREG_MVFR0
Definition misc.hh:92
@ MISCREG_ICH_LR0
Definition misc.hh:1105
@ MISCREG_ICH_LRC2
Definition misc.hh:1123
@ MISCREG_DBGWVR5
Definition misc.hh:161
@ MISCREG_MPAMVPM1_EL2
Definition misc.hh:1180
@ MISCREG_ID_MMFR1_EL1
Definition misc.hh:577
@ MISCREG_PRRR_MAIR0_S
Definition misc.hh:104
@ MISCREG_ICC_AP1R3_S
Definition misc.hh:1059
@ MISCREG_MAIR1_S
Definition misc.hh:410
@ MISCREG_DACR32_EL2
Definition misc.hh:649
@ MISCREG_ID_AA64ISAR0_EL1
Definition misc.hh:597
@ MISCREG_HIFAR
Definition misc.hh:308
@ MISCREG_DBGWVR8
Definition misc.hh:164
@ MISCREG_ICC_SRE_EL1_S
Definition misc.hh:959
@ MISCREG_ICH_EISR_EL2
Definition misc.hh:981
@ MISCREG_CNTHP_TVAL_EL2
Definition misc.hh:860
@ MISCREG_AT_S1E3W_Xt
Definition misc.hh:715
@ MISCREG_ICC_BPR1_EL1
Definition misc.hh:951
@ MISCREG_ICC_AP0R1_EL1
Definition misc.hh:928
@ MISCREG_DBGWCR1_EL1
Definition misc.hh:537
@ MISCREG_DCISW
Definition misc.hh:321
@ MISCREG_ID_MMFR2
Definition misc.hh:235
@ MISCREG_HMAIR1
Definition misc.hh:418
@ MISCREG_ICH_LR0_EL2
Definition misc.hh:984
@ MISCREG_APGAKeyHi_EL1
Definition misc.hh:914
@ MISCREG_VMPIDR_EL2
Definition misc.hh:608
@ MISCREG_IC_IVAU_Xt
Definition misc.hh:704
@ MISCREG_ICC_IAR0_EL1
Definition misc.hh:923
@ MISCREG_MPAMVPM5_EL2
Definition misc.hh:1184
@ MISCREG_ICC_BPR1_EL1_S
Definition misc.hh:953
@ MISCREG_DBGBCR8
Definition misc.hh:148
@ MISCREG_AMAIR0
Definition misc.hh:411
@ MISCREG_VBAR_NS
Definition misc.hh:422
@ MISCREG_DBGWCR3_EL1
Definition misc.hh:539
@ MISCREG_PMEVCNTR0
Definition misc.hh:379
@ MISCREG_PMOVSCLR_EL0
Definition misc.hh:799
@ MISCREG_ICC_MSRE
Definition misc.hh:1082
@ MISCREG_DBGBCR5
Definition misc.hh:145
@ MISCREG_PMCCNTR
Definition misc.hh:377
@ MISCREG_ICC_AP1R0_NS
Definition misc.hh:1049
@ MISCREG_HSR
Definition misc.hh:300
@ MISCREG_ICC_AP1R2_EL1
Definition misc.hh:937
@ MISCREG_TPIDRURO
Definition misc.hh:435
@ MISCREG_ICH_LRC1
Definition misc.hh:1122
@ MISCREG_HCR2
Definition misc.hh:267
@ MISCREG_DSPSR_EL0
Definition misc.hh:661
@ MISCREG_ICC_HPPIR1_EL1
Definition misc.hh:950
@ MISCREG_L2MERRSR_EL1
Definition misc.hh:899
@ MISCREG_ICC_AP1R3_EL1
Definition misc.hh:940
@ MISCREG_CNTHP_CVAL
Definition misc.hh:461
@ MISCREG_TTBR0_NS
Definition misc.hh:273
@ MISCREG_ICC_RPR
Definition misc.hh:1084
@ MISCREG_FAR_EL2
Definition misc.hh:689
@ MISCREG_CNTHVS_CTL_EL2
Definition misc.hh:868
@ MISCREG_DBGBCR7
Definition misc.hh:147
@ MISCREG_DBGWVR3
Definition misc.hh:159
@ MISCREG_ID_AA64SMFR0_EL1
Definition misc.hh:1146
@ MISCREG_ICC_ASGI1R
Definition misc.hh:1060
@ MISCREG_ICH_AP1R0_EL2
Definition misc.hh:974
@ MISCREG_PMEVCNTR3_EL0
Definition misc.hh:877
@ MISCREG_FPSCR_EXC
Definition misc.hh:98
@ MISCREG_CNTV_TVAL_EL02
Definition misc.hh:851
@ MISCREG_RVBAR_EL3
Definition misc.hh:827
@ MISCREG_ICH_VTR_EL2
Definition misc.hh:979
@ MISCREG_DBGBCR10_EL1
Definition misc.hh:514
@ MISCREG_OSDTRRX_EL1
Definition misc.hh:484
@ MISCREG_AT_S1E0R_Xt
Definition misc.hh:699
@ MISCREG_MPAM1_EL12
Definition misc.hh:1176
@ MISCREG_MDDTRTX_EL0
Definition misc.hh:554
@ MISCREG_ICC_SRE_S
Definition misc.hh:1089
@ MISCREG_DBGWVR6_EL1
Definition misc.hh:526
@ MISCREG_ID_ISAR3
Definition misc.hh:241
@ MISCREG_CNTHP_CTL_EL2
Definition misc.hh:858
@ MISCREG_ICH_LR14
Definition misc.hh:1119
@ MISCREG_IMPDEF_UNIMPL
Definition misc.hh:1212
@ MISCREG_ICH_LRC10
Definition misc.hh:1131
@ MISCREG_MVBAR
Definition misc.hh:424
@ MISCREG_DBGBCR6
Definition misc.hh:146
@ MISCREG_DBGWVR8_EL1
Definition misc.hh:528
@ MISCREG_ERXFR_EL1
Definition misc.hh:1217
@ MISCREG_PMCR_EL0
Definition misc.hh:796
@ MISCREG_PAR
Definition misc.hh:312
@ MISCREG_CBAR
Definition misc.hh:476
@ MISCREG_CONTEXTIDR_EL12
Definition misc.hh:830
@ MISCREG_CPTR_EL3
Definition misc.hh:630
@ MISCREG_ESR_EL2
Definition misc.hh:682
@ MISCREG_HADFSR
Definition misc.hh:298
@ MISCREG_SPSR_FIQ_AA64
Definition misc.hh:669
@ MISCREG_IC_IALLUIS
Definition misc.hh:692
@ MISCREG_NMRR_MAIR1_NS
Definition misc.hh:106
@ MISCREG_ICH_LR4
Definition misc.hh:1109
@ MISCREG_ID_PFR0
Definition misc.hh:229
@ MISCREG_CLIDR_EL1
Definition misc.hh:602
@ MISCREG_ICH_LRC4
Definition misc.hh:1125
@ MISCREG_DBGBVR6
Definition misc.hh:130
@ MISCREG_NMRR_S
Definition misc.hh:407
@ MISCREG_DCCMVAC
Definition misc.hh:330
@ MISCREG_L2ECTLR_EL1
Definition misc.hh:819
@ MISCREG_ICC_BPR1
Definition misc.hh:1062
@ MISCREG_ICH_LR11
Definition misc.hh:1116
@ MISCREG_IFAR_S
Definition misc.hh:306
@ MISCREG_ICH_AP0R2
Definition misc.hh:1093
@ MISCREG_ID_MMFR3_EL1
Definition misc.hh:579
@ MISCREG_SPSR_IRQ_AA64
Definition misc.hh:666
@ MISCREG_ID_MMFR4
Definition misc.hh:237
@ MISCREG_DBGBXVR1
Definition misc.hh:190
@ MISCREG_AFSR1_EL1
Definition misc.hh:675
@ MISCREG_CNTP_CVAL_S
Definition misc.hh:451
@ MISCREG_ICH_LR13
Definition misc.hh:1118
@ MISCREG_TPIDRURO_S
Definition misc.hh:437
@ MISCREG_DBGBVR4_EL1
Definition misc.hh:492
@ MISCREG_VSTTBR_EL2
Definition misc.hh:645
@ MISCREG_CNTKCTL
Definition misc.hh:458
@ MISCREG_PRRR_MAIR0_NS
Definition misc.hh:103
@ MISCREG_DBGWVR4
Definition misc.hh:160
@ MISCREG_CONTEXTIDR_S
Definition misc.hh:431
@ MISCREG_CNTHV_CVAL_EL2
Definition misc.hh:866
@ MISCREG_LOCKADDR
Definition misc.hh:100
@ MISCREG_PMCEID1_EL0
Definition misc.hh:803
@ MISCREG_TPIDRURW_NS
Definition misc.hh:433
@ MISCREG_CTR_EL0
Definition misc.hh:605
@ MISCREG_CNTFRQ_EL0
Definition misc.hh:837
@ MISCREG_ID_AFR0
Definition misc.hh:232
@ MISCREG_ICC_CTLR_EL1_S
Definition misc.hh:956
@ MISCREG_DBGAUTHSTATUS_EL1
Definition misc.hh:564
@ MISCREG_DBGBCR1
Definition misc.hh:141
@ MISCREG_FPEXC32_EL2
Definition misc.hh:683
@ MISCREG_TPIDRURO_NS
Definition misc.hh:436
@ MISCREG_DBGBCR13
Definition misc.hh:153
@ MISCREG_MDDTR_EL0
Definition misc.hh:553
@ MISCREG_TLBIMVAA
Definition misc.hh:354
@ MISCREG_ICC_AP1R1_NS
Definition misc.hh:1052
@ MISCREG_PMEVCNTR1_EL0
Definition misc.hh:875
@ MISCREG_SPSR
Definition misc.hh:80
@ MISCREG_TPIDRPRW
Definition misc.hh:438
@ MISCREG_ACTLR
Definition misc.hh:256
@ MISCREG_DBGBVR12
Definition misc.hh:136
@ MISCREG_VTTBR_EL2
Definition misc.hh:643
@ MISCREG_DBGWCR7
Definition misc.hh:179
@ MISCREG_PMXEVTYPER_PMCCFILTR
Definition misc.hh:108
@ MISCREG_MAIR1_NS
Definition misc.hh:409
@ MISCREG_ICC_HPPIR1
Definition misc.hh:1072
@ MISCREG_VDISR_EL2
Definition misc.hh:1225
@ MISCREG_DBGBVR15
Definition misc.hh:139
@ MISCREG_DBGBVR4
Definition misc.hh:128
@ MISCREG_ID_AA64PFR1_EL1
Definition misc.hh:592
@ MISCREG_RAMINDEX
Definition misc.hh:474
@ MISCREG_HSTR
Definition misc.hh:270
@ MISCREG_MDCR_EL3
Definition misc.hh:631
@ MISCREG_AFSR0_EL2
Definition misc.hh:680
@ MISCREG_ID_ISAR2
Definition misc.hh:240
@ MISCREG_SPSR_FIQ
Definition misc.hh:81
@ MISCREG_PRRR_S
Definition misc.hh:401
@ MISCREG_ICC_AP1R3_NS
Definition misc.hh:1058
@ MISCREG_CNTV_CVAL_EL0
Definition misc.hh:844
@ MISCREG_ZCR_EL12
Definition misc.hh:1142
@ MISCREG_DBGWCR13
Definition misc.hh:185
@ MISCREG_SP_EL1
Definition misc.hh:665
@ MISCREG_ATS1CUW
Definition misc.hh:325
@ MISCREG_MAIR0
Definition misc.hh:402
@ MISCREG_PMOVSSET_EL0
Definition misc.hh:809
std::optional< MiscRegNum64 > encodeAArch64SysReg(MiscRegIndex misc_reg)
Definition misc.cc:2981
Bitfield< 3, 2 > el
Definition misc_types.hh:73
@ MISCREG_USR_S_RD
Definition misc.hh:1260
@ MISCREG_BANKED_CHILD
Definition misc.hh:1252
@ MISCREG_MON_NS1_RD
Definition misc.hh:1276
@ MISCREG_PRI_NS_WR
Definition misc.hh:1264
@ MISCREG_PRI_S_WR
Definition misc.hh:1266
@ MISCREG_MON_NS0_RD
Definition misc.hh:1273
@ MISCREG_BANKED
Definition misc.hh:1246
@ MISCREG_WARN_NOT_FAIL
Definition misc.hh:1241
@ MISCREG_MON_NS1_WR
Definition misc.hh:1277
@ MISCREG_HYP_NS_WR
Definition misc.hh:1269
@ MISCREG_PRI_S_RD
Definition misc.hh:1265
@ MISCREG_PRI_NS_RD
Definition misc.hh:1263
@ MISCREG_USR_NS_WR
Definition misc.hh:1259
@ MISCREG_USR_S_WR
Definition misc.hh:1261
@ MISCREG_USR_NS_RD
Definition misc.hh:1258
@ MISCREG_MON_NS0_WR
Definition misc.hh:1274
@ MISCREG_HYP_NS_RD
Definition misc.hh:1268
MiscRegIndex decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
Definition misc.cc:535
bool condGenericTimerSystemAccessTrapEL1(const MiscRegIndex misc_reg, ThreadContext *tc)
Definition utility.cc:898
int unflattenMiscReg(int reg)
Definition misc.cc:738
int snsBankedIndex(MiscRegIndex reg, ThreadContext *tc)
Definition misc.cc:686
Bitfield< 34 > aarch64
Definition types.hh:81
std::tuple< bool, bool > canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to write coprocessor registers.
Definition misc.cc:627
bool HaveExt(ThreadContext *tc, ArmExtension ext)
Returns true if the provided ThreadContext supports the ArmExtension passed as a second argument.
Definition utility.cc:232
int snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc)
Definition misc.cc:704
MiscRegIndex decodeCP15Reg64(unsigned crm, unsigned opc1)
Definition misc.cc:568
std::vector< struct MiscRegLUTEntry > lookUpMiscReg(NUM_MISCREGS)
Definition misc.hh:1728
static Fault defaultFaultE2H_EL2(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst)
Definition misc.cc:3012
std::tuple< bool, bool > canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to read coprocessor registers.
Definition misc.cc:580
static Fault defaultFaultE2H_EL3(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst)
Definition misc.cc:3024
Bitfield< 0 > p
Bitfield< 2 > priv
Definition misc.hh:131
Bitfield< 5, 3 > reg
Definition types.hh:92
Bitfield< 15 > system
Definition misc.hh:1032
Bitfield< 63 > val
Definition misc.hh:804
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
std::shared_ptr< FaultBase > Fault
Definition types.hh:249
uint64_t RegVal
Definition types.hh:173
void unserialize(ThreadContext &tc, CheckpointIn &cp)
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition root.cc:220
Bitfield< 9 > hyp
constexpr decltype(nullptr) NoFault
Definition types.hh:253
MiscReg metadata.
Definition misc.hh:1284
static Fault defaultFault(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst)
Definition misc.cc:3001
std::array< FaultCB, EL3+1 > faultRead
Definition misc.hh:1299
std::bitset< NUM_MISCREG_INFOS > info
Definition misc.hh:1292
std::array< FaultCB, EL3+1 > faultWrite
Definition misc.hh:1300
Fault checkFault(ThreadContext *tc, const MiscRegOp64 &inst, ExceptionLevel el)
Definition misc.cc:2992

Generated on Mon Oct 27 2025 04:12:58 for gem5 by doxygen 1.14.0