gem5 [DEVELOP-FOR-25.0]
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 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1442 const bool in_host = EL2Enabled(tc) && hcr.e2h && hcr.tge;
1443 if (fgtEnabled(tc) && !in_host &&
1444 fgtRegister<read>(tc).*r_bitfield) {
1445 return inst.generateTrap(EL2);
1446 } else {
1447 return NoFault;
1448 }
1449}
1450
1457template<bool read, auto r_bitfield, RegVal r_match=0b1>
1458Fault
1459faultFgtEL1(const MiscRegLUTEntry &entry,
1460 ThreadContext *tc, const MiscRegOp64 &inst)
1461{
1462 if (fgtEnabled(tc) && (fgtRegister<read>(tc).*r_bitfield == r_match)) {
1463 return inst.generateTrap(EL2);
1464 } else {
1465 return NoFault;
1466 }
1467}
1468
1474template<auto r_bitfield>
1475Fault
1476faultFgtInstEL1(const MiscRegLUTEntry &entry,
1477 ThreadContext *tc, const MiscRegOp64 &inst)
1478{
1479 if (fgtEnabled(tc) &&
1480 static_cast<HFGITR>(tc->readMiscReg(MISCREG_HFGITR_EL2)).*r_bitfield) {
1481 return inst.generateTrap(EL2);
1482 } else {
1483 return NoFault;
1484 }
1485}
1486
1493template<auto r_bitfield>
1494Fault
1495faultFgtTlbiNxsEL1(const MiscRegLUTEntry &entry,
1496 ThreadContext *tc, const MiscRegOp64 &inst)
1497{
1498 if (HaveExt(tc, ArmExtension::FEAT_HCX)) {
1499 const HCRX hcrx = tc->readMiscReg(MISCREG_HCRX_EL2);
1500 if (auto fault = faultFgtInstEL1<r_bitfield>(entry, tc, inst);
1501 fault != NoFault && (!isHcrxEL2Enabled(tc) || !hcrx.fgtnxs)) {
1502 return fault;
1503 } else {
1504 return NoFault;
1505 }
1506 } else {
1507 return NoFault;
1508 }
1509}
1510
1517template<bool read, auto r_bitfield>
1518Fault
1519faultFgtDebugEL1(const MiscRegLUTEntry &entry,
1520 ThreadContext *tc, const MiscRegOp64 &inst)
1521{
1522 if (fgtEnabled(tc) && fgtDebugRegister<read>(tc).*r_bitfield) {
1523 return inst.generateTrap(EL2);
1524 } else {
1525 return NoFault;
1526 }
1527}
1528
1534template <auto g_bitfield>
1535Fault
1536faultHcrEL1(const MiscRegLUTEntry &entry,
1537 ThreadContext *tc, const MiscRegOp64 &inst)
1538{
1539 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1540 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1541 return inst.generateTrap(EL2);
1542 } else {
1543 return NoFault;
1544 }
1545}
1546
1554template<bool read, auto g_bitfield, auto r_bitfield>
1555Fault
1556faultHcrFgtEL0(const MiscRegLUTEntry &entry,
1557 ThreadContext *tc, const MiscRegOp64 &inst)
1558{
1559 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1560 const bool in_host = EL2Enabled(tc) && hcr.e2h && hcr.tge;
1561
1562 if (EL2Enabled(tc) && !in_host && hcr.*g_bitfield) {
1563 return inst.generateTrap(EL2);
1564 } else if (auto fault = faultFgtEL0<read, r_bitfield>(entry, tc, inst);
1565 fault != NoFault) {
1566 return fault;
1567 } else {
1568 return NoFault;
1569 }
1570}
1571
1579template<bool read, auto g_bitfield, auto r_bitfield, RegVal r_match=0b1>
1580Fault
1581faultHcrFgtEL1(const MiscRegLUTEntry &entry,
1582 ThreadContext *tc, const MiscRegOp64 &inst)
1583{
1584 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1585
1586 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1587 return inst.generateTrap(EL2);
1588 } else if (auto fault = faultFgtEL1<read, r_bitfield, r_match>(entry, tc, inst);
1589 fault != NoFault) {
1590 return fault;
1591 } else {
1592 return NoFault;
1593 }
1594}
1595
1602template<auto g_bitfield, auto r_bitfield>
1603Fault
1604faultHcrFgtInstEL1(const MiscRegLUTEntry &entry,
1605 ThreadContext *tc, const MiscRegOp64 &inst)
1606{
1607 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1608
1609 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1610 return inst.generateTrap(EL2);
1611 } else if (auto fault = faultFgtInstEL1<r_bitfield>(entry, tc, inst);
1612 fault != NoFault) {
1613 return fault;
1614 } else {
1615 return NoFault;
1616 }
1617}
1618
1626template<auto g_bitfield, auto r_bitfield>
1627Fault
1628faultTlbiNxsEL1(const MiscRegLUTEntry &entry,
1629 ThreadContext *tc, const MiscRegOp64 &inst)
1630{
1631 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1632
1633 if (EL2Enabled(tc) && hcr.*g_bitfield) {
1634 return inst.generateTrap(EL2);
1635 } else if (auto fault = faultFgtTlbiNxsEL1<r_bitfield>(entry, tc, inst);
1636 fault != NoFault) {
1637 return fault;
1638 } else {
1639 return NoFault;
1640 }
1641}
1642
1643Fault
1644faultSpEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1645 const MiscRegOp64 &inst)
1646{
1647 if (tc->readMiscReg(MISCREG_SPSEL) == 0)
1648 return inst.undefined();
1649 else
1650 return NoFault;
1651}
1652
1653Fault
1654faultDaif(const MiscRegLUTEntry &entry, ThreadContext *tc,
1655 const MiscRegOp64 &inst)
1656{
1657 const bool el2_enabled = EL2Enabled(tc);
1658 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
1659 const SCTLR sctlr = tc->readMiscRegNoEffect(MISCREG_SCTLR_EL1);
1660 if ((el2_enabled && hcr.e2h && hcr.tge) || sctlr.uma == 0) {
1661 if (el2_enabled && hcr.tge) {
1662 return inst.generateTrap(EL2);
1663 } else {
1664 return inst.generateTrap(EL1);
1665 }
1666 } else {
1667 return NoFault;
1668 }
1669}
1670
1671Fault
1672faultDczvaEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1673 const MiscRegOp64 &inst)
1674{
1675 if (!FullSystem)
1676 return NoFault;
1677
1678 const SCTLR sctlr = tc->readMiscRegNoEffect(MISCREG_SCTLR_EL1);
1679 const SCTLR sctlr2 = tc->readMiscRegNoEffect(MISCREG_SCTLR_EL2);
1680 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
1681
1682 const bool el2_enabled = EL2Enabled(tc);
1683 const bool in_host = hcr.e2h && hcr.tge;
1684 if (!(el2_enabled && in_host) && !sctlr.dze) {
1685 if (el2_enabled && hcr.tge) {
1686 return inst.generateTrap(EL2);
1687 } else {
1688 return inst.generateTrap(EL1);
1689 }
1690 } else if (el2_enabled && !in_host && hcr.tdz) {
1691 return inst.generateTrap(EL2);
1692 } else if (el2_enabled && in_host && !sctlr2.dze) {
1693 return inst.generateTrap(EL2);
1694 } else {
1695 return NoFault;
1696 }
1697}
1698
1699Fault
1700faultCvacEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1701 const MiscRegOp64 &inst)
1702{
1703 const SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1704 const SCTLR sctlr2 = tc->readMiscReg(MISCREG_SCTLR_EL2);
1705 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1706
1707 const bool el2_enabled = EL2Enabled(tc);
1708 const bool in_host = hcr.e2h && hcr.tge;
1709 if (!(el2_enabled && in_host) && !sctlr.uci) {
1710 if (el2_enabled && hcr.tge) {
1711 return inst.generateTrap(EL2);
1712 } else {
1713 return inst.generateTrap(EL1);
1714 }
1715 } else if (el2_enabled && !in_host && hcr.tpc) {
1716 return inst.generateTrap(EL2);
1717 } else if (el2_enabled && in_host && !sctlr2.uci) {
1718 return inst.generateTrap(EL2);
1719 } else {
1720 return NoFault;
1721 }
1722}
1723
1724Fault
1725faultFpcrEL0(const MiscRegLUTEntry &entry, ThreadContext *tc,
1726 const MiscRegOp64 &inst)
1727{
1728 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
1729 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
1730 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1731
1732 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1733 const bool el2_enabled = EL2Enabled(tc);
1734 const bool in_host = hcr.e2h && hcr.tge;
1735 if (!(el2_enabled && in_host) && cpacr.fpen != 0b11) {
1736 if (el2_enabled && hcr.tge) {
1737 return inst.generateTrap(EL2, ExceptionClass::UNKNOWN, inst.iss());
1738 } else {
1739 return inst.generateTrap(EL1,
1741 }
1742 } else if (el2_enabled && in_host && cptr_el2.fpen != 0b11) {
1743 return inst.generateTrap(EL2,
1745 } else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
1746 return inst.generateTrap(EL2,
1748 } else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
1749 return inst.generateTrap(EL2,
1751 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
1752 return inst.generateTrap(EL3,
1754 } else {
1755 return NoFault;
1756 }
1757}
1758
1759Fault
1760faultFpcrEL1(const MiscRegLUTEntry &entry, ThreadContext *tc,
1761 const MiscRegOp64 &inst)
1762{
1763 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
1764 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
1765 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1766
1767 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1768 const bool el2_enabled = EL2Enabled(tc);
1769 if ((cpacr.fpen & 0b1) == 0b0) {
1770 return inst.generateTrap(EL1,
1772 } else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
1773 return inst.generateTrap(EL2,
1775 } else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
1776 return inst.generateTrap(EL2,
1778 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
1779 return inst.generateTrap(EL3,
1781 } else {
1782 return NoFault;
1783 }
1784}
1785
1786Fault
1787faultFpcrEL2(const MiscRegLUTEntry &entry, ThreadContext *tc,
1788 const MiscRegOp64 &inst)
1789{
1790 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
1791 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1792
1793 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1794 if (!hcr.e2h && cptr_el2.tfp) {
1795 return inst.generateTrap(EL2,
1797 } else if (hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
1798 return inst.generateTrap(EL2,
1800 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
1801 return inst.generateTrap(EL3,
1803 } else {
1804 return NoFault;
1805 }
1806}
1807
1808Fault
1809faultFpcrEL3(const MiscRegLUTEntry &entry,
1810 ThreadContext *tc, const MiscRegOp64 &inst)
1811{
1812 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
1813 if (cptr_el3.tfp) {
1814 return inst.generateTrap(EL3,
1816 } else {
1817 return NoFault;
1818 }
1819}
1820
1821Fault
1822faultPouEL0(const MiscRegLUTEntry &entry,
1823 ThreadContext *tc, const MiscRegOp64 &inst)
1824{
1825 const SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1826 const SCTLR sctlr2 = tc->readMiscReg(MISCREG_SCTLR_EL2);
1827 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1828
1829 const bool el2_enabled = EL2Enabled(tc);
1830 const bool in_host = hcr.e2h && hcr.tge;
1831 if (!(el2_enabled && in_host) && !sctlr.uci) {
1832 if (el2_enabled && hcr.tge) {
1833 return inst.generateTrap(EL2);
1834 } else {
1835 return inst.generateTrap(EL1);
1836 }
1837 } else if (el2_enabled && !in_host && hcr.tpu) {
1838 return inst.generateTrap(EL2);
1839 } else if (el2_enabled && !in_host &&
1840 HaveExt(tc, ArmExtension::FEAT_EVT) && hcr.tocu) {
1841 return inst.generateTrap(EL2);
1842 } else if (el2_enabled && in_host && !sctlr2.uci) {
1843 return inst.generateTrap(EL2);
1844 } else {
1845 return NoFault;
1846 }
1847}
1848
1849template <auto bitfield>
1850Fault
1851faultPouEL1(const MiscRegLUTEntry &entry,
1852 ThreadContext *tc, const MiscRegOp64 &inst)
1853{
1854 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1855 const bool el2_enabled = EL2Enabled(tc);
1856 if (el2_enabled && hcr.tpu) {
1857 return inst.generateTrap(EL2);
1858 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
1859 hcr.tocu) {
1860 return inst.generateTrap(EL2);
1861 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
1862 fault != NoFault) {
1863 return fault;
1864 } else {
1865 return NoFault;
1866 }
1867}
1868
1869template <auto bitfield>
1870Fault
1871faultPouIsEL1(const MiscRegLUTEntry &entry,
1872 ThreadContext *tc, const MiscRegOp64 &inst)
1873{
1874 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1875 const bool el2_enabled = EL2Enabled(tc);
1876 if (el2_enabled && hcr.tpu) {
1877 return inst.generateTrap(EL2);
1878 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
1879 hcr.ticab) {
1880 return inst.generateTrap(EL2);
1881 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
1882 fault != NoFault) {
1883 return fault;
1884 } else {
1885 return NoFault;
1886 }
1887}
1888
1889Fault
1890faultCtrEL0(const MiscRegLUTEntry &entry,
1891 ThreadContext *tc, const MiscRegOp64 &inst)
1892{
1893 const SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1894 const SCTLR sctlr2 = tc->readMiscReg(MISCREG_SCTLR_EL2);
1895 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1896
1897 const bool el2_enabled = EL2Enabled(tc);
1898 const bool in_host = hcr.e2h && hcr.tge;
1899 if (!(el2_enabled && in_host) && !sctlr.uct) {
1900 if (el2_enabled && hcr.tge) {
1901 return inst.generateTrap(EL2);
1902 } else {
1903 return inst.generateTrap(EL1);
1904 }
1905 } else if (auto fault = faultHcrFgtEL0<
1906 true, &HCR::tid2, &HFGTR::ctrEL0>(entry, tc, inst);
1907 fault != NoFault) {
1908 return fault;
1909 } else if (el2_enabled && in_host && !sctlr2.uct) {
1910 return inst.generateTrap(EL2);
1911 } else {
1912 return NoFault;
1913 }
1914}
1915
1916Fault
1917faultMdccsrEL0(const MiscRegLUTEntry &entry,
1918 ThreadContext *tc, const MiscRegOp64 &inst)
1919{
1920 const DBGDS32 mdscr = tc->readMiscReg(MISCREG_MDSCR_EL1);
1921 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
1922 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1923
1924 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1925 const bool el2_enabled = EL2Enabled(tc);
1926 if (mdscr.tdcc) {
1927 if (el2_enabled && hcr.tge) {
1928 return inst.generateTrap(EL2);
1929 } else {
1930 return inst.generateTrap(EL1);
1931 }
1932 } else if (el2_enabled && mdcr_el2.tdcc) {
1933 return inst.generateTrap(EL2);
1934 } else if (el2_enabled && (hcr.tge || (mdcr_el2.tde || mdcr_el2.tda))) {
1935 return inst.generateTrap(EL2);
1936 } else if (ArmSystem::haveEL(tc, EL3) && (mdcr_el3.tdcc || mdcr_el3.tda)) {
1937 return inst.generateTrap(EL3);
1938 } else {
1939 return NoFault;
1940 }
1941}
1942
1943Fault
1944faultMdccsrEL1(const MiscRegLUTEntry &entry,
1945 ThreadContext *tc, const MiscRegOp64 &inst)
1946{
1947 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
1948 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1949
1950 const bool el2_enabled = EL2Enabled(tc);
1951 if (el2_enabled && mdcr_el2.tdcc) {
1952 return inst.generateTrap(EL2);
1953 } else if (el2_enabled && (mdcr_el2.tde || mdcr_el2.tda)) {
1954 return inst.generateTrap(EL2);
1955 } else if (ArmSystem::haveEL(tc, EL3) && (mdcr_el3.tdcc || mdcr_el3.tda)) {
1956 return inst.generateTrap(EL3);
1957 } else {
1958 return NoFault;
1959 }
1960}
1961
1962Fault
1963faultMdccsrEL2(const MiscRegLUTEntry &entry,
1964 ThreadContext *tc, const MiscRegOp64 &inst)
1965{
1966 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1967 if (ArmSystem::haveEL(tc, EL3) && (mdcr_el3.tdcc || mdcr_el3.tda)) {
1968 return inst.generateTrap(EL3);
1969 } else {
1970 return NoFault;
1971 }
1972}
1973
1974Fault
1975faultDebugEL1(const MiscRegLUTEntry &entry,
1976 ThreadContext *tc, const MiscRegOp64 &inst)
1977{
1978 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
1979 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1980
1981 const bool el2_enabled = EL2Enabled(tc);
1982 if (el2_enabled && (mdcr_el2.tde || mdcr_el2.tda)) {
1983 return inst.generateTrap(EL2);
1984 } else if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tda) {
1985 return inst.generateTrap(EL3);
1986 } else {
1987 return NoFault;
1988 }
1989}
1990
1991Fault
1992faultDebugEL2(const MiscRegLUTEntry &entry,
1993 ThreadContext *tc, const MiscRegOp64 &inst)
1994{
1995 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
1996 if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tda) {
1997 return inst.generateTrap(EL3);
1998 } else {
1999 return NoFault;
2000 }
2001}
2002
2003template<bool read, auto r_bitfield>
2004Fault
2005faultDebugWithFgtEL1(const MiscRegLUTEntry &entry,
2006 ThreadContext *tc, const MiscRegOp64 &inst)
2007{
2008 if (auto fault = faultFgtDebugEL1<read, r_bitfield>(entry, tc, inst);
2009 fault != NoFault) {
2010 return fault;
2011 } else {
2012 return faultDebugEL1(entry, tc, inst);
2013 }
2014}
2015
2016template<bool read, auto r_bitfield>
2017Fault
2018faultDebugOsEL1(const MiscRegLUTEntry &entry,
2019 ThreadContext *tc, const MiscRegOp64 &inst)
2020{
2021 const HDCR mdcr_el2 = tc->readMiscReg(MISCREG_MDCR_EL2);
2022 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
2023
2024 if (auto fault = faultFgtDebugEL1<read, r_bitfield>(entry, tc, inst);
2025 fault != NoFault) {
2026 return fault;
2027 } else if (EL2Enabled(tc) && (mdcr_el2.tde || mdcr_el2.tdosa)) {
2028 return inst.generateTrap(EL2);
2029 } else if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tdosa) {
2030 return inst.generateTrap(EL3);
2031 } else {
2032 return NoFault;
2033 }
2034}
2035
2036Fault
2037faultDebugOsEL2(const MiscRegLUTEntry &entry,
2038 ThreadContext *tc, const MiscRegOp64 &inst)
2039{
2040 const HDCR mdcr_el3 = tc->readMiscReg(MISCREG_MDCR_EL3);
2041 if (ArmSystem::haveEL(tc, EL3) && mdcr_el3.tdosa) {
2042 return inst.generateTrap(EL3);
2043 } else {
2044 return NoFault;
2045 }
2046}
2047
2048Fault
2049faultHcrxEL2(const MiscRegLUTEntry &entry,
2050 ThreadContext *tc, const MiscRegOp64 &inst)
2051{
2052 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2053 if (ArmSystem::haveEL(tc, EL3) && !scr.hxen) {
2054 return inst.generateTrap(EL3);
2055 } else {
2056 return NoFault;
2057 }
2058}
2059
2060Fault
2061faultZcrEL1(const MiscRegLUTEntry &entry,
2062 ThreadContext *tc, const MiscRegOp64 &inst)
2063{
2064 const CPACR cpacr_el1 = tc->readMiscReg(MISCREG_CPACR_EL1);
2065 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2066 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2067
2068 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2069 const bool el2_enabled = EL2Enabled(tc);
2070 if (!(cpacr_el1.zen & 0x1)) {
2071 return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SVE, 0);
2072 } else if (el2_enabled && !hcr.e2h && cptr_el2.tz) {
2073 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2074 } else if (el2_enabled && hcr.e2h && !(cptr_el2.zen & 0x1)) {
2075 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2076 } else if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.ez) {
2077 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
2078 } else {
2079 return NoFault;
2080 }
2081}
2082
2083Fault
2084faultZcrEL2(const MiscRegLUTEntry &entry,
2085 ThreadContext *tc, const MiscRegOp64 &inst)
2086{
2087 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2088 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2089
2090 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2091 if (!hcr.e2h && cptr_el2.tz) {
2092 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2093 } else if (hcr.e2h && !(cptr_el2.zen & 0x1)) {
2094 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
2095 } else if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.ez) {
2096 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
2097 } else {
2098 return NoFault;
2099 }
2100}
2101
2102Fault
2103faultZcrEL3(const MiscRegLUTEntry &entry,
2104 ThreadContext *tc, const MiscRegOp64 &inst)
2105{
2106 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2107 if (!cptr_el3.ez) {
2108 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
2109 } else {
2110 return NoFault;
2111 }
2112}
2113
2114Fault
2115faultGicv3(const MiscRegLUTEntry &entry,
2116 ThreadContext *tc, const MiscRegOp64 &inst)
2117{
2118 auto gic = static_cast<ArmSystem*>(tc->getSystemPtr())->getGIC();
2119 if (!gic->supportsVersion(BaseGic::GicVersion::GIC_V3)) {
2120 return inst.undefined();
2121 } else {
2122 return NoFault;
2123 }
2124}
2125
2126Fault
2127faultIccSgiEL1(const MiscRegLUTEntry &entry,
2128 ThreadContext *tc, const MiscRegOp64 &inst)
2129{
2130 if (auto fault = faultGicv3(entry, tc, inst); fault != NoFault) {
2131 return fault;
2132 }
2133
2134 const Gicv3CPUInterface::ICH_HCR_EL2 ich_hcr =
2135 tc->readMiscReg(MISCREG_ICH_HCR_EL2);
2136 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2137 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2138 if (EL2Enabled(tc) && (hcr.fmo || hcr.imo || ich_hcr.TC)) {
2139 return inst.generateTrap(EL2);
2140 } else if (ArmSystem::haveEL(tc, EL3) && scr.irq && scr.fiq) {
2141 return inst.generateTrap(EL3);
2142 } else {
2143 return NoFault;
2144 }
2145}
2146
2147Fault
2148faultIccSgiEL2(const MiscRegLUTEntry &entry,
2149 ThreadContext *tc, const MiscRegOp64 &inst)
2150{
2151 if (auto fault = faultGicv3(entry, tc, inst); fault != NoFault) {
2152 return fault;
2153 }
2154
2155 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2156 if (ArmSystem::haveEL(tc, EL3) && scr.irq && scr.fiq) {
2157 return inst.generateTrap(EL3);
2158 } else {
2159 return NoFault;
2160 }
2161}
2162
2163template<bool read, auto g_bitfield>
2164Fault
2165faultSctlr2EL1(const MiscRegLUTEntry &entry,
2166 ThreadContext *tc, const MiscRegOp64 &inst)
2167{
2168 if (HaveExt(tc, ArmExtension::FEAT_SCTLR2)) {
2169 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2170 const HCRX hcrx = tc->readMiscReg(MISCREG_HCRX_EL2);
2171 if (
2172 auto fault = faultHcrFgtEL1<read, g_bitfield, &HFGTR::sctlrEL1>
2173 (
2174 entry,
2175 tc,
2176 inst
2177 );
2178 fault != NoFault
2179 ) {
2180 return fault;
2181 } else if (
2182 EL2Enabled(tc) && (!isHcrxEL2Enabled(tc) || !hcrx.sctlr2En)
2183 ) {
2184 return inst.generateTrap(EL2);
2185 } else if (ArmSystem::haveEL(tc, EL3) && !scr.sctlr2En) {
2186 return inst.generateTrap(EL3);
2187 } else {
2188 return NoFault;
2189 }
2190 } else {
2191 return inst.undefined();
2192 }
2193}
2194
2195Fault
2196faultSctlr2EL2(const MiscRegLUTEntry &entry,
2197 ThreadContext *tc, const MiscRegOp64 &inst)
2198{
2199 if (HaveExt(tc, ArmExtension::FEAT_SCTLR2)) {
2200 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2201 if (ArmSystem::haveEL(tc, EL3) && !scr.sctlr2En) {
2202 return inst.generateTrap(EL3);
2203 } else {
2204 return NoFault;
2205 }
2206 } else {
2207 return inst.undefined();
2208 }
2209}
2210
2211template<bool read, auto g_bitfield>
2212Fault
2213faultTcr2EL1(const MiscRegLUTEntry &entry,
2214 ThreadContext *tc, const MiscRegOp64 &inst)
2215{
2216 if (HaveExt(tc, ArmExtension::FEAT_TCR2)) {
2217 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2218 const HCRX hcrx = tc->readMiscReg(MISCREG_HCRX_EL2);
2219 if (
2220 auto fault = faultHcrFgtEL1<read, g_bitfield, &HFGTR::sctlrEL1>
2221 (
2222 entry,
2223 tc,
2224 inst
2225 );
2226 fault != NoFault
2227 ) {
2228 return fault;
2229 } else if (EL2Enabled(tc) && (!isHcrxEL2Enabled(tc) || !hcrx.tcr2En)) {
2230 return inst.generateTrap(EL2);
2231 } else if (ArmSystem::haveEL(tc, EL3) && !scr.tcr2En) {
2232 return inst.generateTrap(EL3);
2233 } else {
2234 return NoFault;
2235 }
2236 } else {
2237 return inst.undefined();
2238 }
2239}
2240
2241Fault
2242faultTcr2EL2(const MiscRegLUTEntry &entry,
2243 ThreadContext *tc, const MiscRegOp64 &inst)
2244{
2245 if (HaveExt(tc, ArmExtension::FEAT_TCR2)) {
2246 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2247 if (ArmSystem::haveEL(tc, EL3) && !scr.tcr2En) {
2248 return inst.generateTrap(EL3);
2249 } else {
2250 return NoFault;
2251 }
2252 } else {
2253 return inst.undefined();
2254 }
2255}
2256
2257Fault
2258faultTcr2VheEL3(const MiscRegLUTEntry &entry,
2259 ThreadContext *tc, const MiscRegOp64 &inst)
2260{
2261 if (HaveExt(tc, ArmExtension::FEAT_TCR2)) {
2262 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2263 const bool el2_host = EL2Enabled(tc) && hcr.e2h;
2264 if (el2_host) {
2265 return NoFault;
2266 } else {
2267 return inst.undefined();
2268 }
2269 } else {
2270 return inst.undefined();
2271 }
2272}
2273
2274template<bool read, auto r_bitfield>
2275Fault
2276faultCpacrEL1(const MiscRegLUTEntry &entry,
2277 ThreadContext *tc, const MiscRegOp64 &inst)
2278{
2279 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2280 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2281
2282 const bool el2_enabled = EL2Enabled(tc);
2283 if (el2_enabled && cptr_el2.tcpac) {
2284 return inst.generateTrap(EL2);
2285 } else if (auto fault = faultFgtEL1<read, r_bitfield>(entry, tc, inst);
2286 fault != NoFault) {
2287 return fault;
2288 } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tcpac) {
2289 return inst.generateTrap(EL3);
2290 } else {
2291 return NoFault;
2292 }
2293}
2294
2295Fault
2296faultCpacrEL2(const MiscRegLUTEntry &entry,
2297 ThreadContext *tc, const MiscRegOp64 &inst)
2298{
2299 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2300 if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tcpac) {
2301 return inst.generateTrap(EL3);
2302 } else {
2303 return NoFault;
2304 }
2305}
2306
2307template <auto bitfield>
2308Fault
2309faultTlbiOsEL1(const MiscRegLUTEntry &entry,
2310 ThreadContext *tc, const MiscRegOp64 &inst)
2311{
2312 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2313 const bool el2_enabled = EL2Enabled(tc);
2314 if (el2_enabled && hcr.ttlb) {
2315 return inst.generateTrap(EL2);
2316 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2317 hcr.ttlbos) {
2318 return inst.generateTrap(EL2);
2319 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
2320 fault != NoFault) {
2321 return fault;
2322 } else {
2323 return NoFault;
2324 }
2325}
2326
2327template <auto bitfield>
2328Fault
2329faultTlbiOsNxsEL1(const MiscRegLUTEntry &entry,
2330 ThreadContext *tc, const MiscRegOp64 &inst)
2331{
2332 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2333 const bool el2_enabled = EL2Enabled(tc);
2334 if (el2_enabled && hcr.ttlb) {
2335 return inst.generateTrap(EL2);
2336 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2337 hcr.ttlbos) {
2338 return inst.generateTrap(EL2);
2339 } else if (auto fault = faultFgtTlbiNxsEL1<bitfield>(entry, tc, inst);
2340 fault != NoFault) {
2341 return fault;
2342 } else {
2343 return NoFault;
2344 }
2345}
2346
2347template <auto bitfield>
2348Fault
2349faultTlbiIsEL1(const MiscRegLUTEntry &entry,
2350 ThreadContext *tc, const MiscRegOp64 &inst)
2351{
2352 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2353 const bool el2_enabled = EL2Enabled(tc);
2354 if (el2_enabled && hcr.ttlb) {
2355 return inst.generateTrap(EL2);
2356 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2357 hcr.ttlbis) {
2358 return inst.generateTrap(EL2);
2359 } else if (auto fault = faultFgtInstEL1<bitfield>(entry, tc, inst);
2360 fault != NoFault) {
2361 return fault;
2362 } else {
2363 return NoFault;
2364 }
2365}
2366
2367template <auto bitfield>
2368Fault
2369faultTlbiIsNxsEL1(const MiscRegLUTEntry &entry,
2370 ThreadContext *tc, const MiscRegOp64 &inst)
2371{
2372 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2373 const bool el2_enabled = EL2Enabled(tc);
2374 if (el2_enabled && hcr.ttlb) {
2375 return inst.generateTrap(EL2);
2376 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2377 hcr.ttlbis) {
2378 return inst.generateTrap(EL2);
2379 } else if (auto fault = faultFgtTlbiNxsEL1<bitfield>(entry, tc, inst);
2380 fault != NoFault) {
2381 return fault;
2382 } else {
2383 return NoFault;
2384 }
2385}
2386
2387template <bool read, auto r_bitfield>
2388Fault
2389faultCacheEL1(const MiscRegLUTEntry &entry,
2390 ThreadContext *tc, const MiscRegOp64 &inst)
2391{
2392 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2393 const bool el2_enabled = EL2Enabled(tc);
2394 if (el2_enabled && hcr.tid2) {
2395 return inst.generateTrap(EL2);
2396 } else if (el2_enabled && HaveExt(tc, ArmExtension::FEAT_EVT) &&
2397 hcr.tid4) {
2398 return inst.generateTrap(EL2);
2399 } else if (auto fault = faultFgtEL1<read, r_bitfield>(entry, tc, inst);
2400 fault != NoFault) {
2401 return fault;
2402 } else {
2403 return NoFault;
2404 }
2405}
2406
2407template <bool read, auto r_bitfield>
2408Fault
2409faultPauthEL1(const MiscRegLUTEntry &entry,
2410 ThreadContext *tc, const MiscRegOp64 &inst)
2411{
2412 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2413 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2414 const bool el2_enabled = EL2Enabled(tc);
2415
2416 if (el2_enabled && !hcr.apk) {
2417 return inst.generateTrap(EL2);
2418 } else if (auto fault = faultFgtEL1<read, r_bitfield>(entry, tc, inst);
2419 fault != NoFault) {
2420 return fault;
2421 } else if (ArmSystem::haveEL(tc, EL3) && !scr.apk) {
2422 return inst.generateTrap(EL3);
2423 } else {
2424 return NoFault;
2425 }
2426}
2427
2428Fault
2429faultPauthEL2(const MiscRegLUTEntry &entry,
2430 ThreadContext *tc, const MiscRegOp64 &inst)
2431{
2432 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2433 if (ArmSystem::haveEL(tc, EL3) && !scr.apk) {
2434 return inst.generateTrap(EL3);
2435 } else {
2436 return NoFault;
2437 }
2438}
2439
2440Fault
2441faultGenericTimerEL0(const MiscRegLUTEntry &entry,
2442 ThreadContext *tc, const MiscRegOp64 &inst)
2443{
2444 const bool el2_enabled = EL2Enabled(tc);
2445 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2446 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2447 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2448 const CNTHCTL_E2H cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2449 if (!(in_host) && !cntkctl_el1.el0pcten && !cntkctl_el1.el0vcten) {
2450 if (el2_enabled && hcr.tge)
2451 return inst.generateTrap(EL2);
2452 else
2453 return inst.generateTrap(EL1);
2454 } else if (in_host && !cnthctl_el2.el0pcten && !cnthctl_el2.el0vcten) {
2455 return inst.generateTrap(EL2);
2456 } else {
2457 return NoFault;
2458 }
2459}
2460
2461Fault
2462faultCntpctEL0(const MiscRegLUTEntry &entry,
2463 ThreadContext *tc, const MiscRegOp64 &inst)
2464{
2465 const bool el2_enabled = EL2Enabled(tc);
2466 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2467 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2468 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2469 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2470 if (!(in_host) && !cntkctl_el1.el0pcten) {
2471 if (el2_enabled && hcr.tge)
2472 return inst.generateTrap(EL2);
2473 else
2474 return inst.generateTrap(EL1);
2475 } else if (el2_enabled && !hcr.e2h &&
2476 !static_cast<CNTHCTL>(cnthctl_el2).el1pcten) {
2477 return inst.generateTrap(EL2);
2478 } else if (el2_enabled && hcr.e2h && !hcr.tge &&
2479 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pcten) {
2480 return inst.generateTrap(EL2);
2481 } else if (in_host &&
2482 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el0pcten) {
2483 return inst.generateTrap(EL2);
2484 } else {
2485 return NoFault;
2486 }
2487}
2488
2489Fault
2490faultCntpctEL1(const MiscRegLUTEntry &entry,
2491 ThreadContext *tc, const MiscRegOp64 &inst)
2492{
2493 const bool el2_enabled = EL2Enabled(tc);
2494 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2495 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2496 if (el2_enabled && hcr.e2h &&
2497 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pcten) {
2498 return inst.generateTrap(EL2);
2499 } else if (el2_enabled && !hcr.e2h &&
2500 !static_cast<CNTHCTL>(cnthctl_el2).el1pcten) {
2501 return inst.generateTrap(EL2);
2502 } else {
2503 return NoFault;
2504 }
2505}
2506
2507Fault
2508faultCntvctEL0(const MiscRegLUTEntry &entry,
2509 ThreadContext *tc, const MiscRegOp64 &inst)
2510{
2511 const bool el2_enabled = EL2Enabled(tc);
2512 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2513 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2514 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2515 const CNTHCTL_E2H cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2516 if (!(in_host) && !cntkctl_el1.el0vcten) {
2517 if (el2_enabled && hcr.tge)
2518 return inst.generateTrap(EL2);
2519 else
2520 return inst.generateTrap(EL1);
2521 } else if (in_host && !cnthctl_el2.el0vcten) {
2522 return inst.generateTrap(EL2);
2523 } else if (el2_enabled && !(hcr.e2h && hcr.tge) && cnthctl_el2.el1tvct) {
2524 return inst.generateTrap(EL2);
2525 } else {
2526 return NoFault;
2527 }
2528}
2529
2530Fault
2531faultCntvctEL1(const MiscRegLUTEntry &entry,
2532 ThreadContext *tc, const MiscRegOp64 &inst)
2533{
2534 const CNTHCTL cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2535 if (EL2Enabled(tc) && cnthctl_el2.el1tvct) {
2536 return inst.generateTrap(EL2);
2537 } else {
2538 return NoFault;
2539 }
2540}
2541
2542//TODO: See faultCntpctEL0
2543Fault
2544faultCntpCtlEL0(const MiscRegLUTEntry &entry,
2545 ThreadContext *tc, const MiscRegOp64 &inst)
2546{
2547 const bool el2_enabled = EL2Enabled(tc);
2548 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2549 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2550 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2551 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2552 if (!(in_host) && !cntkctl_el1.el0pten) {
2553 if (el2_enabled && hcr.tge)
2554 return inst.generateTrap(EL2);
2555 else
2556 return inst.generateTrap(EL1);
2557 } else if (el2_enabled && !hcr.e2h &&
2558 !static_cast<CNTHCTL>(cnthctl_el2).el1pcen) {
2559 return inst.generateTrap(EL2);
2560 } else if (el2_enabled && hcr.e2h && !hcr.tge &&
2561 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pten) {
2562 return inst.generateTrap(EL2);
2563 } else if (in_host &&
2564 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el0pten) {
2565 return inst.generateTrap(EL2);
2566 } else {
2567 return NoFault;
2568 }
2569}
2570
2571Fault
2572faultCntpCtlEL1(const MiscRegLUTEntry &entry,
2573 ThreadContext *tc, const MiscRegOp64 &inst)
2574{
2575 const bool el2_enabled = EL2Enabled(tc);
2576 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2577 const RegVal cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2578 if (el2_enabled && !hcr.e2h &&
2579 !static_cast<CNTHCTL>(cnthctl_el2).el1pcen) {
2580 return inst.generateTrap(EL2);
2581 } else if (el2_enabled && hcr.e2h &&
2582 !static_cast<CNTHCTL_E2H>(cnthctl_el2).el1pten) {
2583 return inst.generateTrap(EL2);
2584 } else {
2585 return NoFault;
2586 }
2587}
2588
2589// TODO: see faultCntvctEL0
2590Fault
2591faultCntvCtlEL0(const MiscRegLUTEntry &entry,
2592 ThreadContext *tc, const MiscRegOp64 &inst)
2593{
2594 const bool el2_enabled = EL2Enabled(tc);
2595 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2596 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2597 const CNTKCTL cntkctl_el1 = tc->readMiscReg(MISCREG_CNTKCTL_EL1);
2598 const CNTHCTL_E2H cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2599 if (!(in_host) && !cntkctl_el1.el0vten) {
2600 if (el2_enabled && hcr.tge)
2601 return inst.generateTrap(EL2);
2602 else
2603 return inst.generateTrap(EL1);
2604 } else if (in_host && !cnthctl_el2.el0vten) {
2605 return inst.generateTrap(EL2);
2606 } else if (el2_enabled && !(hcr.e2h && hcr.tge) && cnthctl_el2.el1tvt) {
2607 return inst.generateTrap(EL2);
2608 } else {
2609 return NoFault;
2610 }
2611}
2612
2613Fault
2614faultCntvCtlEL1(const MiscRegLUTEntry &entry,
2615 ThreadContext *tc, const MiscRegOp64 &inst)
2616{
2617 const CNTHCTL cnthctl_el2 = tc->readMiscReg(MISCREG_CNTHCTL_EL2);
2618 if (EL2Enabled(tc) && cnthctl_el2.el1tvt) {
2619 return inst.generateTrap(EL2);
2620 } else {
2621 return NoFault;
2622 }
2623}
2624
2625Fault
2626faultCntpsCtlEL1(const MiscRegLUTEntry &entry,
2627 ThreadContext *tc, const MiscRegOp64 &inst)
2628{
2629 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2630 if (ArmSystem::haveEL(tc, EL3) && !scr.ns) {
2631 if (scr.eel2)
2632 return inst.undefined();
2633 else if (!scr.st)
2634 return inst.generateTrap(EL3);
2635 else
2636 return NoFault;
2637 } else {
2638 return inst.undefined();
2639 }
2640}
2641
2642Fault
2643faultUnimplemented(const MiscRegLUTEntry &entry,
2644 ThreadContext *tc, const MiscRegOp64 &inst)
2645{
2646 if (entry.info[MISCREG_WARN_NOT_FAIL]) {
2647 return NoFault;
2648 } else {
2649 return inst.undefined();
2650 }
2651}
2652
2653Fault
2654faultImpdefUnimplEL1(const MiscRegLUTEntry &entry,
2655 ThreadContext *tc, const MiscRegOp64 &inst)
2656{
2657 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2658 if (EL2Enabled(tc) && hcr.tidcp) {
2659 return inst.generateTrap(EL2);
2660 } else {
2661 return faultUnimplemented(entry, tc, inst);
2662 }
2663}
2664
2665Fault
2666faultEsm(const MiscRegLUTEntry &entry,
2667 ThreadContext *tc, const MiscRegOp64 &inst)
2668{
2669 const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
2670 if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.esm) {
2671 return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SME, 0);
2672 } else {
2673 return NoFault;
2674 }
2675}
2676
2677Fault
2678faultTsmSmen(const MiscRegLUTEntry &entry,
2679 ThreadContext *tc, const MiscRegOp64 &inst)
2680{
2681 const HCR hcr_el2 = tc->readMiscReg(MISCREG_HCR_EL2);
2682 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2683 const bool el2_enabled = EL2Enabled(tc);
2684 if (el2_enabled && !hcr_el2.e2h && cptr_el2.tsm) {
2685 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2686 } else if (el2_enabled && hcr_el2.e2h && !(cptr_el2.smen & 0b1)) {
2687 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2688 } else {
2689 return faultEsm(entry, tc, inst);
2690 }
2691}
2692
2693Fault
2694faultSmenEL1(const MiscRegLUTEntry &entry,
2695 ThreadContext *tc, const MiscRegOp64 &inst)
2696{
2697 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
2698 if (!(cpacr.smen & 0b1)) {
2699 return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SME, 0);
2700 } else {
2701 return faultTsmSmen(entry, tc, inst);
2702 }
2703}
2704
2705Fault
2706faultSmenEL0(const MiscRegLUTEntry &entry,
2707 ThreadContext *tc, const MiscRegOp64 &inst)
2708{
2709 const bool el2_enabled = EL2Enabled(tc);
2710 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2711 const bool in_host = hcr.e2h && hcr.tge;
2712
2713 const CPACR cpacr = tc->readMiscReg(MISCREG_CPACR_EL1);
2714 const CPTR cptr_el2 = tc->readMiscReg(MISCREG_CPTR_EL2);
2715 if (!(el2_enabled && in_host) && cpacr.smen != 0b11) {
2716 if (el2_enabled && hcr.tge)
2717 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2718 else
2719 return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SME, 0);
2720 } else if (el2_enabled && in_host && cptr_el2.smen != 0b11) {
2721 return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SME, 0);
2722 } else {
2723 return faultTsmSmen(entry, tc, inst);
2724 }
2725}
2726
2727Fault
2728faultRng(const MiscRegLUTEntry &entry,
2729 ThreadContext *tc, const MiscRegOp64 &inst)
2730{
2731 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2732 if (HaveExt(tc, ArmExtension::FEAT_RNG_TRAP) && scr.trndr) {
2733 return inst.generateTrap(EL3);
2734 } else if (!HaveExt(tc, ArmExtension::FEAT_RNG)) {
2735 return inst.undefined();
2736 } else {
2737 return NoFault;
2738 }
2739}
2740
2741Fault
2742faultFgtCtrlRegs(const MiscRegLUTEntry &entry,
2743 ThreadContext *tc, const MiscRegOp64 &inst)
2744{
2745 if (HaveExt(tc, ArmExtension::FEAT_FGT)) {
2746 const SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
2747 if (ArmSystem::haveEL(tc, EL3) && !scr.fgten) {
2748 return inst.generateTrap(EL3);
2749 } else {
2750 return NoFault;
2751 }
2752 } else {
2753 return inst.undefined();
2754 }
2755}
2756
2757Fault
2758faultIdst(const MiscRegLUTEntry &entry,
2759 ThreadContext *tc, const MiscRegOp64 &inst)
2760{
2761 if (HaveExt(tc, ArmExtension::FEAT_IDST)) {
2762 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
2763 if (EL2Enabled(tc) && hcr.tge) {
2764 return inst.generateTrap(EL2);
2765 } else {
2766 return inst.generateTrap(EL1);
2767 }
2768 } else {
2769 return inst.undefined();
2770 }
2771}
2772
2773Fault
2774faultMpamIdrEL1(const MiscRegLUTEntry &entry,
2775 ThreadContext *tc, const MiscRegOp64 &inst)
2776{
2777 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2778 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2779 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2780 MPAMIDR mpamidr = tc->readMiscReg(MISCREG_MPAMIDR_EL1);
2781 MPAMHCR mpamhcr = tc->readMiscReg(MISCREG_MPAMHCR_EL2);
2782 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2783 return inst.generateTrap(EL3);
2784 } else if (EL2Enabled(tc) && mpamidr.hasHcr && mpamhcr.trapMpamIdrEL1) {
2785 return inst.generateTrap(EL2);
2786 } else if (EL2Enabled(tc) && mpamidr.hasTidr && mpam2.el2.tidr) {
2787 return inst.generateTrap(EL2);
2788 } else {
2789 return NoFault;
2790 }
2791 } else {
2792 return inst.undefined();
2793 }
2794}
2795
2796Fault
2797faultMpam0EL1(const MiscRegLUTEntry &entry,
2798 ThreadContext *tc, const MiscRegOp64 &inst)
2799{
2800 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2801 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2802 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2803 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2804 return inst.generateTrap(EL3);
2805 } else if (EL2Enabled(tc) && mpam2.el2.trapMpam0EL1) {
2806 return inst.generateTrap(EL2);
2807 } else {
2808 return NoFault;
2809 }
2810 } else {
2811 return inst.undefined();
2812 }
2813}
2814
2815Fault
2816faultMpam1EL1(const MiscRegLUTEntry &entry,
2817 ThreadContext *tc, const MiscRegOp64 &inst)
2818{
2819 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2820 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2821 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2822 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2823 return inst.generateTrap(EL3);
2824 } else if (EL2Enabled(tc) && mpam2.el2.trapMpam1EL1) {
2825 return inst.generateTrap(EL2);
2826 } else {
2827 return NoFault;
2828 }
2829 } else {
2830 return inst.undefined();
2831 }
2832}
2833
2834Fault
2835faultMpamEL2(const MiscRegLUTEntry &entry,
2836 ThreadContext *tc, const MiscRegOp64 &inst)
2837{
2838 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2839 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2840 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2841 return inst.generateTrap(EL3);
2842 } else {
2843 return NoFault;
2844 }
2845 } else {
2846 return inst.undefined();
2847 }
2848}
2849
2850Fault
2851faultMpam12EL2(const MiscRegLUTEntry &entry,
2852 ThreadContext *tc, const MiscRegOp64 &inst)
2853{
2854 if (ELIsInHost(tc, EL2)) {
2855 return faultMpamEL2(entry, tc, inst);
2856 } else {
2857 return inst.undefined();
2858 }
2859}
2860
2861Fault
2862faultMpamsmEL1(const MiscRegLUTEntry &entry,
2863 ThreadContext *tc, const MiscRegOp64 &inst)
2864{
2865 if (HaveExt(tc, ArmExtension::FEAT_MPAM)) {
2866 MPAM mpam2 = tc->readMiscReg(MISCREG_MPAM2_EL2);
2867 MPAM mpam3 = tc->readMiscReg(MISCREG_MPAM3_EL3);
2868 if (ArmSystem::haveEL(tc, EL3) && mpam3.el3.trapLower) {
2869 return inst.generateTrap(EL3);
2870 } else if (EL2Enabled(tc) && mpam2.el2.enMpamSm) {
2871 return inst.generateTrap(EL2);
2872 } else {
2873 return NoFault;
2874 }
2875 } else {
2876 return inst.undefined();
2877 }
2878}
2879
2880template <auto faultAtEL2>
2881Fault
2882faultVheEL2(const MiscRegLUTEntry &entry,
2883 ThreadContext *tc, const MiscRegOp64 &inst)
2884{
2885 if (ELIsInHost(tc, EL2)) {
2886 return faultAtEL2(entry, tc, inst);
2887 } else {
2888 return inst.undefined();
2889 }
2890}
2891
2892template <bool read, auto g_bitfield, auto r_bitifield>
2893Fault
2894faultPieEL1(const MiscRegLUTEntry &entry,
2895 ThreadContext *tc, const MiscRegOp64 &inst)
2896{
2897 if (HaveExt(tc, ArmExtension::FEAT_S1PIE)) {
2898 SCR scr_el3 = tc->readMiscReg(MISCREG_SCR_EL3);
2899 if (auto fault = faultHcrFgtEL1<read, g_bitfield, r_bitifield, 0>(entry, tc, inst);
2900 fault != NoFault) {
2901 return fault;
2902 } else if (ArmSystem::haveEL(tc, EL3) && !scr_el3.piEn) {
2903 return inst.generateTrap(EL3);
2904 } else {
2905 return NoFault;
2906 }
2907 } else {
2908 return inst.undefined();
2909 }
2910}
2911
2912Fault
2913faultPieEL2(const MiscRegLUTEntry &entry,
2914 ThreadContext *tc, const MiscRegOp64 &inst)
2915{
2916 if (HaveExt(tc, ArmExtension::FEAT_S1PIE)) {
2917 SCR scr_el3 = tc->readMiscReg(MISCREG_SCR_EL3);
2918 if (ArmSystem::haveEL(tc, EL3) && !scr_el3.piEn) {
2919 return inst.generateTrap(EL3);
2920 } else {
2921 return NoFault;
2922 }
2923 } else {
2924 return inst.undefined();
2925 }
2926}
2927
2928}
2929
2931decodeAArch64SysReg(unsigned op0, unsigned op1,
2932 unsigned crn, unsigned crm,
2933 unsigned op2)
2934{
2935 MiscRegNum64 sys_reg(op0, op1, crn, crm, op2);
2936 return decodeAArch64SysReg(sys_reg);
2937}
2938
2941{
2942 auto it = miscRegNumToIdx.find(sys_reg);
2943 if (it != miscRegNumToIdx.end()) {
2944 return it->second;
2945 } else {
2946 // Check for a pseudo register before returning MISCREG_UNKNOWN
2947 if ((sys_reg.op0 == 1 || sys_reg.op0 == 3) &&
2948 (sys_reg.crn == 11 || sys_reg.crn == 15)) {
2949 return MISCREG_IMPDEF_UNIMPL;
2950 } else {
2951 return MISCREG_UNKNOWN;
2952 }
2953 }
2954}
2955
2956std::optional<MiscRegNum64>
2958{
2959 if (auto it = idxToMiscRegNum.find(misc_reg);
2960 it != idxToMiscRegNum.end()) {
2961 return it->second;
2962 } else {
2963 return std::nullopt;
2964 }
2965}
2966
2967Fault
2969 const MiscRegOp64 &inst, ExceptionLevel el)
2970{
2971 return !inst.miscRead() ? faultWrite[el](*this, tc, inst) :
2972 faultRead[el](*this, tc, inst);
2973}
2974
2975template <MiscRegInfo Sec, MiscRegInfo NonSec>
2976Fault
2978 ThreadContext *tc, const MiscRegOp64 &inst)
2979{
2980 if (isSecureBelowEL3(tc) ? entry.info[Sec] : entry.info[NonSec]) {
2981 return NoFault;
2982 } else {
2983 return inst.undefined();
2984 }
2985}
2986
2987static Fault
2989 ThreadContext *tc, const MiscRegOp64 &inst)
2990{
2991 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
2992 if (hcr.e2h) {
2993 return NoFault;
2994 } else {
2995 return inst.undefined();
2996 }
2997}
2998
2999static Fault
3001 ThreadContext *tc, const MiscRegOp64 &inst)
3002{
3003 const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
3004 const bool el2_host = EL2Enabled(tc) && hcr.e2h;
3005 if (el2_host) {
3006 return NoFault;
3007 } else {
3008 return inst.undefined();
3009 }
3010}
3011
3014{
3015 switch (FullSystem ? sys->highestEL() : EL1) {
3016 case EL0:
3017 case EL1: priv(); break;
3018 case EL2: hyp(); break;
3019 case EL3: mon(); break;
3020 }
3021 return *this;
3022}
3023
3024static CPSR
3026{
3027 CPSR cpsr = 0;
3028 if (!FullSystem) {
3029 cpsr.mode = MODE_USER;
3030 } else {
3031 switch (system->highestEL()) {
3032 // Set initial EL to highest implemented EL using associated stack
3033 // pointer (SP_ELx); set RVBAR_ELx to implementation defined reset
3034 // value
3035 case EL3:
3036 cpsr.mode = MODE_EL3H;
3037 break;
3038 case EL2:
3039 cpsr.mode = MODE_EL2H;
3040 break;
3041 case EL1:
3042 cpsr.mode = MODE_EL1H;
3043 break;
3044 default:
3045 panic("Invalid highest implemented exception level");
3046 break;
3047 }
3048
3049 // Initialize rest of CPSR
3050 cpsr.daif = 0xf; // Mask all interrupts
3051 cpsr.ss = 0;
3052 cpsr.il = 0;
3053 }
3054 return cpsr;
3055}
3056
3057void
3059{
3060 // the MiscReg metadata tables are shared across all instances of the
3061 // ISA object, so there's no need to initialize them multiple times.
3062 static bool completed = false;
3063 if (completed)
3064 return;
3065
3066 // This boolean variable specifies if the system is running in aarch32 at
3067 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
3068 // is running in aarch64 (aarch32EL3 = false)
3069 bool aarch32EL3 = release->has(ArmExtension::SECURITY) && !highestELIs64;
3070
3071 // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+),
3072 // unsupported
3073 bool SPAN = false;
3074
3075 // Implicit error synchronization event enable (Arm 8.2+), unsupported
3076 bool IESB = false;
3077
3078 // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+),
3079 // unsupported
3080 bool LSMAOE = false;
3081
3082 // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported
3083 bool nTLSMD = false;
3084
3085 // Pointer authentication (Arm 8.3+), unsupported
3086 bool EnDA = true; // using APDAKey_EL1 key of instr addrs in ELs 0,1
3087 bool EnDB = true; // using APDBKey_EL1 key of instr addrs in ELs 0,1
3088 bool EnIA = true; // using APIAKey_EL1 key of instr addrs in ELs 0,1
3089 bool EnIB = true; // using APIBKey_EL1 key of instr addrs in ELs 0,1
3090
3091 const bool vhe_implemented = release->has(ArmExtension::FEAT_VHE);
3092 const bool sel2_implemented = release->has(ArmExtension::FEAT_SEL2);
3093
3094 const Params &p(params());
3095
3096 uint32_t midr;
3097 if (p.midr != 0x0)
3098 midr = p.midr;
3099 else if (highestELIs64)
3100 // Cortex-A57 TRM r0p0 MIDR
3101 midr = 0x410fd070;
3102 else
3103 // Cortex-A15 TRM r0p0 MIDR
3104 midr = 0x410fc0f0;
3105
3118
3121 .allPrivileges();
3123 .allPrivileges();
3125 .allPrivileges();
3127 .allPrivileges();
3129 .allPrivileges();
3131 .allPrivileges();
3133 .allPrivileges();
3135 .allPrivileges();
3137 .allPrivileges();
3139 .allPrivileges();
3141 .reset(p.fpsid)
3142 .allPrivileges();
3144 .res0(mask(14, 13) | mask(6, 5))
3145 .allPrivileges();
3147 .reset([] () {
3148 MVFR1 mvfr1 = 0;
3149 mvfr1.flushToZero = 1;
3150 mvfr1.defaultNaN = 1;
3151 mvfr1.advSimdLoadStore = 1;
3152 mvfr1.advSimdInteger = 1;
3153 mvfr1.advSimdSinglePrecision = 1;
3154 mvfr1.advSimdHalfPrecision = 1;
3155 mvfr1.vfpHalfPrecision = 1;
3156 return mvfr1;
3157 }())
3158 .allPrivileges();
3160 .reset([] () {
3161 MVFR0 mvfr0 = 0;
3162 mvfr0.advSimdRegisters = 2;
3163 mvfr0.singlePrecision = 2;
3164 mvfr0.doublePrecision = 2;
3165 mvfr0.vfpExceptionTrapping = 0;
3166 mvfr0.divide = 1;
3167 mvfr0.squareRoot = 1;
3168 mvfr0.shortVectors = 1;
3169 mvfr0.roundingModes = 1;
3170 return mvfr0;
3171 }())
3172 .allPrivileges();
3174 .allPrivileges();
3175
3176 // Helper registers
3178 .allPrivileges();
3180 .allPrivileges();
3182 .allPrivileges();
3184 .allPrivileges();
3186 .allPrivileges();
3188 .allPrivileges();
3190 .mutex()
3191 .banked();
3193 .mutex()
3194 .privSecure(!aarch32EL3)
3195 .bankedChild();
3197 .mutex()
3198 .bankedChild();
3200 .mutex()
3201 .banked();
3203 .mutex()
3204 .privSecure(!aarch32EL3)
3205 .bankedChild();
3207 .mutex()
3208 .bankedChild();
3210 .mutex();
3212 .reset(1) // Start with an event in the mailbox
3213 .allPrivileges();
3216
3217 // AArch32 CP14 registers
3219 .reset(0x6 << 16) // Armv8 Debug architecture
3224 .unimplemented()
3225 .allPrivileges();
3227 .unimplemented()
3228 .allPrivileges();
3230 .unimplemented()
3231 .allPrivileges();
3233 .unimplemented()
3234 .allPrivileges();
3238 .unimplemented()
3239 .allPrivileges();
3241 .allPrivileges();
3243 .unimplemented()
3244 .allPrivileges();
3246 .unimplemented()
3247 .allPrivileges();
3377 .unimplemented()
3418 .unimplemented()
3419 .warnNotFail()
3420 .allPrivileges();
3422 .unimplemented()
3423 .allPrivileges();
3425 .unimplemented()
3428 .unimplemented()
3429 .allPrivileges();
3431 .unimplemented()
3432 .allPrivileges();
3434 .unimplemented()
3437 .unimplemented()
3440 .unimplemented()
3445 .unimplemented()
3446 .allPrivileges();
3448 .raz() // Jazelle trivial implementation, RAZ/WI
3449 .allPrivileges();
3451 .allPrivileges();
3453 .raz() // Jazelle trivial implementation, RAZ/WI
3454 .allPrivileges();
3456 .raz() // Jazelle trivial implementation, RAZ/WI
3457 .allPrivileges();
3458
3459 // AArch32 CP15 registers
3461 .reset(midr)
3464 .reset([system=p.system](){
3465 //all caches have the same line size in gem5
3466 //4 byte words in ARM
3467 unsigned line_size_words =
3468 system->cacheLineSize() / 4;
3469 unsigned log2_line_size_words = 0;
3470
3471 while (line_size_words >>= 1) {
3472 ++log2_line_size_words;
3473 }
3474
3475 CTR ctr = 0;
3476 //log2 of minimun i-cache line size (words)
3477 ctr.iCacheLineSize = log2_line_size_words;
3478 //b11 - gem5 uses pipt
3479 ctr.l1IndexPolicy = 0x3;
3480 //log2 of minimum d-cache line size (words)
3481 ctr.dCacheLineSize = log2_line_size_words;
3482 //log2 of max reservation size (words)
3483 ctr.erg = log2_line_size_words;
3484 //log2 of max writeback size (words)
3485 ctr.cwg = log2_line_size_words;
3486 //b100 - gem5 format is ARMv7
3487 ctr.format = 0x4;
3488
3489 return ctr;
3490 }())
3491 .unserialize(0)
3493 InitReg(MISCREG_TCMTR)
3494 .raz() // No TCM's
3496 InitReg(MISCREG_TLBTR)
3497 .reset(1) // Separate Instruction and Data TLBs
3499 InitReg(MISCREG_MPIDR)
3500 .reset(0x80000000)
3502 InitReg(MISCREG_REVIDR)
3503 .unimplemented()
3504 .warnNotFail()
3506 InitReg(MISCREG_ID_PFR0)
3507 .reset(0x00000031) // !ThumbEE | !Jazelle | Thumb | ARM
3509 InitReg(MISCREG_ID_PFR1)
3510 .reset([release=release,system=system](){
3511 // Timer | Virti | !M Profile | TrustZone | ARMv4
3512 bool have_timer = (system && system->getGenericTimer() != nullptr);
3513 return 0x00000001 |
3514 (release->has(ArmExtension::SECURITY) ?
3515 0x00000010 : 0x0) |
3516 (release->has(ArmExtension::VIRTUALIZATION) ?
3517 0x00001000 : 0x0) |
3518 (have_timer ? 0x00010000 : 0x0);
3519 }())
3520 .unserialize(0)
3522 InitReg(MISCREG_ID_DFR0)
3523 .reset(p.pmu ? 0x03000000 : 0)
3525 InitReg(MISCREG_ID_AFR0)
3527 InitReg(MISCREG_ID_MMFR0)
3528 .reset([p,release=release](){
3529 RegVal mmfr0 = p.id_mmfr0;
3530 if (release->has(ArmExtension::LPAE))
3531 mmfr0 = (mmfr0 & ~0xf) | 0x5;
3532 return mmfr0;
3533 }())
3534 .allPrivileges().exceptUserMode().writes(0);
3535 InitReg(MISCREG_ID_MMFR1)
3536 .reset(p.id_mmfr1)
3538 InitReg(MISCREG_ID_MMFR2)
3539 .reset(p.id_mmfr2)
3541 InitReg(MISCREG_ID_MMFR3)
3542 .reset(p.id_mmfr3)
3544 InitReg(MISCREG_ID_MMFR4)
3545 .reset(p.id_mmfr4)
3547 InitReg(MISCREG_ID_ISAR0)
3548 .reset(p.id_isar0)
3550 InitReg(MISCREG_ID_ISAR1)
3551 .reset(p.id_isar1)
3553 InitReg(MISCREG_ID_ISAR2)
3554 .reset(p.id_isar2)
3556 InitReg(MISCREG_ID_ISAR3)
3557 .reset(p.id_isar3)
3559 InitReg(MISCREG_ID_ISAR4)
3560 .reset(p.id_isar4)
3562 InitReg(MISCREG_ID_ISAR5)
3563 .reset([p,release=release] () {
3564 ISAR5 isar5 = p.id_isar5;
3565 isar5.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
3566 isar5.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
3567 isar5.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
3568 isar5.aes = release->has(ArmExtension::FEAT_PMULL) ?
3569 0x2 : release->has(ArmExtension::FEAT_AES) ?
3570 0x1 : 0x0;
3571 isar5.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
3572 isar5.vcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
3573 return isar5;
3574 }())
3575 .allPrivileges().exceptUserMode().writes(0);
3576 InitReg(MISCREG_ID_ISAR6)
3577 .reset([p,release=release] () {
3578 ISAR6 isar6 = p.id_isar6;
3579 isar6.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
3580 return isar6;
3581 }())
3582 .allPrivileges().exceptUserMode().writes(0);
3583 InitReg(MISCREG_CCSIDR)
3585 InitReg(MISCREG_CLIDR)
3587 InitReg(MISCREG_AIDR)
3588 .raz() // AUX ID set to 0
3590 InitReg(MISCREG_CSSELR)
3591 .banked();
3592 InitReg(MISCREG_CSSELR_NS)
3593 .bankedChild()
3594 .privSecure(!aarch32EL3)
3596 InitReg(MISCREG_CSSELR_S)
3597 .bankedChild()
3599 InitReg(MISCREG_VPIDR)
3600 .reset(midr)
3601 .hyp().monNonSecure();
3602 InitReg(MISCREG_VMPIDR)
3603 .res1(mask(31, 31))
3604 .hyp().monNonSecure();
3605 InitReg(MISCREG_SCTLR)
3606 .banked()
3607 // readMiscRegNoEffect() uses this metadata
3608 // despite using children (below) as backing store
3609 .res0(0x8d22c600)
3610 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3611 | (LSMAOE ? 0 : 0x10)
3612 | (nTLSMD ? 0 : 0x8));
3613
3614 auto sctlr_reset = [aarch64=highestELIs64] ()
3615 {
3616 SCTLR sctlr = 0;
3617 if (aarch64) {
3618 sctlr.afe = 1;
3619 sctlr.tre = 1;
3620 sctlr.span = 1;
3621 sctlr.uwxn = 1;
3622 sctlr.ntwe = 1;
3623 sctlr.ntwi = 1;
3624 sctlr.cp15ben = 1;
3625 sctlr.sa0 = 1;
3626 } else {
3627 sctlr.u = 1;
3628 sctlr.xp = 1;
3629 sctlr.uci = 1;
3630 sctlr.dze = 1;
3631 sctlr.rao2 = 1;
3632 sctlr.rao3 = 1;
3633 sctlr.rao4 = 0xf;
3634 }
3635 return sctlr;
3636 }();
3637 InitReg(MISCREG_SCTLR_NS)
3638 .reset(sctlr_reset)
3639 .bankedChild()
3640 .privSecure(!aarch32EL3)
3642 InitReg(MISCREG_SCTLR_S)
3643 .reset(sctlr_reset)
3644 .bankedChild()
3646 InitReg(MISCREG_ACTLR)
3647 .banked();
3648 InitReg(MISCREG_ACTLR_NS)
3649 .bankedChild()
3650 .privSecure(!aarch32EL3)
3652 InitReg(MISCREG_ACTLR_S)
3653 .bankedChild()
3655 InitReg(MISCREG_CPACR)
3657 InitReg(MISCREG_SDCR)
3658 .mon();
3659 InitReg(MISCREG_SCR)
3660 .reset(release->has(ArmExtension::SECURITY) ? 0 : 1)
3662 .res0(0xff40) // [31:16], [6]
3663 .res1(0x0030); // [5:4]
3664 InitReg(MISCREG_SDER)
3665 .mon();
3666 InitReg(MISCREG_NSACR)
3668 InitReg(MISCREG_HSCTLR)
3669 .reset(0x30c50830)
3670 .hyp().monNonSecure()
3671 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3672 | (IESB ? 0 : 0x200000)
3673 | (EnDA ? 0 : 0x8000000)
3674 | (EnIB ? 0 : 0x40000000)
3675 | (EnIA ? 0 : 0x80000000))
3676 .res1(0x30c50830);
3677 InitReg(MISCREG_HACTLR)
3678 .hyp().monNonSecure();
3679 InitReg(MISCREG_HCR)
3680 .hyp().monNonSecure()
3681 .res0(release->has(ArmExtension::VIRTUALIZATION) ?
3682 0x90000000 : mask(31, 0));
3683 InitReg(MISCREG_HCR2)
3684 .hyp().monNonSecure()
3685 .res0(release->has(ArmExtension::VIRTUALIZATION) ?
3686 0xffa9ff8c : mask(31, 0));
3687 InitReg(MISCREG_HDCR)
3688 .hyp().monNonSecure();
3689 InitReg(MISCREG_HCPTR)
3690 .res0(mask(29, 21) | mask(19, 16) | mask(14, 14))
3691 .res1(mask(13, 12) | mask(9, 0))
3692 .hyp().monNonSecure();
3693 InitReg(MISCREG_HSTR)
3694 .hyp().monNonSecure();
3695 InitReg(MISCREG_HACR)
3696 .unimplemented()
3697 .warnNotFail()
3698 .hyp().monNonSecure();
3699 InitReg(MISCREG_TTBR0)
3700 .banked();
3701 InitReg(MISCREG_TTBR0_NS)
3702 .bankedChild()
3703 .privSecure(!aarch32EL3)
3705 InitReg(MISCREG_TTBR0_S)
3706 .bankedChild()
3708 InitReg(MISCREG_TTBR1)
3709 .banked();
3710 InitReg(MISCREG_TTBR1_NS)
3711 .bankedChild()
3712 .privSecure(!aarch32EL3)
3714 InitReg(MISCREG_TTBR1_S)
3715 .bankedChild()
3717 InitReg(MISCREG_TTBCR)
3718 .banked();
3719 InitReg(MISCREG_TTBCR_NS)
3720 .bankedChild()
3721 .privSecure(!aarch32EL3)
3723 InitReg(MISCREG_TTBCR_S)
3724 .bankedChild()
3726 InitReg(MISCREG_HTCR)
3727 .hyp().monNonSecure();
3728 InitReg(MISCREG_VTCR)
3729 .hyp().monNonSecure();
3730 InitReg(MISCREG_DACR)
3731 .banked();
3732 InitReg(MISCREG_DACR_NS)
3733 .bankedChild()
3734 .privSecure(!aarch32EL3)
3736 InitReg(MISCREG_DACR_S)
3737 .bankedChild()
3739 InitReg(MISCREG_DFSR)
3740 .banked()
3741 .res0(mask(31, 14) | mask(8, 8));
3742 InitReg(MISCREG_DFSR_NS)
3743 .bankedChild()
3744 .privSecure(!aarch32EL3)
3746 InitReg(MISCREG_DFSR_S)
3747 .bankedChild()
3749 InitReg(MISCREG_IFSR)
3750 .banked()
3751 .res0(mask(31, 13) | mask(11, 11) | mask(8, 6));
3752 InitReg(MISCREG_IFSR_NS)
3753 .bankedChild()
3754 .privSecure(!aarch32EL3)
3756 InitReg(MISCREG_IFSR_S)
3757 .bankedChild()
3759 InitReg(MISCREG_ADFSR)
3760 .unimplemented()
3761 .warnNotFail()
3762 .banked();
3763 InitReg(MISCREG_ADFSR_NS)
3764 .unimplemented()
3765 .warnNotFail()
3766 .bankedChild()
3767 .privSecure(!aarch32EL3)
3769 InitReg(MISCREG_ADFSR_S)
3770 .unimplemented()
3771 .warnNotFail()
3772 .bankedChild()
3774 InitReg(MISCREG_AIFSR)
3775 .unimplemented()
3776 .warnNotFail()
3777 .banked();
3778 InitReg(MISCREG_AIFSR_NS)
3779 .unimplemented()
3780 .warnNotFail()
3781 .bankedChild()
3782 .privSecure(!aarch32EL3)
3784 InitReg(MISCREG_AIFSR_S)
3785 .unimplemented()
3786 .warnNotFail()
3787 .bankedChild()
3789 InitReg(MISCREG_HADFSR)
3790 .hyp().monNonSecure();
3791 InitReg(MISCREG_HAIFSR)
3792 .hyp().monNonSecure();
3793 InitReg(MISCREG_HSR)
3794 .hyp().monNonSecure();
3795 InitReg(MISCREG_DFAR)
3796 .banked();
3797 InitReg(MISCREG_DFAR_NS)
3798 .bankedChild()
3799 .privSecure(!aarch32EL3)
3801 InitReg(MISCREG_DFAR_S)
3802 .bankedChild()
3804 InitReg(MISCREG_IFAR)
3805 .banked();
3806 InitReg(MISCREG_IFAR_NS)
3807 .bankedChild()
3808 .privSecure(!aarch32EL3)
3810 InitReg(MISCREG_IFAR_S)
3811 .bankedChild()
3813 InitReg(MISCREG_HDFAR)
3814 .hyp().monNonSecure();
3815 InitReg(MISCREG_HIFAR)
3816 .hyp().monNonSecure();
3817 InitReg(MISCREG_HPFAR)
3818 .hyp().monNonSecure();
3819 InitReg(MISCREG_ICIALLUIS)
3820 .unimplemented()
3821 .warnNotFail()
3822 .writes(1).exceptUserMode();
3823 InitReg(MISCREG_BPIALLIS)
3824 .unimplemented()
3825 .warnNotFail()
3826 .writes(1).exceptUserMode();
3827 InitReg(MISCREG_PAR)
3828 .banked();
3829 InitReg(MISCREG_PAR_NS)
3830 .bankedChild()
3831 .privSecure(!aarch32EL3)
3833 InitReg(MISCREG_PAR_S)
3834 .bankedChild()
3836 InitReg(MISCREG_ICIALLU)
3837 .writes(1).exceptUserMode();
3838 InitReg(MISCREG_ICIMVAU)
3839 .unimplemented()
3840 .warnNotFail()
3841 .writes(1).exceptUserMode();
3842 InitReg(MISCREG_CP15ISB)
3843 .writes(1);
3844 InitReg(MISCREG_BPIALL)
3845 .unimplemented()
3846 .warnNotFail()
3847 .writes(1).exceptUserMode();
3848 InitReg(MISCREG_BPIMVA)
3849 .unimplemented()
3850 .warnNotFail()
3851 .writes(1).exceptUserMode();
3852 InitReg(MISCREG_DCIMVAC)
3853 .unimplemented()
3854 .warnNotFail()
3855 .writes(1).exceptUserMode();
3856 InitReg(MISCREG_DCISW)
3857 .unimplemented()
3858 .warnNotFail()
3859 .writes(1).exceptUserMode();
3860 InitReg(MISCREG_ATS1CPR)
3861 .writes(1).exceptUserMode();
3862 InitReg(MISCREG_ATS1CPW)
3863 .writes(1).exceptUserMode();
3864 InitReg(MISCREG_ATS1CUR)
3865 .writes(1).exceptUserMode();
3866 InitReg(MISCREG_ATS1CUW)
3867 .writes(1).exceptUserMode();
3868 InitReg(MISCREG_ATS12NSOPR)
3870 InitReg(MISCREG_ATS12NSOPW)
3872 InitReg(MISCREG_ATS12NSOUR)
3874 InitReg(MISCREG_ATS12NSOUW)
3876 InitReg(MISCREG_DCCMVAC)
3877 .writes(1).exceptUserMode();
3878 InitReg(MISCREG_DCCSW)
3879 .unimplemented()
3880 .warnNotFail()
3881 .writes(1).exceptUserMode();
3882 InitReg(MISCREG_CP15DSB)
3883 .writes(1);
3884 InitReg(MISCREG_CP15DMB)
3885 .writes(1);
3886 InitReg(MISCREG_DCCMVAU)
3887 .unimplemented()
3888 .warnNotFail()
3889 .writes(1).exceptUserMode();
3890 InitReg(MISCREG_DCCIMVAC)
3891 .unimplemented()
3892 .warnNotFail()
3893 .writes(1).exceptUserMode();
3894 InitReg(MISCREG_DCCISW)
3895 .unimplemented()
3896 .warnNotFail()
3897 .writes(1).exceptUserMode();
3898 InitReg(MISCREG_ATS1HR)
3900 InitReg(MISCREG_ATS1HW)
3902 InitReg(MISCREG_TLBIALLIS)
3903 .writes(1).exceptUserMode();
3904 InitReg(MISCREG_TLBIMVAIS)
3905 .writes(1).exceptUserMode();
3906 InitReg(MISCREG_TLBIASIDIS)
3907 .writes(1).exceptUserMode();
3908 InitReg(MISCREG_TLBIMVAAIS)
3909 .writes(1).exceptUserMode();
3910 InitReg(MISCREG_TLBIMVALIS)
3911 .writes(1).exceptUserMode();
3912 InitReg(MISCREG_TLBIMVAALIS)
3913 .writes(1).exceptUserMode();
3914 InitReg(MISCREG_ITLBIALL)
3915 .writes(1).exceptUserMode();
3916 InitReg(MISCREG_ITLBIMVA)
3917 .writes(1).exceptUserMode();
3918 InitReg(MISCREG_ITLBIASID)
3919 .writes(1).exceptUserMode();
3920 InitReg(MISCREG_DTLBIALL)
3921 .writes(1).exceptUserMode();
3922 InitReg(MISCREG_DTLBIMVA)
3923 .writes(1).exceptUserMode();
3924 InitReg(MISCREG_DTLBIASID)
3925 .writes(1).exceptUserMode();
3926 InitReg(MISCREG_TLBIALL)
3927 .writes(1).exceptUserMode();
3928 InitReg(MISCREG_TLBIMVA)
3929 .writes(1).exceptUserMode();
3930 InitReg(MISCREG_TLBIASID)
3931 .writes(1).exceptUserMode();
3932 InitReg(MISCREG_TLBIMVAA)
3933 .writes(1).exceptUserMode();
3934 InitReg(MISCREG_TLBIMVAL)
3935 .writes(1).exceptUserMode();
3936 InitReg(MISCREG_TLBIMVAAL)
3937 .writes(1).exceptUserMode();
3938 InitReg(MISCREG_TLBIIPAS2IS)
3940 InitReg(MISCREG_TLBIIPAS2LIS)
3942 InitReg(MISCREG_TLBIALLHIS)
3944 InitReg(MISCREG_TLBIMVAHIS)
3946 InitReg(MISCREG_TLBIALLNSNHIS)
3948 InitReg(MISCREG_TLBIMVALHIS)
3950 InitReg(MISCREG_TLBIIPAS2)
3952 InitReg(MISCREG_TLBIIPAS2L)
3954 InitReg(MISCREG_TLBIALLH)
3956 InitReg(MISCREG_TLBIMVAH)
3958 InitReg(MISCREG_TLBIALLNSNH)
3960 InitReg(MISCREG_TLBIMVALH)
3962 InitReg(MISCREG_PMCR)
3963 .allPrivileges();
3964 InitReg(MISCREG_PMCNTENSET)
3965 .allPrivileges();
3966 InitReg(MISCREG_PMCNTENCLR)
3967 .allPrivileges();
3968 InitReg(MISCREG_PMOVSR)
3969 .allPrivileges();
3970 InitReg(MISCREG_PMSWINC)
3971 .allPrivileges();
3972 InitReg(MISCREG_PMSELR)
3973 .allPrivileges();
3974 InitReg(MISCREG_PMCEID0)
3975 .allPrivileges();
3976 InitReg(MISCREG_PMCEID1)
3977 .allPrivileges();
3978 InitReg(MISCREG_PMCCNTR)
3979 .allPrivileges();
3980 InitReg(MISCREG_PMXEVTYPER)
3981 .allPrivileges();
3982 InitReg(MISCREG_PMEVCNTR0)
3983 .allPrivileges();
3984 InitReg(MISCREG_PMEVCNTR1)
3985 .allPrivileges();
3986 InitReg(MISCREG_PMEVCNTR2)
3987 .allPrivileges();
3988 InitReg(MISCREG_PMEVCNTR3)
3989 .allPrivileges();
3990 InitReg(MISCREG_PMEVCNTR4)
3991 .allPrivileges();
3992 InitReg(MISCREG_PMEVCNTR5)
3993 .allPrivileges();
3994 InitReg(MISCREG_PMEVTYPER0)
3995 .allPrivileges();
3996 InitReg(MISCREG_PMEVTYPER1)
3997 .allPrivileges();
3998 InitReg(MISCREG_PMEVTYPER2)
3999 .allPrivileges();
4000 InitReg(MISCREG_PMEVTYPER3)
4001 .allPrivileges();
4002 InitReg(MISCREG_PMEVTYPER4)
4003 .allPrivileges();
4004 InitReg(MISCREG_PMEVTYPER5)
4005 .allPrivileges();
4006 InitReg(MISCREG_PMCCFILTR)
4007 .allPrivileges();
4008 InitReg(MISCREG_PMXEVCNTR)
4009 .allPrivileges();
4010 InitReg(MISCREG_PMUSERENR)
4012 InitReg(MISCREG_PMINTENSET)
4014 InitReg(MISCREG_PMINTENCLR)
4016 InitReg(MISCREG_PMOVSSET)
4017 .unimplemented()
4018 .allPrivileges();
4019 InitReg(MISCREG_L2CTLR)
4021 InitReg(MISCREG_L2ECTLR)
4022 .unimplemented()
4024 InitReg(MISCREG_PRRR)
4025 .banked();
4026 InitReg(MISCREG_PRRR_NS)
4027 .bankedChild()
4028 .reset(
4029 (1 << 19) | // 19
4030 (0 << 18) | // 18
4031 (0 << 17) | // 17
4032 (1 << 16) | // 16
4033 (2 << 14) | // 15:14
4034 (0 << 12) | // 13:12
4035 (2 << 10) | // 11:10
4036 (2 << 8) | // 9:8
4037 (2 << 6) | // 7:6
4038 (2 << 4) | // 5:4
4039 (1 << 2) | // 3:2
4040 0)
4041 .privSecure(!aarch32EL3)
4043 InitReg(MISCREG_PRRR_S)
4044 .bankedChild()
4046 InitReg(MISCREG_MAIR0)
4047 .banked();
4048 InitReg(MISCREG_MAIR0_NS)
4049 .bankedChild()
4050 .privSecure(!aarch32EL3)
4052 InitReg(MISCREG_MAIR0_S)
4053 .bankedChild()
4055 InitReg(MISCREG_NMRR)
4056 .banked();
4057 InitReg(MISCREG_NMRR_NS)
4058 .bankedChild()
4059 .reset(
4060 (1 << 30) | // 31:30
4061 (0 << 26) | // 27:26
4062 (0 << 24) | // 25:24
4063 (3 << 22) | // 23:22
4064 (2 << 20) | // 21:20
4065 (0 << 18) | // 19:18
4066 (0 << 16) | // 17:16
4067 (1 << 14) | // 15:14
4068 (0 << 12) | // 13:12
4069 (2 << 10) | // 11:10
4070 (0 << 8) | // 9:8
4071 (3 << 6) | // 7:6
4072 (2 << 4) | // 5:4
4073 (0 << 2) | // 3:2
4074 0)
4075 .privSecure(!aarch32EL3)
4077 InitReg(MISCREG_NMRR_S)
4078 .bankedChild()
4080 InitReg(MISCREG_MAIR1)
4081 .banked();
4082 InitReg(MISCREG_MAIR1_NS)
4083 .bankedChild()
4084 .privSecure(!aarch32EL3)
4086 InitReg(MISCREG_MAIR1_S)
4087 .bankedChild()
4089 InitReg(MISCREG_AMAIR0)
4090 .res0(release->has(ArmExtension::LPAE) ? 0 : mask(31, 0))
4091 .banked();
4092 InitReg(MISCREG_AMAIR0_NS)
4093 .bankedChild()
4094 .privSecure(!aarch32EL3)
4096 InitReg(MISCREG_AMAIR0_S)
4097 .bankedChild()
4099 InitReg(MISCREG_AMAIR1)
4100 .res0(release->has(ArmExtension::LPAE) ? 0 : mask(31, 0))
4101 .banked();
4102 InitReg(MISCREG_AMAIR1_NS)
4103 .bankedChild()
4104 .privSecure(!aarch32EL3)
4106 InitReg(MISCREG_AMAIR1_S)
4107 .bankedChild()
4109 InitReg(MISCREG_HMAIR0)
4110 .hyp().monNonSecure();
4111 InitReg(MISCREG_HMAIR1)
4112 .hyp().monNonSecure();
4113 InitReg(MISCREG_HAMAIR0)
4114 .unimplemented()
4115 .warnNotFail()
4116 .hyp().monNonSecure();
4117 InitReg(MISCREG_HAMAIR1)
4118 .unimplemented()
4119 .warnNotFail()
4120 .hyp().monNonSecure();
4121 InitReg(MISCREG_VBAR)
4122 .banked();
4123 InitReg(MISCREG_VBAR_NS)
4124 .bankedChild()
4125 .privSecure(!aarch32EL3)
4127 InitReg(MISCREG_VBAR_S)
4128 .bankedChild()
4130 InitReg(MISCREG_MVBAR)
4131 .reset(FullSystem ? system->resetAddr() : 0)
4132 .mon().secure()
4133 .hypRead(FullSystem && system->highestEL() == EL2)
4134 .privRead(FullSystem && system->highestEL() == EL1)
4135 .exceptUserMode();
4136 InitReg(MISCREG_RMR)
4137 .unimplemented()
4138 .mon().secure().exceptUserMode();
4139 InitReg(MISCREG_ISR)
4141 InitReg(MISCREG_HVBAR)
4142 .hyp().monNonSecure()
4143 .res0(0x1f);
4144 InitReg(MISCREG_FCSEIDR)
4145 .unimplemented()
4146 .warnNotFail()
4148 InitReg(MISCREG_CONTEXTIDR)
4149 .banked();
4150 InitReg(MISCREG_CONTEXTIDR_NS)
4151 .bankedChild()
4152 .privSecure(!aarch32EL3)
4154 InitReg(MISCREG_CONTEXTIDR_S)
4155 .bankedChild()
4157 InitReg(MISCREG_TPIDRURW)
4158 .banked();
4159 InitReg(MISCREG_TPIDRURW_NS)
4160 .bankedChild()
4161 .allPrivileges()
4162 .privSecure(!aarch32EL3)
4163 .monSecure(0);
4164 InitReg(MISCREG_TPIDRURW_S)
4165 .bankedChild()
4166 .secure();
4167 InitReg(MISCREG_TPIDRURO)
4168 .banked();
4169 InitReg(MISCREG_TPIDRURO_NS)
4170 .bankedChild()
4171 .allPrivileges()
4173 .privSecure(!aarch32EL3)
4174 .monSecure(0);
4175 InitReg(MISCREG_TPIDRURO_S)
4176 .bankedChild()
4177 .secure().userSecureWrite(0);
4178 InitReg(MISCREG_TPIDRPRW)
4179 .banked();
4180 InitReg(MISCREG_TPIDRPRW_NS)
4181 .bankedChild()
4183 .privSecure(!aarch32EL3);
4184 InitReg(MISCREG_TPIDRPRW_S)
4185 .bankedChild()
4187 InitReg(MISCREG_HTPIDR)
4188 .hyp().monNonSecure();
4189 // BEGIN Generic Timer (AArch32)
4190 InitReg(MISCREG_CNTFRQ)
4191 .reads(1)
4192 .highest(system)
4193 .privSecureWrite(aarch32EL3);
4194 InitReg(MISCREG_CNTPCT)
4195 .unverifiable()
4196 .reads(1);
4197 InitReg(MISCREG_CNTVCT)
4198 .unverifiable()
4199 .reads(1);
4200 InitReg(MISCREG_CNTP_CTL)
4201 .banked();
4202 InitReg(MISCREG_CNTP_CTL_NS)
4203 .bankedChild()
4204 .nonSecure()
4205 .privSecure(!aarch32EL3)
4206 .userSecureRead(!aarch32EL3)
4207 .userSecureWrite(!aarch32EL3)
4208 .res0(0xfffffff8);
4209 InitReg(MISCREG_CNTP_CTL_S)
4210 .bankedChild()
4211 .secure()
4212 .privSecure(aarch32EL3)
4213 .res0(0xfffffff8);
4214 InitReg(MISCREG_CNTP_CVAL)
4215 .banked();
4216 InitReg(MISCREG_CNTP_CVAL_NS)
4217 .bankedChild()
4218 .nonSecure()
4219 .privSecure(!aarch32EL3)
4220 .userSecureRead(!aarch32EL3)
4221 .userSecureWrite(!aarch32EL3);
4222 InitReg(MISCREG_CNTP_CVAL_S)
4223 .bankedChild()
4224 .secure()
4225 .privSecure(aarch32EL3);
4226 InitReg(MISCREG_CNTP_TVAL)
4227 .banked();
4228 InitReg(MISCREG_CNTP_TVAL_NS)
4229 .bankedChild()
4230 .nonSecure()
4231 .privSecure(!aarch32EL3)
4232 .userSecureRead(!aarch32EL3)
4233 .userSecureWrite(!aarch32EL3);
4234 InitReg(MISCREG_CNTP_TVAL_S)
4235 .bankedChild()
4236 .secure()
4237 .privSecure(aarch32EL3);
4238 InitReg(MISCREG_CNTV_CTL)
4239 .allPrivileges()
4240 .res0(0xfffffff8);
4241 InitReg(MISCREG_CNTV_CVAL)
4242 .allPrivileges();
4243 InitReg(MISCREG_CNTV_TVAL)
4244 .allPrivileges();
4245 InitReg(MISCREG_CNTKCTL)
4246 .allPrivileges()
4248 .res0(0xfffdfc00);
4249 InitReg(MISCREG_CNTHCTL)
4250 .monNonSecure()
4251 .hyp()
4252 .res0(0xfffdff00);
4253 InitReg(MISCREG_CNTHP_CTL)
4254 .monNonSecure()
4255 .hyp()
4256 .res0(0xfffffff8);
4257 InitReg(MISCREG_CNTHP_CVAL)
4258 .monNonSecure()
4259 .hyp();
4260 InitReg(MISCREG_CNTHP_TVAL)
4261 .monNonSecure()
4262 .hyp();
4263 InitReg(MISCREG_CNTVOFF)
4264 .monNonSecure()
4265 .hyp();
4266 // END Generic Timer (AArch32)
4267 InitReg(MISCREG_IL1DATA0)
4268 .unimplemented()
4270 InitReg(MISCREG_IL1DATA1)
4271 .unimplemented()
4273 InitReg(MISCREG_IL1DATA2)
4274 .unimplemented()
4276 InitReg(MISCREG_IL1DATA3)
4277 .unimplemented()
4279 InitReg(MISCREG_DL1DATA0)
4280 .unimplemented()
4282 InitReg(MISCREG_DL1DATA1)
4283 .unimplemented()
4285 InitReg(MISCREG_DL1DATA2)
4286 .unimplemented()
4288 InitReg(MISCREG_DL1DATA3)
4289 .unimplemented()
4291 InitReg(MISCREG_DL1DATA4)
4292 .unimplemented()
4294 InitReg(MISCREG_RAMINDEX)
4295 .unimplemented()
4296 .writes(1).exceptUserMode();
4297 InitReg(MISCREG_L2ACTLR)
4298 .unimplemented()
4300 InitReg(MISCREG_CBAR)
4301 .unimplemented()
4303 InitReg(MISCREG_HTTBR)
4304 .hyp().monNonSecure();
4305 InitReg(MISCREG_VTTBR)
4306 .hyp().monNonSecure();
4307 InitReg(MISCREG_CPUMERRSR)
4308 .unimplemented()
4310 InitReg(MISCREG_L2MERRSR)
4311 .unimplemented()
4312 .warnNotFail()
4314
4315 // AArch64 registers (Op0=2);
4316 InitReg(MISCREG_MDCCINT_EL1)
4317 .fault(EL1, faultMdccsrEL1)
4318 .fault(EL2, faultMdccsrEL2)
4320 InitReg(MISCREG_OSDTRRX_EL1)
4323 InitReg(MISCREG_MDSCR_EL1)
4325 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::mdscrEL1>)
4326 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::mdscrEL1>)
4327 .fault(EL2, faultDebugEL2)
4329 InitReg(MISCREG_OSDTRTX_EL1)
4332 InitReg(MISCREG_OSECCR_EL1)
4334 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::oseccrEL1>)
4335 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::oseccrEL1>)
4336 .fault(EL2, faultDebugEL2)
4338 InitReg(MISCREG_DBGBVR0_EL1)
4340 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4341 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4342 .fault(EL2, faultDebugEL2)
4344 InitReg(MISCREG_DBGBVR1_EL1)
4346 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4347 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4348 .fault(EL2, faultDebugEL2)
4350 InitReg(MISCREG_DBGBVR2_EL1)
4352 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4353 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4354 .fault(EL2, faultDebugEL2)
4356 InitReg(MISCREG_DBGBVR3_EL1)
4358 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4359 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4360 .fault(EL2, faultDebugEL2)
4362 InitReg(MISCREG_DBGBVR4_EL1)
4364 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4365 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4366 .fault(EL2, faultDebugEL2)
4368 InitReg(MISCREG_DBGBVR5_EL1)
4370 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4371 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4372 .fault(EL2, faultDebugEL2)
4374 InitReg(MISCREG_DBGBVR6_EL1)
4376 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4377 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4378 .fault(EL2, faultDebugEL2)
4380 InitReg(MISCREG_DBGBVR7_EL1)
4382 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4383 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4384 .fault(EL2, faultDebugEL2)
4386 InitReg(MISCREG_DBGBVR8_EL1)
4388 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4389 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4390 .fault(EL2, faultDebugEL2)
4392 InitReg(MISCREG_DBGBVR9_EL1)
4394 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4395 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4396 .fault(EL2, faultDebugEL2)
4398 InitReg(MISCREG_DBGBVR10_EL1)
4400 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4401 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4402 .fault(EL2, faultDebugEL2)
4404 InitReg(MISCREG_DBGBVR11_EL1)
4406 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4407 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4408 .fault(EL2, faultDebugEL2)
4410 InitReg(MISCREG_DBGBVR12_EL1)
4412 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4413 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4414 .fault(EL2, faultDebugEL2)
4416 InitReg(MISCREG_DBGBVR13_EL1)
4418 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4419 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4420 .fault(EL2, faultDebugEL2)
4422 InitReg(MISCREG_DBGBVR14_EL1)
4424 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4425 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4426 .fault(EL2, faultDebugEL2)
4428 InitReg(MISCREG_DBGBVR15_EL1)
4430 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4431 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4432 .fault(EL2, faultDebugEL2)
4434 InitReg(MISCREG_DBGBCR0_EL1)
4436 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4437 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4438 .fault(EL2, faultDebugEL2)
4440 InitReg(MISCREG_DBGBCR1_EL1)
4442 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4443 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4444 .fault(EL2, faultDebugEL2)
4446 InitReg(MISCREG_DBGBCR2_EL1)
4448 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4449 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4450 .fault(EL2, faultDebugEL2)
4452 InitReg(MISCREG_DBGBCR3_EL1)
4454 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4455 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4456 .fault(EL2, faultDebugEL2)
4458 InitReg(MISCREG_DBGBCR4_EL1)
4460 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4461 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4462 .fault(EL2, faultDebugEL2)
4464 InitReg(MISCREG_DBGBCR5_EL1)
4466 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4467 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4468 .fault(EL2, faultDebugEL2)
4470 InitReg(MISCREG_DBGBCR6_EL1)
4472 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4473 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4474 .fault(EL2, faultDebugEL2)
4476 InitReg(MISCREG_DBGBCR7_EL1)
4478 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4479 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4480 .fault(EL2, faultDebugEL2)
4482 InitReg(MISCREG_DBGBCR8_EL1)
4484 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4485 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4486 .fault(EL2, faultDebugEL2)
4488 InitReg(MISCREG_DBGBCR9_EL1)
4490 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4491 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4492 .fault(EL2, faultDebugEL2)
4494 InitReg(MISCREG_DBGBCR10_EL1)
4496 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4497 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4498 .fault(EL2, faultDebugEL2)
4500 InitReg(MISCREG_DBGBCR11_EL1)
4502 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4503 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4504 .fault(EL2, faultDebugEL2)
4506 InitReg(MISCREG_DBGBCR12_EL1)
4508 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4509 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4510 .fault(EL2, faultDebugEL2)
4512 InitReg(MISCREG_DBGBCR13_EL1)
4514 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4515 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4516 .fault(EL2, faultDebugEL2)
4518 InitReg(MISCREG_DBGBCR14_EL1)
4520 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4521 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4522 .fault(EL2, faultDebugEL2)
4524 InitReg(MISCREG_DBGBCR15_EL1)
4526 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4527 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4528 .fault(EL2, faultDebugEL2)
4530 InitReg(MISCREG_DBGWVR0_EL1)
4532 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4533 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4534 .fault(EL2, faultDebugEL2)
4536 InitReg(MISCREG_DBGWVR1_EL1)
4538 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4539 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4540 .fault(EL2, faultDebugEL2)
4542 InitReg(MISCREG_DBGWVR2_EL1)
4544 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4545 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4546 .fault(EL2, faultDebugEL2)
4548 InitReg(MISCREG_DBGWVR3_EL1)
4550 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4551 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4552 .fault(EL2, faultDebugEL2)
4554 InitReg(MISCREG_DBGWVR4_EL1)
4556 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4557 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4558 .fault(EL2, faultDebugEL2)
4560 InitReg(MISCREG_DBGWVR5_EL1)
4562 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4563 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4564 .fault(EL2, faultDebugEL2)
4566 InitReg(MISCREG_DBGWVR6_EL1)
4568 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4569 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4570 .fault(EL2, faultDebugEL2)
4572 InitReg(MISCREG_DBGWVR7_EL1)
4574 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4575 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4576 .fault(EL2, faultDebugEL2)
4578 InitReg(MISCREG_DBGWVR8_EL1)
4580 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4581 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4582 .fault(EL2, faultDebugEL2)
4584 InitReg(MISCREG_DBGWVR9_EL1)
4586 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4587 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4588 .fault(EL2, faultDebugEL2)
4590 InitReg(MISCREG_DBGWVR10_EL1)
4592 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4593 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4594 .fault(EL2, faultDebugEL2)
4596 InitReg(MISCREG_DBGWVR11_EL1)
4598 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4599 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4600 .fault(EL2, faultDebugEL2)
4602 InitReg(MISCREG_DBGWVR12_EL1)
4604 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4605 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4606 .fault(EL2, faultDebugEL2)
4608 InitReg(MISCREG_DBGWVR13_EL1)
4610 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4611 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4612 .fault(EL2, faultDebugEL2)
4614 InitReg(MISCREG_DBGWVR14_EL1)
4616 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4617 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4618 .fault(EL2, faultDebugEL2)
4620 InitReg(MISCREG_DBGWVR15_EL1)
4622 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4623 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4624 .fault(EL2, faultDebugEL2)
4626 InitReg(MISCREG_DBGWCR0_EL1)
4628 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4629 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4630 .fault(EL2, faultDebugEL2)
4632 InitReg(MISCREG_DBGWCR1_EL1)
4634 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4635 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4636 .fault(EL2, faultDebugEL2)
4638 InitReg(MISCREG_DBGWCR2_EL1)
4640 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4641 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4642 .fault(EL2, faultDebugEL2)
4644 InitReg(MISCREG_DBGWCR3_EL1)
4646 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4647 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4648 .fault(EL2, faultDebugEL2)
4650 InitReg(MISCREG_DBGWCR4_EL1)
4652 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4653 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4654 .fault(EL2, faultDebugEL2)
4656 InitReg(MISCREG_DBGWCR5_EL1)
4658 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4659 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4660 .fault(EL2, faultDebugEL2)
4662 InitReg(MISCREG_DBGWCR6_EL1)
4664 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4665 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4666 .fault(EL2, faultDebugEL2)
4668 InitReg(MISCREG_DBGWCR7_EL1)
4670 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4671 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4672 .fault(EL2, faultDebugEL2)
4674 InitReg(MISCREG_DBGWCR8_EL1)
4676 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4677 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4678 .fault(EL2, faultDebugEL2)
4680 InitReg(MISCREG_DBGWCR9_EL1)
4682 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4683 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4684 .fault(EL2, faultDebugEL2)
4686 InitReg(MISCREG_DBGWCR10_EL1)
4688 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4689 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4690 .fault(EL2, faultDebugEL2)
4692 InitReg(MISCREG_DBGWCR11_EL1)
4694 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4695 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4696 .fault(EL2, faultDebugEL2)
4698 InitReg(MISCREG_DBGWCR12_EL1)
4700 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4701 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4702 .fault(EL2, faultDebugEL2)
4704 InitReg(MISCREG_DBGWCR13_EL1)
4706 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4707 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4708 .fault(EL2, faultDebugEL2)
4710 InitReg(MISCREG_DBGWCR14_EL1)
4712 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4713 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4714 .fault(EL2, faultDebugEL2)
4716 InitReg(MISCREG_DBGWCR15_EL1)
4718 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4719 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4720 .fault(EL2, faultDebugEL2)
4722 InitReg(MISCREG_MDCCSR_EL0)
4723 .allPrivileges().writes(0)
4724 .faultRead(EL0, faultMdccsrEL0)
4725 .faultRead(EL1, faultMdccsrEL1)
4726 .faultRead(EL2, faultMdccsrEL2)
4728 InitReg(MISCREG_MDDTR_EL0)
4729 .allPrivileges();
4730 InitReg(MISCREG_MDDTRTX_EL0)
4731 .allPrivileges();
4732 InitReg(MISCREG_MDDTRRX_EL0)
4733 .allPrivileges();
4734 InitReg(MISCREG_DBGVCR32_EL2)
4735 .hyp().mon()
4736 .fault(EL2, faultDebugEL2)
4738 InitReg(MISCREG_MDRAR_EL1)
4740 .faultRead(EL1, faultDebugEL1)
4741 .faultRead(EL2, faultDebugEL2)
4743 InitReg(MISCREG_OSLAR_EL1)
4745 .faultWrite(EL1, faultDebugOsEL1<false, &HDFGTR::oslarEL1>)
4746 .faultWrite(EL2, faultDebugOsEL2)
4748 InitReg(MISCREG_OSLSR_EL1)
4750 .faultRead(EL1, faultDebugOsEL1<true, &HDFGTR::oslsrEL1>)
4751 .faultRead(EL2, faultDebugOsEL2)
4753 InitReg(MISCREG_OSDLR_EL1)
4755 .faultRead(EL1, faultDebugOsEL1<true, &HDFGTR::osdlrEL1>)
4756 .faultWrite(EL1, faultDebugOsEL1<false, &HDFGTR::osdlrEL1>)
4757 .fault(EL2, faultDebugOsEL2)
4759 InitReg(MISCREG_DBGPRCR_EL1)
4761 .faultRead(EL1, faultDebugOsEL1<true, &HDFGTR::dbgprcrEL1>)
4762 .faultWrite(EL1, faultDebugOsEL1<false, &HDFGTR::dbgprcrEL1>)
4763 .fault(EL2, faultDebugOsEL2)
4767 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4768 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4769 .fault(EL2, faultDebugEL2)
4773 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4774 .faultWrite(EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4775 .fault(EL2, faultDebugEL2)
4779 .faultRead(EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgauthstatusEL1>)
4780 .faultRead(EL2, faultDebugEL2)
4782 InitReg(MISCREG_TEECR32_EL1);
4783 InitReg(MISCREG_TEEHBR32_EL1);
4784
4785 // AArch64 registers (Op0=1,3);
4786 InitReg(MISCREG_MIDR_EL1)
4787 .allPrivileges().exceptUserMode().writes(0)
4788 .faultRead(EL0, faultIdst)
4789 .faultRead(EL1, faultFgtEL1<true, &HFGTR::midrEL1>)
4790 .mapsTo(MISCREG_MIDR);
4791 InitReg(MISCREG_MPIDR_EL1)
4792 .allPrivileges().exceptUserMode().writes(0)
4793 .faultRead(EL0, faultIdst)
4794 .faultRead(EL1, faultFgtEL1<true, &HFGTR::mpidrEL1>)
4795 .mapsTo(MISCREG_MPIDR);
4796 InitReg(MISCREG_REVIDR_EL1)
4797 .faultRead(EL0, faultIdst)
4798 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::revidrEL1>)
4799 .allPrivileges().exceptUserMode().writes(0);
4800 InitReg(MISCREG_ID_PFR0_EL1)
4801 .allPrivileges().exceptUserMode().writes(0)
4802 .faultRead(EL0, faultIdst)
4803 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4804 .mapsTo(MISCREG_ID_PFR0);
4805 InitReg(MISCREG_ID_PFR1_EL1)
4806 .allPrivileges().exceptUserMode().writes(0)
4807 .faultRead(EL0, faultIdst)
4808 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4809 .mapsTo(MISCREG_ID_PFR1);
4810 InitReg(MISCREG_ID_DFR0_EL1)
4811 .allPrivileges().exceptUserMode().writes(0)
4812 .faultRead(EL0, faultIdst)
4813 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4814 .mapsTo(MISCREG_ID_DFR0);
4815 InitReg(MISCREG_ID_AFR0_EL1)
4816 .allPrivileges().exceptUserMode().writes(0)
4817 .faultRead(EL0, faultIdst)
4818 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4819 .mapsTo(MISCREG_ID_AFR0);
4820 InitReg(MISCREG_ID_MMFR0_EL1)
4821 .allPrivileges().exceptUserMode().writes(0)
4822 .faultRead(EL0, faultIdst)
4823 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4824 .mapsTo(MISCREG_ID_MMFR0);
4825 InitReg(MISCREG_ID_MMFR1_EL1)
4826 .allPrivileges().exceptUserMode().writes(0)
4827 .faultRead(EL0, faultIdst)
4828 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4829 .mapsTo(MISCREG_ID_MMFR1);
4830 InitReg(MISCREG_ID_MMFR2_EL1)
4831 .allPrivileges().exceptUserMode().writes(0)
4832 .faultRead(EL0, faultIdst)
4833 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4834 .mapsTo(MISCREG_ID_MMFR2);
4835 InitReg(MISCREG_ID_MMFR3_EL1)
4836 .allPrivileges().exceptUserMode().writes(0)
4837 .faultRead(EL0, faultIdst)
4838 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4839 .mapsTo(MISCREG_ID_MMFR3);
4840 InitReg(MISCREG_ID_MMFR4_EL1)
4841 .allPrivileges().exceptUserMode().writes(0)
4842 .faultRead(EL0, faultIdst)
4843 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4844 .mapsTo(MISCREG_ID_MMFR4);
4845 InitReg(MISCREG_ID_ISAR0_EL1)
4846 .allPrivileges().exceptUserMode().writes(0)
4847 .faultRead(EL0, faultIdst)
4848 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4849 .mapsTo(MISCREG_ID_ISAR0);
4850 InitReg(MISCREG_ID_ISAR1_EL1)
4851 .allPrivileges().exceptUserMode().writes(0)
4852 .faultRead(EL0, faultIdst)
4853 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4854 .mapsTo(MISCREG_ID_ISAR1);
4855 InitReg(MISCREG_ID_ISAR2_EL1)
4856 .allPrivileges().exceptUserMode().writes(0)
4857 .faultRead(EL0, faultIdst)
4858 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4859 .mapsTo(MISCREG_ID_ISAR2);
4860 InitReg(MISCREG_ID_ISAR3_EL1)
4861 .allPrivileges().exceptUserMode().writes(0)
4862 .faultRead(EL0, faultIdst)
4863 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4864 .mapsTo(MISCREG_ID_ISAR3);
4865 InitReg(MISCREG_ID_ISAR4_EL1)
4866 .allPrivileges().exceptUserMode().writes(0)
4867 .faultRead(EL0, faultIdst)
4868 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4869 .mapsTo(MISCREG_ID_ISAR4);
4870 InitReg(MISCREG_ID_ISAR5_EL1)
4871 .allPrivileges().exceptUserMode().writes(0)
4872 .faultRead(EL0, faultIdst)
4873 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4874 .mapsTo(MISCREG_ID_ISAR5);
4875 InitReg(MISCREG_ID_ISAR6_EL1)
4876 .allPrivileges().exceptUserMode().writes(0)
4877 .faultRead(EL0, faultIdst)
4878 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4879 .mapsTo(MISCREG_ID_ISAR6);
4880 InitReg(MISCREG_MVFR0_EL1)
4881 .faultRead(EL0, faultIdst)
4882 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4883 .allPrivileges().exceptUserMode().writes(0)
4884 .mapsTo(MISCREG_MVFR0);
4885 InitReg(MISCREG_MVFR1_EL1)
4886 .faultRead(EL0, faultIdst)
4887 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4888 .allPrivileges().exceptUserMode().writes(0)
4889 .mapsTo(MISCREG_MVFR1);
4890 InitReg(MISCREG_MVFR2_EL1)
4891 .faultRead(EL0, faultIdst)
4892 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4893 .allPrivileges().exceptUserMode().writes(0);
4895 .reset([this,release=release,tc=tc](){
4896 AA64PFR0 pfr0_el1 = 0;
4897 pfr0_el1.el0 = 0x2;
4898 pfr0_el1.el1 = 0x2;
4899 pfr0_el1.el2 = release->has(ArmExtension::VIRTUALIZATION)
4900 ? 0x2 : 0x0;
4901 pfr0_el1.el3 = release->has(ArmExtension::SECURITY) ? 0x2 : 0x0;
4902 pfr0_el1.fp = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4903 pfr0_el1.advsimd = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4904 pfr0_el1.sve = release->has(ArmExtension::FEAT_SVE) ? 0x1 : 0x0;
4905 pfr0_el1.sel2 = release->has(ArmExtension::FEAT_SEL2) ? 0x1 : 0x0;
4906 // See MPAM frac in MISCREG_ID_AA64PFR1_EL1. Currently supporting
4907 // MPAMv0p1
4908 pfr0_el1.mpam = 0x0;
4909 pfr0_el1.gic = FullSystem && getGICv3CPUInterface(tc) ? 0x1 : 0;
4910 return pfr0_el1;
4911 }())
4912 .unserialize(0)
4913 .faultRead(EL0, faultIdst)
4914 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4915 .allPrivileges().writes(0);
4917 .reset([release=release](){
4918 AA64PFR1 pfr1_el1 = 0;
4919 pfr1_el1.sme = release->has(ArmExtension::FEAT_SME) ? 0x1 : 0x0;
4920 pfr1_el1.mpamFrac = release->has(ArmExtension::FEAT_MPAM) ?
4921 0x1 : 0x0;
4922 return pfr1_el1;
4923 }())
4924 .unserialize(0)
4925 .faultRead(EL0, faultIdst)
4926 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4927 .allPrivileges().writes(0);
4929 .reset([p](){
4930 AA64DFR0 dfr0_el1 = p.id_aa64dfr0_el1;
4931 dfr0_el1.pmuver = p.pmu ? 1 : 0; // Enable PMUv3
4932 return dfr0_el1;
4933 }())
4934 .faultRead(EL0, faultIdst)
4935 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4936 .allPrivileges().writes(0);
4938 .reset(p.id_aa64dfr1_el1)
4939 .faultRead(EL0, faultIdst)
4940 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4941 .allPrivileges().writes(0);
4943 .reset(p.id_aa64afr0_el1)
4944 .faultRead(EL0, faultIdst)
4945 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4946 .allPrivileges().writes(0);
4948 .reset(p.id_aa64afr1_el1)
4949 .faultRead(EL0, faultIdst)
4950 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4951 .allPrivileges().writes(0);
4953 .reset([p,release=release](){
4954 AA64ISAR0 isar0_el1 = p.id_aa64isar0_el1;
4955 isar0_el1.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
4956 isar0_el1.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
4957 isar0_el1.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
4958 isar0_el1.aes = release->has(ArmExtension::FEAT_PMULL) ?
4959 0x2 : release->has(ArmExtension::FEAT_AES) ?
4960 0x1 : 0x0;
4961 isar0_el1.dp = release->has(ArmExtension::FEAT_DOTPROD) ? 0x1 : 0x0;
4962 isar0_el1.atomic = release->has(ArmExtension::FEAT_LSE) ? 0x2 : 0x0;
4963 isar0_el1.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
4964 isar0_el1.tme = release->has(ArmExtension::TME) ? 0x1 : 0x0;
4965 isar0_el1.tlb = release->has(ArmExtension::FEAT_TLBIRANGE) ?
4966 0x2 : release->has(ArmExtension::FEAT_TLBIOS) ?
4967 0x1 : 0x0;
4968 isar0_el1.ts = release->has(ArmExtension::FEAT_FLAGM2) ?
4969 0x2 : release->has(ArmExtension::FEAT_FLAGM) ?
4970 0x1 : 0x0;
4971 isar0_el1.rndr = release->has(ArmExtension::FEAT_RNG) ? 0x1 : 0x0;
4972 return isar0_el1;
4973 }())
4974 .faultRead(EL0, faultIdst)
4975 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4976 .allPrivileges().writes(0);
4978 .reset([p,release=release](){
4979 AA64ISAR1 isar1_el1 = p.id_aa64isar1_el1;
4980 isar1_el1.xs = release->has(ArmExtension::FEAT_XS) ? 0x1 : 0x0;
4981 isar1_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 0x1 : 0x0;
4982 isar1_el1.apa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4983 isar1_el1.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
4984 isar1_el1.fcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
4985 isar1_el1.gpa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4986 return isar1_el1;
4987 }())
4988 .faultRead(EL0, faultIdst)
4989 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
4990 .allPrivileges().writes(0);
4992 .reset([p,asidbits=haveLargeAsid64,parange=physAddrRange](){
4993 AA64MMFR0 mmfr0_el1 = p.id_aa64mmfr0_el1;
4994 mmfr0_el1.asidbits = asidbits ? 0x2 : 0x0;
4995 mmfr0_el1.parange = encodePhysAddrRange64(parange);
4996 return mmfr0_el1;
4997 }())
4998 .faultRead(EL0, faultIdst)
4999 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5000 .allPrivileges().writes(0);
5002 .reset([p,release=release](){
5003 AA64MMFR1 mmfr1_el1 = p.id_aa64mmfr1_el1;
5004 mmfr1_el1.vmidbits =
5005 release->has(ArmExtension::FEAT_VMID16) ? 0x2 : 0x0;
5006 mmfr1_el1.vh = release->has(ArmExtension::FEAT_VHE) ? 0x1 : 0x0;
5007 mmfr1_el1.hpds = release->has(ArmExtension::FEAT_HPDS) ? 0x1 : 0x0;
5008 mmfr1_el1.pan = release->has(ArmExtension::FEAT_PAN) ? 0x1 : 0x0;
5009 mmfr1_el1.hcx = release->has(ArmExtension::FEAT_HCX) ? 0x1 : 0x0;
5010 return mmfr1_el1;
5011 }())
5012 .faultRead(EL0, faultIdst)
5013 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5014 .allPrivileges().writes(0);
5016 .reset([p,release=release](){
5017 AA64MMFR2 mmfr2_el1 = p.id_aa64mmfr2_el1;
5018 mmfr2_el1.uao = release->has(ArmExtension::FEAT_UAO) ? 0x1 : 0x0;
5019 mmfr2_el1.varange = release->has(ArmExtension::FEAT_LVA) ? 0x1 : 0x0;
5020 mmfr2_el1.st = release->has(ArmExtension::FEAT_TTST) ? 0x1 : 0x0;
5021 mmfr2_el1.ids = release->has(ArmExtension::FEAT_IDST) ? 0x1 : 0x0;
5022 mmfr2_el1.evt = release->has(ArmExtension::FEAT_EVT) ? 0x2 : 0x0;
5023 return mmfr2_el1;
5024 }())
5025 .faultRead(EL0, faultIdst)
5026 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5027 .allPrivileges().writes(0);
5029 .reset([p,release=release](){
5030 AA64MMFR3 mmfr3_el1 = 0;
5031 mmfr3_el1.sctlrx =
5032 release->has(ArmExtension::FEAT_SCTLR2) ? 0x1 : 0x0;
5033 mmfr3_el1.tcrx = release->has(ArmExtension::FEAT_TCR2) ? 0x1 : 0x0;
5034 mmfr3_el1.s1pie = release->has(ArmExtension::FEAT_S1PIE) ? 0x1 : 0x0;
5035 return mmfr3_el1;
5036 }())
5037 .faultRead(EL0, faultIdst)
5038 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
5039 .allPrivileges().writes(0);
5040
5041 InitReg(MISCREG_APDAKeyHi_EL1)
5042 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5043 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5044 .fault(EL2, faultPauthEL2)
5045 .allPrivileges().exceptUserMode();
5046 InitReg(MISCREG_APDAKeyLo_EL1)
5047 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5048 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5049 .fault(EL2, faultPauthEL2)
5050 .allPrivileges().exceptUserMode();
5051 InitReg(MISCREG_APDBKeyHi_EL1)
5052 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5053 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5054 .fault(EL2, faultPauthEL2)
5055 .allPrivileges().exceptUserMode();
5056 InitReg(MISCREG_APDBKeyLo_EL1)
5057 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5058 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5059 .fault(EL2, faultPauthEL2)
5060 .allPrivileges().exceptUserMode();
5061 InitReg(MISCREG_APGAKeyHi_EL1)
5062 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5063 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5064 .fault(EL2, faultPauthEL2)
5065 .allPrivileges().exceptUserMode();
5066 InitReg(MISCREG_APGAKeyLo_EL1)
5067 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5068 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5069 .fault(EL2, faultPauthEL2)
5070 .allPrivileges().exceptUserMode();
5071 InitReg(MISCREG_APIAKeyHi_EL1)
5072 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5073 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5074 .fault(EL2, faultPauthEL2)
5075 .allPrivileges().exceptUserMode();
5076 InitReg(MISCREG_APIAKeyLo_EL1)
5077 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5078 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5079 .fault(EL2, faultPauthEL2)
5080 .allPrivileges().exceptUserMode();
5081 InitReg(MISCREG_APIBKeyHi_EL1)
5082 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5083 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5084 .fault(EL2, faultPauthEL2)
5085 .allPrivileges().exceptUserMode();
5086 InitReg(MISCREG_APIBKeyLo_EL1)
5087 .faultRead(EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5088 .faultWrite(EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5089 .fault(EL2, faultPauthEL2)
5090 .allPrivileges().exceptUserMode();
5091
5092 InitReg(MISCREG_CCSIDR_EL1)
5093 .faultRead(EL0, faultIdst)
5094 .faultRead(EL1, faultCacheEL1<true, &HFGTR::ccsidrEL1>)
5095 .allPrivileges().writes(0);
5096 InitReg(MISCREG_CLIDR_EL1)
5097 .faultRead(EL0, faultIdst)
5098 .faultRead(EL1, faultCacheEL1<true, &HFGTR::clidrEL1>)
5099 .allPrivileges().writes(0);
5100 InitReg(MISCREG_AIDR_EL1)
5101 .faultRead(EL0, faultIdst)
5102 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::aidrEL1>)
5103 .allPrivileges().writes(0);
5104 InitReg(MISCREG_CSSELR_EL1)
5105 .allPrivileges().exceptUserMode()
5106 .faultRead(EL1, faultCacheEL1<true, &HFGTR::csselrEL1>)
5107 .faultWrite(EL1, faultCacheEL1<false, &HFGTR::csselrEL1>)
5108 .mapsTo(MISCREG_CSSELR_NS);
5109 InitReg(MISCREG_CTR_EL0)
5110 .faultRead(EL0, faultCtrEL0)
5111 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::tid2, &HFGTR::ctrEL0>)
5112 .reads(1)
5113 .mapsTo(MISCREG_CTR);
5114 InitReg(MISCREG_DCZID_EL0)
5115 .reset(0x04) // DC ZVA clear 64-byte chunks
5116 .faultRead(EL0, faultFgtEL0<true, &HFGTR::dczidEL0>)
5117 .faultRead(EL1, faultFgtEL1<true, &HFGTR::dczidEL0>)
5118 .reads(1);
5119 InitReg(MISCREG_VPIDR_EL2)
5120 .hyp().mon()
5121 .mapsTo(MISCREG_VPIDR);
5122 InitReg(MISCREG_VMPIDR_EL2)
5123 .hyp().mon()
5124 .res0(mask(63, 40) | mask(29, 25))
5125 .res1(mask(31, 31))
5126 .mapsTo(MISCREG_VMPIDR);
5127 InitReg(MISCREG_SCTLR_EL1)
5128 .allPrivileges().exceptUserMode()
5129 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::sctlrEL1>)
5130 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::sctlrEL1>)
5131 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5132 | (IESB ? 0 : 0x200000)
5133 | (EnDA ? 0 : 0x8000000)
5134 | (EnIB ? 0 : 0x40000000)
5135 | (EnIA ? 0 : 0x80000000))
5136 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5137 | (nTLSMD ? 0 : 0x8000000)
5138 | (LSMAOE ? 0 : 0x10000000))
5139 .mapsTo(MISCREG_SCTLR_NS);
5140 InitReg(MISCREG_SCTLR_EL12)
5141 .fault(EL2, defaultFaultE2H_EL2)
5142 .fault(EL3, defaultFaultE2H_EL3)
5143 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5144 | (IESB ? 0 : 0x200000)
5145 | (EnDA ? 0 : 0x8000000)
5146 | (EnIB ? 0 : 0x40000000)
5147 | (EnIA ? 0 : 0x80000000))
5148 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5149 | (nTLSMD ? 0 : 0x8000000)
5150 | (LSMAOE ? 0 : 0x10000000))
5151 .mapsTo(MISCREG_SCTLR_EL1);
5152 InitReg(MISCREG_SCTLR2_EL1)
5153 .allPrivileges().exceptUserMode()
5154 .faultRead(EL1, faultSctlr2EL1<true, &HCR::trvm>)
5155 .faultWrite(EL1, faultSctlr2EL1<false, &HCR::tvm>)
5156 .fault(EL2,faultSctlr2EL2);
5157 InitReg(MISCREG_SCTLR2_EL12)
5158 .fault(EL2, faultVheEL2<faultSctlr2EL2>)
5159 .fault(EL3, defaultFaultE2H_EL3)
5160 .mapsTo(MISCREG_SCTLR2_EL1);
5161 InitReg(MISCREG_ACTLR_EL1)
5162 .allPrivileges().exceptUserMode()
5163 .fault(EL1, faultHcrEL1<&HCR::tacr>)
5164 .mapsTo(MISCREG_ACTLR_NS);
5165 InitReg(MISCREG_CPACR_EL1)
5166 .allPrivileges().exceptUserMode()
5167 .faultRead(EL1, faultCpacrEL1<true, &HFGTR::cpacrEL1>)
5168 .faultWrite(EL1, faultCpacrEL1<false, &HFGTR::cpacrEL1>)
5169 .fault(EL2, faultCpacrEL2)
5170 .mapsTo(MISCREG_CPACR);
5171 InitReg(MISCREG_CPACR_EL12)
5172 .fault(EL2, faultVheEL2<faultCpacrEL2>)
5173 .fault(EL3, defaultFaultE2H_EL3)
5174 .mapsTo(MISCREG_CPACR_EL1);
5175 InitReg(MISCREG_SCTLR_EL2)
5176 .hyp().mon()
5177 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5178 | (IESB ? 0 : 0x200000)
5179 | (EnDA ? 0 : 0x8000000)
5180 | (EnIB ? 0 : 0x40000000)
5181 | (EnIA ? 0 : 0x80000000))
5182 .res1(0x30c50830)
5183 .mapsTo(MISCREG_HSCTLR);
5184 InitReg(MISCREG_SCTLR2_EL2)
5185 .hyp().mon()
5186 .fault(EL2, faultSctlr2EL2);
5187 InitReg(MISCREG_ACTLR_EL2)
5188 .hyp().mon()
5189 .mapsTo(MISCREG_HACTLR);
5190 InitReg(MISCREG_HCR_EL2)
5191 .hyp().mon()
5192 .mapsTo(MISCREG_HCR, MISCREG_HCR2);
5193 InitReg(MISCREG_HCRX_EL2)
5194 .hyp().mon()
5195 .fault(EL2, faultHcrxEL2);
5196 InitReg(MISCREG_MDCR_EL2)
5197 .hyp().mon()
5198 .fault(EL2, faultDebugEL2)
5199 .mapsTo(MISCREG_HDCR);
5200 InitReg(MISCREG_CPTR_EL2)
5201 .hyp().mon()
5202 .fault(EL2, faultCpacrEL2)
5203 .mapsTo(MISCREG_HCPTR);
5204 InitReg(MISCREG_HSTR_EL2)
5205 .hyp().mon()
5206 .mapsTo(MISCREG_HSTR);
5207 InitReg(MISCREG_HACR_EL2)
5208 .hyp().mon()
5209 .mapsTo(MISCREG_HACR);
5210 InitReg(MISCREG_SCTLR_EL3)
5211 .reset(0x30c50830)
5212 .mon()
5213 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5214 | (IESB ? 0 : 0x200000)
5215 | (EnDA ? 0 : 0x8000000)
5216 | (EnIB ? 0 : 0x40000000)
5217 | (EnIA ? 0 : 0x80000000))
5218 .res1(0x30c50830);
5219 InitReg(MISCREG_SCTLR2_EL3)
5220 .mon();
5221 InitReg(MISCREG_ACTLR_EL3)
5222 .mon();
5223 InitReg(MISCREG_SCR_EL3)
5224 .mon()
5225 .mapsTo(MISCREG_SCR); // NAM D7-2005
5226 InitReg(MISCREG_SDER32_EL3)
5227 .mon()
5228 .mapsTo(MISCREG_SDER);
5229 InitReg(MISCREG_CPTR_EL3)
5230 .mon();
5231 InitReg(MISCREG_MDCR_EL3)
5232 .mon()
5233 .mapsTo(MISCREG_SDCR);
5234 InitReg(MISCREG_TTBR0_EL1)
5235 .allPrivileges().exceptUserMode()
5236 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr0EL1>)
5237 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr0EL1>)
5238 .mapsTo(MISCREG_TTBR0_NS);
5239 InitReg(MISCREG_TTBR0_EL12)
5240 .fault(EL2, defaultFaultE2H_EL2)
5241 .fault(EL3, defaultFaultE2H_EL3)
5242 .mapsTo(MISCREG_TTBR0_EL1);
5243 InitReg(MISCREG_TTBR1_EL1)
5244 .allPrivileges().exceptUserMode()
5245 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr1EL1>)
5246 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr1EL1>)
5247 .mapsTo(MISCREG_TTBR1_NS);
5248 InitReg(MISCREG_TTBR1_EL12)
5249 .fault(EL2, defaultFaultE2H_EL2)
5250 .fault(EL3, defaultFaultE2H_EL3)
5251 .mapsTo(MISCREG_TTBR1_EL1);
5252 InitReg(MISCREG_TCR_EL1)
5253 .allPrivileges().exceptUserMode()
5254 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::tcrEL1>)
5255 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::tcrEL1>)
5256 .mapsTo(MISCREG_TTBCR_NS);
5257 InitReg(MISCREG_TCR_EL12)
5258 .fault(EL2, defaultFaultE2H_EL2)
5259 .fault(EL3, defaultFaultE2H_EL3)
5260 .mapsTo(MISCREG_TTBCR_NS);
5261 InitReg(MISCREG_TCR2_EL1)
5262 .allPrivileges().exceptUserMode()
5263 .faultRead(EL1, faultTcr2EL1<true, &HCR::trvm>)
5264 .faultWrite(EL1, faultTcr2EL1<false, &HCR::tvm>)
5265 .fault(EL2, faultTcr2EL2);
5266 InitReg(MISCREG_TCR2_EL12)
5267 .fault(EL2, faultVheEL2<faultTcr2EL2>)
5268 .fault(EL3, faultTcr2VheEL3)
5269 .mapsTo(MISCREG_TCR2_EL1);
5270 InitReg(MISCREG_TTBR0_EL2)
5271 .hyp().mon()
5272 .mapsTo(MISCREG_HTTBR);
5273 InitReg(MISCREG_TTBR1_EL2)
5274 .hyp().mon();
5275 InitReg(MISCREG_TCR_EL2)
5276 .hyp().mon()
5277 .mapsTo(MISCREG_HTCR);
5278 InitReg(MISCREG_TCR2_EL2)
5279 .hyp().mon()
5280 .fault(EL2, faultTcr2EL2);
5281 InitReg(MISCREG_VTTBR_EL2)
5282 .hyp().mon()
5283 .mapsTo(MISCREG_VTTBR);
5284 InitReg(MISCREG_VTCR_EL2)
5285 .hyp().mon()
5286 .mapsTo(MISCREG_VTCR);
5287 InitReg(MISCREG_VSTTBR_EL2)
5288 .hypSecure().mon();
5289 InitReg(MISCREG_VSTCR_EL2)
5290 .hypSecure().mon();
5291 InitReg(MISCREG_TTBR0_EL3)
5292 .mon();
5293 InitReg(MISCREG_TCR_EL3)
5294 .mon();
5295 InitReg(MISCREG_DACR32_EL2)
5296 .hyp().mon()
5297 .mapsTo(MISCREG_DACR_NS);
5298 InitReg(MISCREG_SPSR_EL1)
5299 .allPrivileges().exceptUserMode()
5300 .mapsTo(MISCREG_SPSR_SVC); // NAM C5.2.17 SPSR_EL1
5301 InitReg(MISCREG_SPSR_EL12)
5302 .fault(EL2, defaultFaultE2H_EL2)
5303 .fault(EL3, defaultFaultE2H_EL3)
5304 .mapsTo(MISCREG_SPSR_SVC);
5305 InitReg(MISCREG_ELR_EL1)
5306 .allPrivileges().exceptUserMode();
5307 InitReg(MISCREG_ELR_EL12)
5308 .fault(EL2, defaultFaultE2H_EL2)
5309 .fault(EL3, defaultFaultE2H_EL3)
5310 .mapsTo(MISCREG_ELR_EL1);
5311 InitReg(MISCREG_SP_EL0)
5312 .allPrivileges().exceptUserMode()
5313 .fault(EL1, faultSpEL0)
5314 .fault(EL2, faultSpEL0)
5315 .fault(EL3, faultSpEL0);
5316 InitReg(MISCREG_SPSEL)
5317 .allPrivileges().exceptUserMode();
5318 InitReg(MISCREG_CURRENTEL)
5319 .allPrivileges().exceptUserMode().writes(0);
5320 InitReg(MISCREG_PAN)
5321 .allPrivileges(release->has(ArmExtension::FEAT_PAN))
5322 .exceptUserMode();
5323 InitReg(MISCREG_UAO)
5324 .allPrivileges().exceptUserMode();
5325 InitReg(MISCREG_NZCV)
5326 .allPrivileges();
5327 InitReg(MISCREG_DAIF)
5328 .allPrivileges()
5329 .fault(EL0, faultDaif);
5330 InitReg(MISCREG_FPCR)
5331 .allPrivileges()
5332 .fault(EL0, faultFpcrEL0)
5333 .fault(EL1, faultFpcrEL1)
5334 .fault(EL2, faultFpcrEL2)
5335 .fault(EL3, faultFpcrEL3);
5336 InitReg(MISCREG_FPSR)
5337 .allPrivileges()
5338 .fault(EL0, faultFpcrEL0)
5339 .fault(EL1, faultFpcrEL1)
5340 .fault(EL2, faultFpcrEL2)
5341 .fault(EL3, faultFpcrEL3);
5342 InitReg(MISCREG_DSPSR_EL0)
5343 .allPrivileges();
5344 InitReg(MISCREG_DLR_EL0)
5345 .allPrivileges();
5346 InitReg(MISCREG_SPSR_EL2)
5347 .hyp().mon()
5348 .mapsTo(MISCREG_SPSR_HYP); // NAM C5.2.18 SPSR_EL2
5349 InitReg(MISCREG_ELR_EL2)
5350 .hyp().mon();
5351 InitReg(MISCREG_SP_EL1)
5352 .hyp().mon();
5353 InitReg(MISCREG_SPSR_IRQ_AA64)
5354 .hyp().mon();
5355 InitReg(MISCREG_SPSR_ABT_AA64)
5356 .hyp().mon();
5357 InitReg(MISCREG_SPSR_UND_AA64)
5358 .hyp().mon();
5359 InitReg(MISCREG_SPSR_FIQ_AA64)
5360 .hyp().mon();
5361 InitReg(MISCREG_SPSR_EL3)
5362 .mon()
5363 .mapsTo(MISCREG_SPSR_MON); // NAM C5.2.19 SPSR_EL3
5364 InitReg(MISCREG_ELR_EL3)
5365 .mon();
5366 InitReg(MISCREG_SP_EL2)
5367 .mon();
5368 InitReg(MISCREG_AFSR0_EL1)
5369 .allPrivileges().exceptUserMode()
5370 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr0EL1>)
5371 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr0EL1>)
5372 .mapsTo(MISCREG_ADFSR_NS);
5373 InitReg(MISCREG_AFSR0_EL12)
5374 .fault(EL2, defaultFaultE2H_EL2)
5375 .fault(EL3, defaultFaultE2H_EL3)
5376 .mapsTo(MISCREG_ADFSR_NS);
5377 InitReg(MISCREG_AFSR1_EL1)
5378 .allPrivileges().exceptUserMode()
5379 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr1EL1>)
5380 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr1EL1>)
5381 .mapsTo(MISCREG_AIFSR_NS);
5382 InitReg(MISCREG_AFSR1_EL12)
5383 .fault(EL2, defaultFaultE2H_EL2)
5384 .fault(EL3, defaultFaultE2H_EL3)
5385 .mapsTo(MISCREG_AIFSR_NS);
5386 InitReg(MISCREG_ESR_EL1)
5387 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::esrEL1>)
5388 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::esrEL1>)
5389 .allPrivileges().exceptUserMode();
5390 InitReg(MISCREG_ESR_EL12)
5391 .fault(EL2, defaultFaultE2H_EL2)
5392 .fault(EL3, defaultFaultE2H_EL3)
5393 .mapsTo(MISCREG_ESR_EL1);
5394 InitReg(MISCREG_IFSR32_EL2)
5395 .hyp().mon()
5396 .mapsTo(MISCREG_IFSR_NS);
5397 InitReg(MISCREG_AFSR0_EL2)
5398 .hyp().mon()
5399 .mapsTo(MISCREG_HADFSR);
5400 InitReg(MISCREG_AFSR1_EL2)
5401 .hyp().mon()
5402 .mapsTo(MISCREG_HAIFSR);
5403 InitReg(MISCREG_ESR_EL2)
5404 .hyp().mon()
5405 .mapsTo(MISCREG_HSR);
5406 InitReg(MISCREG_FPEXC32_EL2)
5407 .fault(EL2, faultFpcrEL2)
5408 .fault(EL3, faultFpcrEL3)
5409 .mapsTo(MISCREG_FPEXC);
5410 InitReg(MISCREG_AFSR0_EL3)
5411 .mon();
5412 InitReg(MISCREG_AFSR1_EL3)
5413 .mon();
5414 InitReg(MISCREG_ESR_EL3)
5415 .mon();
5416 InitReg(MISCREG_FAR_EL1)
5417 .allPrivileges().exceptUserMode()
5418 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::farEL1>)
5419 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::farEL1>)
5421 InitReg(MISCREG_FAR_EL12)
5422 .fault(EL2, defaultFaultE2H_EL2)
5423 .fault(EL3, defaultFaultE2H_EL3)
5425 InitReg(MISCREG_FAR_EL2)
5426 .hyp().mon()
5427 .mapsTo(MISCREG_HDFAR, MISCREG_HIFAR);
5428 InitReg(MISCREG_HPFAR_EL2)
5429 .hyp().mon()
5430 .mapsTo(MISCREG_HPFAR);
5431 InitReg(MISCREG_FAR_EL3)
5432 .mon();
5433 InitReg(MISCREG_IC_IALLUIS)
5434 .warnNotFail()
5435 .faultWrite(EL1, faultPouIsEL1<&HFGITR::icialluis>)
5436 .writes(1).exceptUserMode();
5437 InitReg(MISCREG_PAR_EL1)
5438 .allPrivileges().exceptUserMode()
5439 .mapsTo(MISCREG_PAR_NS);
5440 InitReg(MISCREG_IC_IALLU)
5441 .warnNotFail()
5442 .faultWrite(EL1, faultPouEL1<&HFGITR::iciallu>)
5443 .writes(1).exceptUserMode();
5444 InitReg(MISCREG_DC_IVAC_Xt)
5445 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dcivac>)
5446 .writes(1).exceptUserMode();
5447 InitReg(MISCREG_DC_ISW_Xt)
5448 .warnNotFail()
5449 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dcisw>)
5450 .writes(1).exceptUserMode();
5451 InitReg(MISCREG_AT_S1E1R_Xt)
5452 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1r>)
5453 .writes(1).exceptUserMode();
5454 InitReg(MISCREG_AT_S1E1W_Xt)
5455 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1w>)
5456 .writes(1).exceptUserMode();
5457 InitReg(MISCREG_AT_S1E0R_Xt)
5458 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0r>)
5459 .writes(1).exceptUserMode();
5460 InitReg(MISCREG_AT_S1E0W_Xt)
5461 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0w>)
5462 .writes(1).exceptUserMode();
5463 InitReg(MISCREG_DC_CSW_Xt)
5464 .warnNotFail()
5465 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccsw>)
5466 .writes(1).exceptUserMode();
5467 InitReg(MISCREG_DC_CISW_Xt)
5468 .warnNotFail()
5469 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccisw>)
5470 .writes(1).exceptUserMode();
5471 InitReg(MISCREG_DC_ZVA_Xt)
5472 .writes(1)
5473 .faultWrite(EL0, faultDczvaEL0)
5474 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tdz, &HFGITR::dczva>);
5475 InitReg(MISCREG_IC_IVAU_Xt)
5476 .faultWrite(EL0, faultPouEL0)
5477 .faultWrite(EL1, faultPouEL1<&HFGITR::icivau>)
5478 .writes(1);
5479 InitReg(MISCREG_DC_CVAC_Xt)
5480 .faultWrite(EL0, faultCvacEL0)
5481 .faultWrite(EL1, faultHcrEL1<&HCR::tpc>)
5482 .writes(1);
5483 InitReg(MISCREG_DC_CVAU_Xt)
5484 .faultWrite(EL0, faultPouEL0)
5485 .faultWrite(EL1, faultPouEL1<&HFGITR::dccvau>)
5486 .writes(1);
5487 InitReg(MISCREG_DC_CIVAC_Xt)
5488 .faultWrite(EL0, faultCvacEL0)
5489 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dccivac>)
5490 .writes(1);
5491 InitReg(MISCREG_AT_S1E2R_Xt)
5492 .monWrite().hypWrite();
5493 InitReg(MISCREG_AT_S1E2W_Xt)
5494 .monWrite().hypWrite();
5495 InitReg(MISCREG_AT_S12E1R_Xt)
5496 .hypWrite().monSecureWrite().monNonSecureWrite();
5497 InitReg(MISCREG_AT_S12E1W_Xt)
5498 .hypWrite().monSecureWrite().monNonSecureWrite();
5499 InitReg(MISCREG_AT_S12E0R_Xt)
5500 .hypWrite().monSecureWrite().monNonSecureWrite();
5501 InitReg(MISCREG_AT_S12E0W_Xt)
5502 .hypWrite().monSecureWrite().monNonSecureWrite();
5503 InitReg(MISCREG_AT_S1E3R_Xt)
5504 .monSecureWrite().monNonSecureWrite();
5505 InitReg(MISCREG_AT_S1E3W_Xt)
5506 .monSecureWrite().monNonSecureWrite();
5507 InitReg(MISCREG_TLBI_VMALLE1OS)
5508 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivmalle1os>)
5509 .writes(1).exceptUserMode();
5510 InitReg(MISCREG_TLBI_VAE1OS)
5511 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivae1os>)
5512 .writes(1).exceptUserMode();
5513 InitReg(MISCREG_TLBI_ASIDE1OS)
5514 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbiaside1os>)
5515 .writes(1).exceptUserMode();
5516 InitReg(MISCREG_TLBI_VAAE1OS)
5517 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivaae1os>)
5518 .writes(1).exceptUserMode();
5519 InitReg(MISCREG_TLBI_VALE1OS)
5520 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivale1os>)
5521 .writes(1).exceptUserMode();
5522 InitReg(MISCREG_TLBI_VAALE1OS)
5523 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbivaale1os>)
5524 .writes(1).exceptUserMode();
5525 InitReg(MISCREG_TLBI_VMALLE1IS)
5526 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivmalle1is>)
5527 .writes(1).exceptUserMode();
5528 InitReg(MISCREG_TLBI_VAE1IS)
5529 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivae1is>)
5530 .writes(1).exceptUserMode();
5531 InitReg(MISCREG_TLBI_ASIDE1IS)
5532 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbiaside1is>)
5533 .writes(1).exceptUserMode();
5534 InitReg(MISCREG_TLBI_VAAE1IS)
5535 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivaae1is>)
5536 .writes(1).exceptUserMode();
5537 InitReg(MISCREG_TLBI_VALE1IS)
5538 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivale1is>)
5539 .writes(1).exceptUserMode();
5540 InitReg(MISCREG_TLBI_VAALE1IS)
5541 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbivaale1is>)
5542 .writes(1).exceptUserMode();
5543 InitReg(MISCREG_TLBI_VMALLE1)
5544 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5545 .writes(1).exceptUserMode();
5546 InitReg(MISCREG_TLBI_VAE1)
5547 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5548 .writes(1).exceptUserMode();
5549 InitReg(MISCREG_TLBI_ASIDE1)
5550 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5551 .writes(1).exceptUserMode();
5552 InitReg(MISCREG_TLBI_VAAE1)
5553 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5554 .writes(1).exceptUserMode();
5555 InitReg(MISCREG_TLBI_VALE1)
5556 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5557 .writes(1).exceptUserMode();
5558 InitReg(MISCREG_TLBI_VAALE1)
5559 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5560 .writes(1).exceptUserMode();
5561 InitReg(MISCREG_TLBI_IPAS2E1OS)
5562 .monWrite().hypWrite();
5563 InitReg(MISCREG_TLBI_IPAS2LE1OS)
5564 .monWrite().hypWrite();
5565 InitReg(MISCREG_TLBI_ALLE2OS)
5566 .monWrite().hypWrite();
5567 InitReg(MISCREG_TLBI_VAE2OS)
5568 .monWrite().hypWrite();
5569 InitReg(MISCREG_TLBI_ALLE1OS)
5570 .monWrite().hypWrite();
5571 InitReg(MISCREG_TLBI_VALE2OS)
5572 .monWrite().hypWrite();
5573 InitReg(MISCREG_TLBI_VMALLS12E1OS)
5574 .monWrite().hypWrite();
5575 InitReg(MISCREG_TLBI_IPAS2E1IS)
5576 .monWrite().hypWrite();
5577 InitReg(MISCREG_TLBI_IPAS2LE1IS)
5578 .monWrite().hypWrite();
5579 InitReg(MISCREG_TLBI_ALLE2IS)
5580 .monWrite().hypWrite();
5581 InitReg(MISCREG_TLBI_VAE2IS)
5582 .monWrite().hypWrite();
5583 InitReg(MISCREG_TLBI_ALLE1IS)
5584 .monWrite().hypWrite();
5585 InitReg(MISCREG_TLBI_VALE2IS)
5586 .monWrite().hypWrite();
5587 InitReg(MISCREG_TLBI_VMALLS12E1IS)
5588 .monWrite().hypWrite();
5589 InitReg(MISCREG_TLBI_IPAS2E1)
5590 .monWrite().hypWrite();
5591 InitReg(MISCREG_TLBI_IPAS2LE1)
5592 .monWrite().hypWrite();
5593 InitReg(MISCREG_TLBI_ALLE2)
5594 .monWrite().hypWrite();
5595 InitReg(MISCREG_TLBI_VAE2)
5596 .monWrite().hypWrite();
5597 InitReg(MISCREG_TLBI_ALLE1)
5598 .monWrite().hypWrite();
5599 InitReg(MISCREG_TLBI_VALE2)
5600 .monWrite().hypWrite();
5601 InitReg(MISCREG_TLBI_VMALLS12E1)
5602 .monWrite().hypWrite();
5603 InitReg(MISCREG_TLBI_ALLE3OS)
5604 .monSecureWrite().monNonSecureWrite();
5605 InitReg(MISCREG_TLBI_VAE3OS)
5606 .monSecureWrite().monNonSecureWrite();
5607 InitReg(MISCREG_TLBI_VALE3OS)
5608 .monSecureWrite().monNonSecureWrite();
5609 InitReg(MISCREG_TLBI_ALLE3IS)
5610 .monSecureWrite().monNonSecureWrite();
5611 InitReg(MISCREG_TLBI_VAE3IS)
5612 .monSecureWrite().monNonSecureWrite();
5613 InitReg(MISCREG_TLBI_VALE3IS)
5614 .monSecureWrite().monNonSecureWrite();
5615 InitReg(MISCREG_TLBI_ALLE3)
5616 .monSecureWrite().monNonSecureWrite();
5617 InitReg(MISCREG_TLBI_VAE3)
5618 .monSecureWrite().monNonSecureWrite();
5619 InitReg(MISCREG_TLBI_VALE3)
5620 .monSecureWrite().monNonSecureWrite();
5621
5622 InitReg(MISCREG_TLBI_RVAE1)
5623 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5624 .writes(1).exceptUserMode();
5625 InitReg(MISCREG_TLBI_RVAAE1)
5626 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5627 .writes(1).exceptUserMode();
5628 InitReg(MISCREG_TLBI_RVALE1)
5629 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5630 .writes(1).exceptUserMode();
5631 InitReg(MISCREG_TLBI_RVAALE1)
5632 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5633 .writes(1).exceptUserMode();
5634 InitReg(MISCREG_TLBI_RIPAS2E1)
5635 .hypWrite().monWrite();
5636 InitReg(MISCREG_TLBI_RIPAS2LE1)
5637 .hypWrite().monWrite();
5638 InitReg(MISCREG_TLBI_RVAE2)
5639 .hypWrite().monWrite();
5640 InitReg(MISCREG_TLBI_RVALE2)
5641 .hypWrite().monWrite();
5642 InitReg(MISCREG_TLBI_RVAE3)
5643 .monWrite();
5644 InitReg(MISCREG_TLBI_RVALE3)
5645 .monWrite();
5646 InitReg(MISCREG_TLBI_RVAE1IS)
5647 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvae1is>)
5648 .writes(1).exceptUserMode();
5649 InitReg(MISCREG_TLBI_RVAAE1IS)
5650 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvaae1is>)
5651 .writes(1).exceptUserMode();
5652 InitReg(MISCREG_TLBI_RVALE1IS)
5653 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvale1is>)
5654 .writes(1).exceptUserMode();
5655 InitReg(MISCREG_TLBI_RVAALE1IS)
5656 .faultWrite(EL1, faultTlbiIsEL1<&HFGITR::tlbirvaale1is>)
5657 .writes(1).exceptUserMode();
5658 InitReg(MISCREG_TLBI_RIPAS2E1IS)
5659 .hypWrite().monWrite();
5660 InitReg(MISCREG_TLBI_RIPAS2LE1IS)
5661 .hypWrite().monWrite();
5662 InitReg(MISCREG_TLBI_RVAE2IS)
5663 .hypWrite().monWrite();
5664 InitReg(MISCREG_TLBI_RVALE2IS)
5665 .hypWrite().monWrite();
5666 InitReg(MISCREG_TLBI_RVAE3IS)
5667 .monWrite();
5668 InitReg(MISCREG_TLBI_RVALE3IS)
5669 .monWrite();
5670 InitReg(MISCREG_TLBI_RVAE1OS)
5671 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvae1os>)
5672 .writes(1).exceptUserMode();
5673 InitReg(MISCREG_TLBI_RVAAE1OS)
5674 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvaae1os>)
5675 .writes(1).exceptUserMode();
5676 InitReg(MISCREG_TLBI_RVALE1OS)
5677 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvale1os>)
5678 .writes(1).exceptUserMode();
5679 InitReg(MISCREG_TLBI_RVAALE1OS)
5680 .faultWrite(EL1, faultTlbiOsEL1<&HFGITR::tlbirvaale1os>)
5681 .writes(1).exceptUserMode();
5682 InitReg(MISCREG_TLBI_RIPAS2E1OS)
5683 .hypWrite().monWrite();
5684 InitReg(MISCREG_TLBI_RIPAS2LE1OS)
5685 .hypWrite().monWrite();
5686 InitReg(MISCREG_TLBI_RVAE2OS)
5687 .hypWrite().monWrite();
5688 InitReg(MISCREG_TLBI_RVALE2OS)
5689 .hypWrite().monWrite();
5690 InitReg(MISCREG_TLBI_RVAE3OS)
5691 .monWrite();
5692 InitReg(MISCREG_TLBI_RVALE3OS)
5693 .monWrite();
5694 InitReg(MISCREG_TLBI_VMALLE1OSNXS)
5695 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivmalle1os>)
5696 .writes(1).exceptUserMode();
5697 InitReg(MISCREG_TLBI_VAE1OSNXS)
5698 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivae1os>)
5699 .writes(1).exceptUserMode();
5700 InitReg(MISCREG_TLBI_ASIDE1OSNXS)
5701 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbiaside1os>)
5702 .writes(1).exceptUserMode();
5703 InitReg(MISCREG_TLBI_VAAE1OSNXS)
5704 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaae1os>)
5705 .writes(1).exceptUserMode();
5706 InitReg(MISCREG_TLBI_VALE1OSNXS)
5707 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivale1os>)
5708 .writes(1).exceptUserMode();
5709 InitReg(MISCREG_TLBI_VAALE1OSNXS)
5710 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaale1os>)
5711 .writes(1).exceptUserMode();
5712 InitReg(MISCREG_TLBI_VMALLE1ISNXS)
5713 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivmalle1is>)
5714 .writes(1).exceptUserMode();
5715 InitReg(MISCREG_TLBI_VAE1ISNXS)
5716 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivae1is>)
5717 .writes(1).exceptUserMode();
5718 InitReg(MISCREG_TLBI_ASIDE1ISNXS)
5719 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbiaside1is>)
5720 .writes(1).exceptUserMode();
5721 InitReg(MISCREG_TLBI_VAAE1ISNXS)
5722 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaae1is>)
5723 .writes(1).exceptUserMode();
5724 InitReg(MISCREG_TLBI_VALE1ISNXS)
5725 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivale1is>)
5726 .writes(1).exceptUserMode();
5727 InitReg(MISCREG_TLBI_VAALE1ISNXS)
5728 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaale1is>)
5729 .writes(1).exceptUserMode();
5730 InitReg(MISCREG_TLBI_VMALLE1NXS)
5731 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5732 .writes(1).exceptUserMode();
5733 InitReg(MISCREG_TLBI_VAE1NXS)
5734 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5735 .writes(1).exceptUserMode();
5736 InitReg(MISCREG_TLBI_ASIDE1NXS)
5737 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5738 .writes(1).exceptUserMode();
5739 InitReg(MISCREG_TLBI_VAAE1NXS)
5740 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5741 .writes(1).exceptUserMode();
5742 InitReg(MISCREG_TLBI_VALE1NXS)
5743 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5744 .writes(1).exceptUserMode();
5745 InitReg(MISCREG_TLBI_VAALE1NXS)
5746 .faultWrite(EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5747 .writes(1).exceptUserMode();
5748 InitReg(MISCREG_TLBI_IPAS2E1OSNXS)
5749 .hypWrite().monWrite();
5750 InitReg(MISCREG_TLBI_IPAS2LE1OSNXS)
5751 .hypWrite().monWrite();
5752 InitReg(MISCREG_TLBI_ALLE2OSNXS)
5753 .hypWrite().monWrite();
5754 InitReg(MISCREG_TLBI_VAE2OSNXS)
5755 .hypWrite().monWrite();
5756 InitReg(MISCREG_TLBI_ALLE1OSNXS)
5757 .hypWrite().monWrite();
5758 InitReg(MISCREG_TLBI_VALE2OSNXS)
5759 .hypWrite().monWrite();
5760 InitReg(MISCREG_TLBI_VMALLS12E1OSNXS)
5761 .hypWrite().monWrite();
5762 InitReg(MISCREG_TLBI_IPAS2E1ISNXS)
5763 .hypWrite().monWrite();
5764 InitReg(MISCREG_TLBI_IPAS2LE1ISNXS)
5765 .hypWrite().monWrite();
5766 InitReg(MISCREG_TLBI_ALLE2ISNXS)
5767 .hypWrite().monWrite();
5768 InitReg(MISCREG_TLBI_VAE2ISNXS)
5769 .hypWrite().monWrite();
5770 InitReg(MISCREG_TLBI_ALLE1ISNXS)
5771 .hypWrite().monWrite();
5772 InitReg(MISCREG_TLBI_VALE2ISNXS)
5773 .hypWrite().monWrite();
5774 InitReg(MISCREG_TLBI_VMALLS12E1ISNXS)
5775 .hypWrite().monWrite();
5776 InitReg(MISCREG_TLBI_IPAS2E1NXS)
5777 .hypWrite().monWrite();
5778 InitReg(MISCREG_TLBI_IPAS2LE1NXS)
5779 .hypWrite().monWrite();
5780 InitReg(MISCREG_TLBI_ALLE2NXS)
5781 .hypWrite().monWrite();
5782 InitReg(MISCREG_TLBI_VAE2NXS)
5783 .hypWrite().monWrite();
5784 InitReg(MISCREG_TLBI_ALLE1NXS)
5785 .hypWrite().monWrite();
5786 InitReg(MISCREG_TLBI_VALE2NXS)
5787 .hypWrite().monWrite();
5788 InitReg(MISCREG_TLBI_VMALLS12E1NXS)
5789 .hypWrite().monWrite();
5790 InitReg(MISCREG_TLBI_ALLE3OSNXS)
5791 .monWrite();
5792 InitReg(MISCREG_TLBI_VAE3OSNXS)
5793 .monWrite();
5794 InitReg(MISCREG_TLBI_VALE3OSNXS)
5795 .monWrite();
5796 InitReg(MISCREG_TLBI_ALLE3ISNXS)
5797 .monWrite();
5798 InitReg(MISCREG_TLBI_VAE3ISNXS)
5799 .monWrite();
5800 InitReg(MISCREG_TLBI_VALE3ISNXS)
5801 .monWrite();
5802 InitReg(MISCREG_TLBI_ALLE3NXS)
5803 .monWrite();
5804 InitReg(MISCREG_TLBI_VAE3NXS)
5805 .monWrite();
5806 InitReg(MISCREG_TLBI_VALE3NXS)
5807 .monWrite();
5808
5809 InitReg(MISCREG_TLBI_RVAE1NXS)
5810 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5811 .writes(1).exceptUserMode();
5812 InitReg(MISCREG_TLBI_RVAAE1NXS)
5813 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5814 .writes(1).exceptUserMode();
5815 InitReg(MISCREG_TLBI_RVALE1NXS)
5816 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5817 .writes(1).exceptUserMode();
5818 InitReg(MISCREG_TLBI_RVAALE1NXS)
5819 .faultWrite(EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5820 .writes(1).exceptUserMode();
5821 InitReg(MISCREG_TLBI_RIPAS2E1NXS)
5822 .hypWrite().monWrite();
5823 InitReg(MISCREG_TLBI_RIPAS2LE1NXS)
5824 .hypWrite().monWrite();
5825 InitReg(MISCREG_TLBI_RVAE2NXS)
5826 .hypWrite().monWrite();
5827 InitReg(MISCREG_TLBI_RVALE2NXS)
5828 .hypWrite().monWrite();
5829 InitReg(MISCREG_TLBI_RVAE3NXS)
5830 .monWrite();
5831 InitReg(MISCREG_TLBI_RVALE3NXS)
5832 .monWrite();
5833 InitReg(MISCREG_TLBI_RVAE1ISNXS)
5834 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvae1is>)
5835 .writes(1).exceptUserMode();
5836 InitReg(MISCREG_TLBI_RVAAE1ISNXS)
5837 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaae1is>)
5838 .writes(1).exceptUserMode();
5839 InitReg(MISCREG_TLBI_RVALE1ISNXS)
5840 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvale1is>)
5841 .writes(1).exceptUserMode();
5842 InitReg(MISCREG_TLBI_RVAALE1ISNXS)
5843 .faultWrite(EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaale1is>)
5844 .writes(1).exceptUserMode();
5845 InitReg(MISCREG_TLBI_RIPAS2E1ISNXS)
5846 .hypWrite().monWrite();
5847 InitReg(MISCREG_TLBI_RIPAS2LE1ISNXS)
5848 .hypWrite().monWrite();
5849 InitReg(MISCREG_TLBI_RVAE2ISNXS)
5850 .hypWrite().monWrite();
5851 InitReg(MISCREG_TLBI_RVALE2ISNXS)
5852 .hypWrite().monWrite();
5853 InitReg(MISCREG_TLBI_RVAE3ISNXS)
5854 .monWrite();
5855 InitReg(MISCREG_TLBI_RVALE3ISNXS)
5856 .monWrite();
5857 InitReg(MISCREG_TLBI_RVAE1OSNXS)
5858 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvae1os>)
5859 .writes(1).exceptUserMode();
5860 InitReg(MISCREG_TLBI_RVAAE1OSNXS)
5861 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaae1os>)
5862 .writes(1).exceptUserMode();
5863 InitReg(MISCREG_TLBI_RVALE1OSNXS)
5864 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvale1os>)
5865 .writes(1).exceptUserMode();
5866 InitReg(MISCREG_TLBI_RVAALE1OSNXS)
5867 .faultWrite(EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaale1os>)
5868 .writes(1).exceptUserMode();
5869 InitReg(MISCREG_TLBI_RIPAS2E1OSNXS)
5870 .hypWrite().monWrite();
5871 InitReg(MISCREG_TLBI_RIPAS2LE1OSNXS)
5872 .hypWrite().monWrite();
5873 InitReg(MISCREG_TLBI_RVAE2OSNXS)
5874 .hypWrite().monWrite();
5875 InitReg(MISCREG_TLBI_RVALE2OSNXS)
5876 .hypWrite().monWrite();
5877 InitReg(MISCREG_TLBI_RVAE3OSNXS)
5878 .monWrite();
5879 InitReg(MISCREG_TLBI_RVALE3OSNXS)
5880 .monWrite();
5881 InitReg(MISCREG_PMINTENSET_EL1)
5882 .allPrivileges().exceptUserMode()
5883 .mapsTo(MISCREG_PMINTENSET);
5884 InitReg(MISCREG_PMINTENCLR_EL1)
5885 .allPrivileges().exceptUserMode()
5886 .mapsTo(MISCREG_PMINTENCLR);
5887 InitReg(MISCREG_PMCR_EL0)
5888 .allPrivileges()
5889 .mapsTo(MISCREG_PMCR);
5890 InitReg(MISCREG_PMCNTENSET_EL0)
5891 .allPrivileges()
5892 .mapsTo(MISCREG_PMCNTENSET);
5893 InitReg(MISCREG_PMCNTENCLR_EL0)
5894 .allPrivileges()
5895 .mapsTo(MISCREG_PMCNTENCLR);
5896 InitReg(MISCREG_PMOVSCLR_EL0)
5897 .allPrivileges();
5898// .mapsTo(MISCREG_PMOVSCLR);
5899 InitReg(MISCREG_PMSWINC_EL0)
5900 .writes(1).user()
5901 .mapsTo(MISCREG_PMSWINC);
5902 InitReg(MISCREG_PMSELR_EL0)
5903 .allPrivileges()
5904 .mapsTo(MISCREG_PMSELR);
5905 InitReg(MISCREG_PMCEID0_EL0)
5906 .reads(1).user()
5907 .mapsTo(MISCREG_PMCEID0);
5908 InitReg(MISCREG_PMCEID1_EL0)
5909 .reads(1).user()
5910 .mapsTo(MISCREG_PMCEID1);
5911 InitReg(MISCREG_PMCCNTR_EL0)
5912 .allPrivileges()
5913 .mapsTo(MISCREG_PMCCNTR);
5914 InitReg(MISCREG_PMXEVTYPER_EL0)
5915 .allPrivileges()
5916 .mapsTo(MISCREG_PMXEVTYPER);
5917 InitReg(MISCREG_PMCCFILTR_EL0)
5918 .allPrivileges();
5919 InitReg(MISCREG_PMXEVCNTR_EL0)
5920 .allPrivileges()
5921 .mapsTo(MISCREG_PMXEVCNTR);
5922 InitReg(MISCREG_PMUSERENR_EL0)
5923 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5924 .mapsTo(MISCREG_PMUSERENR);
5925 InitReg(MISCREG_PMOVSSET_EL0)
5926 .allPrivileges()
5927 .mapsTo(MISCREG_PMOVSSET);
5928 InitReg(MISCREG_MAIR_EL1)
5929 .allPrivileges().exceptUserMode()
5930 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::mairEL1>)
5931 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::mairEL1>)
5933 InitReg(MISCREG_MAIR_EL12)
5934 .fault(EL2, defaultFaultE2H_EL2)
5935 .fault(EL3, defaultFaultE2H_EL3)
5937 InitReg(MISCREG_AMAIR_EL1)
5938 .allPrivileges().exceptUserMode()
5939 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::amairEL1>)
5940 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::amairEL1>)
5942 InitReg(MISCREG_AMAIR_EL12)
5943 .fault(EL2, defaultFaultE2H_EL2)
5944 .fault(EL3, defaultFaultE2H_EL3)
5946 InitReg(MISCREG_MAIR_EL2)
5947 .hyp().mon()
5949 InitReg(MISCREG_AMAIR_EL2)
5950 .hyp().mon()
5952 InitReg(MISCREG_MAIR_EL3)
5953 .mon();
5954 InitReg(MISCREG_AMAIR_EL3)
5955 .mon();
5956 InitReg(MISCREG_L2CTLR_EL1)
5957 .allPrivileges().exceptUserMode();
5958 InitReg(MISCREG_L2ECTLR_EL1)
5959 .allPrivileges().exceptUserMode();
5960 InitReg(MISCREG_VBAR_EL1)
5961 .allPrivileges().exceptUserMode()
5962 .faultRead(EL1, faultFgtEL1<true, &HFGTR::vbarEL1>)
5963 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::vbarEL1>)
5964 .mapsTo(MISCREG_VBAR_NS);
5965 InitReg(MISCREG_VBAR_EL12)
5966 .fault(EL2, defaultFaultE2H_EL2)
5967 .fault(EL3, defaultFaultE2H_EL3)
5968 .mapsTo(MISCREG_VBAR_NS);
5969 InitReg(MISCREG_RVBAR_EL1)
5970 .reset(FullSystem && system->highestEL() == EL1 ?
5971 system->resetAddr() : 0)
5972 .privRead(FullSystem && system->highestEL() == EL1);
5973 InitReg(MISCREG_ISR_EL1)
5974 .allPrivileges().exceptUserMode().writes(0);
5975 InitReg(MISCREG_VBAR_EL2)
5976 .hyp().mon()
5977 .res0(0x7ff)
5978 .mapsTo(MISCREG_HVBAR);
5979 InitReg(MISCREG_RVBAR_EL2)
5980 .reset(FullSystem && system->highestEL() == EL2 ?
5981 system->resetAddr() : 0)
5982 .hypRead(FullSystem && system->highestEL() == EL2);
5983 InitReg(MISCREG_VBAR_EL3)
5984 .mon();
5985 InitReg(MISCREG_RVBAR_EL3)
5986 .reset(FullSystem && system->highestEL() == EL3 ?
5987 system->resetAddr() : 0)
5988 .mon().writes(0);
5989 InitReg(MISCREG_RMR_EL3)
5990 .mon();
5991 InitReg(MISCREG_CONTEXTIDR_EL1)
5992 .allPrivileges().exceptUserMode()
5993 .faultRead(EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::contextidrEL1>)
5994 .faultWrite(EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::contextidrEL1>)
5995 .mapsTo(MISCREG_CONTEXTIDR_NS);
5997 .fault(EL2, defaultFaultE2H_EL2)
5998 .fault(EL3, defaultFaultE2H_EL3)
5999 .mapsTo(MISCREG_CONTEXTIDR_NS);
6000 InitReg(MISCREG_TPIDR_EL1)
6001 .allPrivileges().exceptUserMode()
6002 .faultRead(EL1, faultFgtEL1<true, &HFGTR::tpidrEL1>)
6003 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::tpidrEL1>)
6004 .mapsTo(MISCREG_TPIDRPRW_NS);
6005 InitReg(MISCREG_TPIDR_EL0)
6006 .allPrivileges()
6007 .faultRead(EL0, faultFgtEL0<true, &HFGTR::tpidrEL0>)
6008 .faultWrite(EL0, faultFgtEL0<false, &HFGTR::tpidrEL0>)
6009 .faultRead(EL1, faultFgtEL1<true, &HFGTR::tpidrEL0>)
6010 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::tpidrEL0>)
6011 .mapsTo(MISCREG_TPIDRURW_NS);
6012 InitReg(MISCREG_TPIDRRO_EL0)
6013 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
6014 .faultRead(EL0, faultFgtEL0<true, &HFGTR::tpidrroEL0>)
6015 .faultRead(EL1, faultFgtEL1<true, &HFGTR::tpidrroEL0>)
6016 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::tpidrroEL0>)
6017 .mapsTo(MISCREG_TPIDRURO_NS);
6018 InitReg(MISCREG_TPIDR_EL2)
6019 .hyp().mon()
6020 .mapsTo(MISCREG_HTPIDR);
6021 InitReg(MISCREG_TPIDR_EL3)
6022 .mon();
6023 // BEGIN Generic Timer (AArch64)
6024 InitReg(MISCREG_CNTFRQ_EL0)
6025 .reads(1)
6026 .faultRead(EL0, faultGenericTimerEL0)
6027 .highest(system)
6028 .privSecureWrite(aarch32EL3)
6029 .mapsTo(MISCREG_CNTFRQ);
6030 InitReg(MISCREG_CNTPCT_EL0)
6031 .unverifiable()
6032 .faultRead(EL0, faultCntpctEL0)
6033 .faultRead(EL1, faultCntpctEL1)
6034 .reads(1)
6035 .mapsTo(MISCREG_CNTPCT);
6036 InitReg(MISCREG_CNTVCT_EL0)
6037 .unverifiable()
6038 .faultRead(EL0, faultCntvctEL0)
6039 .faultRead(EL1, faultCntvctEL1)
6040 .reads(1)
6041 .mapsTo(MISCREG_CNTVCT);
6042 InitReg(MISCREG_CNTP_CTL_EL0)
6043 .allPrivileges()
6044 .fault(EL0, faultCntpCtlEL0)
6045 .fault(EL1, faultCntpCtlEL1)
6046 .res0(0xfffffffffffffff8)
6047 .mapsTo(MISCREG_CNTP_CTL_NS);
6048 InitReg(MISCREG_CNTP_CVAL_EL0)
6049 .allPrivileges()
6050 .fault(EL0, faultCntpCtlEL0)
6051 .fault(EL1, faultCntpCtlEL1)
6052 .mapsTo(MISCREG_CNTP_CVAL_NS);
6053 InitReg(MISCREG_CNTP_TVAL_EL0)
6054 .allPrivileges()
6055 .fault(EL0, faultCntpCtlEL0)
6056 .fault(EL1, faultCntpCtlEL1)
6057 .res0(0xffffffff00000000)
6058 .mapsTo(MISCREG_CNTP_TVAL_NS);
6059 InitReg(MISCREG_CNTV_CTL_EL0)
6060 .allPrivileges()
6061 .fault(EL0, faultCntvCtlEL0)
6062 .fault(EL1, faultCntvCtlEL1)
6063 .res0(0xfffffffffffffff8)
6064 .mapsTo(MISCREG_CNTV_CTL);
6065 InitReg(MISCREG_CNTV_CVAL_EL0)
6066 .allPrivileges()
6067 .fault(EL0, faultCntvCtlEL0)
6068 .fault(EL1, faultCntvCtlEL1)
6069 .mapsTo(MISCREG_CNTV_CVAL);
6070 InitReg(MISCREG_CNTV_TVAL_EL0)
6071 .allPrivileges()
6072 .fault(EL0, faultCntvCtlEL0)
6073 .fault(EL1, faultCntvCtlEL1)
6074 .res0(0xffffffff00000000)
6075 .mapsTo(MISCREG_CNTV_TVAL);
6076 InitReg(MISCREG_CNTP_CTL_EL02)
6077 .fault(EL2, defaultFaultE2H_EL2)
6078 .fault(EL3, defaultFaultE2H_EL3)
6079 .res0(0xfffffffffffffff8)
6080 .mapsTo(MISCREG_CNTP_CTL_NS);
6081 InitReg(MISCREG_CNTP_CVAL_EL02)
6082 .fault(EL2, defaultFaultE2H_EL2)
6083 .fault(EL3, defaultFaultE2H_EL3)
6084 .mapsTo(MISCREG_CNTP_CVAL_NS);
6085 InitReg(MISCREG_CNTP_TVAL_EL02)
6086 .fault(EL2, defaultFaultE2H_EL2)
6087 .fault(EL3, defaultFaultE2H_EL3)
6088 .res0(0xffffffff00000000)
6089 .mapsTo(MISCREG_CNTP_TVAL_NS);
6090 InitReg(MISCREG_CNTV_CTL_EL02)
6091 .fault(EL2, defaultFaultE2H_EL2)
6092 .fault(EL3, defaultFaultE2H_EL3)
6093 .res0(0xfffffffffffffff8)
6094 .mapsTo(MISCREG_CNTV_CTL);
6095 InitReg(MISCREG_CNTV_CVAL_EL02)
6096 .fault(EL2, defaultFaultE2H_EL2)
6097 .fault(EL3, defaultFaultE2H_EL3)
6098 .mapsTo(MISCREG_CNTV_CVAL);
6099 InitReg(MISCREG_CNTV_TVAL_EL02)
6100 .fault(EL2, defaultFaultE2H_EL2)
6101 .fault(EL3, defaultFaultE2H_EL3)
6102 .res0(0xffffffff00000000)
6103 .mapsTo(MISCREG_CNTV_TVAL);
6104 InitReg(MISCREG_CNTKCTL_EL1)
6105 .allPrivileges()
6106 .exceptUserMode()
6107 .res0(0xfffffffffffdfc00)
6108 .mapsTo(MISCREG_CNTKCTL);
6109 InitReg(MISCREG_CNTKCTL_EL12)
6110 .fault(EL2, defaultFaultE2H_EL2)
6111 .fault(EL3, defaultFaultE2H_EL3)
6112 .res0(0xfffffffffffdfc00)
6113 .mapsTo(MISCREG_CNTKCTL);
6114 InitReg(MISCREG_CNTPS_CTL_EL1)
6115 .mon()
6116 .privSecure()
6117 .fault(EL1, faultCntpsCtlEL1)
6118 .res0(0xfffffffffffffff8);
6119 InitReg(MISCREG_CNTPS_CVAL_EL1)
6120 .mon()
6121 .privSecure()
6122 .fault(EL1, faultCntpsCtlEL1);
6123 InitReg(MISCREG_CNTPS_TVAL_EL1)
6124 .mon()
6125 .privSecure()
6126 .fault(EL1, faultCntpsCtlEL1)
6127 .res0(0xffffffff00000000);
6128 InitReg(MISCREG_CNTHCTL_EL2)
6129 .mon()
6130 .hyp()
6131 .res0(0xfffffffffffc0000)
6132 .mapsTo(MISCREG_CNTHCTL);
6133 InitReg(MISCREG_CNTHP_CTL_EL2)
6134 .mon()
6135 .hyp()
6136 .res0(0xfffffffffffffff8)
6137 .mapsTo(MISCREG_CNTHP_CTL);
6138 InitReg(MISCREG_CNTHP_CVAL_EL2)
6139 .mon()
6140 .hyp()
6141 .mapsTo(MISCREG_CNTHP_CVAL);
6142 InitReg(MISCREG_CNTHP_TVAL_EL2)
6143 .mon()
6144 .hyp()
6145 .res0(0xffffffff00000000)
6146 .mapsTo(MISCREG_CNTHP_TVAL);
6147 InitReg(MISCREG_CNTHPS_CTL_EL2)
6148 .mon(sel2_implemented)
6149 .hypSecure(sel2_implemented)
6150 .res0(0xfffffffffffffff8);
6152 .mon(sel2_implemented)
6153 .hypSecure(sel2_implemented);
6155 .mon(sel2_implemented)
6156 .hypSecure(sel2_implemented)
6157 .res0(0xffffffff00000000);
6158 InitReg(MISCREG_CNTHV_CTL_EL2)
6159 .mon(vhe_implemented)
6160 .hyp()
6161 .res0(0xfffffffffffffff8);
6162 InitReg(MISCREG_CNTHV_CVAL_EL2)
6163 .mon(vhe_implemented)
6164 .hyp(vhe_implemented);
6165 InitReg(MISCREG_CNTHV_TVAL_EL2)
6166 .mon(vhe_implemented)
6167 .hyp(vhe_implemented)
6168 .res0(0xffffffff00000000);
6169 InitReg(MISCREG_CNTHVS_CTL_EL2)
6170 .mon(vhe_implemented && sel2_implemented)
6171 .hypSecure(vhe_implemented && sel2_implemented)
6172 .res0(0xfffffffffffffff8);
6174 .mon(vhe_implemented && sel2_implemented)
6175 .hypSecure(vhe_implemented && sel2_implemented);
6177 .mon(vhe_implemented && sel2_implemented)
6178 .hypSecure(vhe_implemented && sel2_implemented)
6179 .res0(0xffffffff00000000);
6180 // ENDIF Armv8.1-VHE
6181 InitReg(MISCREG_CNTVOFF_EL2)
6182 .mon()
6183 .hyp()
6184 .mapsTo(MISCREG_CNTVOFF);
6185 // END Generic Timer (AArch64)
6186 InitReg(MISCREG_PMEVCNTR0_EL0)
6187 .allPrivileges()
6188 .mapsTo(MISCREG_PMEVCNTR0);
6189 InitReg(MISCREG_PMEVCNTR1_EL0)
6190 .allPrivileges()
6191 .mapsTo(MISCREG_PMEVCNTR1);
6192 InitReg(MISCREG_PMEVCNTR2_EL0)
6193 .allPrivileges()
6194 .mapsTo(MISCREG_PMEVCNTR2);
6195 InitReg(MISCREG_PMEVCNTR3_EL0)
6196 .allPrivileges()
6197 .mapsTo(MISCREG_PMEVCNTR3);
6198 InitReg(MISCREG_PMEVCNTR4_EL0)
6199 .allPrivileges()
6200 .mapsTo(MISCREG_PMEVCNTR4);
6201 InitReg(MISCREG_PMEVCNTR5_EL0)
6202 .allPrivileges()
6203 .mapsTo(MISCREG_PMEVCNTR5);
6204 InitReg(MISCREG_PMEVTYPER0_EL0)
6205 .allPrivileges()
6206 .mapsTo(MISCREG_PMEVTYPER0);
6207 InitReg(MISCREG_PMEVTYPER1_EL0)
6208 .allPrivileges()
6209 .mapsTo(MISCREG_PMEVTYPER1);
6210 InitReg(MISCREG_PMEVTYPER2_EL0)
6211 .allPrivileges()
6212 .mapsTo(MISCREG_PMEVTYPER2);
6213 InitReg(MISCREG_PMEVTYPER3_EL0)
6214 .allPrivileges()
6215 .mapsTo(MISCREG_PMEVTYPER3);
6216 InitReg(MISCREG_PMEVTYPER4_EL0)
6217 .allPrivileges()
6218 .mapsTo(MISCREG_PMEVTYPER4);
6219 InitReg(MISCREG_PMEVTYPER5_EL0)
6220 .allPrivileges()
6221 .mapsTo(MISCREG_PMEVTYPER5);
6222 InitReg(MISCREG_IL1DATA0_EL1)
6223 .allPrivileges().exceptUserMode();
6224 InitReg(MISCREG_IL1DATA1_EL1)
6225 .allPrivileges().exceptUserMode();
6226 InitReg(MISCREG_IL1DATA2_EL1)
6227 .allPrivileges().exceptUserMode();
6228 InitReg(MISCREG_IL1DATA3_EL1)
6229 .allPrivileges().exceptUserMode();
6230 InitReg(MISCREG_DL1DATA0_EL1)
6231 .allPrivileges().exceptUserMode();
6232 InitReg(MISCREG_DL1DATA1_EL1)
6233 .allPrivileges().exceptUserMode();
6234 InitReg(MISCREG_DL1DATA2_EL1)
6235 .allPrivileges().exceptUserMode();
6236 InitReg(MISCREG_DL1DATA3_EL1)
6237 .allPrivileges().exceptUserMode();
6238 InitReg(MISCREG_DL1DATA4_EL1)
6239 .allPrivileges().exceptUserMode();
6240 InitReg(MISCREG_L2ACTLR_EL1)
6241 .allPrivileges().exceptUserMode();
6242 InitReg(MISCREG_CPUACTLR_EL1)
6243 .allPrivileges().exceptUserMode();
6244 InitReg(MISCREG_CPUECTLR_EL1)
6245 .allPrivileges().exceptUserMode();
6246 InitReg(MISCREG_CPUMERRSR_EL1)
6247 .allPrivileges().exceptUserMode();
6248 InitReg(MISCREG_L2MERRSR_EL1)
6249 .warnNotFail()
6250 .fault(faultUnimplemented);
6251 InitReg(MISCREG_CBAR_EL1)
6252 .allPrivileges().exceptUserMode().writes(0);
6253 InitReg(MISCREG_CONTEXTIDR_EL2)
6254 .mon().hyp();
6255
6256 // GICv3 AArch64
6257 InitReg(MISCREG_ICC_PMR_EL1)
6258 .res0(0xffffff00) // [31:8]
6259 .allPrivileges().exceptUserMode()
6260 .mapsTo(MISCREG_ICC_PMR);
6261 InitReg(MISCREG_ICC_IAR0_EL1)
6262 .allPrivileges().exceptUserMode().writes(0)
6263 .mapsTo(MISCREG_ICC_IAR0);
6264 InitReg(MISCREG_ICC_EOIR0_EL1)
6265 .allPrivileges().exceptUserMode().reads(0)
6266 .mapsTo(MISCREG_ICC_EOIR0);
6267 InitReg(MISCREG_ICC_HPPIR0_EL1)
6268 .allPrivileges().exceptUserMode().writes(0)
6269 .mapsTo(MISCREG_ICC_HPPIR0);
6270 InitReg(MISCREG_ICC_BPR0_EL1)
6271 .res0(0xfffffff8) // [31:3]
6272 .allPrivileges().exceptUserMode()
6273 .mapsTo(MISCREG_ICC_BPR0);
6274 InitReg(MISCREG_ICC_AP0R0_EL1)
6275 .allPrivileges().exceptUserMode()
6276 .mapsTo(MISCREG_ICC_AP0R0);
6277 InitReg(MISCREG_ICC_AP0R1_EL1)
6278 .allPrivileges().exceptUserMode()
6279 .mapsTo(MISCREG_ICC_AP0R1);
6280 InitReg(MISCREG_ICC_AP0R2_EL1)
6281 .allPrivileges().exceptUserMode()
6282 .mapsTo(MISCREG_ICC_AP0R2);
6283 InitReg(MISCREG_ICC_AP0R3_EL1)
6284 .allPrivileges().exceptUserMode()
6285 .mapsTo(MISCREG_ICC_AP0R3);
6286 InitReg(MISCREG_ICC_AP1R0_EL1)
6287 .banked64()
6288 .mapsTo(MISCREG_ICC_AP1R0);
6290 .bankedChild()
6291 .allPrivileges().exceptUserMode()
6292 .mapsTo(MISCREG_ICC_AP1R0_NS);
6294 .bankedChild()
6295 .allPrivileges().exceptUserMode()
6296 .mapsTo(MISCREG_ICC_AP1R0_S);
6297 InitReg(MISCREG_ICC_AP1R1_EL1)
6298 .banked64()
6299 .mapsTo(MISCREG_ICC_AP1R1);
6301 .bankedChild()
6302 .allPrivileges().exceptUserMode()
6303 .mapsTo(MISCREG_ICC_AP1R1_NS);
6305 .bankedChild()
6306 .allPrivileges().exceptUserMode()
6307 .mapsTo(MISCREG_ICC_AP1R1_S);
6308 InitReg(MISCREG_ICC_AP1R2_EL1)
6309 .banked64()
6310 .mapsTo(MISCREG_ICC_AP1R2);
6312 .bankedChild()
6313 .allPrivileges().exceptUserMode()
6314 .mapsTo(MISCREG_ICC_AP1R2_NS);
6316 .bankedChild()
6317 .allPrivileges().exceptUserMode()
6318 .mapsTo(MISCREG_ICC_AP1R2_S);
6319 InitReg(MISCREG_ICC_AP1R3_EL1)
6320 .banked64()
6321 .mapsTo(MISCREG_ICC_AP1R3);
6323 .bankedChild()
6324 .allPrivileges().exceptUserMode()
6325 .mapsTo(MISCREG_ICC_AP1R3_NS);
6327 .bankedChild()
6328 .allPrivileges().exceptUserMode()
6329 .mapsTo(MISCREG_ICC_AP1R3_S);
6330 InitReg(MISCREG_ICC_DIR_EL1)
6331 .res0(0xFF000000) // [31:24]
6332 .allPrivileges().exceptUserMode().reads(0)
6333 .mapsTo(MISCREG_ICC_DIR);
6334 InitReg(MISCREG_ICC_RPR_EL1)
6335 .allPrivileges().exceptUserMode().writes(0)
6336 .mapsTo(MISCREG_ICC_RPR);
6337 InitReg(MISCREG_ICC_SGI1R_EL1)
6338 .allPrivileges().exceptUserMode().reads(0)
6339 .faultWrite(EL1, faultIccSgiEL1)
6340 .faultWrite(EL2, faultIccSgiEL2)
6341 .mapsTo(MISCREG_ICC_SGI1R);
6342 InitReg(MISCREG_ICC_ASGI1R_EL1)
6343 .allPrivileges().exceptUserMode().reads(0)
6344 .faultWrite(EL1, faultIccSgiEL1)
6345 .faultWrite(EL2, faultIccSgiEL2)
6346 .mapsTo(MISCREG_ICC_ASGI1R);
6347 InitReg(MISCREG_ICC_SGI0R_EL1)
6348 .allPrivileges().exceptUserMode().reads(0)
6349 .faultWrite(EL1, faultIccSgiEL1)
6350 .faultWrite(EL2, faultIccSgiEL2)
6351 .mapsTo(MISCREG_ICC_SGI0R);
6352 InitReg(MISCREG_ICC_IAR1_EL1)
6353 .allPrivileges().exceptUserMode().writes(0)
6354 .mapsTo(MISCREG_ICC_IAR1);
6355 InitReg(MISCREG_ICC_EOIR1_EL1)
6356 .res0(0xFF000000) // [31:24]
6357 .allPrivileges().exceptUserMode().reads(0)
6358 .mapsTo(MISCREG_ICC_EOIR1);
6359 InitReg(MISCREG_ICC_HPPIR1_EL1)
6360 .allPrivileges().exceptUserMode().writes(0)
6361 .mapsTo(MISCREG_ICC_HPPIR1);
6362 InitReg(MISCREG_ICC_BPR1_EL1)
6363 .banked64()
6364 .mapsTo(MISCREG_ICC_BPR1);
6366 .bankedChild()
6367 .res0(0xfffffff8) // [31:3]
6368 .allPrivileges().exceptUserMode()
6369 .mapsTo(MISCREG_ICC_BPR1_NS);
6370 InitReg(MISCREG_ICC_BPR1_EL1_S)
6371 .bankedChild()
6372 .res0(0xfffffff8) // [31:3]
6373 .secure().exceptUserMode()
6374 .mapsTo(MISCREG_ICC_BPR1_S);
6375 InitReg(MISCREG_ICC_CTLR_EL1)
6376 .banked64()
6377 .mapsTo(MISCREG_ICC_CTLR);
6379 .bankedChild()
6380 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
6381 .allPrivileges().exceptUserMode()
6382 .mapsTo(MISCREG_ICC_CTLR_NS);
6383 InitReg(MISCREG_ICC_CTLR_EL1_S)
6384 .bankedChild()
6385 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
6386 .secure().exceptUserMode()
6387 .mapsTo(MISCREG_ICC_CTLR_S);
6388 InitReg(MISCREG_ICC_SRE_EL1)
6389 .banked()
6390 .mapsTo(MISCREG_ICC_SRE);
6391 InitReg(MISCREG_ICC_SRE_EL1_NS)
6392 .bankedChild()
6393 .res0(0xFFFFFFF8) // [31:3]
6394 .allPrivileges().exceptUserMode()
6395 .mapsTo(MISCREG_ICC_SRE_NS);
6396 InitReg(MISCREG_ICC_SRE_EL1_S)
6397 .bankedChild()
6398 .res0(0xFFFFFFF8) // [31:3]
6399 .secure().exceptUserMode()
6400 .mapsTo(MISCREG_ICC_SRE_S);
6402 .res0(0xFFFFFFFE) // [31:1]
6403 .allPrivileges().exceptUserMode()
6404 .faultRead(EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6405 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6406 .mapsTo(MISCREG_ICC_IGRPEN0);
6408 .banked64()
6409 .faultRead(EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6410 .faultWrite(EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6411 .mapsTo(MISCREG_ICC_IGRPEN1);
6413 .bankedChild()
6414 .res0(0xFFFFFFFE) // [31:1]
6415 .allPrivileges().exceptUserMode()
6416 .mapsTo(MISCREG_ICC_IGRPEN1_NS);
6418 .bankedChild()
6419 .res0(0xFFFFFFFE) // [31:1]
6420 .secure().exceptUserMode()
6421 .mapsTo(MISCREG_ICC_IGRPEN1_S);
6422 InitReg(MISCREG_ICC_SRE_EL2)
6423 .hyp().mon()
6424 .mapsTo(MISCREG_ICC_HSRE);
6425 InitReg(MISCREG_ICC_CTLR_EL3)
6426 .mon()
6427 .mapsTo(MISCREG_ICC_MCTLR);
6428 InitReg(MISCREG_ICC_SRE_EL3)
6429 .mon()
6430 .mapsTo(MISCREG_ICC_MSRE);
6432 .mon()
6433 .mapsTo(MISCREG_ICC_MGRPEN1);
6434
6435 InitReg(MISCREG_ICH_AP0R0_EL2)
6436 .hyp().mon()
6437 .mapsTo(MISCREG_ICH_AP0R0);
6438 InitReg(MISCREG_ICH_AP0R1_EL2)
6439 .hyp().mon()
6440 .mapsTo(MISCREG_ICH_AP0R1);
6441 InitReg(MISCREG_ICH_AP0R2_EL2)
6442 .hyp().mon()
6443 .mapsTo(MISCREG_ICH_AP0R2);
6444 InitReg(MISCREG_ICH_AP0R3_EL2)
6445 .hyp().mon()
6446 .mapsTo(MISCREG_ICH_AP0R3);
6447 InitReg(MISCREG_ICH_AP1R0_EL2)
6448 .hyp().mon()
6449 .mapsTo(MISCREG_ICH_AP1R0);
6450 InitReg(MISCREG_ICH_AP1R1_EL2)
6451 .hyp().mon()
6452 .mapsTo(MISCREG_ICH_AP1R1);
6453 InitReg(MISCREG_ICH_AP1R2_EL2)
6454 .hyp().mon()
6455 .mapsTo(MISCREG_ICH_AP1R2);
6456 InitReg(MISCREG_ICH_AP1R3_EL2)
6457 .hyp().mon()
6458 .mapsTo(MISCREG_ICH_AP1R3);
6459 InitReg(MISCREG_ICH_HCR_EL2)
6460 .hyp().mon()
6461 .mapsTo(MISCREG_ICH_HCR);
6462 InitReg(MISCREG_ICH_VTR_EL2)
6463 .hyp().mon().writes(0)
6464 .mapsTo(MISCREG_ICH_VTR);
6465 InitReg(MISCREG_ICH_MISR_EL2)
6466 .hyp().mon().writes(0)
6467 .mapsTo(MISCREG_ICH_MISR);
6468 InitReg(MISCREG_ICH_EISR_EL2)
6469 .hyp().mon().writes(0)
6470 .mapsTo(MISCREG_ICH_EISR);
6471 InitReg(MISCREG_ICH_ELRSR_EL2)
6472 .hyp().mon().writes(0)
6473 .mapsTo(MISCREG_ICH_ELRSR);
6474 InitReg(MISCREG_ICH_VMCR_EL2)
6475 .hyp().mon()
6476 .mapsTo(MISCREG_ICH_VMCR);
6477 InitReg(MISCREG_ICH_LR0_EL2)
6478 .hyp().mon()
6480 InitReg(MISCREG_ICH_LR1_EL2)
6481 .hyp().mon()
6483 InitReg(MISCREG_ICH_LR2_EL2)
6484 .hyp().mon()
6486 InitReg(MISCREG_ICH_LR3_EL2)
6487 .hyp().mon()
6489 InitReg(MISCREG_ICH_LR4_EL2)
6490 .hyp().mon()
6492 InitReg(MISCREG_ICH_LR5_EL2)
6493 .hyp().mon()
6495 InitReg(MISCREG_ICH_LR6_EL2)
6496 .hyp().mon()
6498 InitReg(MISCREG_ICH_LR7_EL2)
6499 .hyp().mon()
6501 InitReg(MISCREG_ICH_LR8_EL2)
6502 .hyp().mon()
6504 InitReg(MISCREG_ICH_LR9_EL2)
6505 .hyp().mon()
6507 InitReg(MISCREG_ICH_LR10_EL2)
6508 .hyp().mon()
6510 InitReg(MISCREG_ICH_LR11_EL2)
6511 .hyp().mon()
6513 InitReg(MISCREG_ICH_LR12_EL2)
6514 .hyp().mon()
6516 InitReg(MISCREG_ICH_LR13_EL2)
6517 .hyp().mon()
6519 InitReg(MISCREG_ICH_LR14_EL2)
6520 .hyp().mon()
6522 InitReg(MISCREG_ICH_LR15_EL2)
6523 .hyp().mon()
6525
6526 // GICv3 AArch32
6527 InitReg(MISCREG_ICC_AP0R0)
6528 .allPrivileges().exceptUserMode();
6529 InitReg(MISCREG_ICC_AP0R1)
6530 .allPrivileges().exceptUserMode();
6531 InitReg(MISCREG_ICC_AP0R2)
6532 .allPrivileges().exceptUserMode();
6533 InitReg(MISCREG_ICC_AP0R3)
6534 .allPrivileges().exceptUserMode();
6535 InitReg(MISCREG_ICC_AP1R0)
6536 .allPrivileges().exceptUserMode();
6537 InitReg(MISCREG_ICC_AP1R0_NS)
6538 .allPrivileges().exceptUserMode();
6539 InitReg(MISCREG_ICC_AP1R0_S)
6540 .allPrivileges().exceptUserMode();
6541 InitReg(MISCREG_ICC_AP1R1)
6542 .allPrivileges().exceptUserMode();
6543 InitReg(MISCREG_ICC_AP1R1_NS)
6544 .allPrivileges().exceptUserMode();
6545 InitReg(MISCREG_ICC_AP1R1_S)
6546 .allPrivileges().exceptUserMode();
6547 InitReg(MISCREG_ICC_AP1R2)
6548 .allPrivileges().exceptUserMode();
6549 InitReg(MISCREG_ICC_AP1R2_NS)
6550 .allPrivileges().exceptUserMode();
6551 InitReg(MISCREG_ICC_AP1R2_S)
6552 .allPrivileges().exceptUserMode();
6553 InitReg(MISCREG_ICC_AP1R3)
6554 .allPrivileges().exceptUserMode();
6555 InitReg(MISCREG_ICC_AP1R3_NS)
6556 .allPrivileges().exceptUserMode();
6557 InitReg(MISCREG_ICC_AP1R3_S)
6558 .allPrivileges().exceptUserMode();
6559 InitReg(MISCREG_ICC_ASGI1R)
6560 .allPrivileges().exceptUserMode().reads(0);
6561 InitReg(MISCREG_ICC_BPR0)
6562 .allPrivileges().exceptUserMode();
6563 InitReg(MISCREG_ICC_BPR1)
6564 .allPrivileges().exceptUserMode();
6565 InitReg(MISCREG_ICC_BPR1_NS)
6566 .allPrivileges().exceptUserMode();
6567 InitReg(MISCREG_ICC_BPR1_S)
6568 .allPrivileges().exceptUserMode();
6569 InitReg(MISCREG_ICC_CTLR)
6570 .allPrivileges().exceptUserMode();
6571 InitReg(MISCREG_ICC_CTLR_NS)
6572 .allPrivileges().exceptUserMode();
6573 InitReg(MISCREG_ICC_CTLR_S)
6574 .allPrivileges().exceptUserMode();
6575 InitReg(MISCREG_ICC_DIR)
6576 .allPrivileges().exceptUserMode().reads(0);
6577 InitReg(MISCREG_ICC_EOIR0)
6578 .allPrivileges().exceptUserMode().reads(0);
6579 InitReg(MISCREG_ICC_EOIR1)
6580 .allPrivileges().exceptUserMode().reads(0);
6581 InitReg(MISCREG_ICC_HPPIR0)
6582 .allPrivileges().exceptUserMode().writes(0);
6583 InitReg(MISCREG_ICC_HPPIR1)
6584 .allPrivileges().exceptUserMode().writes(0);
6585 InitReg(MISCREG_ICC_HSRE)
6586 .hyp().mon();
6587 InitReg(MISCREG_ICC_IAR0)
6588 .allPrivileges().exceptUserMode().writes(0);
6589 InitReg(MISCREG_ICC_IAR1)
6590 .allPrivileges().exceptUserMode().writes(0);
6591 InitReg(MISCREG_ICC_IGRPEN0)
6592 .allPrivileges().exceptUserMode();
6593 InitReg(MISCREG_ICC_IGRPEN1)
6594 .allPrivileges().exceptUserMode();
6595 InitReg(MISCREG_ICC_IGRPEN1_NS)
6596 .allPrivileges().exceptUserMode();
6597 InitReg(MISCREG_ICC_IGRPEN1_S)
6598 .allPrivileges().exceptUserMode();
6599 InitReg(MISCREG_ICC_MCTLR)
6600 .mon();
6601 InitReg(MISCREG_ICC_MGRPEN1)
6602 .mon();
6603 InitReg(MISCREG_ICC_MSRE)
6604 .mon();
6605 InitReg(MISCREG_ICC_PMR)
6606 .allPrivileges().exceptUserMode();
6607 InitReg(MISCREG_ICC_RPR)
6608 .allPrivileges().exceptUserMode().writes(0);
6609 InitReg(MISCREG_ICC_SGI0R)
6610 .allPrivileges().exceptUserMode().reads(0);
6611 InitReg(MISCREG_ICC_SGI1R)
6612 .allPrivileges().exceptUserMode().reads(0);
6613 InitReg(MISCREG_ICC_SRE)
6614 .allPrivileges().exceptUserMode();
6615 InitReg(MISCREG_ICC_SRE_NS)
6616 .allPrivileges().exceptUserMode();
6617 InitReg(MISCREG_ICC_SRE_S)
6618 .allPrivileges().exceptUserMode();
6619
6620 InitReg(MISCREG_ICH_AP0R0)
6621 .hyp().mon();
6622 InitReg(MISCREG_ICH_AP0R1)
6623 .hyp().mon();
6624 InitReg(MISCREG_ICH_AP0R2)
6625 .hyp().mon();
6626 InitReg(MISCREG_ICH_AP0R3)
6627 .hyp().mon();
6628 InitReg(MISCREG_ICH_AP1R0)
6629 .hyp().mon();
6630 InitReg(MISCREG_ICH_AP1R1)
6631 .hyp().mon();
6632 InitReg(MISCREG_ICH_AP1R2)
6633 .hyp().mon();
6634 InitReg(MISCREG_ICH_AP1R3)
6635 .hyp().mon();
6636 InitReg(MISCREG_ICH_HCR)
6637 .hyp().mon();
6638 InitReg(MISCREG_ICH_VTR)
6639 .hyp().mon().writes(0);
6640 InitReg(MISCREG_ICH_MISR)
6641 .hyp().mon().writes(0);
6642 InitReg(MISCREG_ICH_EISR)
6643 .hyp().mon().writes(0);
6644 InitReg(MISCREG_ICH_ELRSR)
6645 .hyp().mon().writes(0);
6646 InitReg(MISCREG_ICH_VMCR)
6647 .hyp().mon();
6648 InitReg(MISCREG_ICH_LR0)
6649 .hyp().mon();
6650 InitReg(MISCREG_ICH_LR1)
6651 .hyp().mon();
6652 InitReg(MISCREG_ICH_LR2)
6653 .hyp().mon();
6654 InitReg(MISCREG_ICH_LR3)
6655 .hyp().mon();
6656 InitReg(MISCREG_ICH_LR4)
6657 .hyp().mon();
6658 InitReg(MISCREG_ICH_LR5)
6659 .hyp().mon();
6660 InitReg(MISCREG_ICH_LR6)
6661 .hyp().mon();
6662 InitReg(MISCREG_ICH_LR7)
6663 .hyp().mon();
6664 InitReg(MISCREG_ICH_LR8)
6665 .hyp().mon();
6666 InitReg(MISCREG_ICH_LR9)
6667 .hyp().mon();
6668 InitReg(MISCREG_ICH_LR10)
6669 .hyp().mon();
6670 InitReg(MISCREG_ICH_LR11)
6671 .hyp().mon();
6672 InitReg(MISCREG_ICH_LR12)
6673 .hyp().mon();
6674 InitReg(MISCREG_ICH_LR13)
6675 .hyp().mon();
6676 InitReg(MISCREG_ICH_LR14)
6677 .hyp().mon();
6678 InitReg(MISCREG_ICH_LR15)
6679 .hyp().mon();
6680 InitReg(MISCREG_ICH_LRC0)
6681 .hyp().mon();
6682 InitReg(MISCREG_ICH_LRC1)
6683 .hyp().mon();
6684 InitReg(MISCREG_ICH_LRC2)
6685 .hyp().mon();
6686 InitReg(MISCREG_ICH_LRC3)
6687 .hyp().mon();
6688 InitReg(MISCREG_ICH_LRC4)
6689 .hyp().mon();
6690 InitReg(MISCREG_ICH_LRC5)
6691 .hyp().mon();
6692 InitReg(MISCREG_ICH_LRC6)
6693 .hyp().mon();
6694 InitReg(MISCREG_ICH_LRC7)
6695 .hyp().mon();
6696 InitReg(MISCREG_ICH_LRC8)
6697 .hyp().mon();
6698 InitReg(MISCREG_ICH_LRC9)
6699 .hyp().mon();
6700 InitReg(MISCREG_ICH_LRC10)
6701 .hyp().mon();
6702 InitReg(MISCREG_ICH_LRC11)
6703 .hyp().mon();
6704 InitReg(MISCREG_ICH_LRC12)
6705 .hyp().mon();
6706 InitReg(MISCREG_ICH_LRC13)
6707 .hyp().mon();
6708 InitReg(MISCREG_ICH_LRC14)
6709 .hyp().mon();
6710 InitReg(MISCREG_ICH_LRC15)
6711 .hyp().mon();
6712
6713 // SVE
6715 .reset([this](){
6716 AA64ZFR0 zfr0_el1 = 0;
6717 zfr0_el1.f32mm = release->has(ArmExtension::FEAT_F32MM) ? 1 : 0;
6718 zfr0_el1.f64mm = release->has(ArmExtension::FEAT_F64MM) ? 1 : 0;
6719 zfr0_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 1 : 0;
6720 return zfr0_el1;
6721 }())
6722 .faultRead(EL0, faultIdst)
6723 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
6724 .allPrivileges().exceptUserMode().writes(0);
6725 InitReg(MISCREG_ZCR_EL3)
6726 .reset(sveVL - 1)
6727 .fault(EL3, faultZcrEL3)
6728 .mon();
6729 InitReg(MISCREG_ZCR_EL2)
6730 .reset(sveVL - 1)
6731 .fault(EL2, faultZcrEL2)
6732 .fault(EL3, faultZcrEL3)
6733 .hyp().mon();
6734 InitReg(MISCREG_ZCR_EL12)
6735 .fault(EL2, faultVheEL2<faultZcrEL2>)
6736 .fault(EL3, defaultFaultE2H_EL3)
6737 .mapsTo(MISCREG_ZCR_EL1);
6738 InitReg(MISCREG_ZCR_EL1)
6739 .reset(sveVL - 1)
6740 .fault(EL1, faultZcrEL1)
6741 .fault(EL2, faultZcrEL2)
6742 .fault(EL3, faultZcrEL3)
6743 .allPrivileges().exceptUserMode();
6744
6745 // SME
6747 .reset([](){
6748 AA64SMFR0 smfr0_el1 = 0;
6749 smfr0_el1.f32f32 = 0x1;
6750 // The following BF16F32 is actually not implemented due to a
6751 // lack of BF16 support in gem5's fplib. However, as per the
6752 // SME spec the _only_ allowed value is 0x1.
6753 smfr0_el1.b16f32 = 0x1;
6754 smfr0_el1.f16f32 = 0x1;
6755 smfr0_el1.i8i32 = 0xF;
6756 smfr0_el1.f64f64 = 0x1;
6757 smfr0_el1.i16i64 = 0xF;
6758 smfr0_el1.smEver = 0;
6759 smfr0_el1.fa64 = 0x1;
6760 return smfr0_el1;
6761 }())
6762 .faultRead(EL0, faultIdst)
6763 .faultRead(EL1, faultHcrEL1<&HCR::tid3>)
6764 .allPrivileges().writes(0);
6765 InitReg(MISCREG_SVCR)
6766 .res0([](){
6767 SVCR svcr_mask = 0;
6768 svcr_mask.sm = 1;
6769 svcr_mask.za = 1;
6770 return ~svcr_mask;
6771 }())
6772 .fault(EL0, faultSmenEL0)
6773 .fault(EL1, faultSmenEL1)
6774 .fault(EL2, faultTsmSmen)
6775 .fault(EL3, faultEsm)
6776 .allPrivileges();
6777 InitReg(MISCREG_SMIDR_EL1)
6778 .reset([](){
6779 SMIDR smidr_el1 = 0;
6780 smidr_el1.affinity = 0;
6781 smidr_el1.smps = 0;
6782 smidr_el1.implementer = 0x41;
6783 return smidr_el1;
6784 }())
6785 .faultRead(EL0, faultIdst)
6786 .faultRead(EL1, faultHcrEL1<&HCR::tid1>)
6787 .allPrivileges().writes(0);
6788 InitReg(MISCREG_SMPRI_EL1)
6789 .res0(mask(63, 4))
6790 .fault(EL1, faultEsm)
6791 .fault(EL2, faultEsm)
6792 .fault(EL3, faultEsm)
6793 .allPrivileges().exceptUserMode();
6794 InitReg(MISCREG_SMPRIMAP_EL2)
6795 .fault(EL2, faultEsm)
6796 .fault(EL3, faultEsm)
6797 .hyp().mon();
6798 InitReg(MISCREG_SMCR_EL3)
6799 .reset([this](){
6800 // We want to support FEAT_SME_FA64. Therefore, we enable it in
6801 // all SMCR_ELx registers by default. Runtime software might
6802 // change this later, but given that gem5 doesn't disable
6803 // instructions based on this flag we default to the most
6804 // representative value.
6805 SMCR smcr_el3 = 0;
6806 smcr_el3.fa64 = 1;
6807 smcr_el3.len = smeVL - 1;
6808 return smcr_el3;
6809 }())
6810 .fault(EL3, faultEsm)
6811 .mon();
6812 InitReg(MISCREG_SMCR_EL2)
6813 .reset([this](){
6814 // We want to support FEAT_SME_FA64. Therefore, we enable it in
6815 // all SMCR_ELx registers by default. Runtime software might
6816 // change this later, but given that gem5 doesn't disable
6817 // instructions based on this flag we default to the most
6818 // representative value.
6819 SMCR smcr_el2 = 0;
6820 smcr_el2.fa64 = 1;
6821 smcr_el2.len = smeVL - 1;
6822 return smcr_el2;
6823 }())
6824 .fault(EL2, faultTsmSmen)
6825 .fault(EL3, faultEsm)
6826 .hyp().mon();
6827 InitReg(MISCREG_SMCR_EL12)
6828 .allPrivileges().exceptUserMode();
6829 InitReg(MISCREG_SMCR_EL1)
6830 .reset([this](){
6831 // We want to support FEAT_SME_FA64. Therefore, we enable it in
6832 // all SMCR_ELx registers by default. Runtime software might
6833 // change this later, but given that gem5 doesn't disable
6834 // instructions based on this flag we default to the most
6835 // representative value.
6836 SMCR smcr_el1 = 0;
6837 smcr_el1.fa64 = 1;
6838 smcr_el1.len = smeVL - 1;
6839 return smcr_el1;
6840 }())
6841 .fault(EL1, faultSmenEL1)
6842 .fault(EL2, faultTsmSmen)
6843 .fault(EL3, faultEsm)
6844 .allPrivileges().exceptUserMode();
6845 InitReg(MISCREG_TPIDR2_EL0)
6846 .allPrivileges();
6847
6848 InitReg(MISCREG_RNDR)
6849 .faultRead(EL0, faultRng)
6850 .faultRead(EL1, faultRng)
6851 .faultRead(EL2, faultRng)
6852 .faultRead(EL3, faultRng)
6853 .unverifiable()
6854 .allPrivileges().writes(0);
6855 InitReg(MISCREG_RNDRRS)
6856 .faultRead(EL0, faultRng)
6857 .faultRead(EL1, faultRng)
6858 .faultRead(EL2, faultRng)
6859 .faultRead(EL3, faultRng)
6860 .unverifiable()
6861 .allPrivileges().writes(0);
6862
6863 // FEAT_FGT extension
6864 InitReg(MISCREG_HFGRTR_EL2)
6865 .fault(EL2, faultFgtCtrlRegs)
6866 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6867 InitReg(MISCREG_HFGWTR_EL2)
6868 .fault(EL2, faultFgtCtrlRegs)
6869 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6870 InitReg(MISCREG_HFGITR_EL2)
6871 .fault(EL2, faultFgtCtrlRegs)
6872 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6873 InitReg(MISCREG_HDFGRTR_EL2)
6874 .fault(EL2, faultFgtCtrlRegs)
6875 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6876 InitReg(MISCREG_HDFGWTR_EL2)
6877 .fault(EL2, faultFgtCtrlRegs)
6878 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6879 InitReg(MISCREG_HAFGRTR_EL2)
6880 .fault(EL2, faultFgtCtrlRegs)
6881 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6882
6883 // Dummy registers
6884 InitReg(MISCREG_NOP)
6885 .allPrivileges();
6886 InitReg(MISCREG_RAZ)
6887 .allPrivileges().exceptUserMode().writes(0);
6888 InitReg(MISCREG_UNKNOWN);
6889 InitReg(MISCREG_IMPDEF_UNIMPL)
6890 .fault(EL1, faultImpdefUnimplEL1)
6891 .fault(EL2, faultUnimplemented)
6892 .fault(EL3, faultUnimplemented)
6893 .warnNotFail(impdefAsNop);
6894
6895 // RAS extension (unimplemented)
6896 InitReg(MISCREG_ERRIDR_EL1)
6897 .warnNotFail()
6898 .fault(faultUnimplemented);
6899 InitReg(MISCREG_ERRSELR_EL1)
6900 .warnNotFail()
6901 .fault(faultUnimplemented);
6902 InitReg(MISCREG_ERXFR_EL1)
6903 .warnNotFail()
6904 .fault(faultUnimplemented);
6905 InitReg(MISCREG_ERXCTLR_EL1)
6906 .warnNotFail()
6907 .fault(faultUnimplemented);
6908 InitReg(MISCREG_ERXSTATUS_EL1)
6909 .warnNotFail()
6910 .fault(faultUnimplemented);
6911 InitReg(MISCREG_ERXADDR_EL1)
6912 .warnNotFail()
6913 .fault(faultUnimplemented);
6914 InitReg(MISCREG_ERXMISC0_EL1)
6915 .warnNotFail()
6916 .fault(faultUnimplemented);
6917 InitReg(MISCREG_ERXMISC1_EL1)
6918 .warnNotFail()
6919 .fault(faultUnimplemented);
6920 InitReg(MISCREG_DISR_EL1)
6921 .warnNotFail()
6922 .fault(faultUnimplemented);
6923 InitReg(MISCREG_VSESR_EL2)
6924 .warnNotFail()
6925 .fault(faultUnimplemented);
6926 InitReg(MISCREG_VDISR_EL2)
6927 .warnNotFail()
6928 .fault(faultUnimplemented);
6929
6930 // MPAM extension
6931 InitReg(MISCREG_MPAMIDR_EL1)
6932 .reset(p.mpamidr_el1)
6933 .res0(mask(63, 62) | mask(56, 40) | mask(31, 21) | mask(16, 16))
6934 .faultRead(EL1, faultMpamIdrEL1)
6935 .faultRead(EL2, faultMpamEL2)
6936 .allPrivileges().exceptUserMode().writes(0);
6937 InitReg(MISCREG_MPAM0_EL1)
6938 .res0(mask(63, 48))
6939 .fault(EL1, faultMpam0EL1)
6940 .fault(EL2, faultMpamEL2)
6941 .priv().hyp().mon();
6942 InitReg(MISCREG_MPAM1_EL1)
6943 .res0(mask(62, 61) | mask(59, 48))
6944 .fault(EL1, faultMpam1EL1)
6945 .fault(EL2, faultMpamEL2)
6946 .priv().hyp().mon();
6947 InitReg(MISCREG_MPAM1_EL12)
6948 .res0(mask(59, 48))
6949 .fault(EL2, faultMpam12EL2)
6950 .fault(EL3, defaultFaultE2H_EL3)
6951 .hyp().mon();
6952 InitReg(MISCREG_MPAM2_EL2)
6953 .res0(mask(62, 59) | mask(57, 50))
6954 .fault(EL2, faultMpamEL2)
6955 .hyp().mon();
6956 InitReg(MISCREG_MPAMHCR_EL2)
6957 .res0(mask(63, 32) | mask(30, 9) | mask(7, 2))
6958 .fault(EL2, faultMpamEL2)
6959 .hyp().mon();
6960 InitReg(MISCREG_MPAMVPM0_EL2)
6961 .fault(EL2, faultMpamEL2)
6962 .hyp().mon();
6963 InitReg(MISCREG_MPAMVPM1_EL2)
6964 .fault(EL2, faultMpamEL2)
6965 .hyp().mon();
6966 InitReg(MISCREG_MPAMVPM2_EL2)
6967 .fault(EL2, faultMpamEL2)
6968 .hyp().mon();
6969 InitReg(MISCREG_MPAMVPM3_EL2)
6970 .fault(EL2, faultMpamEL2)
6971 .hyp().mon();
6972 InitReg(MISCREG_MPAMVPM4_EL2)
6973 .fault(EL2, faultMpamEL2)
6974 .hyp().mon();
6975 InitReg(MISCREG_MPAMVPM5_EL2)
6976 .fault(EL2, faultMpamEL2)
6977 .hyp().mon();
6978 InitReg(MISCREG_MPAMVPM6_EL2)
6979 .fault(EL2, faultMpamEL2)
6980 .hyp().mon();
6981 InitReg(MISCREG_MPAMVPM7_EL2)
6982 .fault(EL2, faultMpamEL2)
6983 .hyp().mon();
6984 InitReg(MISCREG_MPAMVPMV_EL2)
6985 .res0(mask(63, 32))
6986 .fault(EL2, faultMpamEL2)
6987 .hyp().mon();
6988 InitReg(MISCREG_MPAM3_EL3)
6989 .res0(mask(59, 48))
6990 .mon();
6991 InitReg(MISCREG_MPAMSM_EL1)
6992 .res0(mask(63, 48) | mask(39, 32) | mask(15, 0))
6993 .fault(EL1, faultMpamsmEL1)
6994 .fault(EL2, faultMpamEL2)
6995 .allPrivileges().exceptUserMode();
6996
6997 // FEAT_S1PIE
6998 InitReg(MISCREG_PIRE0_EL1)
6999 .faultRead(EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPire0EL1>)
7000 .faultWrite(EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPire0EL1>)
7001 .fault(EL2, faultPieEL2)
7002 .mon();
7003 InitReg(MISCREG_PIRE0_EL2)
7004 .fault(EL2, faultPieEL2)
7005 .mon();
7006 InitReg(MISCREG_PIR_EL1)
7007 .faultRead(EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPirEL1>)
7008 .faultWrite(EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPirEL1>)
7009 .fault(EL2, faultPieEL2)
7010 .mon();
7011 InitReg(MISCREG_PIRE0_EL12)
7012 .fault(EL2, faultVheEL2<faultPieEL2>)
7013 .fault(EL3, defaultFaultE2H_EL3)
7014 .mapsTo(MISCREG_PIRE0_EL1);
7015 InitReg(MISCREG_PIR_EL12)
7016 .fault(EL2, faultVheEL2<faultPieEL2>)
7017 .fault(EL3, defaultFaultE2H_EL3)
7018 .mapsTo(MISCREG_PIR_EL1);
7019 InitReg(MISCREG_PIR_EL2)
7020 .fault(EL2, faultPieEL2)
7021 .mon();
7022 InitReg(MISCREG_PIR_EL3)
7023 .mon();
7024
7025
7026 // Register mappings for some unimplemented registers:
7027 // ESR_EL1 -> DFSR
7028 // RMR_EL1 -> RMR
7029 // RMR_EL2 -> HRMR
7030 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
7031 // DBGDTRRX_EL0 -> DBGDTRRXint
7032 // DBGDTRTX_EL0 -> DBGDTRRXint
7033 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
7034
7035 // Populate the idxToMiscRegNum map
7036 assert(idxToMiscRegNum.empty());
7037 for (const auto& [key, val] : miscRegNumToIdx) {
7038 idxToMiscRegNum.insert({val, key});
7039 }
7040
7041 completed = true;
7042}
7043
7044} // namespace ArmISA
7045} // 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:3058
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:3013
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:187
ArmISA::ExceptionLevel highestEL() const
Returns the highest implemented exception level.
Definition system.hh:191
static bool haveEL(ThreadContext *tc, ArmISA::ExceptionLevel el)
Return true if the system implements a specific exception level.
Definition system.cc:132
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:3025
@ 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:1312
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:2931
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:1361
bool EL2Enabled(ThreadContext *tc)
Definition utility.cc:268
void preUnflattenMiscReg()
Definition misc.cc:722
bool isHcrxEL2Enabled(ThreadContext *tc)
Definition utility.cc:1369
@ 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:2957
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:2988
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:3000
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:2977
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:2968

Generated on Mon May 26 2025 09:19:05 for gem5 by doxygen 1.13.2