xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AArch64/AArch64SystemOperands.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric//===- AArch64SystemOperands.td ----------------------------*- tablegen -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric//
90b57cec5SDimitry Andric// This file defines the symbolic operands permitted for various kinds of
100b57cec5SDimitry Andric// AArch64 system instruction.
110b57cec5SDimitry Andric//
120b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
130b57cec5SDimitry Andric
140b57cec5SDimitry Andricinclude "llvm/TableGen/SearchableTable.td"
150b57cec5SDimitry Andric
160b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
170b57cec5SDimitry Andric// Features that, for the compiler, only enable system operands and PStates
180b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
190b57cec5SDimitry Andric
200b57cec5SDimitry Andricdef HasCCPP    : Predicate<"Subtarget->hasCCPP()">,
2181ad6265SDimitry Andric                 AssemblerPredicateWithAll<(all_of FeatureCCPP), "ccpp">;
220b57cec5SDimitry Andric
230b57cec5SDimitry Andricdef HasPAN     : Predicate<"Subtarget->hasPAN()">,
2481ad6265SDimitry Andric                 AssemblerPredicateWithAll<(all_of FeaturePAN),
250b57cec5SDimitry Andric                 "ARM v8.1  Privileged Access-Never extension">;
260b57cec5SDimitry Andric
270b57cec5SDimitry Andricdef HasPsUAO   : Predicate<"Subtarget->hasPsUAO()">,
2881ad6265SDimitry Andric                 AssemblerPredicateWithAll<(all_of FeaturePsUAO),
290b57cec5SDimitry Andric                 "ARM v8.2 UAO PState extension (psuao)">;
300b57cec5SDimitry Andric
310b57cec5SDimitry Andricdef HasPAN_RWV : Predicate<"Subtarget->hasPAN_RWV()">,
3281ad6265SDimitry Andric                 AssemblerPredicateWithAll<(all_of FeaturePAN_RWV),
330b57cec5SDimitry Andric                 "ARM v8.2 PAN AT S1E1R and AT S1E1W Variation">;
340b57cec5SDimitry Andric
35e8d8bef9SDimitry Andricdef HasCONTEXTIDREL2
36e8d8bef9SDimitry Andric               : Predicate<"Subtarget->hasCONTEXTIDREL2()">,
3781ad6265SDimitry Andric                 AssemblerPredicateWithAll<(all_of FeatureCONTEXTIDREL2),
38e8d8bef9SDimitry Andric                 "Target contains CONTEXTIDR_EL2 RW operand">;
39e8d8bef9SDimitry Andric
400b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
410b57cec5SDimitry Andric// AT (address translate) instruction options.
420b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
430b57cec5SDimitry Andric
440b57cec5SDimitry Andricclass AT<string name, bits<3> op1, bits<4> crn, bits<4> crm,
450b57cec5SDimitry Andric         bits<3> op2> : SearchableTable {
460b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
470b57cec5SDimitry Andric  let EnumValueField = "Encoding";
480b57cec5SDimitry Andric
490b57cec5SDimitry Andric  string Name = name;
500b57cec5SDimitry Andric  bits<14> Encoding;
510b57cec5SDimitry Andric  let Encoding{13-11} = op1;
520b57cec5SDimitry Andric  let Encoding{10-7} = crn;
530b57cec5SDimitry Andric  let Encoding{6-3} = crm;
540b57cec5SDimitry Andric  let Encoding{2-0} = op2;
550b57cec5SDimitry Andric  code Requires = [{ {} }];
560b57cec5SDimitry Andric}
570b57cec5SDimitry Andric
580b57cec5SDimitry Andricdef : AT<"S1E1R",  0b000, 0b0111, 0b1000, 0b000>;
590b57cec5SDimitry Andricdef : AT<"S1E2R",  0b100, 0b0111, 0b1000, 0b000>;
600b57cec5SDimitry Andricdef : AT<"S1E3R",  0b110, 0b0111, 0b1000, 0b000>;
610b57cec5SDimitry Andricdef : AT<"S1E1W",  0b000, 0b0111, 0b1000, 0b001>;
620b57cec5SDimitry Andricdef : AT<"S1E2W",  0b100, 0b0111, 0b1000, 0b001>;
630b57cec5SDimitry Andricdef : AT<"S1E3W",  0b110, 0b0111, 0b1000, 0b001>;
640b57cec5SDimitry Andricdef : AT<"S1E0R",  0b000, 0b0111, 0b1000, 0b010>;
650b57cec5SDimitry Andricdef : AT<"S1E0W",  0b000, 0b0111, 0b1000, 0b011>;
660b57cec5SDimitry Andricdef : AT<"S12E1R", 0b100, 0b0111, 0b1000, 0b100>;
670b57cec5SDimitry Andricdef : AT<"S12E1W", 0b100, 0b0111, 0b1000, 0b101>;
680b57cec5SDimitry Andricdef : AT<"S12E0R", 0b100, 0b0111, 0b1000, 0b110>;
690b57cec5SDimitry Andricdef : AT<"S12E0W", 0b100, 0b0111, 0b1000, 0b111>;
700b57cec5SDimitry Andric
710b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeaturePAN_RWV} }] in {
720b57cec5SDimitry Andricdef : AT<"S1E1RP", 0b000, 0b0111, 0b1001, 0b000>;
730b57cec5SDimitry Andricdef : AT<"S1E1WP", 0b000, 0b0111, 0b1001, 0b001>;
740b57cec5SDimitry Andric}
750b57cec5SDimitry Andric
7606c3fb27SDimitry Andric// v8.9a/v9.4a FEAT_ATS1A
7706c3fb27SDimitry Andricdef : AT<"S1E1A", 0b000, 0b0111, 0b1001, 0b010>;
7806c3fb27SDimitry Andricdef : AT<"S1E2A", 0b100, 0b0111, 0b1001, 0b010>;
7906c3fb27SDimitry Andricdef : AT<"S1E3A", 0b110, 0b0111, 0b1001, 0b010>;
8006c3fb27SDimitry Andric
810b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
820b57cec5SDimitry Andric// DMB/DSB (data barrier) instruction options.
830b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
840b57cec5SDimitry Andric
850b57cec5SDimitry Andricclass DB<string name, bits<4> encoding> : SearchableTable {
860b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
870b57cec5SDimitry Andric  let EnumValueField = "Encoding";
880b57cec5SDimitry Andric
890b57cec5SDimitry Andric  string Name = name;
900b57cec5SDimitry Andric  bits<4> Encoding = encoding;
910b57cec5SDimitry Andric}
920b57cec5SDimitry Andric
930b57cec5SDimitry Andricdef : DB<"oshld", 0x1>;
940b57cec5SDimitry Andricdef : DB<"oshst", 0x2>;
950b57cec5SDimitry Andricdef : DB<"osh",   0x3>;
960b57cec5SDimitry Andricdef : DB<"nshld", 0x5>;
970b57cec5SDimitry Andricdef : DB<"nshst", 0x6>;
980b57cec5SDimitry Andricdef : DB<"nsh",   0x7>;
990b57cec5SDimitry Andricdef : DB<"ishld", 0x9>;
1000b57cec5SDimitry Andricdef : DB<"ishst", 0xa>;
1010b57cec5SDimitry Andricdef : DB<"ish",   0xb>;
1020b57cec5SDimitry Andricdef : DB<"ld",    0xd>;
1030b57cec5SDimitry Andricdef : DB<"st",    0xe>;
1040b57cec5SDimitry Andricdef : DB<"sy",    0xf>;
1050b57cec5SDimitry Andric
106e8d8bef9SDimitry Andricclass DBnXS<string name, bits<4> encoding, bits<5> immValue> : SearchableTable {
107e8d8bef9SDimitry Andric  let SearchableFields = ["Name", "Encoding", "ImmValue"];
108e8d8bef9SDimitry Andric  let EnumValueField = "Encoding";
109e8d8bef9SDimitry Andric
110e8d8bef9SDimitry Andric  string Name = name;
111e8d8bef9SDimitry Andric  bits<4> Encoding = encoding;
112e8d8bef9SDimitry Andric  bits<5> ImmValue = immValue;
113e8d8bef9SDimitry Andric  code Requires = [{ {AArch64::FeatureXS} }];
114e8d8bef9SDimitry Andric}
115e8d8bef9SDimitry Andric
116e8d8bef9SDimitry Andricdef : DBnXS<"oshnxs", 0x3, 0x10>;
117e8d8bef9SDimitry Andricdef : DBnXS<"nshnxs", 0x7, 0x14>;
118e8d8bef9SDimitry Andricdef : DBnXS<"ishnxs", 0xb, 0x18>;
119e8d8bef9SDimitry Andricdef : DBnXS<"synxs",  0xf, 0x1c>;
120e8d8bef9SDimitry Andric
1210b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1220b57cec5SDimitry Andric// DC (data cache maintenance) instruction options.
1230b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1240b57cec5SDimitry Andric
1250b57cec5SDimitry Andricclass DC<string name, bits<3> op1, bits<4> crn, bits<4> crm,
1260b57cec5SDimitry Andric         bits<3> op2> : SearchableTable {
1270b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
1280b57cec5SDimitry Andric  let EnumValueField = "Encoding";
1290b57cec5SDimitry Andric
1300b57cec5SDimitry Andric  string Name = name;
1310b57cec5SDimitry Andric  bits<14> Encoding;
1320b57cec5SDimitry Andric  let Encoding{13-11} = op1;
1330b57cec5SDimitry Andric  let Encoding{10-7} = crn;
1340b57cec5SDimitry Andric  let Encoding{6-3} = crm;
1350b57cec5SDimitry Andric  let Encoding{2-0} = op2;
1360b57cec5SDimitry Andric  code Requires = [{ {} }];
1370b57cec5SDimitry Andric}
1380b57cec5SDimitry Andric
1390b57cec5SDimitry Andricdef : DC<"ZVA",   0b011, 0b0111, 0b0100, 0b001>;
1400b57cec5SDimitry Andricdef : DC<"IVAC",  0b000, 0b0111, 0b0110, 0b001>;
1410b57cec5SDimitry Andricdef : DC<"ISW",   0b000, 0b0111, 0b0110, 0b010>;
1420b57cec5SDimitry Andricdef : DC<"CVAC",  0b011, 0b0111, 0b1010, 0b001>;
1430b57cec5SDimitry Andricdef : DC<"CSW",   0b000, 0b0111, 0b1010, 0b010>;
1440b57cec5SDimitry Andricdef : DC<"CVAU",  0b011, 0b0111, 0b1011, 0b001>;
1450b57cec5SDimitry Andricdef : DC<"CIVAC", 0b011, 0b0111, 0b1110, 0b001>;
1460b57cec5SDimitry Andricdef : DC<"CISW",  0b000, 0b0111, 0b1110, 0b010>;
1470b57cec5SDimitry Andric
1480b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureCCPP} }] in
1490b57cec5SDimitry Andricdef : DC<"CVAP",  0b011, 0b0111, 0b1100, 0b001>;
1500b57cec5SDimitry Andric
1510b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureCacheDeepPersist} }] in
1520b57cec5SDimitry Andricdef : DC<"CVADP",  0b011, 0b0111, 0b1101, 0b001>;
1530b57cec5SDimitry Andric
1540b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureMTE} }] in {
1550b57cec5SDimitry Andricdef : DC<"IGVAC",   0b000, 0b0111, 0b0110, 0b011>;
1560b57cec5SDimitry Andricdef : DC<"IGSW",    0b000, 0b0111, 0b0110, 0b100>;
1570b57cec5SDimitry Andricdef : DC<"CGSW",    0b000, 0b0111, 0b1010, 0b100>;
1580b57cec5SDimitry Andricdef : DC<"CIGSW",   0b000, 0b0111, 0b1110, 0b100>;
1590b57cec5SDimitry Andricdef : DC<"CGVAC",   0b011, 0b0111, 0b1010, 0b011>;
1600b57cec5SDimitry Andricdef : DC<"CGVAP",   0b011, 0b0111, 0b1100, 0b011>;
1610b57cec5SDimitry Andricdef : DC<"CGVADP",  0b011, 0b0111, 0b1101, 0b011>;
1620b57cec5SDimitry Andricdef : DC<"CIGVAC",  0b011, 0b0111, 0b1110, 0b011>;
1630b57cec5SDimitry Andricdef : DC<"GVA",     0b011, 0b0111, 0b0100, 0b011>;
1640b57cec5SDimitry Andricdef : DC<"IGDVAC",  0b000, 0b0111, 0b0110, 0b101>;
1650b57cec5SDimitry Andricdef : DC<"IGDSW",   0b000, 0b0111, 0b0110, 0b110>;
1660b57cec5SDimitry Andricdef : DC<"CGDSW",   0b000, 0b0111, 0b1010, 0b110>;
1670b57cec5SDimitry Andricdef : DC<"CIGDSW",  0b000, 0b0111, 0b1110, 0b110>;
1680b57cec5SDimitry Andricdef : DC<"CGDVAC",  0b011, 0b0111, 0b1010, 0b101>;
1690b57cec5SDimitry Andricdef : DC<"CGDVAP",  0b011, 0b0111, 0b1100, 0b101>;
1700b57cec5SDimitry Andricdef : DC<"CGDVADP", 0b011, 0b0111, 0b1101, 0b101>;
1710b57cec5SDimitry Andricdef : DC<"CIGDVAC", 0b011, 0b0111, 0b1110, 0b101>;
1720b57cec5SDimitry Andricdef : DC<"GZVA",    0b011, 0b0111, 0b0100, 0b100>;
1730b57cec5SDimitry Andric}
1740b57cec5SDimitry Andric
175bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureMEC} }] in {
176bdd1243dSDimitry Andricdef : DC<"CIPAE",   0b100, 0b0111, 0b1110, 0b000>;
177bdd1243dSDimitry Andricdef : DC<"CIGDPAE", 0b100, 0b0111, 0b1110, 0b111>;
178bdd1243dSDimitry Andric}
179bdd1243dSDimitry Andric
1800b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1810b57cec5SDimitry Andric// IC (instruction cache maintenance) instruction options.
1820b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1830b57cec5SDimitry Andric
1840b57cec5SDimitry Andricclass IC<string name, bits<3> op1, bits<4> crn, bits<4> crm, bits<3> op2,
1850b57cec5SDimitry Andric         bit needsreg> : SearchableTable {
1860b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
1870b57cec5SDimitry Andric  let EnumValueField = "Encoding";
1880b57cec5SDimitry Andric
1890b57cec5SDimitry Andric  string Name = name;
1900b57cec5SDimitry Andric  bits<14> Encoding;
1910b57cec5SDimitry Andric  let Encoding{13-11} = op1;
1920b57cec5SDimitry Andric  let Encoding{10-7} = crn;
1930b57cec5SDimitry Andric  let Encoding{6-3} = crm;
1940b57cec5SDimitry Andric  let Encoding{2-0} = op2;
1950b57cec5SDimitry Andric  bit NeedsReg = needsreg;
1960b57cec5SDimitry Andric}
1970b57cec5SDimitry Andric
1980b57cec5SDimitry Andricdef : IC<"IALLUIS", 0b000, 0b0111, 0b0001, 0b000, 0>;
1990b57cec5SDimitry Andricdef : IC<"IALLU",   0b000, 0b0111, 0b0101, 0b000, 0>;
2000b57cec5SDimitry Andricdef : IC<"IVAU",    0b011, 0b0111, 0b0101, 0b001, 1>;
2010b57cec5SDimitry Andric
2020b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2030b57cec5SDimitry Andric// ISB (instruction-fetch barrier) instruction options.
2040b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2050b57cec5SDimitry Andric
2060b57cec5SDimitry Andricclass ISB<string name, bits<4> encoding> : SearchableTable{
2070b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
2080b57cec5SDimitry Andric  let EnumValueField = "Encoding";
2090b57cec5SDimitry Andric
2100b57cec5SDimitry Andric  string Name = name;
2110b57cec5SDimitry Andric  bits<4> Encoding;
2120b57cec5SDimitry Andric  let Encoding = encoding;
2130b57cec5SDimitry Andric}
2140b57cec5SDimitry Andric
2150b57cec5SDimitry Andricdef : ISB<"sy", 0xf>;
2160b57cec5SDimitry Andric
2170b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2180b57cec5SDimitry Andric// TSB (Trace synchronization barrier) instruction options.
2190b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2200b57cec5SDimitry Andric
2210b57cec5SDimitry Andricclass TSB<string name, bits<4> encoding> : SearchableTable{
2220b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
2230b57cec5SDimitry Andric  let EnumValueField = "Encoding";
2240b57cec5SDimitry Andric
2250b57cec5SDimitry Andric  string Name = name;
2260b57cec5SDimitry Andric  bits<4> Encoding;
2270b57cec5SDimitry Andric  let Encoding = encoding;
2280b57cec5SDimitry Andric
2290b57cec5SDimitry Andric  code Requires = [{ {AArch64::FeatureTRACEV8_4} }];
2300b57cec5SDimitry Andric}
2310b57cec5SDimitry Andric
2320b57cec5SDimitry Andricdef : TSB<"csync", 0>;
2330b57cec5SDimitry Andric
2340b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2350b57cec5SDimitry Andric// PRFM (prefetch) instruction options.
2360b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2370b57cec5SDimitry Andric
238bdd1243dSDimitry Andricclass PRFM<string type,   bits<2> type_encoding,
239bdd1243dSDimitry Andric           string target, bits<2> target_encoding,
240bdd1243dSDimitry Andric           string policy, bits<1> policy_encoding> : SearchableTable {
2410b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
2420b57cec5SDimitry Andric  let EnumValueField = "Encoding";
2430b57cec5SDimitry Andric
244bdd1243dSDimitry Andric  string Name = type # target # policy;
2450b57cec5SDimitry Andric  bits<5> Encoding;
246bdd1243dSDimitry Andric  let Encoding{4-3} = type_encoding;
247bdd1243dSDimitry Andric  let Encoding{2-1} = target_encoding;
248bdd1243dSDimitry Andric  let Encoding{0} = policy_encoding;
249bdd1243dSDimitry Andric
250bdd1243dSDimitry Andric  code Requires = [{ {} }];
2510b57cec5SDimitry Andric}
2520b57cec5SDimitry Andric
253bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "l1",  0b00, "keep", 0b0>;
254bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "l1",  0b00, "strm", 0b1>;
255bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "l2",  0b01, "keep", 0b0>;
256bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "l2",  0b01, "strm", 0b1>;
257bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "l3",  0b10, "keep", 0b0>;
258bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "l3",  0b10, "strm", 0b1>;
259bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeaturePRFM_SLC} }] in {
260bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "slc", 0b11, "keep", 0b0>;
261bdd1243dSDimitry Andricdef : PRFM<"pld", 0b00, "slc", 0b11, "strm", 0b1>;
262bdd1243dSDimitry Andric}
263bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "l1",  0b00, "keep", 0b0>;
264bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "l1",  0b00, "strm", 0b1>;
265bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "l2",  0b01, "keep", 0b0>;
266bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "l2",  0b01, "strm", 0b1>;
267bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "l3",  0b10, "keep", 0b0>;
268bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "l3",  0b10, "strm", 0b1>;
269bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeaturePRFM_SLC} }] in {
270bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "slc", 0b11, "keep", 0b0>;
271bdd1243dSDimitry Andricdef : PRFM<"pli", 0b01, "slc", 0b11, "strm", 0b1>;
272bdd1243dSDimitry Andric}
273bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "l1",  0b00, "keep", 0b0>;
274bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "l1",  0b00, "strm", 0b1>;
275bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "l2",  0b01, "keep", 0b0>;
276bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "l2",  0b01, "strm", 0b1>;
277bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "l3",  0b10, "keep", 0b0>;
278bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "l3",  0b10, "strm", 0b1>;
279bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeaturePRFM_SLC} }] in {
280bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "slc", 0b11, "keep", 0b0>;
281bdd1243dSDimitry Andricdef : PRFM<"pst", 0b10, "slc", 0b11, "strm", 0b1>;
282bdd1243dSDimitry Andric}
2830b57cec5SDimitry Andric
2840b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2850b57cec5SDimitry Andric// SVE Prefetch instruction options.
2860b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2870b57cec5SDimitry Andric
2880b57cec5SDimitry Andricclass SVEPRFM<string name, bits<4> encoding> : SearchableTable {
2890b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
2900b57cec5SDimitry Andric  let EnumValueField = "Encoding";
2910b57cec5SDimitry Andric
2920b57cec5SDimitry Andric  string Name = name;
2930b57cec5SDimitry Andric  bits<4> Encoding;
2940b57cec5SDimitry Andric  let Encoding = encoding;
2950b57cec5SDimitry Andric  code Requires = [{ {} }];
2960b57cec5SDimitry Andric}
2970b57cec5SDimitry Andric
2980b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSVE} }] in {
2990b57cec5SDimitry Andricdef : SVEPRFM<"pldl1keep", 0x00>;
3000b57cec5SDimitry Andricdef : SVEPRFM<"pldl1strm", 0x01>;
3010b57cec5SDimitry Andricdef : SVEPRFM<"pldl2keep", 0x02>;
3020b57cec5SDimitry Andricdef : SVEPRFM<"pldl2strm", 0x03>;
3030b57cec5SDimitry Andricdef : SVEPRFM<"pldl3keep", 0x04>;
3040b57cec5SDimitry Andricdef : SVEPRFM<"pldl3strm", 0x05>;
3050b57cec5SDimitry Andricdef : SVEPRFM<"pstl1keep", 0x08>;
3060b57cec5SDimitry Andricdef : SVEPRFM<"pstl1strm", 0x09>;
3070b57cec5SDimitry Andricdef : SVEPRFM<"pstl2keep", 0x0a>;
3080b57cec5SDimitry Andricdef : SVEPRFM<"pstl2strm", 0x0b>;
3090b57cec5SDimitry Andricdef : SVEPRFM<"pstl3keep", 0x0c>;
3100b57cec5SDimitry Andricdef : SVEPRFM<"pstl3strm", 0x0d>;
3110b57cec5SDimitry Andric}
3120b57cec5SDimitry Andric
3130b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
314bdd1243dSDimitry Andric// RPRFM (prefetch) instruction options.
315bdd1243dSDimitry Andric//===----------------------------------------------------------------------===//
316bdd1243dSDimitry Andric
317bdd1243dSDimitry Andricclass RPRFM<string name, bits<1> type_encoding, bits<5> policy_encoding> : SearchableTable {
318bdd1243dSDimitry Andric  let SearchableFields = ["Name", "Encoding"];
319bdd1243dSDimitry Andric  let EnumValueField = "Encoding";
320bdd1243dSDimitry Andric
321bdd1243dSDimitry Andric  string Name = name;
322bdd1243dSDimitry Andric  bits<6> Encoding;
323bdd1243dSDimitry Andric  let Encoding{0} = type_encoding;
324bdd1243dSDimitry Andric  let Encoding{5-1} = policy_encoding;
325bdd1243dSDimitry Andric  code Requires = [{ {} }];
326bdd1243dSDimitry Andric}
327bdd1243dSDimitry Andric
328bdd1243dSDimitry Andricdef : RPRFM<"pldkeep", 0b0, 0b00000>;
329bdd1243dSDimitry Andricdef : RPRFM<"pstkeep", 0b1, 0b00000>;
330bdd1243dSDimitry Andricdef : RPRFM<"pldstrm", 0b0, 0b00010>;
331bdd1243dSDimitry Andricdef : RPRFM<"pststrm", 0b1, 0b00010>;
332bdd1243dSDimitry Andric
333bdd1243dSDimitry Andric//===----------------------------------------------------------------------===//
3340b57cec5SDimitry Andric// SVE Predicate patterns
3350b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
3360b57cec5SDimitry Andric
3370b57cec5SDimitry Andricclass SVEPREDPAT<string name, bits<5> encoding> : SearchableTable {
3380b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
3390b57cec5SDimitry Andric  let EnumValueField = "Encoding";
3400b57cec5SDimitry Andric
3410b57cec5SDimitry Andric  string Name = name;
3420b57cec5SDimitry Andric  bits<5> Encoding;
3430b57cec5SDimitry Andric  let Encoding = encoding;
3440b57cec5SDimitry Andric}
3450b57cec5SDimitry Andric
3460b57cec5SDimitry Andricdef : SVEPREDPAT<"pow2",  0x00>;
3470b57cec5SDimitry Andricdef : SVEPREDPAT<"vl1",   0x01>;
3480b57cec5SDimitry Andricdef : SVEPREDPAT<"vl2",   0x02>;
3490b57cec5SDimitry Andricdef : SVEPREDPAT<"vl3",   0x03>;
3500b57cec5SDimitry Andricdef : SVEPREDPAT<"vl4",   0x04>;
3510b57cec5SDimitry Andricdef : SVEPREDPAT<"vl5",   0x05>;
3520b57cec5SDimitry Andricdef : SVEPREDPAT<"vl6",   0x06>;
3530b57cec5SDimitry Andricdef : SVEPREDPAT<"vl7",   0x07>;
3540b57cec5SDimitry Andricdef : SVEPREDPAT<"vl8",   0x08>;
3550b57cec5SDimitry Andricdef : SVEPREDPAT<"vl16",  0x09>;
3560b57cec5SDimitry Andricdef : SVEPREDPAT<"vl32",  0x0a>;
3570b57cec5SDimitry Andricdef : SVEPREDPAT<"vl64",  0x0b>;
3580b57cec5SDimitry Andricdef : SVEPREDPAT<"vl128", 0x0c>;
3590b57cec5SDimitry Andricdef : SVEPREDPAT<"vl256", 0x0d>;
3600b57cec5SDimitry Andricdef : SVEPREDPAT<"mul4",  0x1d>;
3610b57cec5SDimitry Andricdef : SVEPREDPAT<"mul3",  0x1e>;
3620b57cec5SDimitry Andricdef : SVEPREDPAT<"all",   0x1f>;
3630b57cec5SDimitry Andric
3640b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
365bdd1243dSDimitry Andric// SVE Predicate-as-counter patterns
366bdd1243dSDimitry Andric//===----------------------------------------------------------------------===//
367bdd1243dSDimitry Andric
368bdd1243dSDimitry Andricclass SVEVECLENSPECIFIER<string name, bits<1> encoding> : SearchableTable {
369bdd1243dSDimitry Andric  let SearchableFields = ["Name", "Encoding"];
370bdd1243dSDimitry Andric  let EnumValueField = "Encoding";
371bdd1243dSDimitry Andric
372bdd1243dSDimitry Andric  string Name = name;
373bdd1243dSDimitry Andric  bits<1> Encoding;
374bdd1243dSDimitry Andric  let Encoding = encoding;
375bdd1243dSDimitry Andric}
376bdd1243dSDimitry Andric
377bdd1243dSDimitry Andricdef : SVEVECLENSPECIFIER<"vlx2", 0x0>;
378bdd1243dSDimitry Andricdef : SVEVECLENSPECIFIER<"vlx4", 0x1>;
379bdd1243dSDimitry Andric
380bdd1243dSDimitry Andric//===----------------------------------------------------------------------===//
3810b57cec5SDimitry Andric// Exact FP Immediates.
3820b57cec5SDimitry Andric//
3830b57cec5SDimitry Andric// These definitions are used to create a lookup table with FP Immediates that
3840b57cec5SDimitry Andric// is used for a few instructions that only accept a limited set of exact FP
3850b57cec5SDimitry Andric// immediates values.
3860b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
3870b57cec5SDimitry Andricclass ExactFPImm<string name, string repr, bits<4> enum > : SearchableTable {
3880b57cec5SDimitry Andric  let SearchableFields = ["Enum", "Repr"];
3890b57cec5SDimitry Andric  let EnumValueField = "Enum";
3900b57cec5SDimitry Andric
3910b57cec5SDimitry Andric  string Name = name;
3920b57cec5SDimitry Andric  bits<4> Enum = enum;
3930b57cec5SDimitry Andric  string Repr = repr;
3940b57cec5SDimitry Andric}
3950b57cec5SDimitry Andric
3960b57cec5SDimitry Andricdef : ExactFPImm<"zero", "0.0", 0x0>;
3970b57cec5SDimitry Andricdef : ExactFPImm<"half", "0.5", 0x1>;
3980b57cec5SDimitry Andricdef : ExactFPImm<"one",  "1.0", 0x2>;
3990b57cec5SDimitry Andricdef : ExactFPImm<"two",  "2.0", 0x3>;
4000b57cec5SDimitry Andric
4010b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
4020b57cec5SDimitry Andric// PState instruction options.
4030b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
4040b57cec5SDimitry Andric
405bdd1243dSDimitry Andricclass PStateImm0_15<string name, bits<3> op1, bits<3> op2> : SearchableTable {
4060b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
4070b57cec5SDimitry Andric  let EnumValueField = "Encoding";
4080b57cec5SDimitry Andric
4090b57cec5SDimitry Andric  string Name = name;
410bdd1243dSDimitry Andric  bits<6> Encoding;
411bdd1243dSDimitry Andric  let Encoding{5-3} = op1;
412bdd1243dSDimitry Andric  let Encoding{2-0} = op2;
4130b57cec5SDimitry Andric  code Requires = [{ {} }];
4140b57cec5SDimitry Andric}
4150b57cec5SDimitry Andric
416bdd1243dSDimitry Andricclass PStateImm0_1<string name, bits<3> op1, bits<3> op2, bits<3> crm_high> : SearchableTable {
417bdd1243dSDimitry Andric  let SearchableFields = ["Name", "Encoding"];
418bdd1243dSDimitry Andric  let EnumValueField = "Encoding";
419bdd1243dSDimitry Andric
420bdd1243dSDimitry Andric  string Name = name;
421bdd1243dSDimitry Andric  bits<9> Encoding;
422bdd1243dSDimitry Andric  let Encoding{8-6} = crm_high;
423bdd1243dSDimitry Andric  let Encoding{5-3} = op1;
424bdd1243dSDimitry Andric  let Encoding{2-0} = op2;
425bdd1243dSDimitry Andric  code Requires = [{ {} }];
426bdd1243dSDimitry Andric}
427bdd1243dSDimitry Andric
428bdd1243dSDimitry Andric//                   Name,     Op1,   Op2
429bdd1243dSDimitry Andricdef : PStateImm0_15<"SPSel",   0b000, 0b101>;
430bdd1243dSDimitry Andricdef : PStateImm0_15<"DAIFSet", 0b011, 0b110>;
431bdd1243dSDimitry Andricdef : PStateImm0_15<"DAIFClr", 0b011, 0b111>;
4320b57cec5SDimitry Andric// v8.1a "Privileged Access Never" extension-specific PStates
4330b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeaturePAN} }] in
434bdd1243dSDimitry Andricdef : PStateImm0_15<"PAN",     0b000, 0b100>;
4350b57cec5SDimitry Andric
4360b57cec5SDimitry Andric// v8.2a "User Access Override" extension-specific PStates
4370b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeaturePsUAO} }] in
438bdd1243dSDimitry Andricdef : PStateImm0_15<"UAO",     0b000, 0b011>;
4395ffd83dbSDimitry Andric// v8.4a timing insensitivity of data processing instructions
4400b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureDIT} }] in
441bdd1243dSDimitry Andricdef : PStateImm0_15<"DIT",     0b011, 0b010>;
4420b57cec5SDimitry Andric// v8.5a Spectre Mitigation
4430b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSSBS} }] in
444bdd1243dSDimitry Andricdef : PStateImm0_15<"SSBS",    0b011, 0b001>;
4450b57cec5SDimitry Andric// v8.5a Memory Tagging Extension
4460b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureMTE} }] in
447bdd1243dSDimitry Andricdef : PStateImm0_15<"TCO",     0b011, 0b100>;
448bdd1243dSDimitry Andric// v8.8a Non-Maskable Interrupts
449bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureNMI} }] in
450bdd1243dSDimitry Andricdef : PStateImm0_1<"ALLINT",   0b001, 0b000, 0b000>;
451bdd1243dSDimitry Andric// v9.4a Exception-based event profiling
452bdd1243dSDimitry Andric//                  Name,      Op1,   Op2,   Crm_high
453bdd1243dSDimitry Andricdef : PStateImm0_1<"PM",       0b001, 0b000, 0b001>;
4540b57cec5SDimitry Andric
4550b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
456fe6060f1SDimitry Andric// SVCR instruction options.
457fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
458fe6060f1SDimitry Andric
459fe6060f1SDimitry Andricclass SVCR<string name, bits<3> encoding> : SearchableTable {
460fe6060f1SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
461fe6060f1SDimitry Andric  let EnumValueField = "Encoding";
462fe6060f1SDimitry Andric
463fe6060f1SDimitry Andric  string Name = name;
464fe6060f1SDimitry Andric  bits<3> Encoding;
465fe6060f1SDimitry Andric  let Encoding = encoding;
466fe6060f1SDimitry Andric  code Requires = [{ {} }];
467fe6060f1SDimitry Andric}
468fe6060f1SDimitry Andric
469fe6060f1SDimitry Andriclet Requires = [{ {AArch64::FeatureSME} }] in {
470fe6060f1SDimitry Andricdef : SVCR<"SVCRSM",   0b001>;
471fe6060f1SDimitry Andricdef : SVCR<"SVCRZA",   0b010>;
472fe6060f1SDimitry Andricdef : SVCR<"SVCRSMZA", 0b011>;
473fe6060f1SDimitry Andric}
474fe6060f1SDimitry Andric
475fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
4760b57cec5SDimitry Andric// PSB instruction options.
4770b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
4780b57cec5SDimitry Andric
4790b57cec5SDimitry Andricclass PSB<string name, bits<5> encoding> : SearchableTable {
4800b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
4810b57cec5SDimitry Andric  let EnumValueField = "Encoding";
4820b57cec5SDimitry Andric
4830b57cec5SDimitry Andric  string Name = name;
4840b57cec5SDimitry Andric  bits<5> Encoding;
4850b57cec5SDimitry Andric  let Encoding = encoding;
4860b57cec5SDimitry Andric}
4870b57cec5SDimitry Andric
4880b57cec5SDimitry Andricdef : PSB<"csync", 0x11>;
4890b57cec5SDimitry Andric
4900b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
4910b57cec5SDimitry Andric// BTI instruction options.
4920b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
4930b57cec5SDimitry Andric
494fe6060f1SDimitry Andricclass BTI<string name, bits<3> encoding> : SearchableTable {
4950b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
4960b57cec5SDimitry Andric  let EnumValueField = "Encoding";
4970b57cec5SDimitry Andric
4980b57cec5SDimitry Andric  string Name = name;
499fe6060f1SDimitry Andric  bits<3> Encoding;
5000b57cec5SDimitry Andric  let Encoding = encoding;
5010b57cec5SDimitry Andric}
5020b57cec5SDimitry Andric
503fe6060f1SDimitry Andricdef : BTI<"c",  0b010>;
504fe6060f1SDimitry Andricdef : BTI<"j",  0b100>;
505fe6060f1SDimitry Andricdef : BTI<"jc", 0b110>;
5060b57cec5SDimitry Andric
5070b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
5080b57cec5SDimitry Andric// TLBI (translation lookaside buffer invalidate) instruction options.
5090b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
5100b57cec5SDimitry Andric
511e8d8bef9SDimitry Andricclass TLBIEntry<string name, bits<3> op1, bits<4> crn, bits<4> crm,
512e8d8bef9SDimitry Andric             bits<3> op2, bit needsreg> {
5130b57cec5SDimitry Andric  string Name = name;
5140b57cec5SDimitry Andric  bits<14> Encoding;
5150b57cec5SDimitry Andric  let Encoding{13-11} = op1;
5160b57cec5SDimitry Andric  let Encoding{10-7} = crn;
5170b57cec5SDimitry Andric  let Encoding{6-3} = crm;
5180b57cec5SDimitry Andric  let Encoding{2-0} = op2;
5190b57cec5SDimitry Andric  bit NeedsReg = needsreg;
520e8d8bef9SDimitry Andric  list<string> Requires = [];
521e8d8bef9SDimitry Andric  list<string> ExtraRequires = [];
522e8d8bef9SDimitry Andric  code RequiresStr = [{ { }] # !interleave(Requires # ExtraRequires, [{, }]) # [{ } }];
5230b57cec5SDimitry Andric}
5240b57cec5SDimitry Andric
525e8d8bef9SDimitry Andricdef TLBITable : GenericTable {
526e8d8bef9SDimitry Andric  let FilterClass = "TLBIEntry";
527e8d8bef9SDimitry Andric  let CppTypeName = "TLBI";
528e8d8bef9SDimitry Andric  let Fields = ["Name", "Encoding", "NeedsReg", "RequiresStr"];
529e8d8bef9SDimitry Andric}
530e8d8bef9SDimitry Andric
531e8d8bef9SDimitry Andricdef lookupTLBIByName : SearchIndex {
532e8d8bef9SDimitry Andric  let Table = TLBITable;
533e8d8bef9SDimitry Andric  let Key = ["Name"];
534e8d8bef9SDimitry Andric}
535e8d8bef9SDimitry Andric
536e8d8bef9SDimitry Andricdef lookupTLBIByEncoding : SearchIndex {
537e8d8bef9SDimitry Andric  let Table = TLBITable;
538e8d8bef9SDimitry Andric  let Key = ["Encoding"];
539e8d8bef9SDimitry Andric}
540e8d8bef9SDimitry Andric
541e8d8bef9SDimitry Andricmulticlass TLBI<string name, bits<3> op1, bits<4> crn, bits<4> crm,
542e8d8bef9SDimitry Andric             bits<3> op2, bit needsreg = 1> {
543e8d8bef9SDimitry Andric  def : TLBIEntry<name, op1, crn, crm, op2, needsreg>;
544e8d8bef9SDimitry Andric  def : TLBIEntry<!strconcat(name, "nXS"), op1, crn, crm, op2, needsreg> {
545e8d8bef9SDimitry Andric    let Encoding{7} = 1;
546e8d8bef9SDimitry Andric    let ExtraRequires = ["AArch64::FeatureXS"];
547e8d8bef9SDimitry Andric  }
548e8d8bef9SDimitry Andric}
549e8d8bef9SDimitry Andric
550e8d8bef9SDimitry Andricdefm : TLBI<"IPAS2E1IS",    0b100, 0b1000, 0b0000, 0b001>;
551e8d8bef9SDimitry Andricdefm : TLBI<"IPAS2LE1IS",   0b100, 0b1000, 0b0000, 0b101>;
552e8d8bef9SDimitry Andricdefm : TLBI<"VMALLE1IS",    0b000, 0b1000, 0b0011, 0b000, 0>;
553e8d8bef9SDimitry Andricdefm : TLBI<"ALLE2IS",      0b100, 0b1000, 0b0011, 0b000, 0>;
554e8d8bef9SDimitry Andricdefm : TLBI<"ALLE3IS",      0b110, 0b1000, 0b0011, 0b000, 0>;
555e8d8bef9SDimitry Andricdefm : TLBI<"VAE1IS",       0b000, 0b1000, 0b0011, 0b001>;
556e8d8bef9SDimitry Andricdefm : TLBI<"VAE2IS",       0b100, 0b1000, 0b0011, 0b001>;
557e8d8bef9SDimitry Andricdefm : TLBI<"VAE3IS",       0b110, 0b1000, 0b0011, 0b001>;
558e8d8bef9SDimitry Andricdefm : TLBI<"ASIDE1IS",     0b000, 0b1000, 0b0011, 0b010>;
559e8d8bef9SDimitry Andricdefm : TLBI<"VAAE1IS",      0b000, 0b1000, 0b0011, 0b011>;
560e8d8bef9SDimitry Andricdefm : TLBI<"ALLE1IS",      0b100, 0b1000, 0b0011, 0b100, 0>;
561e8d8bef9SDimitry Andricdefm : TLBI<"VALE1IS",      0b000, 0b1000, 0b0011, 0b101>;
562e8d8bef9SDimitry Andricdefm : TLBI<"VALE2IS",      0b100, 0b1000, 0b0011, 0b101>;
563e8d8bef9SDimitry Andricdefm : TLBI<"VALE3IS",      0b110, 0b1000, 0b0011, 0b101>;
564e8d8bef9SDimitry Andricdefm : TLBI<"VMALLS12E1IS", 0b100, 0b1000, 0b0011, 0b110, 0>;
565e8d8bef9SDimitry Andricdefm : TLBI<"VAALE1IS",     0b000, 0b1000, 0b0011, 0b111>;
566e8d8bef9SDimitry Andricdefm : TLBI<"IPAS2E1",      0b100, 0b1000, 0b0100, 0b001>;
567e8d8bef9SDimitry Andricdefm : TLBI<"IPAS2LE1",     0b100, 0b1000, 0b0100, 0b101>;
568e8d8bef9SDimitry Andricdefm : TLBI<"VMALLE1",      0b000, 0b1000, 0b0111, 0b000, 0>;
569e8d8bef9SDimitry Andricdefm : TLBI<"ALLE2",        0b100, 0b1000, 0b0111, 0b000, 0>;
570e8d8bef9SDimitry Andricdefm : TLBI<"ALLE3",        0b110, 0b1000, 0b0111, 0b000, 0>;
571e8d8bef9SDimitry Andricdefm : TLBI<"VAE1",         0b000, 0b1000, 0b0111, 0b001>;
572e8d8bef9SDimitry Andricdefm : TLBI<"VAE2",         0b100, 0b1000, 0b0111, 0b001>;
573e8d8bef9SDimitry Andricdefm : TLBI<"VAE3",         0b110, 0b1000, 0b0111, 0b001>;
574e8d8bef9SDimitry Andricdefm : TLBI<"ASIDE1",       0b000, 0b1000, 0b0111, 0b010>;
575e8d8bef9SDimitry Andricdefm : TLBI<"VAAE1",        0b000, 0b1000, 0b0111, 0b011>;
576e8d8bef9SDimitry Andricdefm : TLBI<"ALLE1",        0b100, 0b1000, 0b0111, 0b100, 0>;
577e8d8bef9SDimitry Andricdefm : TLBI<"VALE1",        0b000, 0b1000, 0b0111, 0b101>;
578e8d8bef9SDimitry Andricdefm : TLBI<"VALE2",        0b100, 0b1000, 0b0111, 0b101>;
579e8d8bef9SDimitry Andricdefm : TLBI<"VALE3",        0b110, 0b1000, 0b0111, 0b101>;
580e8d8bef9SDimitry Andricdefm : TLBI<"VMALLS12E1",   0b100, 0b1000, 0b0111, 0b110, 0>;
581e8d8bef9SDimitry Andricdefm : TLBI<"VAALE1",       0b000, 0b1000, 0b0111, 0b111>;
5820b57cec5SDimitry Andric
5830b57cec5SDimitry Andric// Armv8.4-A Translation Lookaside Buffer Instructions (TLBI)
584e8d8bef9SDimitry Andriclet Requires = ["AArch64::FeatureTLB_RMI"] in {
5850b57cec5SDimitry Andric// Armv8.4-A Outer Sharable TLB Maintenance instructions:
5860b57cec5SDimitry Andric//                         op1    CRn     CRm     op2
587e8d8bef9SDimitry Andricdefm : TLBI<"VMALLE1OS",    0b000, 0b1000, 0b0001, 0b000, 0>;
588e8d8bef9SDimitry Andricdefm : TLBI<"VAE1OS",       0b000, 0b1000, 0b0001, 0b001>;
589e8d8bef9SDimitry Andricdefm : TLBI<"ASIDE1OS",     0b000, 0b1000, 0b0001, 0b010>;
590e8d8bef9SDimitry Andricdefm : TLBI<"VAAE1OS",      0b000, 0b1000, 0b0001, 0b011>;
591e8d8bef9SDimitry Andricdefm : TLBI<"VALE1OS",      0b000, 0b1000, 0b0001, 0b101>;
592e8d8bef9SDimitry Andricdefm : TLBI<"VAALE1OS",     0b000, 0b1000, 0b0001, 0b111>;
593e8d8bef9SDimitry Andricdefm : TLBI<"IPAS2E1OS",    0b100, 0b1000, 0b0100, 0b000>;
594e8d8bef9SDimitry Andricdefm : TLBI<"IPAS2LE1OS",   0b100, 0b1000, 0b0100, 0b100>;
595e8d8bef9SDimitry Andricdefm : TLBI<"VAE2OS",       0b100, 0b1000, 0b0001, 0b001>;
596e8d8bef9SDimitry Andricdefm : TLBI<"VALE2OS",      0b100, 0b1000, 0b0001, 0b101>;
597e8d8bef9SDimitry Andricdefm : TLBI<"VMALLS12E1OS", 0b100, 0b1000, 0b0001, 0b110, 0>;
598e8d8bef9SDimitry Andricdefm : TLBI<"VAE3OS",       0b110, 0b1000, 0b0001, 0b001>;
599e8d8bef9SDimitry Andricdefm : TLBI<"VALE3OS",      0b110, 0b1000, 0b0001, 0b101>;
600e8d8bef9SDimitry Andricdefm : TLBI<"ALLE2OS",      0b100, 0b1000, 0b0001, 0b000, 0>;
601e8d8bef9SDimitry Andricdefm : TLBI<"ALLE1OS",      0b100, 0b1000, 0b0001, 0b100, 0>;
602e8d8bef9SDimitry Andricdefm : TLBI<"ALLE3OS",      0b110, 0b1000, 0b0001, 0b000, 0>;
6030b57cec5SDimitry Andric
6040b57cec5SDimitry Andric// Armv8.4-A TLB Range Maintenance instructions:
6050b57cec5SDimitry Andric//                         op1    CRn     CRm     op2
606e8d8bef9SDimitry Andricdefm : TLBI<"RVAE1",        0b000, 0b1000, 0b0110, 0b001>;
607e8d8bef9SDimitry Andricdefm : TLBI<"RVAAE1",       0b000, 0b1000, 0b0110, 0b011>;
608e8d8bef9SDimitry Andricdefm : TLBI<"RVALE1",       0b000, 0b1000, 0b0110, 0b101>;
609e8d8bef9SDimitry Andricdefm : TLBI<"RVAALE1",      0b000, 0b1000, 0b0110, 0b111>;
610e8d8bef9SDimitry Andricdefm : TLBI<"RVAE1IS",      0b000, 0b1000, 0b0010, 0b001>;
611e8d8bef9SDimitry Andricdefm : TLBI<"RVAAE1IS",     0b000, 0b1000, 0b0010, 0b011>;
612e8d8bef9SDimitry Andricdefm : TLBI<"RVALE1IS",     0b000, 0b1000, 0b0010, 0b101>;
613e8d8bef9SDimitry Andricdefm : TLBI<"RVAALE1IS",    0b000, 0b1000, 0b0010, 0b111>;
614e8d8bef9SDimitry Andricdefm : TLBI<"RVAE1OS",      0b000, 0b1000, 0b0101, 0b001>;
615e8d8bef9SDimitry Andricdefm : TLBI<"RVAAE1OS",     0b000, 0b1000, 0b0101, 0b011>;
616e8d8bef9SDimitry Andricdefm : TLBI<"RVALE1OS",     0b000, 0b1000, 0b0101, 0b101>;
617e8d8bef9SDimitry Andricdefm : TLBI<"RVAALE1OS",    0b000, 0b1000, 0b0101, 0b111>;
618e8d8bef9SDimitry Andricdefm : TLBI<"RIPAS2E1IS",   0b100, 0b1000, 0b0000, 0b010>;
619e8d8bef9SDimitry Andricdefm : TLBI<"RIPAS2LE1IS",  0b100, 0b1000, 0b0000, 0b110>;
620e8d8bef9SDimitry Andricdefm : TLBI<"RIPAS2E1",     0b100, 0b1000, 0b0100, 0b010>;
621e8d8bef9SDimitry Andricdefm : TLBI<"RIPAS2LE1",    0b100, 0b1000, 0b0100, 0b110>;
622e8d8bef9SDimitry Andricdefm : TLBI<"RIPAS2E1OS",   0b100, 0b1000, 0b0100, 0b011>;
623e8d8bef9SDimitry Andricdefm : TLBI<"RIPAS2LE1OS",  0b100, 0b1000, 0b0100, 0b111>;
624e8d8bef9SDimitry Andricdefm : TLBI<"RVAE2",        0b100, 0b1000, 0b0110, 0b001>;
625e8d8bef9SDimitry Andricdefm : TLBI<"RVALE2",       0b100, 0b1000, 0b0110, 0b101>;
626e8d8bef9SDimitry Andricdefm : TLBI<"RVAE2IS",      0b100, 0b1000, 0b0010, 0b001>;
627e8d8bef9SDimitry Andricdefm : TLBI<"RVALE2IS",     0b100, 0b1000, 0b0010, 0b101>;
628e8d8bef9SDimitry Andricdefm : TLBI<"RVAE2OS",      0b100, 0b1000, 0b0101, 0b001>;
629e8d8bef9SDimitry Andricdefm : TLBI<"RVALE2OS",     0b100, 0b1000, 0b0101, 0b101>;
630e8d8bef9SDimitry Andricdefm : TLBI<"RVAE3",        0b110, 0b1000, 0b0110, 0b001>;
631e8d8bef9SDimitry Andricdefm : TLBI<"RVALE3",       0b110, 0b1000, 0b0110, 0b101>;
632e8d8bef9SDimitry Andricdefm : TLBI<"RVAE3IS",      0b110, 0b1000, 0b0010, 0b001>;
633e8d8bef9SDimitry Andricdefm : TLBI<"RVALE3IS",     0b110, 0b1000, 0b0010, 0b101>;
634e8d8bef9SDimitry Andricdefm : TLBI<"RVAE3OS",      0b110, 0b1000, 0b0101, 0b001>;
635e8d8bef9SDimitry Andricdefm : TLBI<"RVALE3OS",     0b110, 0b1000, 0b0101, 0b101>;
6360b57cec5SDimitry Andric} //FeatureTLB_RMI
6370b57cec5SDimitry Andric
638fe6060f1SDimitry Andric// Armv9-A Realm Management Extention TLBI Instructions
639fe6060f1SDimitry Andriclet Requires = ["AArch64::FeatureRME"] in {
640fe6060f1SDimitry Andricdefm : TLBI<"RPAOS",        0b110, 0b1000, 0b0100, 0b011>;
641fe6060f1SDimitry Andricdefm : TLBI<"RPALOS",       0b110, 0b1000, 0b0100, 0b111>;
642fe6060f1SDimitry Andricdefm : TLBI<"PAALLOS",      0b110, 0b1000, 0b0001, 0b100, 0>;
643fe6060f1SDimitry Andricdefm : TLBI<"PAALL",        0b110, 0b1000, 0b0111, 0b100, 0>;
644fe6060f1SDimitry Andric}
645fe6060f1SDimitry Andric
646cb14a3feSDimitry Andric// Armv9.5-A TLBI VMALL for Dirty State
647cb14a3feSDimitry Andriclet Requires = ["AArch64::FeatureTLBIW"] in {
648cb14a3feSDimitry Andric//                           op1,   CRn,    CRm,    op2,   needsreg
649cb14a3feSDimitry Andricdefm : TLBI<"VMALLWS2E1",    0b100, 0b1000, 0b0110, 0b010, 0>;
650cb14a3feSDimitry Andricdefm : TLBI<"VMALLWS2E1IS",  0b100, 0b1000, 0b0010, 0b010, 0>;
651cb14a3feSDimitry Andricdefm : TLBI<"VMALLWS2E1OS",  0b100, 0b1000, 0b0101, 0b010, 0>;
652cb14a3feSDimitry Andric}
653cb14a3feSDimitry Andric
6540b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
6550b57cec5SDimitry Andric// MRS/MSR (system register read/write) instruction options.
6560b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
6570b57cec5SDimitry Andric
6580b57cec5SDimitry Andricclass SysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
6590b57cec5SDimitry Andric             bits<3> op2> : SearchableTable {
6600b57cec5SDimitry Andric  let SearchableFields = ["Name", "Encoding"];
6610b57cec5SDimitry Andric  let EnumValueField = "Encoding";
6620b57cec5SDimitry Andric
6630b57cec5SDimitry Andric  string Name = name;
664349cc55cSDimitry Andric  string AltName = name;
6650b57cec5SDimitry Andric  bits<16> Encoding;
6660b57cec5SDimitry Andric  let Encoding{15-14} = op0;
6670b57cec5SDimitry Andric  let Encoding{13-11} = op1;
6680b57cec5SDimitry Andric  let Encoding{10-7} = crn;
6690b57cec5SDimitry Andric  let Encoding{6-3} = crm;
6700b57cec5SDimitry Andric  let Encoding{2-0} = op2;
6710b57cec5SDimitry Andric  bit Readable = ?;
6720b57cec5SDimitry Andric  bit Writeable = ?;
6730b57cec5SDimitry Andric  code Requires = [{ {} }];
6740b57cec5SDimitry Andric}
6750b57cec5SDimitry Andric
6760b57cec5SDimitry Andricclass RWSysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
6770b57cec5SDimitry Andric               bits<3> op2>
6780b57cec5SDimitry Andric    : SysReg<name, op0, op1, crn, crm, op2> {
6790b57cec5SDimitry Andric  let Readable = 1;
6800b57cec5SDimitry Andric  let Writeable = 1;
6810b57cec5SDimitry Andric}
6820b57cec5SDimitry Andric
6830b57cec5SDimitry Andricclass ROSysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
6840b57cec5SDimitry Andric               bits<3> op2>
6850b57cec5SDimitry Andric    : SysReg<name, op0, op1, crn, crm, op2> {
6860b57cec5SDimitry Andric  let Readable = 1;
6870b57cec5SDimitry Andric  let Writeable = 0;
6880b57cec5SDimitry Andric}
6890b57cec5SDimitry Andric
6900b57cec5SDimitry Andricclass WOSysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
6910b57cec5SDimitry Andric               bits<3> op2>
6920b57cec5SDimitry Andric    : SysReg<name, op0, op1, crn, crm, op2> {
6930b57cec5SDimitry Andric  let Readable = 0;
6940b57cec5SDimitry Andric  let Writeable = 1;
6950b57cec5SDimitry Andric}
6960b57cec5SDimitry Andric
6970b57cec5SDimitry Andric//===----------------------
6980b57cec5SDimitry Andric// Read-only regs
6990b57cec5SDimitry Andric//===----------------------
7000b57cec5SDimitry Andric
7010b57cec5SDimitry Andric//                                    Op0    Op1     CRn     CRm    Op2
7020b57cec5SDimitry Andricdef : ROSysReg<"MDCCSR_EL0",         0b10, 0b011, 0b0000, 0b0001, 0b000>;
7030b57cec5SDimitry Andricdef : ROSysReg<"DBGDTRRX_EL0",       0b10, 0b011, 0b0000, 0b0101, 0b000>;
7040b57cec5SDimitry Andricdef : ROSysReg<"MDRAR_EL1",          0b10, 0b000, 0b0001, 0b0000, 0b000>;
7050b57cec5SDimitry Andricdef : ROSysReg<"OSLSR_EL1",          0b10, 0b000, 0b0001, 0b0001, 0b100>;
7060b57cec5SDimitry Andricdef : ROSysReg<"DBGAUTHSTATUS_EL1",  0b10, 0b000, 0b0111, 0b1110, 0b110>;
7070b57cec5SDimitry Andricdef : ROSysReg<"PMCEID0_EL0",        0b11, 0b011, 0b1001, 0b1100, 0b110>;
7080b57cec5SDimitry Andricdef : ROSysReg<"PMCEID1_EL0",        0b11, 0b011, 0b1001, 0b1100, 0b111>;
70981ad6265SDimitry Andricdef : ROSysReg<"PMMIR_EL1",          0b11, 0b000, 0b1001, 0b1110, 0b110>;
7100b57cec5SDimitry Andricdef : ROSysReg<"MIDR_EL1",           0b11, 0b000, 0b0000, 0b0000, 0b000>;
7110b57cec5SDimitry Andricdef : ROSysReg<"CCSIDR_EL1",         0b11, 0b001, 0b0000, 0b0000, 0b000>;
7120b57cec5SDimitry Andric
7130b57cec5SDimitry Andric//v8.3 CCIDX - extending the CCsIDr number of sets
7140b57cec5SDimitry Andricdef : ROSysReg<"CCSIDR2_EL1",        0b11, 0b001, 0b0000, 0b0000, 0b010> {
7150b57cec5SDimitry Andric  let Requires = [{ {AArch64::FeatureCCIDX} }];
7160b57cec5SDimitry Andric}
7170b57cec5SDimitry Andricdef : ROSysReg<"CLIDR_EL1",          0b11, 0b001, 0b0000, 0b0000, 0b001>;
7180b57cec5SDimitry Andricdef : ROSysReg<"CTR_EL0",            0b11, 0b011, 0b0000, 0b0000, 0b001>;
7190b57cec5SDimitry Andricdef : ROSysReg<"MPIDR_EL1",          0b11, 0b000, 0b0000, 0b0000, 0b101>;
7200b57cec5SDimitry Andricdef : ROSysReg<"REVIDR_EL1",         0b11, 0b000, 0b0000, 0b0000, 0b110>;
7210b57cec5SDimitry Andricdef : ROSysReg<"AIDR_EL1",           0b11, 0b001, 0b0000, 0b0000, 0b111>;
7220b57cec5SDimitry Andricdef : ROSysReg<"DCZID_EL0",          0b11, 0b011, 0b0000, 0b0000, 0b111>;
7230b57cec5SDimitry Andricdef : ROSysReg<"ID_PFR0_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b000>;
7240b57cec5SDimitry Andricdef : ROSysReg<"ID_PFR1_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b001>;
7250b57cec5SDimitry Andricdef : ROSysReg<"ID_PFR2_EL1",        0b11, 0b000, 0b0000, 0b0011, 0b100> {
7260b57cec5SDimitry Andric    let Requires = [{ {AArch64::FeatureSpecRestrict} }];
7270b57cec5SDimitry Andric}
7280b57cec5SDimitry Andricdef : ROSysReg<"ID_DFR0_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b010>;
729bdd1243dSDimitry Andricdef : ROSysReg<"ID_DFR1_EL1",        0b11, 0b000, 0b0000, 0b0011, 0b101>;
7300b57cec5SDimitry Andricdef : ROSysReg<"ID_AFR0_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b011>;
7310b57cec5SDimitry Andricdef : ROSysReg<"ID_MMFR0_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b100>;
7320b57cec5SDimitry Andricdef : ROSysReg<"ID_MMFR1_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b101>;
7330b57cec5SDimitry Andricdef : ROSysReg<"ID_MMFR2_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b110>;
7340b57cec5SDimitry Andricdef : ROSysReg<"ID_MMFR3_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b111>;
7350b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR0_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b000>;
7360b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR1_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b001>;
7370b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR2_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b010>;
7380b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR3_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b011>;
7390b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR4_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b100>;
7400b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR5_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b101>;
7410b57cec5SDimitry Andricdef : ROSysReg<"ID_ISAR6_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b111> {
7420b57cec5SDimitry Andric  let Requires = [{ {AArch64::HasV8_2aOps} }];
7430b57cec5SDimitry Andric}
7440b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64PFR0_EL1",     0b11, 0b000, 0b0000, 0b0100, 0b000>;
7450b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64PFR1_EL1",     0b11, 0b000, 0b0000, 0b0100, 0b001>;
746bdd1243dSDimitry Andricdef : ROSysReg<"ID_AA64PFR2_EL1",     0b11, 0b000, 0b0000, 0b0100, 0b010>;
7470b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64DFR0_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b000>;
7480b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64DFR1_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b001>;
7495f757f3fSDimitry Andricdef : ROSysReg<"ID_AA64DFR2_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b010>;
7500b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64AFR0_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b100>;
7510b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64AFR1_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b101>;
7520b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64ISAR0_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b000>;
7530b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64ISAR1_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b001>;
754e8d8bef9SDimitry Andricdef : ROSysReg<"ID_AA64ISAR2_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b010>;
7555f757f3fSDimitry Andricdef : ROSysReg<"ID_AA64ISAR3_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b011>;
7560b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64MMFR0_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b000>;
7570b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64MMFR1_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b001>;
7580b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64MMFR2_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b010>;
759bdd1243dSDimitry Andricdef : ROSysReg<"ID_AA64MMFR3_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b011>;
760bdd1243dSDimitry Andricdef : ROSysReg<"ID_AA64MMFR4_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b100>;
7610b57cec5SDimitry Andricdef : ROSysReg<"MVFR0_EL1",           0b11, 0b000, 0b0000, 0b0011, 0b000>;
7620b57cec5SDimitry Andricdef : ROSysReg<"MVFR1_EL1",           0b11, 0b000, 0b0000, 0b0011, 0b001>;
7630b57cec5SDimitry Andricdef : ROSysReg<"MVFR2_EL1",           0b11, 0b000, 0b0000, 0b0011, 0b010>;
7640b57cec5SDimitry Andricdef : ROSysReg<"RVBAR_EL1",           0b11, 0b000, 0b1100, 0b0000, 0b001>;
7650b57cec5SDimitry Andricdef : ROSysReg<"RVBAR_EL2",           0b11, 0b100, 0b1100, 0b0000, 0b001>;
7660b57cec5SDimitry Andricdef : ROSysReg<"RVBAR_EL3",           0b11, 0b110, 0b1100, 0b0000, 0b001>;
7670b57cec5SDimitry Andricdef : ROSysReg<"ISR_EL1",             0b11, 0b000, 0b1100, 0b0001, 0b000>;
7680b57cec5SDimitry Andricdef : ROSysReg<"CNTPCT_EL0",          0b11, 0b011, 0b1110, 0b0000, 0b001>;
7690b57cec5SDimitry Andricdef : ROSysReg<"CNTVCT_EL0",          0b11, 0b011, 0b1110, 0b0000, 0b010>;
7700b57cec5SDimitry Andricdef : ROSysReg<"ID_MMFR4_EL1",        0b11, 0b000, 0b0000, 0b0010, 0b110>;
7718bcb0991SDimitry Andricdef : ROSysReg<"ID_MMFR5_EL1",        0b11, 0b000, 0b0000, 0b0011, 0b110>;
7720b57cec5SDimitry Andric
7730b57cec5SDimitry Andric// Trace registers
7740b57cec5SDimitry Andric//                                   Op0    Op1     CRn     CRm    Op2
7750b57cec5SDimitry Andricdef : ROSysReg<"TRCSTATR",           0b10, 0b001, 0b0000, 0b0011, 0b000>;
7760b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR8",            0b10, 0b001, 0b0000, 0b0000, 0b110>;
7770b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR9",            0b10, 0b001, 0b0000, 0b0001, 0b110>;
7780b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR10",           0b10, 0b001, 0b0000, 0b0010, 0b110>;
7790b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR11",           0b10, 0b001, 0b0000, 0b0011, 0b110>;
7800b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR12",           0b10, 0b001, 0b0000, 0b0100, 0b110>;
7810b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR13",           0b10, 0b001, 0b0000, 0b0101, 0b110>;
7820b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR0",            0b10, 0b001, 0b0000, 0b1000, 0b111>;
7830b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR1",            0b10, 0b001, 0b0000, 0b1001, 0b111>;
7840b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR2",            0b10, 0b001, 0b0000, 0b1010, 0b111>;
7850b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR3",            0b10, 0b001, 0b0000, 0b1011, 0b111>;
7860b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR4",            0b10, 0b001, 0b0000, 0b1100, 0b111>;
7870b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR5",            0b10, 0b001, 0b0000, 0b1101, 0b111>;
7880b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR6",            0b10, 0b001, 0b0000, 0b1110, 0b111>;
7890b57cec5SDimitry Andricdef : ROSysReg<"TRCIDR7",            0b10, 0b001, 0b0000, 0b1111, 0b111>;
7900b57cec5SDimitry Andricdef : ROSysReg<"TRCOSLSR",           0b10, 0b001, 0b0001, 0b0001, 0b100>;
7910b57cec5SDimitry Andricdef : ROSysReg<"TRCPDSR",            0b10, 0b001, 0b0001, 0b0101, 0b100>;
7920b57cec5SDimitry Andricdef : ROSysReg<"TRCDEVAFF0",         0b10, 0b001, 0b0111, 0b1010, 0b110>;
7930b57cec5SDimitry Andricdef : ROSysReg<"TRCDEVAFF1",         0b10, 0b001, 0b0111, 0b1011, 0b110>;
7940b57cec5SDimitry Andricdef : ROSysReg<"TRCLSR",             0b10, 0b001, 0b0111, 0b1101, 0b110>;
7950b57cec5SDimitry Andricdef : ROSysReg<"TRCAUTHSTATUS",      0b10, 0b001, 0b0111, 0b1110, 0b110>;
7960b57cec5SDimitry Andricdef : ROSysReg<"TRCDEVARCH",         0b10, 0b001, 0b0111, 0b1111, 0b110>;
7970b57cec5SDimitry Andricdef : ROSysReg<"TRCDEVID",           0b10, 0b001, 0b0111, 0b0010, 0b111>;
7980b57cec5SDimitry Andricdef : ROSysReg<"TRCDEVTYPE",         0b10, 0b001, 0b0111, 0b0011, 0b111>;
7990b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR4",           0b10, 0b001, 0b0111, 0b0100, 0b111>;
8000b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR5",           0b10, 0b001, 0b0111, 0b0101, 0b111>;
8010b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR6",           0b10, 0b001, 0b0111, 0b0110, 0b111>;
8020b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR7",           0b10, 0b001, 0b0111, 0b0111, 0b111>;
8030b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR0",           0b10, 0b001, 0b0111, 0b1000, 0b111>;
8040b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR1",           0b10, 0b001, 0b0111, 0b1001, 0b111>;
8050b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR2",           0b10, 0b001, 0b0111, 0b1010, 0b111>;
8060b57cec5SDimitry Andricdef : ROSysReg<"TRCPIDR3",           0b10, 0b001, 0b0111, 0b1011, 0b111>;
8070b57cec5SDimitry Andricdef : ROSysReg<"TRCCIDR0",           0b10, 0b001, 0b0111, 0b1100, 0b111>;
8080b57cec5SDimitry Andricdef : ROSysReg<"TRCCIDR1",           0b10, 0b001, 0b0111, 0b1101, 0b111>;
8090b57cec5SDimitry Andricdef : ROSysReg<"TRCCIDR2",           0b10, 0b001, 0b0111, 0b1110, 0b111>;
8100b57cec5SDimitry Andricdef : ROSysReg<"TRCCIDR3",           0b10, 0b001, 0b0111, 0b1111, 0b111>;
8110b57cec5SDimitry Andric
8120b57cec5SDimitry Andric// GICv3 registers
8130b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
8140b57cec5SDimitry Andricdef : ROSysReg<"ICC_IAR1_EL1",       0b11, 0b000, 0b1100, 0b1100, 0b000>;
8150b57cec5SDimitry Andricdef : ROSysReg<"ICC_IAR0_EL1",       0b11, 0b000, 0b1100, 0b1000, 0b000>;
8160b57cec5SDimitry Andricdef : ROSysReg<"ICC_HPPIR1_EL1",     0b11, 0b000, 0b1100, 0b1100, 0b010>;
8170b57cec5SDimitry Andricdef : ROSysReg<"ICC_HPPIR0_EL1",     0b11, 0b000, 0b1100, 0b1000, 0b010>;
8180b57cec5SDimitry Andricdef : ROSysReg<"ICC_RPR_EL1",        0b11, 0b000, 0b1100, 0b1011, 0b011>;
8190b57cec5SDimitry Andricdef : ROSysReg<"ICH_VTR_EL2",        0b11, 0b100, 0b1100, 0b1011, 0b001>;
8200b57cec5SDimitry Andricdef : ROSysReg<"ICH_EISR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b011>;
8210b57cec5SDimitry Andricdef : ROSysReg<"ICH_ELRSR_EL2",      0b11, 0b100, 0b1100, 0b1011, 0b101>;
8220b57cec5SDimitry Andric
8230b57cec5SDimitry Andric// SVE control registers
8240b57cec5SDimitry Andric//                                   Op0   Op1    CRn     CRm     Op2
8250b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSVE} }] in {
8260b57cec5SDimitry Andricdef : ROSysReg<"ID_AA64ZFR0_EL1",    0b11, 0b000, 0b0000, 0b0100, 0b100>;
8270b57cec5SDimitry Andric}
8280b57cec5SDimitry Andric
8290b57cec5SDimitry Andric// v8.1a "Limited Ordering Regions" extension-specific system register
8300b57cec5SDimitry Andric//                         Op0    Op1     CRn     CRm    Op2
8310b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureLOR} }] in
8320b57cec5SDimitry Andricdef : ROSysReg<"LORID_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b111>;
8330b57cec5SDimitry Andric
8340b57cec5SDimitry Andric// v8.2a "RAS extension" registers
8350b57cec5SDimitry Andric//                         Op0    Op1     CRn     CRm    Op2
8360b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureRAS} }] in {
8370b57cec5SDimitry Andricdef : ROSysReg<"ERRIDR_EL1", 0b11, 0b000, 0b0101, 0b0011, 0b000>;
8380b57cec5SDimitry Andricdef : ROSysReg<"ERXFR_EL1",  0b11, 0b000, 0b0101, 0b0100, 0b000>;
8390b57cec5SDimitry Andric}
8400b57cec5SDimitry Andric
8410b57cec5SDimitry Andric// v8.5a "random number" registers
8420b57cec5SDimitry Andric//                       Op0   Op1    CRn     CRm     Op2
8430b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureRandGen} }] in {
8440b57cec5SDimitry Andricdef : ROSysReg<"RNDR",   0b11, 0b011, 0b0010, 0b0100, 0b000>;
8450b57cec5SDimitry Andricdef : ROSysReg<"RNDRRS", 0b11, 0b011, 0b0010, 0b0100, 0b001>;
8460b57cec5SDimitry Andric}
8470b57cec5SDimitry Andric
8480b57cec5SDimitry Andric// v8.5a Software Context Number registers
8490b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSpecRestrict} }] in {
8500b57cec5SDimitry Andricdef : RWSysReg<"SCXTNUM_EL0", 0b11, 0b011, 0b1101, 0b0000, 0b111>;
8510b57cec5SDimitry Andricdef : RWSysReg<"SCXTNUM_EL1", 0b11, 0b000, 0b1101, 0b0000, 0b111>;
8520b57cec5SDimitry Andricdef : RWSysReg<"SCXTNUM_EL2", 0b11, 0b100, 0b1101, 0b0000, 0b111>;
8530b57cec5SDimitry Andricdef : RWSysReg<"SCXTNUM_EL3", 0b11, 0b110, 0b1101, 0b0000, 0b111>;
8540b57cec5SDimitry Andricdef : RWSysReg<"SCXTNUM_EL12", 0b11, 0b101, 0b1101, 0b0000, 0b111>;
8550b57cec5SDimitry Andric}
8560b57cec5SDimitry Andric
857fe6060f1SDimitry Andric// v9a Realm Management Extension registers
858fe6060f1SDimitry Andriclet Requires = [{ {AArch64::FeatureRME} }] in {
859fe6060f1SDimitry Andricdef : RWSysReg<"GPCCR_EL3", 0b11, 0b110, 0b0010, 0b0001, 0b110>;
860fe6060f1SDimitry Andricdef : RWSysReg<"GPTBR_EL3", 0b11, 0b110, 0b0010, 0b0001, 0b100>;
861fe6060f1SDimitry Andric}
862bdd1243dSDimitry Andric// MFAR_EL3 is part of both FEAT_RME and FEAT_PFAR (further below). The latter
863bdd1243dSDimitry Andric// is unconditional so this register has to be too.
864bdd1243dSDimitry Andricdef : RWSysReg<"MFAR_EL3",  0b11, 0b110, 0b0110, 0b0000, 0b101>;
865bdd1243dSDimitry Andric
866bdd1243dSDimitry Andric// v9a Memory Encryption Contexts Extension registers
867bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureMEC} }] in {
868bdd1243dSDimitry Andricdef : ROSysReg<"MECIDR_EL2",     0b11, 0b100, 0b1010, 0b1000, 0b111>;
869bdd1243dSDimitry Andricdef : RWSysReg<"MECID_P0_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b000>;
870bdd1243dSDimitry Andricdef : RWSysReg<"MECID_A0_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b001>;
871bdd1243dSDimitry Andricdef : RWSysReg<"MECID_P1_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b010>;
872bdd1243dSDimitry Andricdef : RWSysReg<"MECID_A1_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b011>;
873bdd1243dSDimitry Andricdef : RWSysReg<"VMECID_P_EL2",   0b11, 0b100, 0b1010, 0b1001, 0b000>;
874bdd1243dSDimitry Andricdef : RWSysReg<"VMECID_A_EL2",   0b11, 0b100, 0b1010, 0b1001, 0b001>;
875bdd1243dSDimitry Andricdef : RWSysReg<"MECID_RL_A_EL3", 0b11, 0b110, 0b1010, 0b1010, 0b001>;
876bdd1243dSDimitry Andric}
877fe6060f1SDimitry Andric
878fe6060f1SDimitry Andric// v9-a Scalable Matrix Extension (SME) registers
879fe6060f1SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
880fe6060f1SDimitry Andriclet Requires = [{ {AArch64::FeatureSME} }] in {
881fe6060f1SDimitry Andricdef : ROSysReg<"ID_AA64SMFR0_EL1", 0b11, 0b000, 0b0000, 0b0100, 0b101>;
882fe6060f1SDimitry Andric}
883fe6060f1SDimitry Andric
8840b57cec5SDimitry Andric//===----------------------
8850b57cec5SDimitry Andric// Write-only regs
8860b57cec5SDimitry Andric//===----------------------
8870b57cec5SDimitry Andric
8880b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
8890b57cec5SDimitry Andricdef : WOSysReg<"DBGDTRTX_EL0",       0b10, 0b011, 0b0000, 0b0101, 0b000>;
8900b57cec5SDimitry Andricdef : WOSysReg<"OSLAR_EL1",          0b10, 0b000, 0b0001, 0b0000, 0b100>;
8910b57cec5SDimitry Andricdef : WOSysReg<"PMSWINC_EL0",        0b11, 0b011, 0b1001, 0b1100, 0b100>;
8920b57cec5SDimitry Andric
8930b57cec5SDimitry Andric// Trace Registers
8940b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
8950b57cec5SDimitry Andricdef : WOSysReg<"TRCOSLAR",           0b10, 0b001, 0b0001, 0b0000, 0b100>;
8960b57cec5SDimitry Andricdef : WOSysReg<"TRCLAR",             0b10, 0b001, 0b0111, 0b1100, 0b110>;
8970b57cec5SDimitry Andric
8980b57cec5SDimitry Andric// GICv3 registers
8990b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
9000b57cec5SDimitry Andricdef : WOSysReg<"ICC_EOIR1_EL1",      0b11, 0b000, 0b1100, 0b1100, 0b001>;
9010b57cec5SDimitry Andricdef : WOSysReg<"ICC_EOIR0_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b001>;
9020b57cec5SDimitry Andricdef : WOSysReg<"ICC_DIR_EL1",        0b11, 0b000, 0b1100, 0b1011, 0b001>;
9030b57cec5SDimitry Andricdef : WOSysReg<"ICC_SGI1R_EL1",      0b11, 0b000, 0b1100, 0b1011, 0b101>;
9040b57cec5SDimitry Andricdef : WOSysReg<"ICC_ASGI1R_EL1",     0b11, 0b000, 0b1100, 0b1011, 0b110>;
9050b57cec5SDimitry Andricdef : WOSysReg<"ICC_SGI0R_EL1",      0b11, 0b000, 0b1100, 0b1011, 0b111>;
9060b57cec5SDimitry Andric
9070b57cec5SDimitry Andric//===----------------------
9080b57cec5SDimitry Andric// Read-write regs
9090b57cec5SDimitry Andric//===----------------------
9100b57cec5SDimitry Andric
9110b57cec5SDimitry Andric//                                   Op0   Op1    CRn     CRm     Op2
9120b57cec5SDimitry Andricdef : RWSysReg<"OSDTRRX_EL1",        0b10, 0b000, 0b0000, 0b0000, 0b010>;
9130b57cec5SDimitry Andricdef : RWSysReg<"OSDTRTX_EL1",        0b10, 0b000, 0b0000, 0b0011, 0b010>;
9140b57cec5SDimitry Andricdef : RWSysReg<"TEECR32_EL1",        0b10, 0b010, 0b0000, 0b0000, 0b000>;
9150b57cec5SDimitry Andricdef : RWSysReg<"MDCCINT_EL1",        0b10, 0b000, 0b0000, 0b0010, 0b000>;
9160b57cec5SDimitry Andricdef : RWSysReg<"MDSCR_EL1",          0b10, 0b000, 0b0000, 0b0010, 0b010>;
9170b57cec5SDimitry Andricdef : RWSysReg<"DBGDTR_EL0",         0b10, 0b011, 0b0000, 0b0100, 0b000>;
9180b57cec5SDimitry Andricdef : RWSysReg<"OSECCR_EL1",         0b10, 0b000, 0b0000, 0b0110, 0b010>;
9190b57cec5SDimitry Andricdef : RWSysReg<"DBGVCR32_EL2",       0b10, 0b100, 0b0000, 0b0111, 0b000>;
920bdd1243dSDimitry Andricforeach n = 0-15 in {
921bdd1243dSDimitry Andric  defvar nb = !cast<bits<4>>(n);
922bdd1243dSDimitry Andric  //                                 Op0   Op1    CRn     CRm Op2
923bdd1243dSDimitry Andric  def : RWSysReg<"DBGBVR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b100>;
924bdd1243dSDimitry Andric  def : RWSysReg<"DBGBCR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b101>;
925bdd1243dSDimitry Andric  def : RWSysReg<"DBGWVR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b110>;
926bdd1243dSDimitry Andric  def : RWSysReg<"DBGWCR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b111>;
927bdd1243dSDimitry Andric}
928bdd1243dSDimitry Andric//                                   Op0   Op1    CRn     CRm     Op2
9290b57cec5SDimitry Andricdef : RWSysReg<"TEEHBR32_EL1",       0b10, 0b010, 0b0001, 0b0000, 0b000>;
9300b57cec5SDimitry Andricdef : RWSysReg<"OSDLR_EL1",          0b10, 0b000, 0b0001, 0b0011, 0b100>;
9310b57cec5SDimitry Andricdef : RWSysReg<"DBGPRCR_EL1",        0b10, 0b000, 0b0001, 0b0100, 0b100>;
9320b57cec5SDimitry Andricdef : RWSysReg<"DBGCLAIMSET_EL1",    0b10, 0b000, 0b0111, 0b1000, 0b110>;
9330b57cec5SDimitry Andricdef : RWSysReg<"DBGCLAIMCLR_EL1",    0b10, 0b000, 0b0111, 0b1001, 0b110>;
9340b57cec5SDimitry Andricdef : RWSysReg<"CSSELR_EL1",         0b11, 0b010, 0b0000, 0b0000, 0b000>;
9350b57cec5SDimitry Andricdef : RWSysReg<"VPIDR_EL2",          0b11, 0b100, 0b0000, 0b0000, 0b000>;
9360b57cec5SDimitry Andricdef : RWSysReg<"VMPIDR_EL2",         0b11, 0b100, 0b0000, 0b0000, 0b101>;
9370b57cec5SDimitry Andricdef : RWSysReg<"CPACR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b010>;
9380b57cec5SDimitry Andricdef : RWSysReg<"SCTLR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b000>;
9390b57cec5SDimitry Andricdef : RWSysReg<"SCTLR_EL2",          0b11, 0b100, 0b0001, 0b0000, 0b000>;
9400b57cec5SDimitry Andricdef : RWSysReg<"SCTLR_EL3",          0b11, 0b110, 0b0001, 0b0000, 0b000>;
9410b57cec5SDimitry Andricdef : RWSysReg<"ACTLR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b001>;
9420b57cec5SDimitry Andricdef : RWSysReg<"ACTLR_EL2",          0b11, 0b100, 0b0001, 0b0000, 0b001>;
9430b57cec5SDimitry Andricdef : RWSysReg<"ACTLR_EL3",          0b11, 0b110, 0b0001, 0b0000, 0b001>;
9440b57cec5SDimitry Andricdef : RWSysReg<"HCR_EL2",            0b11, 0b100, 0b0001, 0b0001, 0b000>;
945e8d8bef9SDimitry Andricdef : RWSysReg<"HCRX_EL2",           0b11, 0b100, 0b0001, 0b0010, 0b010> {
946e8d8bef9SDimitry Andric  let Requires = [{ {AArch64::FeatureHCX} }];
947e8d8bef9SDimitry Andric}
9480b57cec5SDimitry Andricdef : RWSysReg<"SCR_EL3",            0b11, 0b110, 0b0001, 0b0001, 0b000>;
9490b57cec5SDimitry Andricdef : RWSysReg<"MDCR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b001>;
9500b57cec5SDimitry Andricdef : RWSysReg<"SDER32_EL3",         0b11, 0b110, 0b0001, 0b0001, 0b001>;
9510b57cec5SDimitry Andricdef : RWSysReg<"CPTR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b010>;
9520b57cec5SDimitry Andricdef : RWSysReg<"CPTR_EL3",           0b11, 0b110, 0b0001, 0b0001, 0b010>;
9530b57cec5SDimitry Andricdef : RWSysReg<"HSTR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b011>;
9540b57cec5SDimitry Andricdef : RWSysReg<"HACR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b111>;
9550b57cec5SDimitry Andricdef : RWSysReg<"MDCR_EL3",           0b11, 0b110, 0b0001, 0b0011, 0b001>;
9560b57cec5SDimitry Andricdef : RWSysReg<"TTBR0_EL1",          0b11, 0b000, 0b0010, 0b0000, 0b000>;
9570b57cec5SDimitry Andricdef : RWSysReg<"TTBR0_EL3",          0b11, 0b110, 0b0010, 0b0000, 0b000>;
958349cc55cSDimitry Andric
959349cc55cSDimitry Andriclet Requires = [{ {AArch64::FeatureEL2VMSA} }] in {
960349cc55cSDimitry Andricdef : RWSysReg<"TTBR0_EL2",          0b11, 0b100, 0b0010, 0b0000, 0b000> {
961349cc55cSDimitry Andric  let AltName = "VSCTLR_EL2";
962349cc55cSDimitry Andric}
963349cc55cSDimitry Andricdef : RWSysReg<"VTTBR_EL2",          0b11, 0b100, 0b0010, 0b0001, 0b000>;
964349cc55cSDimitry Andric}
965349cc55cSDimitry Andric
9660b57cec5SDimitry Andricdef : RWSysReg<"TTBR1_EL1",          0b11, 0b000, 0b0010, 0b0000, 0b001>;
9670b57cec5SDimitry Andricdef : RWSysReg<"TCR_EL1",            0b11, 0b000, 0b0010, 0b0000, 0b010>;
9680b57cec5SDimitry Andricdef : RWSysReg<"TCR_EL2",            0b11, 0b100, 0b0010, 0b0000, 0b010>;
9690b57cec5SDimitry Andricdef : RWSysReg<"TCR_EL3",            0b11, 0b110, 0b0010, 0b0000, 0b010>;
9700b57cec5SDimitry Andricdef : RWSysReg<"VTCR_EL2",           0b11, 0b100, 0b0010, 0b0001, 0b010>;
9710b57cec5SDimitry Andricdef : RWSysReg<"DACR32_EL2",         0b11, 0b100, 0b0011, 0b0000, 0b000>;
9720b57cec5SDimitry Andricdef : RWSysReg<"SPSR_EL1",           0b11, 0b000, 0b0100, 0b0000, 0b000>;
9730b57cec5SDimitry Andricdef : RWSysReg<"SPSR_EL2",           0b11, 0b100, 0b0100, 0b0000, 0b000>;
9740b57cec5SDimitry Andricdef : RWSysReg<"SPSR_EL3",           0b11, 0b110, 0b0100, 0b0000, 0b000>;
9750b57cec5SDimitry Andricdef : RWSysReg<"ELR_EL1",            0b11, 0b000, 0b0100, 0b0000, 0b001>;
9760b57cec5SDimitry Andricdef : RWSysReg<"ELR_EL2",            0b11, 0b100, 0b0100, 0b0000, 0b001>;
9770b57cec5SDimitry Andricdef : RWSysReg<"ELR_EL3",            0b11, 0b110, 0b0100, 0b0000, 0b001>;
9780b57cec5SDimitry Andricdef : RWSysReg<"SP_EL0",             0b11, 0b000, 0b0100, 0b0001, 0b000>;
9790b57cec5SDimitry Andricdef : RWSysReg<"SP_EL1",             0b11, 0b100, 0b0100, 0b0001, 0b000>;
9800b57cec5SDimitry Andricdef : RWSysReg<"SP_EL2",             0b11, 0b110, 0b0100, 0b0001, 0b000>;
9810b57cec5SDimitry Andricdef : RWSysReg<"SPSel",              0b11, 0b000, 0b0100, 0b0010, 0b000>;
9820b57cec5SDimitry Andricdef : RWSysReg<"NZCV",               0b11, 0b011, 0b0100, 0b0010, 0b000>;
9830b57cec5SDimitry Andricdef : RWSysReg<"DAIF",               0b11, 0b011, 0b0100, 0b0010, 0b001>;
9845ffd83dbSDimitry Andricdef : ROSysReg<"CurrentEL",          0b11, 0b000, 0b0100, 0b0010, 0b010>;
9850b57cec5SDimitry Andricdef : RWSysReg<"SPSR_irq",           0b11, 0b100, 0b0100, 0b0011, 0b000>;
9860b57cec5SDimitry Andricdef : RWSysReg<"SPSR_abt",           0b11, 0b100, 0b0100, 0b0011, 0b001>;
9870b57cec5SDimitry Andricdef : RWSysReg<"SPSR_und",           0b11, 0b100, 0b0100, 0b0011, 0b010>;
9880b57cec5SDimitry Andricdef : RWSysReg<"SPSR_fiq",           0b11, 0b100, 0b0100, 0b0011, 0b011>;
989*7a6dacacSDimitry Andriclet Requires = [{ {AArch64::FeatureFPARMv8} }] in {
9900b57cec5SDimitry Andricdef : RWSysReg<"FPCR",               0b11, 0b011, 0b0100, 0b0100, 0b000>;
9910b57cec5SDimitry Andricdef : RWSysReg<"FPSR",               0b11, 0b011, 0b0100, 0b0100, 0b001>;
992*7a6dacacSDimitry Andric}
9930b57cec5SDimitry Andricdef : RWSysReg<"DSPSR_EL0",          0b11, 0b011, 0b0100, 0b0101, 0b000>;
9940b57cec5SDimitry Andricdef : RWSysReg<"DLR_EL0",            0b11, 0b011, 0b0100, 0b0101, 0b001>;
9950b57cec5SDimitry Andricdef : RWSysReg<"IFSR32_EL2",         0b11, 0b100, 0b0101, 0b0000, 0b001>;
9960b57cec5SDimitry Andricdef : RWSysReg<"AFSR0_EL1",          0b11, 0b000, 0b0101, 0b0001, 0b000>;
9970b57cec5SDimitry Andricdef : RWSysReg<"AFSR0_EL2",          0b11, 0b100, 0b0101, 0b0001, 0b000>;
9980b57cec5SDimitry Andricdef : RWSysReg<"AFSR0_EL3",          0b11, 0b110, 0b0101, 0b0001, 0b000>;
9990b57cec5SDimitry Andricdef : RWSysReg<"AFSR1_EL1",          0b11, 0b000, 0b0101, 0b0001, 0b001>;
10000b57cec5SDimitry Andricdef : RWSysReg<"AFSR1_EL2",          0b11, 0b100, 0b0101, 0b0001, 0b001>;
10010b57cec5SDimitry Andricdef : RWSysReg<"AFSR1_EL3",          0b11, 0b110, 0b0101, 0b0001, 0b001>;
10020b57cec5SDimitry Andricdef : RWSysReg<"ESR_EL1",            0b11, 0b000, 0b0101, 0b0010, 0b000>;
10030b57cec5SDimitry Andricdef : RWSysReg<"ESR_EL2",            0b11, 0b100, 0b0101, 0b0010, 0b000>;
10040b57cec5SDimitry Andricdef : RWSysReg<"ESR_EL3",            0b11, 0b110, 0b0101, 0b0010, 0b000>;
10050b57cec5SDimitry Andricdef : RWSysReg<"FPEXC32_EL2",        0b11, 0b100, 0b0101, 0b0011, 0b000>;
10060b57cec5SDimitry Andricdef : RWSysReg<"FAR_EL1",            0b11, 0b000, 0b0110, 0b0000, 0b000>;
10070b57cec5SDimitry Andricdef : RWSysReg<"FAR_EL2",            0b11, 0b100, 0b0110, 0b0000, 0b000>;
10080b57cec5SDimitry Andricdef : RWSysReg<"FAR_EL3",            0b11, 0b110, 0b0110, 0b0000, 0b000>;
10090b57cec5SDimitry Andricdef : RWSysReg<"HPFAR_EL2",          0b11, 0b100, 0b0110, 0b0000, 0b100>;
10100b57cec5SDimitry Andricdef : RWSysReg<"PAR_EL1",            0b11, 0b000, 0b0111, 0b0100, 0b000>;
10110b57cec5SDimitry Andricdef : RWSysReg<"PMCR_EL0",           0b11, 0b011, 0b1001, 0b1100, 0b000>;
10120b57cec5SDimitry Andricdef : RWSysReg<"PMCNTENSET_EL0",     0b11, 0b011, 0b1001, 0b1100, 0b001>;
10130b57cec5SDimitry Andricdef : RWSysReg<"PMCNTENCLR_EL0",     0b11, 0b011, 0b1001, 0b1100, 0b010>;
10140b57cec5SDimitry Andricdef : RWSysReg<"PMOVSCLR_EL0",       0b11, 0b011, 0b1001, 0b1100, 0b011>;
10150b57cec5SDimitry Andricdef : RWSysReg<"PMSELR_EL0",         0b11, 0b011, 0b1001, 0b1100, 0b101>;
10160b57cec5SDimitry Andricdef : RWSysReg<"PMCCNTR_EL0",        0b11, 0b011, 0b1001, 0b1101, 0b000>;
10170b57cec5SDimitry Andricdef : RWSysReg<"PMXEVTYPER_EL0",     0b11, 0b011, 0b1001, 0b1101, 0b001>;
10180b57cec5SDimitry Andricdef : RWSysReg<"PMXEVCNTR_EL0",      0b11, 0b011, 0b1001, 0b1101, 0b010>;
10190b57cec5SDimitry Andricdef : RWSysReg<"PMUSERENR_EL0",      0b11, 0b011, 0b1001, 0b1110, 0b000>;
10200b57cec5SDimitry Andricdef : RWSysReg<"PMINTENSET_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b001>;
10210b57cec5SDimitry Andricdef : RWSysReg<"PMINTENCLR_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b010>;
10220b57cec5SDimitry Andricdef : RWSysReg<"PMOVSSET_EL0",       0b11, 0b011, 0b1001, 0b1110, 0b011>;
10230b57cec5SDimitry Andricdef : RWSysReg<"MAIR_EL1",           0b11, 0b000, 0b1010, 0b0010, 0b000>;
10240b57cec5SDimitry Andricdef : RWSysReg<"MAIR_EL2",           0b11, 0b100, 0b1010, 0b0010, 0b000>;
10250b57cec5SDimitry Andricdef : RWSysReg<"MAIR_EL3",           0b11, 0b110, 0b1010, 0b0010, 0b000>;
10260b57cec5SDimitry Andricdef : RWSysReg<"AMAIR_EL1",          0b11, 0b000, 0b1010, 0b0011, 0b000>;
10270b57cec5SDimitry Andricdef : RWSysReg<"AMAIR_EL2",          0b11, 0b100, 0b1010, 0b0011, 0b000>;
10280b57cec5SDimitry Andricdef : RWSysReg<"AMAIR_EL3",          0b11, 0b110, 0b1010, 0b0011, 0b000>;
10290b57cec5SDimitry Andricdef : RWSysReg<"VBAR_EL1",           0b11, 0b000, 0b1100, 0b0000, 0b000>;
10300b57cec5SDimitry Andricdef : RWSysReg<"VBAR_EL2",           0b11, 0b100, 0b1100, 0b0000, 0b000>;
10310b57cec5SDimitry Andricdef : RWSysReg<"VBAR_EL3",           0b11, 0b110, 0b1100, 0b0000, 0b000>;
10320b57cec5SDimitry Andricdef : RWSysReg<"RMR_EL1",            0b11, 0b000, 0b1100, 0b0000, 0b010>;
10330b57cec5SDimitry Andricdef : RWSysReg<"RMR_EL2",            0b11, 0b100, 0b1100, 0b0000, 0b010>;
10340b57cec5SDimitry Andricdef : RWSysReg<"RMR_EL3",            0b11, 0b110, 0b1100, 0b0000, 0b010>;
10350b57cec5SDimitry Andricdef : RWSysReg<"CONTEXTIDR_EL1",     0b11, 0b000, 0b1101, 0b0000, 0b001>;
10360b57cec5SDimitry Andricdef : RWSysReg<"TPIDR_EL0",          0b11, 0b011, 0b1101, 0b0000, 0b010>;
10370b57cec5SDimitry Andricdef : RWSysReg<"TPIDR_EL2",          0b11, 0b100, 0b1101, 0b0000, 0b010>;
10380b57cec5SDimitry Andricdef : RWSysReg<"TPIDR_EL3",          0b11, 0b110, 0b1101, 0b0000, 0b010>;
10390b57cec5SDimitry Andricdef : RWSysReg<"TPIDRRO_EL0",        0b11, 0b011, 0b1101, 0b0000, 0b011>;
10400b57cec5SDimitry Andricdef : RWSysReg<"TPIDR_EL1",          0b11, 0b000, 0b1101, 0b0000, 0b100>;
10410b57cec5SDimitry Andricdef : RWSysReg<"CNTFRQ_EL0",         0b11, 0b011, 0b1110, 0b0000, 0b000>;
10420b57cec5SDimitry Andricdef : RWSysReg<"CNTVOFF_EL2",        0b11, 0b100, 0b1110, 0b0000, 0b011>;
10430b57cec5SDimitry Andricdef : RWSysReg<"CNTKCTL_EL1",        0b11, 0b000, 0b1110, 0b0001, 0b000>;
10440b57cec5SDimitry Andricdef : RWSysReg<"CNTHCTL_EL2",        0b11, 0b100, 0b1110, 0b0001, 0b000>;
10450b57cec5SDimitry Andricdef : RWSysReg<"CNTP_TVAL_EL0",      0b11, 0b011, 0b1110, 0b0010, 0b000>;
10460b57cec5SDimitry Andricdef : RWSysReg<"CNTHP_TVAL_EL2",     0b11, 0b100, 0b1110, 0b0010, 0b000>;
10470b57cec5SDimitry Andricdef : RWSysReg<"CNTPS_TVAL_EL1",     0b11, 0b111, 0b1110, 0b0010, 0b000>;
10480b57cec5SDimitry Andricdef : RWSysReg<"CNTP_CTL_EL0",       0b11, 0b011, 0b1110, 0b0010, 0b001>;
10490b57cec5SDimitry Andricdef : RWSysReg<"CNTHP_CTL_EL2",      0b11, 0b100, 0b1110, 0b0010, 0b001>;
10500b57cec5SDimitry Andricdef : RWSysReg<"CNTPS_CTL_EL1",      0b11, 0b111, 0b1110, 0b0010, 0b001>;
10510b57cec5SDimitry Andricdef : RWSysReg<"CNTP_CVAL_EL0",      0b11, 0b011, 0b1110, 0b0010, 0b010>;
10520b57cec5SDimitry Andricdef : RWSysReg<"CNTHP_CVAL_EL2",     0b11, 0b100, 0b1110, 0b0010, 0b010>;
10530b57cec5SDimitry Andricdef : RWSysReg<"CNTPS_CVAL_EL1",     0b11, 0b111, 0b1110, 0b0010, 0b010>;
10540b57cec5SDimitry Andricdef : RWSysReg<"CNTV_TVAL_EL0",      0b11, 0b011, 0b1110, 0b0011, 0b000>;
10550b57cec5SDimitry Andricdef : RWSysReg<"CNTV_CTL_EL0",       0b11, 0b011, 0b1110, 0b0011, 0b001>;
10560b57cec5SDimitry Andricdef : RWSysReg<"CNTV_CVAL_EL0",      0b11, 0b011, 0b1110, 0b0011, 0b010>;
10570b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR0_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b000>;
10580b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR1_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b001>;
10590b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR2_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b010>;
10600b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR3_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b011>;
10610b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR4_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b100>;
10620b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR5_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b101>;
10630b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR6_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b110>;
10640b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR7_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b111>;
10650b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR8_EL0",      0b11, 0b011, 0b1110, 0b1001, 0b000>;
10660b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR9_EL0",      0b11, 0b011, 0b1110, 0b1001, 0b001>;
10670b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR10_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b010>;
10680b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR11_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b011>;
10690b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR12_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b100>;
10700b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR13_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b101>;
10710b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR14_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b110>;
10720b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR15_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b111>;
10730b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR16_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b000>;
10740b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR17_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b001>;
10750b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR18_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b010>;
10760b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR19_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b011>;
10770b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR20_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b100>;
10780b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR21_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b101>;
10790b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR22_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b110>;
10800b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR23_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b111>;
10810b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR24_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b000>;
10820b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR25_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b001>;
10830b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR26_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b010>;
10840b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR27_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b011>;
10850b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR28_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b100>;
10860b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR29_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b101>;
10870b57cec5SDimitry Andricdef : RWSysReg<"PMEVCNTR30_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b110>;
10880b57cec5SDimitry Andricdef : RWSysReg<"PMCCFILTR_EL0",      0b11, 0b011, 0b1110, 0b1111, 0b111>;
10890b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER0_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b000>;
10900b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER1_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b001>;
10910b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER2_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b010>;
10920b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER3_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b011>;
10930b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER4_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b100>;
10940b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER5_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b101>;
10950b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER6_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b110>;
10960b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER7_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b111>;
10970b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER8_EL0",     0b11, 0b011, 0b1110, 0b1101, 0b000>;
10980b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER9_EL0",     0b11, 0b011, 0b1110, 0b1101, 0b001>;
10990b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER10_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b010>;
11000b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER11_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b011>;
11010b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER12_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b100>;
11020b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER13_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b101>;
11030b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER14_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b110>;
11040b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER15_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b111>;
11050b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER16_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b000>;
11060b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER17_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b001>;
11070b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER18_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b010>;
11080b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER19_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b011>;
11090b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER20_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b100>;
11100b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER21_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b101>;
11110b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER22_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b110>;
11120b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER23_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b111>;
11130b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER24_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b000>;
11140b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER25_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b001>;
11150b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER26_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b010>;
11160b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER27_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b011>;
11170b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER28_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b100>;
11180b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER29_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b101>;
11190b57cec5SDimitry Andricdef : RWSysReg<"PMEVTYPER30_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b110>;
11200b57cec5SDimitry Andric
11210b57cec5SDimitry Andric// Trace registers
11220b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
11230b57cec5SDimitry Andricdef : RWSysReg<"TRCPRGCTLR",         0b10, 0b001, 0b0000, 0b0001, 0b000>;
11240b57cec5SDimitry Andricdef : RWSysReg<"TRCPROCSELR",        0b10, 0b001, 0b0000, 0b0010, 0b000>;
11250b57cec5SDimitry Andricdef : RWSysReg<"TRCCONFIGR",         0b10, 0b001, 0b0000, 0b0100, 0b000>;
11260b57cec5SDimitry Andricdef : RWSysReg<"TRCAUXCTLR",         0b10, 0b001, 0b0000, 0b0110, 0b000>;
11270b57cec5SDimitry Andricdef : RWSysReg<"TRCEVENTCTL0R",      0b10, 0b001, 0b0000, 0b1000, 0b000>;
11280b57cec5SDimitry Andricdef : RWSysReg<"TRCEVENTCTL1R",      0b10, 0b001, 0b0000, 0b1001, 0b000>;
11290b57cec5SDimitry Andricdef : RWSysReg<"TRCSTALLCTLR",       0b10, 0b001, 0b0000, 0b1011, 0b000>;
11300b57cec5SDimitry Andricdef : RWSysReg<"TRCTSCTLR",          0b10, 0b001, 0b0000, 0b1100, 0b000>;
11310b57cec5SDimitry Andricdef : RWSysReg<"TRCSYNCPR",          0b10, 0b001, 0b0000, 0b1101, 0b000>;
11320b57cec5SDimitry Andricdef : RWSysReg<"TRCCCCTLR",          0b10, 0b001, 0b0000, 0b1110, 0b000>;
11330b57cec5SDimitry Andricdef : RWSysReg<"TRCBBCTLR",          0b10, 0b001, 0b0000, 0b1111, 0b000>;
11340b57cec5SDimitry Andricdef : RWSysReg<"TRCTRACEIDR",        0b10, 0b001, 0b0000, 0b0000, 0b001>;
11350b57cec5SDimitry Andricdef : RWSysReg<"TRCQCTLR",           0b10, 0b001, 0b0000, 0b0001, 0b001>;
11360b57cec5SDimitry Andricdef : RWSysReg<"TRCVICTLR",          0b10, 0b001, 0b0000, 0b0000, 0b010>;
11370b57cec5SDimitry Andricdef : RWSysReg<"TRCVIIECTLR",        0b10, 0b001, 0b0000, 0b0001, 0b010>;
11380b57cec5SDimitry Andricdef : RWSysReg<"TRCVISSCTLR",        0b10, 0b001, 0b0000, 0b0010, 0b010>;
11390b57cec5SDimitry Andricdef : RWSysReg<"TRCVIPCSSCTLR",      0b10, 0b001, 0b0000, 0b0011, 0b010>;
11400b57cec5SDimitry Andricdef : RWSysReg<"TRCVDCTLR",          0b10, 0b001, 0b0000, 0b1000, 0b010>;
11410b57cec5SDimitry Andricdef : RWSysReg<"TRCVDSACCTLR",       0b10, 0b001, 0b0000, 0b1001, 0b010>;
11420b57cec5SDimitry Andricdef : RWSysReg<"TRCVDARCCTLR",       0b10, 0b001, 0b0000, 0b1010, 0b010>;
11430b57cec5SDimitry Andricdef : RWSysReg<"TRCSEQEVR0",         0b10, 0b001, 0b0000, 0b0000, 0b100>;
11440b57cec5SDimitry Andricdef : RWSysReg<"TRCSEQEVR1",         0b10, 0b001, 0b0000, 0b0001, 0b100>;
11450b57cec5SDimitry Andricdef : RWSysReg<"TRCSEQEVR2",         0b10, 0b001, 0b0000, 0b0010, 0b100>;
11460b57cec5SDimitry Andricdef : RWSysReg<"TRCSEQRSTEVR",       0b10, 0b001, 0b0000, 0b0110, 0b100>;
11470b57cec5SDimitry Andricdef : RWSysReg<"TRCSEQSTR",          0b10, 0b001, 0b0000, 0b0111, 0b100>;
11480b57cec5SDimitry Andricdef : RWSysReg<"TRCEXTINSELR",       0b10, 0b001, 0b0000, 0b1000, 0b100>;
11490b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTRLDVR0",       0b10, 0b001, 0b0000, 0b0000, 0b101>;
11500b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTRLDVR1",       0b10, 0b001, 0b0000, 0b0001, 0b101>;
11510b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTRLDVR2",       0b10, 0b001, 0b0000, 0b0010, 0b101>;
11520b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTRLDVR3",       0b10, 0b001, 0b0000, 0b0011, 0b101>;
11530b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTCTLR0",        0b10, 0b001, 0b0000, 0b0100, 0b101>;
11540b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTCTLR1",        0b10, 0b001, 0b0000, 0b0101, 0b101>;
11550b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTCTLR2",        0b10, 0b001, 0b0000, 0b0110, 0b101>;
11560b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTCTLR3",        0b10, 0b001, 0b0000, 0b0111, 0b101>;
11570b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTVR0",          0b10, 0b001, 0b0000, 0b1000, 0b101>;
11580b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTVR1",          0b10, 0b001, 0b0000, 0b1001, 0b101>;
11590b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTVR2",          0b10, 0b001, 0b0000, 0b1010, 0b101>;
11600b57cec5SDimitry Andricdef : RWSysReg<"TRCCNTVR3",          0b10, 0b001, 0b0000, 0b1011, 0b101>;
11610b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC0",         0b10, 0b001, 0b0000, 0b0000, 0b111>;
11620b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC1",         0b10, 0b001, 0b0000, 0b0001, 0b111>;
11630b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC2",         0b10, 0b001, 0b0000, 0b0010, 0b111>;
11640b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC3",         0b10, 0b001, 0b0000, 0b0011, 0b111>;
11650b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC4",         0b10, 0b001, 0b0000, 0b0100, 0b111>;
11660b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC5",         0b10, 0b001, 0b0000, 0b0101, 0b111>;
11670b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC6",         0b10, 0b001, 0b0000, 0b0110, 0b111>;
11680b57cec5SDimitry Andricdef : RWSysReg<"TRCIMSPEC7",         0b10, 0b001, 0b0000, 0b0111, 0b111>;
11690b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR2",         0b10, 0b001, 0b0001, 0b0010, 0b000>;
11700b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR3",         0b10, 0b001, 0b0001, 0b0011, 0b000>;
11710b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR4",         0b10, 0b001, 0b0001, 0b0100, 0b000>;
11720b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR5",         0b10, 0b001, 0b0001, 0b0101, 0b000>;
11730b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR6",         0b10, 0b001, 0b0001, 0b0110, 0b000>;
11740b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR7",         0b10, 0b001, 0b0001, 0b0111, 0b000>;
11750b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR8",         0b10, 0b001, 0b0001, 0b1000, 0b000>;
11760b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR9",         0b10, 0b001, 0b0001, 0b1001, 0b000>;
11770b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR10",        0b10, 0b001, 0b0001, 0b1010, 0b000>;
11780b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR11",        0b10, 0b001, 0b0001, 0b1011, 0b000>;
11790b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR12",        0b10, 0b001, 0b0001, 0b1100, 0b000>;
11800b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR13",        0b10, 0b001, 0b0001, 0b1101, 0b000>;
11810b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR14",        0b10, 0b001, 0b0001, 0b1110, 0b000>;
11820b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR15",        0b10, 0b001, 0b0001, 0b1111, 0b000>;
11830b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR16",        0b10, 0b001, 0b0001, 0b0000, 0b001>;
11840b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR17",        0b10, 0b001, 0b0001, 0b0001, 0b001>;
11850b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR18",        0b10, 0b001, 0b0001, 0b0010, 0b001>;
11860b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR19",        0b10, 0b001, 0b0001, 0b0011, 0b001>;
11870b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR20",        0b10, 0b001, 0b0001, 0b0100, 0b001>;
11880b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR21",        0b10, 0b001, 0b0001, 0b0101, 0b001>;
11890b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR22",        0b10, 0b001, 0b0001, 0b0110, 0b001>;
11900b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR23",        0b10, 0b001, 0b0001, 0b0111, 0b001>;
11910b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR24",        0b10, 0b001, 0b0001, 0b1000, 0b001>;
11920b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR25",        0b10, 0b001, 0b0001, 0b1001, 0b001>;
11930b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR26",        0b10, 0b001, 0b0001, 0b1010, 0b001>;
11940b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR27",        0b10, 0b001, 0b0001, 0b1011, 0b001>;
11950b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR28",        0b10, 0b001, 0b0001, 0b1100, 0b001>;
11960b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR29",        0b10, 0b001, 0b0001, 0b1101, 0b001>;
11970b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR30",        0b10, 0b001, 0b0001, 0b1110, 0b001>;
11980b57cec5SDimitry Andricdef : RWSysReg<"TRCRSCTLR31",        0b10, 0b001, 0b0001, 0b1111, 0b001>;
11990b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR0",          0b10, 0b001, 0b0001, 0b0000, 0b010>;
12000b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR1",          0b10, 0b001, 0b0001, 0b0001, 0b010>;
12010b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR2",          0b10, 0b001, 0b0001, 0b0010, 0b010>;
12020b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR3",          0b10, 0b001, 0b0001, 0b0011, 0b010>;
12030b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR4",          0b10, 0b001, 0b0001, 0b0100, 0b010>;
12040b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR5",          0b10, 0b001, 0b0001, 0b0101, 0b010>;
12050b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR6",          0b10, 0b001, 0b0001, 0b0110, 0b010>;
12060b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCCR7",          0b10, 0b001, 0b0001, 0b0111, 0b010>;
12070b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR0",          0b10, 0b001, 0b0001, 0b1000, 0b010>;
12080b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR1",          0b10, 0b001, 0b0001, 0b1001, 0b010>;
12090b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR2",          0b10, 0b001, 0b0001, 0b1010, 0b010>;
12100b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR3",          0b10, 0b001, 0b0001, 0b1011, 0b010>;
12110b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR4",          0b10, 0b001, 0b0001, 0b1100, 0b010>;
12120b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR5",          0b10, 0b001, 0b0001, 0b1101, 0b010>;
12130b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR6",          0b10, 0b001, 0b0001, 0b1110, 0b010>;
12140b57cec5SDimitry Andricdef : RWSysReg<"TRCSSCSR7",          0b10, 0b001, 0b0001, 0b1111, 0b010>;
12150b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR0",        0b10, 0b001, 0b0001, 0b0000, 0b011>;
12160b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR1",        0b10, 0b001, 0b0001, 0b0001, 0b011>;
12170b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR2",        0b10, 0b001, 0b0001, 0b0010, 0b011>;
12180b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR3",        0b10, 0b001, 0b0001, 0b0011, 0b011>;
12190b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR4",        0b10, 0b001, 0b0001, 0b0100, 0b011>;
12200b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR5",        0b10, 0b001, 0b0001, 0b0101, 0b011>;
12210b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR6",        0b10, 0b001, 0b0001, 0b0110, 0b011>;
12220b57cec5SDimitry Andricdef : RWSysReg<"TRCSSPCICR7",        0b10, 0b001, 0b0001, 0b0111, 0b011>;
12230b57cec5SDimitry Andricdef : RWSysReg<"TRCPDCR",            0b10, 0b001, 0b0001, 0b0100, 0b100>;
12240b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR0",           0b10, 0b001, 0b0010, 0b0000, 0b000>;
12250b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR1",           0b10, 0b001, 0b0010, 0b0010, 0b000>;
12260b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR2",           0b10, 0b001, 0b0010, 0b0100, 0b000>;
12270b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR3",           0b10, 0b001, 0b0010, 0b0110, 0b000>;
12280b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR4",           0b10, 0b001, 0b0010, 0b1000, 0b000>;
12290b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR5",           0b10, 0b001, 0b0010, 0b1010, 0b000>;
12300b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR6",           0b10, 0b001, 0b0010, 0b1100, 0b000>;
12310b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR7",           0b10, 0b001, 0b0010, 0b1110, 0b000>;
12320b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR8",           0b10, 0b001, 0b0010, 0b0000, 0b001>;
12330b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR9",           0b10, 0b001, 0b0010, 0b0010, 0b001>;
12340b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR10",          0b10, 0b001, 0b0010, 0b0100, 0b001>;
12350b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR11",          0b10, 0b001, 0b0010, 0b0110, 0b001>;
12360b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR12",          0b10, 0b001, 0b0010, 0b1000, 0b001>;
12370b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR13",          0b10, 0b001, 0b0010, 0b1010, 0b001>;
12380b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR14",          0b10, 0b001, 0b0010, 0b1100, 0b001>;
12390b57cec5SDimitry Andricdef : RWSysReg<"TRCACVR15",          0b10, 0b001, 0b0010, 0b1110, 0b001>;
12400b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR0",          0b10, 0b001, 0b0010, 0b0000, 0b010>;
12410b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR1",          0b10, 0b001, 0b0010, 0b0010, 0b010>;
12420b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR2",          0b10, 0b001, 0b0010, 0b0100, 0b010>;
12430b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR3",          0b10, 0b001, 0b0010, 0b0110, 0b010>;
12440b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR4",          0b10, 0b001, 0b0010, 0b1000, 0b010>;
12450b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR5",          0b10, 0b001, 0b0010, 0b1010, 0b010>;
12460b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR6",          0b10, 0b001, 0b0010, 0b1100, 0b010>;
12470b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR7",          0b10, 0b001, 0b0010, 0b1110, 0b010>;
12480b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR8",          0b10, 0b001, 0b0010, 0b0000, 0b011>;
12490b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR9",          0b10, 0b001, 0b0010, 0b0010, 0b011>;
12500b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR10",         0b10, 0b001, 0b0010, 0b0100, 0b011>;
12510b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR11",         0b10, 0b001, 0b0010, 0b0110, 0b011>;
12520b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR12",         0b10, 0b001, 0b0010, 0b1000, 0b011>;
12530b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR13",         0b10, 0b001, 0b0010, 0b1010, 0b011>;
12540b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR14",         0b10, 0b001, 0b0010, 0b1100, 0b011>;
12550b57cec5SDimitry Andricdef : RWSysReg<"TRCACATR15",         0b10, 0b001, 0b0010, 0b1110, 0b011>;
12560b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR0",          0b10, 0b001, 0b0010, 0b0000, 0b100>;
12570b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR1",          0b10, 0b001, 0b0010, 0b0100, 0b100>;
12580b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR2",          0b10, 0b001, 0b0010, 0b1000, 0b100>;
12590b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR3",          0b10, 0b001, 0b0010, 0b1100, 0b100>;
12600b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR4",          0b10, 0b001, 0b0010, 0b0000, 0b101>;
12610b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR5",          0b10, 0b001, 0b0010, 0b0100, 0b101>;
12620b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR6",          0b10, 0b001, 0b0010, 0b1000, 0b101>;
12630b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCVR7",          0b10, 0b001, 0b0010, 0b1100, 0b101>;
12640b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR0",          0b10, 0b001, 0b0010, 0b0000, 0b110>;
12650b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR1",          0b10, 0b001, 0b0010, 0b0100, 0b110>;
12660b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR2",          0b10, 0b001, 0b0010, 0b1000, 0b110>;
12670b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR3",          0b10, 0b001, 0b0010, 0b1100, 0b110>;
12680b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR4",          0b10, 0b001, 0b0010, 0b0000, 0b111>;
12690b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR5",          0b10, 0b001, 0b0010, 0b0100, 0b111>;
12700b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR6",          0b10, 0b001, 0b0010, 0b1000, 0b111>;
12710b57cec5SDimitry Andricdef : RWSysReg<"TRCDVCMR7",          0b10, 0b001, 0b0010, 0b1100, 0b111>;
12720b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR0",         0b10, 0b001, 0b0011, 0b0000, 0b000>;
12730b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR1",         0b10, 0b001, 0b0011, 0b0010, 0b000>;
12740b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR2",         0b10, 0b001, 0b0011, 0b0100, 0b000>;
12750b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR3",         0b10, 0b001, 0b0011, 0b0110, 0b000>;
12760b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR4",         0b10, 0b001, 0b0011, 0b1000, 0b000>;
12770b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR5",         0b10, 0b001, 0b0011, 0b1010, 0b000>;
12780b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR6",         0b10, 0b001, 0b0011, 0b1100, 0b000>;
12790b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCVR7",         0b10, 0b001, 0b0011, 0b1110, 0b000>;
12800b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR0",        0b10, 0b001, 0b0011, 0b0000, 0b001>;
12810b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR1",        0b10, 0b001, 0b0011, 0b0010, 0b001>;
12820b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR2",        0b10, 0b001, 0b0011, 0b0100, 0b001>;
12830b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR3",        0b10, 0b001, 0b0011, 0b0110, 0b001>;
12840b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR4",        0b10, 0b001, 0b0011, 0b1000, 0b001>;
12850b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR5",        0b10, 0b001, 0b0011, 0b1010, 0b001>;
12860b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR6",        0b10, 0b001, 0b0011, 0b1100, 0b001>;
12870b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCVR7",        0b10, 0b001, 0b0011, 0b1110, 0b001>;
12880b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCCTLR0",       0b10, 0b001, 0b0011, 0b0000, 0b010>;
12890b57cec5SDimitry Andricdef : RWSysReg<"TRCCIDCCTLR1",       0b10, 0b001, 0b0011, 0b0001, 0b010>;
12900b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCCTLR0",      0b10, 0b001, 0b0011, 0b0010, 0b010>;
12910b57cec5SDimitry Andricdef : RWSysReg<"TRCVMIDCCTLR1",      0b10, 0b001, 0b0011, 0b0011, 0b010>;
12920b57cec5SDimitry Andricdef : RWSysReg<"TRCITCTRL",          0b10, 0b001, 0b0111, 0b0000, 0b100>;
12930b57cec5SDimitry Andricdef : RWSysReg<"TRCCLAIMSET",        0b10, 0b001, 0b0111, 0b1000, 0b110>;
12940b57cec5SDimitry Andricdef : RWSysReg<"TRCCLAIMCLR",        0b10, 0b001, 0b0111, 0b1001, 0b110>;
12950b57cec5SDimitry Andric
12960b57cec5SDimitry Andric// GICv3 registers
12970b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
12980b57cec5SDimitry Andricdef : RWSysReg<"ICC_BPR1_EL1",       0b11, 0b000, 0b1100, 0b1100, 0b011>;
12990b57cec5SDimitry Andricdef : RWSysReg<"ICC_BPR0_EL1",       0b11, 0b000, 0b1100, 0b1000, 0b011>;
13000b57cec5SDimitry Andricdef : RWSysReg<"ICC_PMR_EL1",        0b11, 0b000, 0b0100, 0b0110, 0b000>;
13010b57cec5SDimitry Andricdef : RWSysReg<"ICC_CTLR_EL1",       0b11, 0b000, 0b1100, 0b1100, 0b100>;
13020b57cec5SDimitry Andricdef : RWSysReg<"ICC_CTLR_EL3",       0b11, 0b110, 0b1100, 0b1100, 0b100>;
13030b57cec5SDimitry Andricdef : RWSysReg<"ICC_SRE_EL1",        0b11, 0b000, 0b1100, 0b1100, 0b101>;
13040b57cec5SDimitry Andricdef : RWSysReg<"ICC_SRE_EL2",        0b11, 0b100, 0b1100, 0b1001, 0b101>;
13050b57cec5SDimitry Andricdef : RWSysReg<"ICC_SRE_EL3",        0b11, 0b110, 0b1100, 0b1100, 0b101>;
13060b57cec5SDimitry Andricdef : RWSysReg<"ICC_IGRPEN0_EL1",    0b11, 0b000, 0b1100, 0b1100, 0b110>;
13070b57cec5SDimitry Andricdef : RWSysReg<"ICC_IGRPEN1_EL1",    0b11, 0b000, 0b1100, 0b1100, 0b111>;
13080b57cec5SDimitry Andricdef : RWSysReg<"ICC_IGRPEN1_EL3",    0b11, 0b110, 0b1100, 0b1100, 0b111>;
13090b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP0R0_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b100>;
13100b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP0R1_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b101>;
13110b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP0R2_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b110>;
13120b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP0R3_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b111>;
13130b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP1R0_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b000>;
13140b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP1R1_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b001>;
13150b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP1R2_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b010>;
13160b57cec5SDimitry Andricdef : RWSysReg<"ICC_AP1R3_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b011>;
13170b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP0R0_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b000>;
13180b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP0R1_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b001>;
13190b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP0R2_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b010>;
13200b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP0R3_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b011>;
13210b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP1R0_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b000>;
13220b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP1R1_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b001>;
13230b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP1R2_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b010>;
13240b57cec5SDimitry Andricdef : RWSysReg<"ICH_AP1R3_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b011>;
13250b57cec5SDimitry Andricdef : RWSysReg<"ICH_HCR_EL2",        0b11, 0b100, 0b1100, 0b1011, 0b000>;
13265ffd83dbSDimitry Andricdef : ROSysReg<"ICH_MISR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b010>;
13270b57cec5SDimitry Andricdef : RWSysReg<"ICH_VMCR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b111>;
13280b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR0_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b000>;
13290b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR1_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b001>;
13300b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR2_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b010>;
13310b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR3_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b011>;
13320b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR4_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b100>;
13330b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR5_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b101>;
13340b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR6_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b110>;
13350b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR7_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b111>;
13360b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR8_EL2",        0b11, 0b100, 0b1100, 0b1101, 0b000>;
13370b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR9_EL2",        0b11, 0b100, 0b1100, 0b1101, 0b001>;
13380b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR10_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b010>;
13390b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR11_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b011>;
13400b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR12_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b100>;
13410b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR13_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b101>;
13420b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR14_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b110>;
13430b57cec5SDimitry Andricdef : RWSysReg<"ICH_LR15_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b111>;
13440b57cec5SDimitry Andric
1345349cc55cSDimitry Andric// v8r system registers
1346349cc55cSDimitry Andriclet Requires = [{ {AArch64::HasV8_0rOps} }] in {
1347349cc55cSDimitry Andric//Virtualization System Control Register
1348349cc55cSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1349349cc55cSDimitry Andricdef : RWSysReg<"VSCTLR_EL2",       0b11, 0b100, 0b0010, 0b0000, 0b000> {
1350349cc55cSDimitry Andric  let AltName = "TTBR0_EL2";
1351349cc55cSDimitry Andric}
1352349cc55cSDimitry Andric
1353349cc55cSDimitry Andric//MPU Type Register
1354349cc55cSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1355349cc55cSDimitry Andricdef : RWSysReg<"MPUIR_EL1",        0b11, 0b000, 0b0000, 0b0000, 0b100>;
1356349cc55cSDimitry Andricdef : RWSysReg<"MPUIR_EL2",        0b11, 0b100, 0b0000, 0b0000, 0b100>;
1357349cc55cSDimitry Andric
1358349cc55cSDimitry Andric//Protection Region Enable Register
1359349cc55cSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1360349cc55cSDimitry Andricdef : RWSysReg<"PRENR_EL1",        0b11, 0b000, 0b0110, 0b0001, 0b001>;
1361349cc55cSDimitry Andricdef : RWSysReg<"PRENR_EL2",        0b11, 0b100, 0b0110, 0b0001, 0b001>;
1362349cc55cSDimitry Andric
1363349cc55cSDimitry Andric//Protection Region Selection Register
1364349cc55cSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1365349cc55cSDimitry Andricdef : RWSysReg<"PRSELR_EL1",       0b11, 0b000, 0b0110, 0b0010, 0b001>;
1366349cc55cSDimitry Andricdef : RWSysReg<"PRSELR_EL2",       0b11, 0b100, 0b0110, 0b0010, 0b001>;
1367349cc55cSDimitry Andric
1368349cc55cSDimitry Andric//Protection Region Base Address Register
1369349cc55cSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1370349cc55cSDimitry Andricdef : RWSysReg<"PRBAR_EL1",        0b11, 0b000, 0b0110, 0b1000, 0b000>;
1371349cc55cSDimitry Andricdef : RWSysReg<"PRBAR_EL2",        0b11, 0b100, 0b0110, 0b1000, 0b000>;
1372349cc55cSDimitry Andric
1373349cc55cSDimitry Andric//Protection Region Limit Address Register
1374349cc55cSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1375349cc55cSDimitry Andricdef : RWSysReg<"PRLAR_EL1",        0b11, 0b000, 0b0110, 0b1000, 0b001>;
1376349cc55cSDimitry Andricdef : RWSysReg<"PRLAR_EL2",        0b11, 0b100, 0b0110, 0b1000, 0b001>;
1377349cc55cSDimitry Andric
137804eeddc0SDimitry Andricforeach n = 1-15 in {
1379349cc55cSDimitry Andricforeach x = 1-2 in {
1380349cc55cSDimitry Andric//Direct acces to Protection Region Base Address Register for n th MPU region
1381349cc55cSDimitry Andric  def : RWSysReg<!strconcat("PRBAR"#n, "_EL"#x),
1382349cc55cSDimitry Andric    0b11, 0b000, 0b0110, 0b1000, 0b000>{
1383349cc55cSDimitry Andric    let Encoding{5-2} = n;
1384349cc55cSDimitry Andric    let Encoding{13} = !add(x,-1);
1385349cc55cSDimitry Andric  }
1386349cc55cSDimitry Andric
1387349cc55cSDimitry Andric  def : RWSysReg<!strconcat("PRLAR"#n, "_EL"#x),
1388349cc55cSDimitry Andric    0b11, 0b000, 0b0110, 0b1000, 0b001>{
1389349cc55cSDimitry Andric    let Encoding{5-2} = n;
1390349cc55cSDimitry Andric    let Encoding{13} = !add(x,-1);
1391349cc55cSDimitry Andric  }
1392349cc55cSDimitry Andric} //foreach x = 1-2 in
139304eeddc0SDimitry Andric} //foreach n = 1-15 in
1394349cc55cSDimitry Andric} //let Requires = [{ {AArch64::HasV8_0rOps} }] in
1395349cc55cSDimitry Andric
13960b57cec5SDimitry Andric// v8.1a "Privileged Access Never" extension-specific system registers
13970b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeaturePAN} }] in
13980b57cec5SDimitry Andricdef : RWSysReg<"PAN", 0b11, 0b000, 0b0100, 0b0010, 0b011>;
13990b57cec5SDimitry Andric
14000b57cec5SDimitry Andric// v8.1a "Limited Ordering Regions" extension-specific system registers
14010b57cec5SDimitry Andric//                         Op0    Op1     CRn     CRm    Op2
14020b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureLOR} }] in {
14030b57cec5SDimitry Andricdef : RWSysReg<"LORSA_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b000>;
14040b57cec5SDimitry Andricdef : RWSysReg<"LOREA_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b001>;
14050b57cec5SDimitry Andricdef : RWSysReg<"LORN_EL1",   0b11, 0b000, 0b1010, 0b0100, 0b010>;
14060b57cec5SDimitry Andricdef : RWSysReg<"LORC_EL1",   0b11, 0b000, 0b1010, 0b0100, 0b011>;
14070b57cec5SDimitry Andric}
14080b57cec5SDimitry Andric
14090b57cec5SDimitry Andric// v8.1a "Virtualization Host extensions" system registers
14100b57cec5SDimitry Andric//                              Op0    Op1     CRn     CRm    Op2
14110b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureVH} }] in {
14120b57cec5SDimitry Andricdef : RWSysReg<"TTBR1_EL2",       0b11, 0b100, 0b0010, 0b0000, 0b001>;
14130b57cec5SDimitry Andricdef : RWSysReg<"CNTHV_TVAL_EL2",  0b11, 0b100, 0b1110, 0b0011, 0b000>;
14140b57cec5SDimitry Andricdef : RWSysReg<"CNTHV_CVAL_EL2",  0b11, 0b100, 0b1110, 0b0011, 0b010>;
14150b57cec5SDimitry Andricdef : RWSysReg<"CNTHV_CTL_EL2",   0b11, 0b100, 0b1110, 0b0011, 0b001>;
14160b57cec5SDimitry Andricdef : RWSysReg<"SCTLR_EL12",      0b11, 0b101, 0b0001, 0b0000, 0b000>;
14170b57cec5SDimitry Andricdef : RWSysReg<"CPACR_EL12",      0b11, 0b101, 0b0001, 0b0000, 0b010>;
14180b57cec5SDimitry Andricdef : RWSysReg<"TTBR0_EL12",      0b11, 0b101, 0b0010, 0b0000, 0b000>;
14190b57cec5SDimitry Andricdef : RWSysReg<"TTBR1_EL12",      0b11, 0b101, 0b0010, 0b0000, 0b001>;
14200b57cec5SDimitry Andricdef : RWSysReg<"TCR_EL12",        0b11, 0b101, 0b0010, 0b0000, 0b010>;
14210b57cec5SDimitry Andricdef : RWSysReg<"AFSR0_EL12",      0b11, 0b101, 0b0101, 0b0001, 0b000>;
14220b57cec5SDimitry Andricdef : RWSysReg<"AFSR1_EL12",      0b11, 0b101, 0b0101, 0b0001, 0b001>;
14230b57cec5SDimitry Andricdef : RWSysReg<"ESR_EL12",        0b11, 0b101, 0b0101, 0b0010, 0b000>;
14240b57cec5SDimitry Andricdef : RWSysReg<"FAR_EL12",        0b11, 0b101, 0b0110, 0b0000, 0b000>;
14250b57cec5SDimitry Andricdef : RWSysReg<"MAIR_EL12",       0b11, 0b101, 0b1010, 0b0010, 0b000>;
14260b57cec5SDimitry Andricdef : RWSysReg<"AMAIR_EL12",      0b11, 0b101, 0b1010, 0b0011, 0b000>;
14270b57cec5SDimitry Andricdef : RWSysReg<"VBAR_EL12",       0b11, 0b101, 0b1100, 0b0000, 0b000>;
14280b57cec5SDimitry Andricdef : RWSysReg<"CONTEXTIDR_EL12", 0b11, 0b101, 0b1101, 0b0000, 0b001>;
14290b57cec5SDimitry Andricdef : RWSysReg<"CNTKCTL_EL12",    0b11, 0b101, 0b1110, 0b0001, 0b000>;
14300b57cec5SDimitry Andricdef : RWSysReg<"CNTP_TVAL_EL02",  0b11, 0b101, 0b1110, 0b0010, 0b000>;
14310b57cec5SDimitry Andricdef : RWSysReg<"CNTP_CTL_EL02",   0b11, 0b101, 0b1110, 0b0010, 0b001>;
14320b57cec5SDimitry Andricdef : RWSysReg<"CNTP_CVAL_EL02",  0b11, 0b101, 0b1110, 0b0010, 0b010>;
14330b57cec5SDimitry Andricdef : RWSysReg<"CNTV_TVAL_EL02",  0b11, 0b101, 0b1110, 0b0011, 0b000>;
14340b57cec5SDimitry Andricdef : RWSysReg<"CNTV_CTL_EL02",   0b11, 0b101, 0b1110, 0b0011, 0b001>;
14350b57cec5SDimitry Andricdef : RWSysReg<"CNTV_CVAL_EL02",  0b11, 0b101, 0b1110, 0b0011, 0b010>;
14360b57cec5SDimitry Andricdef : RWSysReg<"SPSR_EL12",       0b11, 0b101, 0b0100, 0b0000, 0b000>;
14370b57cec5SDimitry Andricdef : RWSysReg<"ELR_EL12",        0b11, 0b101, 0b0100, 0b0000, 0b001>;
1438e8d8bef9SDimitry Andriclet Requires = [{ {AArch64::FeatureCONTEXTIDREL2} }] in {
1439e8d8bef9SDimitry Andric  def : RWSysReg<"CONTEXTIDR_EL2",  0b11, 0b100, 0b1101, 0b0000, 0b001>;
1440e8d8bef9SDimitry Andric}
14410b57cec5SDimitry Andric}
14420b57cec5SDimitry Andric// v8.2a registers
14430b57cec5SDimitry Andric//                  Op0    Op1     CRn     CRm    Op2
14440b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeaturePsUAO} }] in
14450b57cec5SDimitry Andricdef : RWSysReg<"UAO", 0b11, 0b000, 0b0100, 0b0010, 0b100>;
14460b57cec5SDimitry Andric
14470b57cec5SDimitry Andric// v8.2a "Statistical Profiling extension" registers
14480b57cec5SDimitry Andric//                            Op0    Op1     CRn     CRm    Op2
14490b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSPE} }] in {
14500b57cec5SDimitry Andricdef : RWSysReg<"PMBLIMITR_EL1", 0b11, 0b000, 0b1001, 0b1010, 0b000>;
14510b57cec5SDimitry Andricdef : RWSysReg<"PMBPTR_EL1",    0b11, 0b000, 0b1001, 0b1010, 0b001>;
14520b57cec5SDimitry Andricdef : RWSysReg<"PMBSR_EL1",     0b11, 0b000, 0b1001, 0b1010, 0b011>;
14535ffd83dbSDimitry Andricdef : ROSysReg<"PMBIDR_EL1",    0b11, 0b000, 0b1001, 0b1010, 0b111>;
14540b57cec5SDimitry Andricdef : RWSysReg<"PMSCR_EL2",     0b11, 0b100, 0b1001, 0b1001, 0b000>;
14550b57cec5SDimitry Andricdef : RWSysReg<"PMSCR_EL12",    0b11, 0b101, 0b1001, 0b1001, 0b000>;
14560b57cec5SDimitry Andricdef : RWSysReg<"PMSCR_EL1",     0b11, 0b000, 0b1001, 0b1001, 0b000>;
14570b57cec5SDimitry Andricdef : RWSysReg<"PMSICR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b010>;
14580b57cec5SDimitry Andricdef : RWSysReg<"PMSIRR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b011>;
14590b57cec5SDimitry Andricdef : RWSysReg<"PMSFCR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b100>;
14600b57cec5SDimitry Andricdef : RWSysReg<"PMSEVFR_EL1",   0b11, 0b000, 0b1001, 0b1001, 0b101>;
14610b57cec5SDimitry Andricdef : RWSysReg<"PMSLATFR_EL1",  0b11, 0b000, 0b1001, 0b1001, 0b110>;
14625ffd83dbSDimitry Andricdef : ROSysReg<"PMSIDR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b111>;
14630b57cec5SDimitry Andric}
14640b57cec5SDimitry Andric
14650b57cec5SDimitry Andric// v8.2a "RAS extension" registers
14660b57cec5SDimitry Andric//                         Op0    Op1     CRn     CRm    Op2
14670b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureRAS} }] in {
14680b57cec5SDimitry Andricdef : RWSysReg<"ERRSELR_EL1",   0b11, 0b000, 0b0101, 0b0011, 0b001>;
14690b57cec5SDimitry Andricdef : RWSysReg<"ERXCTLR_EL1",   0b11, 0b000, 0b0101, 0b0100, 0b001>;
14700b57cec5SDimitry Andricdef : RWSysReg<"ERXSTATUS_EL1", 0b11, 0b000, 0b0101, 0b0100, 0b010>;
14710b57cec5SDimitry Andricdef : RWSysReg<"ERXADDR_EL1",   0b11, 0b000, 0b0101, 0b0100, 0b011>;
14720b57cec5SDimitry Andricdef : RWSysReg<"ERXMISC0_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b000>;
14730b57cec5SDimitry Andricdef : RWSysReg<"ERXMISC1_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b001>;
14740b57cec5SDimitry Andricdef : RWSysReg<"DISR_EL1",      0b11, 0b000, 0b1100, 0b0001, 0b001>;
14750b57cec5SDimitry Andricdef : RWSysReg<"VDISR_EL2",     0b11, 0b100, 0b1100, 0b0001, 0b001>;
14760b57cec5SDimitry Andricdef : RWSysReg<"VSESR_EL2",     0b11, 0b100, 0b0101, 0b0010, 0b011>;
14770b57cec5SDimitry Andric}
14780b57cec5SDimitry Andric
14790b57cec5SDimitry Andric// v8.3a "Pointer authentication extension" registers
14800b57cec5SDimitry Andric//                              Op0    Op1     CRn     CRm    Op2
1481e8d8bef9SDimitry Andriclet Requires = [{ {AArch64::FeaturePAuth} }] in {
14820b57cec5SDimitry Andricdef : RWSysReg<"APIAKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b000>;
14830b57cec5SDimitry Andricdef : RWSysReg<"APIAKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b001>;
14840b57cec5SDimitry Andricdef : RWSysReg<"APIBKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b010>;
14850b57cec5SDimitry Andricdef : RWSysReg<"APIBKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b011>;
14860b57cec5SDimitry Andricdef : RWSysReg<"APDAKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b000>;
14870b57cec5SDimitry Andricdef : RWSysReg<"APDAKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b001>;
14880b57cec5SDimitry Andricdef : RWSysReg<"APDBKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b010>;
14890b57cec5SDimitry Andricdef : RWSysReg<"APDBKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b011>;
14900b57cec5SDimitry Andricdef : RWSysReg<"APGAKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0011, 0b000>;
14910b57cec5SDimitry Andricdef : RWSysReg<"APGAKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0011, 0b001>;
14920b57cec5SDimitry Andric}
14930b57cec5SDimitry Andric
14940b57cec5SDimitry Andric// v8.4 "Secure Exception Level 2 extension"
14950b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSEL2} }] in {
14960b57cec5SDimitry Andric// v8.4a "Virtualization secure second stage translation" registers
14970b57cec5SDimitry Andric//                           Op0   Op1    CRn     CRm     Op2
14980b57cec5SDimitry Andricdef : RWSysReg<"VSTCR_EL2" , 0b11, 0b100, 0b0010, 0b0110, 0b010>;
1499349cc55cSDimitry Andricdef : RWSysReg<"VSTTBR_EL2", 0b11, 0b100, 0b0010, 0b0110, 0b000> {
1500349cc55cSDimitry Andric  let Requires = [{ {AArch64::HasV8_0aOps} }];
1501349cc55cSDimitry Andric}
15020b57cec5SDimitry Andric
15030b57cec5SDimitry Andric// v8.4a "Virtualization timer" registers
15040b57cec5SDimitry Andric//                                Op0   Op1    CRn     CRm     Op2
15050b57cec5SDimitry Andricdef : RWSysReg<"CNTHVS_TVAL_EL2", 0b11, 0b100, 0b1110, 0b0100, 0b000>;
15060b57cec5SDimitry Andricdef : RWSysReg<"CNTHVS_CVAL_EL2", 0b11, 0b100, 0b1110, 0b0100, 0b010>;
15070b57cec5SDimitry Andricdef : RWSysReg<"CNTHVS_CTL_EL2",  0b11, 0b100, 0b1110, 0b0100, 0b001>;
15080b57cec5SDimitry Andricdef : RWSysReg<"CNTHPS_TVAL_EL2", 0b11, 0b100, 0b1110, 0b0101, 0b000>;
15090b57cec5SDimitry Andricdef : RWSysReg<"CNTHPS_CVAL_EL2", 0b11, 0b100, 0b1110, 0b0101, 0b010>;
15100b57cec5SDimitry Andricdef : RWSysReg<"CNTHPS_CTL_EL2",  0b11, 0b100, 0b1110, 0b0101, 0b001>;
15110b57cec5SDimitry Andric
15120b57cec5SDimitry Andric// v8.4a "Virtualization debug state" registers
15130b57cec5SDimitry Andric//                           Op0   Op1    CRn     CRm     Op2
15140b57cec5SDimitry Andricdef : RWSysReg<"SDER32_EL2", 0b11, 0b100, 0b0001, 0b0011, 0b001>;
15150b57cec5SDimitry Andric} // FeatureSEL2
15160b57cec5SDimitry Andric
15170b57cec5SDimitry Andric// v8.4a RAS registers
15180b57cec5SDimitry Andric//                              Op0   Op1    CRn     CRm     Op2
15190b57cec5SDimitry Andricdef : RWSysReg<"ERXPFGCTL_EL1", 0b11, 0b000, 0b0101, 0b0100, 0b101>;
15200b57cec5SDimitry Andricdef : RWSysReg<"ERXPFGCDN_EL1", 0b11, 0b000, 0b0101, 0b0100, 0b110>;
15210b57cec5SDimitry Andricdef : RWSysReg<"ERXMISC2_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b010>;
15220b57cec5SDimitry Andricdef : RWSysReg<"ERXMISC3_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b011>;
15230b57cec5SDimitry Andricdef : ROSysReg<"ERXPFGF_EL1",   0b11, 0b000, 0b0101, 0b0100, 0b100>;
15240b57cec5SDimitry Andric
15250b57cec5SDimitry Andric// v8.4a MPAM registers
15260b57cec5SDimitry Andric//                             Op0   Op1    CRn     CRm     Op2
15270b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureMPAM} }] in {
15280b57cec5SDimitry Andricdef : RWSysReg<"MPAM0_EL1",    0b11, 0b000, 0b1010, 0b0101, 0b001>;
15290b57cec5SDimitry Andricdef : RWSysReg<"MPAM1_EL1",    0b11, 0b000, 0b1010, 0b0101, 0b000>;
15300b57cec5SDimitry Andricdef : RWSysReg<"MPAM2_EL2",    0b11, 0b100, 0b1010, 0b0101, 0b000>;
15310b57cec5SDimitry Andricdef : RWSysReg<"MPAM3_EL3",    0b11, 0b110, 0b1010, 0b0101, 0b000>;
15320b57cec5SDimitry Andricdef : RWSysReg<"MPAM1_EL12",   0b11, 0b101, 0b1010, 0b0101, 0b000>;
15330b57cec5SDimitry Andricdef : RWSysReg<"MPAMHCR_EL2",  0b11, 0b100, 0b1010, 0b0100, 0b000>;
15340b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPMV_EL2", 0b11, 0b100, 0b1010, 0b0100, 0b001>;
15350b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM0_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b000>;
15360b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM1_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b001>;
15370b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM2_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b010>;
15380b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM3_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b011>;
15390b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM4_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b100>;
15400b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM5_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b101>;
15410b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM6_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b110>;
15420b57cec5SDimitry Andricdef : RWSysReg<"MPAMVPM7_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b111>;
15430b57cec5SDimitry Andricdef : ROSysReg<"MPAMIDR_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b100>;
15440b57cec5SDimitry Andric} //FeatureMPAM
15450b57cec5SDimitry Andric
15465ffd83dbSDimitry Andric// v8.4a Activity Monitor registers
15470b57cec5SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
15480b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureAM} }] in {
15490b57cec5SDimitry Andricdef : RWSysReg<"AMCR_EL0",         0b11, 0b011, 0b1101, 0b0010, 0b000>;
15500b57cec5SDimitry Andricdef : ROSysReg<"AMCFGR_EL0",       0b11, 0b011, 0b1101, 0b0010, 0b001>;
15510b57cec5SDimitry Andricdef : ROSysReg<"AMCGCR_EL0",       0b11, 0b011, 0b1101, 0b0010, 0b010>;
15520b57cec5SDimitry Andricdef : RWSysReg<"AMUSERENR_EL0",    0b11, 0b011, 0b1101, 0b0010, 0b011>;
15530b57cec5SDimitry Andricdef : RWSysReg<"AMCNTENCLR0_EL0",  0b11, 0b011, 0b1101, 0b0010, 0b100>;
15540b57cec5SDimitry Andricdef : RWSysReg<"AMCNTENSET0_EL0",  0b11, 0b011, 0b1101, 0b0010, 0b101>;
15550b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR00_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b000>;
15560b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR01_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b001>;
15570b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR02_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b010>;
15580b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR03_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b011>;
15590b57cec5SDimitry Andricdef : ROSysReg<"AMEVTYPER00_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b000>;
15600b57cec5SDimitry Andricdef : ROSysReg<"AMEVTYPER01_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b001>;
15610b57cec5SDimitry Andricdef : ROSysReg<"AMEVTYPER02_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b010>;
15620b57cec5SDimitry Andricdef : ROSysReg<"AMEVTYPER03_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b011>;
15630b57cec5SDimitry Andricdef : RWSysReg<"AMCNTENCLR1_EL0",  0b11, 0b011, 0b1101, 0b0011, 0b000>;
15640b57cec5SDimitry Andricdef : RWSysReg<"AMCNTENSET1_EL0",  0b11, 0b011, 0b1101, 0b0011, 0b001>;
15650b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR10_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b000>;
15660b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR11_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b001>;
15670b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR12_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b010>;
15680b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR13_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b011>;
15690b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR14_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b100>;
15700b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR15_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b101>;
15710b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR16_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b110>;
15720b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR17_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b111>;
15730b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR18_EL0",   0b11, 0b011, 0b1101, 0b1101, 0b000>;
15740b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR19_EL0",   0b11, 0b011, 0b1101, 0b1101, 0b001>;
15750b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR110_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b010>;
15760b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR111_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b011>;
15770b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR112_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b100>;
15780b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR113_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b101>;
15790b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR114_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b110>;
15800b57cec5SDimitry Andricdef : RWSysReg<"AMEVCNTR115_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b111>;
15810b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER10_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b000>;
15820b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER11_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b001>;
15830b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER12_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b010>;
15840b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER13_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b011>;
15850b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER14_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b100>;
15860b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER15_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b101>;
15870b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER16_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b110>;
15880b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER17_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b111>;
15890b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER18_EL0",  0b11, 0b011, 0b1101, 0b1111, 0b000>;
15900b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER19_EL0",  0b11, 0b011, 0b1101, 0b1111, 0b001>;
15910b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER110_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b010>;
15920b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER111_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b011>;
15930b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER112_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b100>;
15940b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER113_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b101>;
15950b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER114_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b110>;
15960b57cec5SDimitry Andricdef : RWSysReg<"AMEVTYPER115_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b111>;
15970b57cec5SDimitry Andric} //FeatureAM
15980b57cec5SDimitry Andric
15990b57cec5SDimitry Andric// v8.4a Trace Extension registers
16000b57cec5SDimitry Andric//
16010b57cec5SDimitry Andric// Please note that the 8.4 spec also defines these registers:
16020b57cec5SDimitry Andric// TRCIDR1, ID_DFR0_EL1, ID_AA64DFR0_EL1, MDSCR_EL1, MDCR_EL2, and MDCR_EL3,
16030b57cec5SDimitry Andric// but they are already defined above.
16040b57cec5SDimitry Andric//
16050b57cec5SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
16060b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureTRACEV8_4} }] in {
16070b57cec5SDimitry Andricdef : RWSysReg<"TRFCR_EL1",        0b11, 0b000, 0b0001, 0b0010, 0b001>;
16080b57cec5SDimitry Andricdef : RWSysReg<"TRFCR_EL2",        0b11, 0b100, 0b0001, 0b0010, 0b001>;
16090b57cec5SDimitry Andricdef : RWSysReg<"TRFCR_EL12",       0b11, 0b101, 0b0001, 0b0010, 0b001>;
16100b57cec5SDimitry Andric} //FeatureTRACEV8_4
16110b57cec5SDimitry Andric
16125ffd83dbSDimitry Andric// v8.4a Timing insensitivity of data processing instructions
16130b57cec5SDimitry Andric// DIT: Data Independent Timing instructions
16140b57cec5SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
16150b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureDIT} }] in {
16160b57cec5SDimitry Andricdef : RWSysReg<"DIT",              0b11, 0b011, 0b0100, 0b0010, 0b101>;
16170b57cec5SDimitry Andric} //FeatureDIT
16180b57cec5SDimitry Andric
16190b57cec5SDimitry Andric// v8.4a Enhanced Support for Nested Virtualization
16200b57cec5SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
16210b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureNV} }] in {
16220b57cec5SDimitry Andricdef : RWSysReg<"VNCR_EL2",         0b11, 0b100, 0b0010, 0b0010, 0b000>;
16230b57cec5SDimitry Andric} //FeatureNV
16240b57cec5SDimitry Andric
16250b57cec5SDimitry Andric// SVE control registers
16260b57cec5SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
16270b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSVE} }] in {
16280b57cec5SDimitry Andricdef : RWSysReg<"ZCR_EL1",          0b11, 0b000, 0b0001, 0b0010, 0b000>;
16290b57cec5SDimitry Andricdef : RWSysReg<"ZCR_EL2",          0b11, 0b100, 0b0001, 0b0010, 0b000>;
16300b57cec5SDimitry Andricdef : RWSysReg<"ZCR_EL3",          0b11, 0b110, 0b0001, 0b0010, 0b000>;
16310b57cec5SDimitry Andricdef : RWSysReg<"ZCR_EL12",         0b11, 0b101, 0b0001, 0b0010, 0b000>;
16320b57cec5SDimitry Andric}
16330b57cec5SDimitry Andric
16340b57cec5SDimitry Andric// V8.5a Spectre mitigation SSBS register
16350b57cec5SDimitry Andric//                     Op0   Op1    CRn     CRm     Op2
16360b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureSSBS} }] in
16370b57cec5SDimitry Andricdef : RWSysReg<"SSBS", 0b11, 0b011, 0b0100, 0b0010, 0b110>;
16380b57cec5SDimitry Andric
16390b57cec5SDimitry Andric// v8.5a Memory Tagging Extension
16400b57cec5SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
16410b57cec5SDimitry Andriclet Requires = [{ {AArch64::FeatureMTE} }] in {
16420b57cec5SDimitry Andricdef : RWSysReg<"TCO",              0b11, 0b011, 0b0100, 0b0010, 0b111>;
16430b57cec5SDimitry Andricdef : RWSysReg<"GCR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b110>;
16440b57cec5SDimitry Andricdef : RWSysReg<"RGSR_EL1",         0b11, 0b000, 0b0001, 0b0000, 0b101>;
16458bcb0991SDimitry Andricdef : RWSysReg<"TFSR_EL1",         0b11, 0b000, 0b0101, 0b0110, 0b000>;
16468bcb0991SDimitry Andricdef : RWSysReg<"TFSR_EL2",         0b11, 0b100, 0b0101, 0b0110, 0b000>;
16478bcb0991SDimitry Andricdef : RWSysReg<"TFSR_EL3",         0b11, 0b110, 0b0101, 0b0110, 0b000>;
16488bcb0991SDimitry Andricdef : RWSysReg<"TFSR_EL12",        0b11, 0b101, 0b0101, 0b0110, 0b000>;
16498bcb0991SDimitry Andricdef : RWSysReg<"TFSRE0_EL1",       0b11, 0b000, 0b0101, 0b0110, 0b001>;
16500b57cec5SDimitry Andricdef : ROSysReg<"GMID_EL1",         0b11, 0b001, 0b0000, 0b0000, 0b100>;
16510b57cec5SDimitry Andric} // HasMTE
16520b57cec5SDimitry Andric
16538bcb0991SDimitry Andric// Embedded Trace Extension R/W System registers
16548bcb0991SDimitry Andriclet Requires = [{ {AArch64::FeatureETE} }] in {
16558bcb0991SDimitry Andric//              Name            Op0   Op1    CRn     CRm     Op2
16568bcb0991SDimitry Andricdef : RWSysReg<"TRCRSR",        0b10, 0b001, 0b0000, 0b1010, 0b000>;
16578bcb0991SDimitry Andric//  TRCEXTINSELR0 has the same encoding as ETM TRCEXTINSELR
16588bcb0991SDimitry Andricdef : RWSysReg<"TRCEXTINSELR0", 0b10, 0b001, 0b0000, 0b1000, 0b100>;
16598bcb0991SDimitry Andricdef : RWSysReg<"TRCEXTINSELR1", 0b10, 0b001, 0b0000, 0b1001, 0b100>;
16608bcb0991SDimitry Andricdef : RWSysReg<"TRCEXTINSELR2", 0b10, 0b001, 0b0000, 0b1010, 0b100>;
16618bcb0991SDimitry Andricdef : RWSysReg<"TRCEXTINSELR3", 0b10, 0b001, 0b0000, 0b1011, 0b100>;
16628bcb0991SDimitry Andric} // FeatureETE
16638bcb0991SDimitry Andric
16648bcb0991SDimitry Andric// Trace Buffer Extension System registers
16658bcb0991SDimitry Andriclet Requires = [{ {AArch64::FeatureTRBE} }] in {
16668bcb0991SDimitry Andric//                   Name       Op0   Op1    CRn     CRm     Op2
16678bcb0991SDimitry Andricdef : RWSysReg<"TRBLIMITR_EL1", 0b11, 0b000, 0b1001, 0b1011, 0b000>;
16688bcb0991SDimitry Andricdef : RWSysReg<"TRBPTR_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b001>;
16698bcb0991SDimitry Andricdef : RWSysReg<"TRBBASER_EL1",  0b11, 0b000, 0b1001, 0b1011, 0b010>;
16708bcb0991SDimitry Andricdef : RWSysReg<"TRBSR_EL1",     0b11, 0b000, 0b1001, 0b1011, 0b011>;
16718bcb0991SDimitry Andricdef : RWSysReg<"TRBMAR_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b100>;
16728bcb0991SDimitry Andricdef : RWSysReg<"TRBTRG_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b110>;
16738bcb0991SDimitry Andricdef : ROSysReg<"TRBIDR_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b111>;
16748bcb0991SDimitry Andric} // FeatureTRBE
16758bcb0991SDimitry Andric
16765ffd83dbSDimitry Andric
16775ffd83dbSDimitry Andric// v8.6a Activity Monitors Virtualization Support
16785ffd83dbSDimitry Andriclet Requires = [{ {AArch64::FeatureAMVS} }] in {
1679bdd1243dSDimitry Andric//              Name            Op0   Op1    CRn     CRm     Op2
1680bdd1243dSDimitry Andricdef : ROSysReg<"AMCG1IDR_EL0",  0b11, 0b011, 0b1101, 0b0010, 0b110>;
16815ffd83dbSDimitry Andricforeach n = 0-15 in {
16825ffd83dbSDimitry Andric  foreach x = 0-1 in {
16835ffd83dbSDimitry Andric  def : RWSysReg<"AMEVCNTVOFF"#x#n#"_EL2",
16845ffd83dbSDimitry Andric    0b11, 0b100, 0b1101, 0b1000, 0b000>{
16855ffd83dbSDimitry Andric      let Encoding{4} = x;
16865ffd83dbSDimitry Andric      let Encoding{3-0} = n;
16875ffd83dbSDimitry Andric    }
16885ffd83dbSDimitry Andric  }
16895ffd83dbSDimitry Andric}
16905ffd83dbSDimitry Andric}
16915ffd83dbSDimitry Andric
16925ffd83dbSDimitry Andric// v8.6a Fine Grained Virtualization Traps
16935ffd83dbSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
16945ffd83dbSDimitry Andriclet Requires = [{ {AArch64::FeatureFineGrainedTraps} }] in {
16955ffd83dbSDimitry Andricdef : RWSysReg<"HFGRTR_EL2",       0b11, 0b100, 0b0001, 0b0001, 0b100>;
16965ffd83dbSDimitry Andricdef : RWSysReg<"HFGWTR_EL2",       0b11, 0b100, 0b0001, 0b0001, 0b101>;
16975ffd83dbSDimitry Andricdef : RWSysReg<"HFGITR_EL2",       0b11, 0b100, 0b0001, 0b0001, 0b110>;
16985ffd83dbSDimitry Andricdef : RWSysReg<"HDFGRTR_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b100>;
16995ffd83dbSDimitry Andricdef : RWSysReg<"HDFGWTR_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b101>;
1700bdd1243dSDimitry Andricdef : RWSysReg<"HAFGRTR_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b110>;
1701bdd1243dSDimitry Andric
1702bdd1243dSDimitry Andric// v8.9a/v9.4a additions to Fine Grained Traps (FEAT_FGT2)
1703bdd1243dSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1704bdd1243dSDimitry Andricdef : RWSysReg<"HDFGRTR2_EL2",     0b11, 0b100, 0b0011, 0b0001, 0b000>;
1705bdd1243dSDimitry Andricdef : RWSysReg<"HDFGWTR2_EL2",     0b11, 0b100, 0b0011, 0b0001, 0b001>;
1706bdd1243dSDimitry Andricdef : RWSysReg<"HFGRTR2_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b010>;
1707bdd1243dSDimitry Andricdef : RWSysReg<"HFGWTR2_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b011>;
1708bdd1243dSDimitry Andricdef : RWSysReg<"HFGITR2_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b111>;
17095ffd83dbSDimitry Andric}
17105ffd83dbSDimitry Andric
17115ffd83dbSDimitry Andric// v8.6a Enhanced Counter Virtualization
17125ffd83dbSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
17135ffd83dbSDimitry Andriclet Requires = [{ {AArch64::FeatureEnhancedCounterVirtualization} }] in {
17145ffd83dbSDimitry Andricdef : RWSysReg<"CNTSCALE_EL2",     0b11, 0b100, 0b1110, 0b0000, 0b100>;
17155ffd83dbSDimitry Andricdef : RWSysReg<"CNTISCALE_EL2",    0b11, 0b100, 0b1110, 0b0000, 0b101>;
17165ffd83dbSDimitry Andricdef : RWSysReg<"CNTPOFF_EL2",      0b11, 0b100, 0b1110, 0b0000, 0b110>;
17175ffd83dbSDimitry Andricdef : RWSysReg<"CNTVFRQ_EL2",      0b11, 0b100, 0b1110, 0b0000, 0b111>;
1718bdd1243dSDimitry Andricdef : ROSysReg<"CNTPCTSS_EL0",     0b11, 0b011, 0b1110, 0b0000, 0b101>;
1719bdd1243dSDimitry Andricdef : ROSysReg<"CNTVCTSS_EL0",     0b11, 0b011, 0b1110, 0b0000, 0b110>;
17205ffd83dbSDimitry Andric}
17215ffd83dbSDimitry Andric
1722e8d8bef9SDimitry Andric// v8.7a LD64B/ST64B Accelerator Extension system register
1723e8d8bef9SDimitry Andriclet Requires = [{ {AArch64::FeatureLS64} }] in
1724e8d8bef9SDimitry Andricdef : RWSysReg<"ACCDATA_EL1",       0b11, 0b000, 0b1101, 0b0000, 0b101>;
1725e8d8bef9SDimitry Andric
1726e8d8bef9SDimitry Andric// Branch Record Buffer system registers
1727e8d8bef9SDimitry Andriclet Requires = [{ {AArch64::FeatureBRBE} }] in {
1728e8d8bef9SDimitry Andricdef : RWSysReg<"BRBCR_EL1",         0b10, 0b001, 0b1001, 0b0000, 0b000>;
1729e8d8bef9SDimitry Andricdef : RWSysReg<"BRBCR_EL12",        0b10, 0b101, 0b1001, 0b0000, 0b000>;
1730e8d8bef9SDimitry Andricdef : RWSysReg<"BRBCR_EL2",         0b10, 0b100, 0b1001, 0b0000, 0b000>;
1731e8d8bef9SDimitry Andricdef : RWSysReg<"BRBFCR_EL1",        0b10, 0b001, 0b1001, 0b0000, 0b001>;
1732e8d8bef9SDimitry Andricdef : ROSysReg<"BRBIDR0_EL1",       0b10, 0b001, 0b1001, 0b0010, 0b000>;
1733e8d8bef9SDimitry Andricdef : RWSysReg<"BRBINFINJ_EL1",     0b10, 0b001, 0b1001, 0b0001, 0b000>;
1734e8d8bef9SDimitry Andricdef : RWSysReg<"BRBSRCINJ_EL1",     0b10, 0b001, 0b1001, 0b0001, 0b001>;
1735e8d8bef9SDimitry Andricdef : RWSysReg<"BRBTGTINJ_EL1",     0b10, 0b001, 0b1001, 0b0001, 0b010>;
1736e8d8bef9SDimitry Andricdef : RWSysReg<"BRBTS_EL1",         0b10, 0b001, 0b1001, 0b0000, 0b010>;
1737e8d8bef9SDimitry Andricforeach n = 0-31 in {
1738e8d8bef9SDimitry Andric  defvar nb = !cast<bits<5>>(n);
1739e8d8bef9SDimitry Andric  def : ROSysReg<"BRBINF"#n#"_EL1", 0b10, 0b001, 0b1000, nb{3-0}, {nb{4},0b00}>;
1740e8d8bef9SDimitry Andric  def : ROSysReg<"BRBSRC"#n#"_EL1", 0b10, 0b001, 0b1000, nb{3-0}, {nb{4},0b01}>;
1741e8d8bef9SDimitry Andric  def : ROSysReg<"BRBTGT"#n#"_EL1", 0b10, 0b001, 0b1000, nb{3-0}, {nb{4},0b10}>;
1742e8d8bef9SDimitry Andric}
1743e8d8bef9SDimitry Andric}
1744e8d8bef9SDimitry Andric
1745e8d8bef9SDimitry Andric// Statistical Profiling Extension system register
1746e8d8bef9SDimitry Andriclet Requires = [{ {AArch64::FeatureSPE_EEF} }] in
1747e8d8bef9SDimitry Andricdef : RWSysReg<"PMSNEVFR_EL1",      0b11, 0b000, 0b1001, 0b1001, 0b001>;
1748e8d8bef9SDimitry Andric
17490b57cec5SDimitry Andric// Cyclone specific system registers
17500b57cec5SDimitry Andric//                                 Op0    Op1     CRn     CRm    Op2
1751349cc55cSDimitry Andriclet Requires = [{ {AArch64::FeatureAppleA7SysReg} }] in
17520b57cec5SDimitry Andricdef : RWSysReg<"CPM_IOACC_CTL_EL3", 0b11, 0b111, 0b1111, 0b0010, 0b000>;
1753fe6060f1SDimitry Andric
1754fe6060f1SDimitry Andric// Scalable Matrix Extension (SME)
1755fe6060f1SDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
1756fe6060f1SDimitry Andriclet Requires = [{ {AArch64::FeatureSME} }] in {
1757fe6060f1SDimitry Andricdef : RWSysReg<"SMCR_EL1",         0b11, 0b000, 0b0001, 0b0010, 0b110>;
1758fe6060f1SDimitry Andricdef : RWSysReg<"SMCR_EL2",         0b11, 0b100, 0b0001, 0b0010, 0b110>;
1759fe6060f1SDimitry Andricdef : RWSysReg<"SMCR_EL3",         0b11, 0b110, 0b0001, 0b0010, 0b110>;
1760fe6060f1SDimitry Andricdef : RWSysReg<"SMCR_EL12",        0b11, 0b101, 0b0001, 0b0010, 0b110>;
1761fe6060f1SDimitry Andricdef : RWSysReg<"SVCR",             0b11, 0b011, 0b0100, 0b0010, 0b010>;
1762fe6060f1SDimitry Andricdef : RWSysReg<"SMPRI_EL1",        0b11, 0b000, 0b0001, 0b0010, 0b100>;
1763fe6060f1SDimitry Andricdef : RWSysReg<"SMPRIMAP_EL2",     0b11, 0b100, 0b0001, 0b0010, 0b101>;
1764fe6060f1SDimitry Andricdef : ROSysReg<"SMIDR_EL1",        0b11, 0b001, 0b0000, 0b0000, 0b110>;
1765fe6060f1SDimitry Andricdef : RWSysReg<"TPIDR2_EL0",       0b11, 0b011, 0b1101, 0b0000, 0b101>;
1766fe6060f1SDimitry Andric} // HasSME
1767fe6060f1SDimitry Andric
1768fe6060f1SDimitry Andric// v8.4a MPAM and SME registers
1769fe6060f1SDimitry Andric//                              Op0   Op1    CRn     CRm     Op2
1770fe6060f1SDimitry Andriclet Requires = [{ {AArch64::FeatureMPAM, AArch64::FeatureSME} }] in {
1771fe6060f1SDimitry Andricdef : RWSysReg<"MPAMSM_EL1",    0b11, 0b000, 0b1010, 0b0101, 0b011>;
1772fe6060f1SDimitry Andric} // HasMPAM, HasSME
1773bdd1243dSDimitry Andric
1774bdd1243dSDimitry Andric// v8.8a Non-Maskable Interrupts
1775bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureNMI} }] in {
1776bdd1243dSDimitry Andric  //                               Op0   Op1    CRn     CRm     Op2
1777bdd1243dSDimitry Andric  def : RWSysReg<"ALLINT",         0b11, 0b000, 0b0100, 0b0011, 0b000>;
1778bdd1243dSDimitry Andric  def : ROSysReg<"ICC_NMIAR1_EL1", 0b11, 0b000, 0b1100, 0b1001, 0b101>; // FEAT_GICv3_NMI
1779bdd1243dSDimitry Andric}
1780bdd1243dSDimitry Andric
178106c3fb27SDimitry Andric// v9.4a Guarded Control Stack Extension (GCS)
178206c3fb27SDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
178306c3fb27SDimitry Andricdef : RWSysReg<"GCSCR_EL1",   0b11, 0b000, 0b0010, 0b0101, 0b000>;
178406c3fb27SDimitry Andricdef : RWSysReg<"GCSPR_EL1",   0b11, 0b000, 0b0010, 0b0101, 0b001>;
178506c3fb27SDimitry Andricdef : RWSysReg<"GCSCRE0_EL1", 0b11, 0b000, 0b0010, 0b0101, 0b010>;
178606c3fb27SDimitry Andricdef : RWSysReg<"GCSPR_EL0",   0b11, 0b011, 0b0010, 0b0101, 0b001>;
178706c3fb27SDimitry Andricdef : RWSysReg<"GCSCR_EL2",   0b11, 0b100, 0b0010, 0b0101, 0b000>;
178806c3fb27SDimitry Andricdef : RWSysReg<"GCSPR_EL2",   0b11, 0b100, 0b0010, 0b0101, 0b001>;
178906c3fb27SDimitry Andricdef : RWSysReg<"GCSCR_EL12",  0b11, 0b101, 0b0010, 0b0101, 0b000>;
179006c3fb27SDimitry Andricdef : RWSysReg<"GCSPR_EL12",  0b11, 0b101, 0b0010, 0b0101, 0b001>;
179106c3fb27SDimitry Andricdef : RWSysReg<"GCSCR_EL3",   0b11, 0b110, 0b0010, 0b0101, 0b000>;
179206c3fb27SDimitry Andricdef : RWSysReg<"GCSPR_EL3",   0b11, 0b110, 0b0010, 0b0101, 0b001>;
179306c3fb27SDimitry Andric
1794bdd1243dSDimitry Andric// v8.9a/v9.4a Memory Attribute Index Enhancement (FEAT_AIE)
1795bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1796bdd1243dSDimitry Andricdef : RWSysReg<"AMAIR2_EL1",  0b11, 0b000, 0b1010, 0b0011, 0b001>;
1797bdd1243dSDimitry Andricdef : RWSysReg<"AMAIR2_EL12", 0b11, 0b101, 0b1010, 0b0011, 0b001>;
1798bdd1243dSDimitry Andricdef : RWSysReg<"AMAIR2_EL2",  0b11, 0b100, 0b1010, 0b0011, 0b001>;
1799bdd1243dSDimitry Andricdef : RWSysReg<"AMAIR2_EL3",  0b11, 0b110, 0b1010, 0b0011, 0b001>;
1800bdd1243dSDimitry Andricdef : RWSysReg<"MAIR2_EL1",   0b11, 0b000, 0b1010, 0b0010, 0b001>;
1801bdd1243dSDimitry Andricdef : RWSysReg<"MAIR2_EL12",  0b11, 0b101, 0b1010, 0b0010, 0b001>;
1802bdd1243dSDimitry Andricdef : RWSysReg<"MAIR2_EL2",   0b11, 0b100, 0b1010, 0b0001, 0b001>;
1803bdd1243dSDimitry Andricdef : RWSysReg<"MAIR2_EL3",   0b11, 0b110, 0b1010, 0b0001, 0b001>;
1804bdd1243dSDimitry Andric
1805bdd1243dSDimitry Andric// v8.9a/9.4a Stage 1 Permission Indirection Extension (FEAT_S1PIE)
1806bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1807bdd1243dSDimitry Andricdef : RWSysReg<"PIRE0_EL1",   0b11, 0b000, 0b1010, 0b0010, 0b010>;
1808bdd1243dSDimitry Andricdef : RWSysReg<"PIRE0_EL12",  0b11, 0b101, 0b1010, 0b0010, 0b010>;
1809bdd1243dSDimitry Andricdef : RWSysReg<"PIRE0_EL2",   0b11, 0b100, 0b1010, 0b0010, 0b010>;
1810bdd1243dSDimitry Andricdef : RWSysReg<"PIR_EL1",     0b11, 0b000, 0b1010, 0b0010, 0b011>;
1811bdd1243dSDimitry Andricdef : RWSysReg<"PIR_EL12",    0b11, 0b101, 0b1010, 0b0010, 0b011>;
1812bdd1243dSDimitry Andricdef : RWSysReg<"PIR_EL2",     0b11, 0b100, 0b1010, 0b0010, 0b011>;
1813bdd1243dSDimitry Andricdef : RWSysReg<"PIR_EL3",     0b11, 0b110, 0b1010, 0b0010, 0b011>;
1814bdd1243dSDimitry Andric
1815bdd1243dSDimitry Andric// v8.9a/v9.4a Stage 2 Permission Indirection Extension (FEAT_S2PIE)
1816bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1817bdd1243dSDimitry Andricdef : RWSysReg<"S2PIR_EL2",   0b11, 0b100, 0b1010, 0b0010, 0b101>;
1818bdd1243dSDimitry Andric
1819bdd1243dSDimitry Andric// v8.9a/v9.4a Stage 1 Permission Overlay Extension (FEAT_S1POE)
1820bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1821bdd1243dSDimitry Andricdef : RWSysReg<"POR_EL0",     0b11, 0b011, 0b1010, 0b0010, 0b100>;
1822bdd1243dSDimitry Andricdef : RWSysReg<"POR_EL1",     0b11, 0b000, 0b1010, 0b0010, 0b100>;
1823bdd1243dSDimitry Andricdef : RWSysReg<"POR_EL12",    0b11, 0b101, 0b1010, 0b0010, 0b100>;
1824bdd1243dSDimitry Andricdef : RWSysReg<"POR_EL2",     0b11, 0b100, 0b1010, 0b0010, 0b100>;
1825bdd1243dSDimitry Andricdef : RWSysReg<"POR_EL3",     0b11, 0b110, 0b1010, 0b0010, 0b100>;
1826bdd1243dSDimitry Andric
1827bdd1243dSDimitry Andric// v8.9a/v9.4a Stage 2 Permission Overlay Extension (FEAT_S2POE)
1828bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1829bdd1243dSDimitry Andricdef : RWSysReg<"S2POR_EL1",   0b11, 0b000, 0b1010, 0b0010, 0b101>;
1830bdd1243dSDimitry Andric
1831bdd1243dSDimitry Andric// v8.9a/v9.4a Extension to System Control Registers (FEAT_SCTLR2)
1832bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1833bdd1243dSDimitry Andricdef : RWSysReg<"SCTLR2_EL1",  0b11, 0b000, 0b0001, 0b0000, 0b011>;
1834bdd1243dSDimitry Andricdef : RWSysReg<"SCTLR2_EL12", 0b11, 0b101, 0b0001, 0b0000, 0b011>;
1835bdd1243dSDimitry Andricdef : RWSysReg<"SCTLR2_EL2",  0b11, 0b100, 0b0001, 0b0000, 0b011>;
1836bdd1243dSDimitry Andricdef : RWSysReg<"SCTLR2_EL3",  0b11, 0b110, 0b0001, 0b0000, 0b011>;
1837bdd1243dSDimitry Andric
1838bdd1243dSDimitry Andric// v8.9a/v9.4a Extension to Translation Control Registers (FEAT_TCR2)
1839bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1840bdd1243dSDimitry Andricdef : RWSysReg<"TCR2_EL1",    0b11, 0b000, 0b0010, 0b0000, 0b011>;
1841bdd1243dSDimitry Andricdef : RWSysReg<"TCR2_EL12",   0b11, 0b101, 0b0010, 0b0000, 0b011>;
1842bdd1243dSDimitry Andricdef : RWSysReg<"TCR2_EL2",    0b11, 0b100, 0b0010, 0b0000, 0b011>;
1843bdd1243dSDimitry Andric
1844bdd1243dSDimitry Andric// v8.9a/9.4a Translation Hardening Extension (FEAT_THE)
1845bdd1243dSDimitry Andric//                             Op0   Op1    CRn     CRm     Op2
1846bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureTHE} }] in {
1847bdd1243dSDimitry Andricdef : RWSysReg<"RCWMASK_EL1",  0b11, 0b000, 0b1101, 0b0000, 0b110>;
1848bdd1243dSDimitry Andricdef : RWSysReg<"RCWSMASK_EL1", 0b11, 0b000, 0b1101, 0b0000, 0b011>;
1849bdd1243dSDimitry Andric}
1850bdd1243dSDimitry Andric
1851bdd1243dSDimitry Andric// v8.9a/9.4a new Debug feature (FEAT_DEBUGv8p9)
1852bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1853bdd1243dSDimitry Andricdef : RWSysReg<"MDSELR_EL1", 0b10, 0b000, 0b0000, 0b0100, 0b010>;
1854bdd1243dSDimitry Andric
1855bdd1243dSDimitry Andric// v8.9a/9.4a new Performance Monitors Extension (FEAT_PMUv3p9)
1856bdd1243dSDimitry Andric//                            Op0   Op1    CRn     CRm     Op2
1857bdd1243dSDimitry Andricdef : RWSysReg<"PMUACR_EL1", 0b11, 0b000, 0b1001, 0b1110, 0b100>;
1858bdd1243dSDimitry Andric
1859bdd1243dSDimitry Andric// v8.9a/9.4a PMU Snapshot Extension (FEAT_PMUv3_SS)
1860bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1861bdd1243dSDimitry Andricdef : ROSysReg<"PMCCNTSVR_EL1",     0b10, 0b000, 0b1110, 0b1011, 0b111>;
1862bdd1243dSDimitry Andricdef : ROSysReg<"PMICNTSVR_EL1",     0b10, 0b000, 0b1110, 0b1100, 0b000>;
1863bdd1243dSDimitry Andricdef : RWSysReg<"PMSSCR_EL1",        0b11, 0b000, 0b1001, 0b1101, 0b011>;
1864bdd1243dSDimitry Andricforeach n = 0-30 in {
1865bdd1243dSDimitry Andric  defvar nb = !cast<bits<5>>(n);
1866bdd1243dSDimitry Andric  def : ROSysReg<"PMEVCNTSVR"#n#"_EL1", 0b10, 0b000, 0b1110, {0b10,nb{4-3}}, nb{2-0}>;
1867bdd1243dSDimitry Andric}
1868bdd1243dSDimitry Andric
1869bdd1243dSDimitry Andric// v8.9a/v9.4a PMUv3 Fixed-function instruction counter (FEAT_PMUv3_ICNTR)
1870bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1871bdd1243dSDimitry Andricdef : RWSysReg<"PMICNTR_EL0",       0b11, 0b011, 0b1001, 0b0100, 0b000>;
1872bdd1243dSDimitry Andricdef : RWSysReg<"PMICFILTR_EL0",     0b11, 0b011, 0b1001, 0b0110, 0b000>;
1873bdd1243dSDimitry Andric
1874bdd1243dSDimitry Andric// v8.9a/v9.4a PMUv3 Performance Monitors Zero with Mask (FEAT_PMUv3p9/FEAT_PMUv3_ICNTR)
1875bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1876bdd1243dSDimitry Andricdef : WOSysReg<"PMZR_EL0",          0b11, 0b011, 0b1001, 0b1101, 0b100>;
1877bdd1243dSDimitry Andric
1878bdd1243dSDimitry Andric// v8.9a/9.4a Synchronous-Exception-Based Event Profiling extension (FEAT_SEBEP)
1879bdd1243dSDimitry Andric//                              Op0   Op1    CRn     CRm     Op2
1880bdd1243dSDimitry Andricdef : RWSysReg<"PMECR_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b101>;
1881bdd1243dSDimitry Andricdef : RWSysReg<"PMIAR_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b111>;
1882bdd1243dSDimitry Andric
1883bdd1243dSDimitry Andric// v8.9a/9.4a System Performance Monitors Extension (FEAT_SPMU)
1884bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1885bdd1243dSDimitry Andricdef : RWSysReg<"SPMACCESSR_EL1",    0b10, 0b000, 0b1001, 0b1101, 0b011>;
1886bdd1243dSDimitry Andricdef : RWSysReg<"SPMACCESSR_EL12",   0b10, 0b101, 0b1001, 0b1101, 0b011>;
1887bdd1243dSDimitry Andricdef : RWSysReg<"SPMACCESSR_EL2",    0b10, 0b100, 0b1001, 0b1101, 0b011>;
1888bdd1243dSDimitry Andricdef : RWSysReg<"SPMACCESSR_EL3",    0b10, 0b110, 0b1001, 0b1101, 0b011>;
1889bdd1243dSDimitry Andricdef : RWSysReg<"SPMCNTENCLR_EL0",   0b10, 0b011, 0b1001, 0b1100, 0b010>;
1890bdd1243dSDimitry Andricdef : RWSysReg<"SPMCNTENSET_EL0",   0b10, 0b011, 0b1001, 0b1100, 0b001>;
1891bdd1243dSDimitry Andricdef : RWSysReg<"SPMCR_EL0",         0b10, 0b011, 0b1001, 0b1100, 0b000>;
1892bdd1243dSDimitry Andricdef : ROSysReg<"SPMDEVAFF_EL1",     0b10, 0b000, 0b1001, 0b1101, 0b110>;
1893bdd1243dSDimitry Andricdef : ROSysReg<"SPMDEVARCH_EL1",    0b10, 0b000, 0b1001, 0b1101, 0b101>;
1894bdd1243dSDimitry Andricforeach n = 0-15 in {
1895bdd1243dSDimitry Andric  defvar nb = !cast<bits<4>>(n);
1896bdd1243dSDimitry Andric  //                                     Op0   Op1    CRn     CRm            Op2
1897bdd1243dSDimitry Andric  def : RWSysReg<"SPMEVCNTR"#n#"_EL0",   0b10, 0b011, 0b1110, {0b000,nb{3}}, nb{2-0}>;
1898bdd1243dSDimitry Andric  def : RWSysReg<"SPMEVFILT2R"#n#"_EL0", 0b10, 0b011, 0b1110, {0b011,nb{3}}, nb{2-0}>;
1899bdd1243dSDimitry Andric  def : RWSysReg<"SPMEVFILTR"#n#"_EL0",  0b10, 0b011, 0b1110, {0b010,nb{3}}, nb{2-0}>;
1900bdd1243dSDimitry Andric  def : RWSysReg<"SPMEVTYPER"#n#"_EL0",  0b10, 0b011, 0b1110, {0b001,nb{3}}, nb{2-0}>;
1901bdd1243dSDimitry Andric}
1902bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1903bdd1243dSDimitry Andricdef : ROSysReg<"SPMIIDR_EL1",       0b10, 0b000, 0b1001, 0b1101, 0b100>;
1904bdd1243dSDimitry Andricdef : RWSysReg<"SPMINTENCLR_EL1",   0b10, 0b000, 0b1001, 0b1110, 0b010>;
1905bdd1243dSDimitry Andricdef : RWSysReg<"SPMINTENSET_EL1",   0b10, 0b000, 0b1001, 0b1110, 0b001>;
1906bdd1243dSDimitry Andricdef : RWSysReg<"SPMOVSCLR_EL0",     0b10, 0b011, 0b1001, 0b1100, 0b011>;
1907bdd1243dSDimitry Andricdef : RWSysReg<"SPMOVSSET_EL0",     0b10, 0b011, 0b1001, 0b1110, 0b011>;
1908bdd1243dSDimitry Andricdef : RWSysReg<"SPMSELR_EL0",       0b10, 0b011, 0b1001, 0b1100, 0b101>;
1909bdd1243dSDimitry Andricdef : ROSysReg<"SPMCGCR0_EL1",      0b10, 0b000, 0b1001, 0b1101, 0b000>;
1910bdd1243dSDimitry Andricdef : ROSysReg<"SPMCGCR1_EL1",      0b10, 0b000, 0b1001, 0b1101, 0b001>;
1911bdd1243dSDimitry Andricdef : ROSysReg<"SPMCFGR_EL1",       0b10, 0b000, 0b1001, 0b1101, 0b111>;
1912bdd1243dSDimitry Andricdef : RWSysReg<"SPMROOTCR_EL3",     0b10, 0b110, 0b1001, 0b1110, 0b111>;
1913bdd1243dSDimitry Andricdef : RWSysReg<"SPMSCR_EL1",        0b10, 0b111, 0b1001, 0b1110, 0b111>;
1914bdd1243dSDimitry Andric
1915bdd1243dSDimitry Andric// v8.9a/9.4a Instrumentation Extension (FEAT_ITE)
1916bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1917bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureITE} }] in {
1918bdd1243dSDimitry Andricdef : RWSysReg<"TRCITEEDCR",        0b10, 0b001, 0b0000, 0b0010, 0b001>;
1919bdd1243dSDimitry Andricdef : RWSysReg<"TRCITECR_EL1",      0b11, 0b000, 0b0001, 0b0010, 0b011>;
1920bdd1243dSDimitry Andricdef : RWSysReg<"TRCITECR_EL12",     0b11, 0b101, 0b0001, 0b0010, 0b011>;
1921bdd1243dSDimitry Andricdef : RWSysReg<"TRCITECR_EL2",      0b11, 0b100, 0b0001, 0b0010, 0b011>;
1922bdd1243dSDimitry Andric}
1923bdd1243dSDimitry Andric
1924bdd1243dSDimitry Andric// v8.9a/9.4a SPE Data Source Filtering (FEAT_SPE_FDS)
1925bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1926bdd1243dSDimitry Andricdef : RWSysReg<"PMSDSFR_EL1",       0b11, 0b000, 0b1001, 0b1010, 0b100>;
1927bdd1243dSDimitry Andric
1928bdd1243dSDimitry Andric// v8.9a/9.4a RASv2 (FEAT_RASv2)
1929bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1930bdd1243dSDimitry Andriclet Requires = [{ {AArch64::FeatureRASv2} }] in
1931bdd1243dSDimitry Andricdef : ROSysReg<"ERXGSR_EL1",        0b11, 0b000, 0b0101, 0b0011, 0b010>;
1932bdd1243dSDimitry Andric
1933bdd1243dSDimitry Andric// v8.9a/9.4a Physical Fault Address (FEAT_PFAR)
1934bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1935bdd1243dSDimitry Andricdef : RWSysReg<"PFAR_EL1",          0b11, 0b000, 0b0110, 0b0000, 0b101>;
1936bdd1243dSDimitry Andricdef : RWSysReg<"PFAR_EL12",         0b11, 0b101, 0b0110, 0b0000, 0b101>;
1937bdd1243dSDimitry Andricdef : RWSysReg<"PFAR_EL2",          0b11, 0b100, 0b0110, 0b0000, 0b101>;
1938bdd1243dSDimitry Andric
1939bdd1243dSDimitry Andric// v9.4a Exception-based event profiling (FEAT_EBEP)
1940bdd1243dSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1941bdd1243dSDimitry Andricdef : RWSysReg<"PM",                0b11, 0b000, 0b0100, 0b0011, 0b001>;
19425f757f3fSDimitry Andric
19435f757f3fSDimitry Andric// 2023 ISA Extension
19445f757f3fSDimitry Andric// AArch64 Floating-point Mode Register controls behaviors of the FP8
19455f757f3fSDimitry Andric// instructions (FEAT_FPMR)
19465f757f3fSDimitry Andric//                                 Op0   Op1    CRn     CRm     Op2
19475f757f3fSDimitry Andricdef : ROSysReg<"ID_AA64FPFR0_EL1", 0b11, 0b000, 0b0000, 0b0100, 0b111>;
19485f757f3fSDimitry Andricdef : RWSysReg<"FPMR",             0b11, 0b011, 0b0100, 0b0100, 0b010>;
19495f757f3fSDimitry Andric
19505f757f3fSDimitry Andric// v9.5a Software Stepping Enhancements (FEAT_STEP2)
19515f757f3fSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
19525f757f3fSDimitry Andricdef : RWSysReg<"MDSTEPOP_EL1",      0b10, 0b000, 0b0000, 0b0101, 0b010>;
19535f757f3fSDimitry Andric
19545f757f3fSDimitry Andric// v9.5a System PMU zero register (FEAT_SPMU2)
19555f757f3fSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
19565f757f3fSDimitry Andricdef : WOSysReg<"SPMZR_EL0",         0b10, 0b011, 0b1001, 0b1100, 0b100>;
1957cb14a3feSDimitry Andric
1958cb14a3feSDimitry Andric// v9.5a Delegated SError exceptions for EL3 (FEAT_E3DSE)
1959cb14a3feSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1960cb14a3feSDimitry Andricdef : RWSysReg<"VDISR_EL3",         0b11, 0b110, 0b1100, 0b0001, 0b001>;
1961cb14a3feSDimitry Andricdef : RWSysReg<"VSESR_EL3",         0b11, 0b110, 0b0101, 0b0010, 0b011>;
1962cb14a3feSDimitry Andric
1963cb14a3feSDimitry Andric// v9.5a Hardware Dirty State Tracking Structure (FEAT_HDBSS)
1964cb14a3feSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1965cb14a3feSDimitry Andricdef : RWSysReg<"HDBSSBR_EL2",       0b11, 0b100, 0b0010, 0b0011, 0b010>;
1966cb14a3feSDimitry Andricdef : RWSysReg<"HDBSSPROD_EL2",     0b11, 0b100, 0b0010, 0b0011, 0b011>;
1967cb14a3feSDimitry Andric
1968cb14a3feSDimitry Andric// v9.5a Hardware Accelerator for Cleaning Dirty State (FEAT_HACDBS)
1969cb14a3feSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1970cb14a3feSDimitry Andricdef : RWSysReg<"HACDBSBR_EL2",      0b11, 0b100, 0b0010, 0b0011, 0b100>;
1971cb14a3feSDimitry Andricdef : RWSysReg<"HACDBSCONS_EL2",    0b11, 0b100, 0b0010, 0b0011, 0b101>;
1972cb14a3feSDimitry Andric
1973cb14a3feSDimitry Andric// v9.5a Fine Grained Write Trap EL3 (FEAT_FGWTE3)
1974cb14a3feSDimitry Andric//                                  Op0   Op1    CRn     CRm     Op2
1975cb14a3feSDimitry Andricdef : RWSysReg<"FGWTE3_EL3",        0b11, 0b110, 0b0001, 0b0001, 0b101>;
1976