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