[llvm-branch-commits] [llvm] 7f8c4b5 - Revert "[AArch64] Fix definition of system register move instructions (#185709)"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jun 2 07:52:20 PDT 2026


Author: Lukacma
Date: 2026-06-02T15:52:16+01:00
New Revision: 7f8c4b51d4ddf49273b1ec2c9f85374414be3747

URL: https://github.com/llvm/llvm-project/commit/7f8c4b51d4ddf49273b1ec2c9f85374414be3747
DIFF: https://github.com/llvm/llvm-project/commit/7f8c4b51d4ddf49273b1ec2c9f85374414be3747.diff

LOG: Revert "[AArch64] Fix definition of system register move instructions (#185709)"

This reverts commit b115dd117ac109ac501b8bc044dbdefd6f5f2471.

Added: 
    llvm/test/CodeGen/AArch64/arm64-named-reg-notareg.ll

Modified: 
    lldb/test/API/commands/register/aarch64_dynamic_regset/main.c
    lldb/test/API/commands/register/aarch64_sve_registers/rw_access_static_config/main.c
    llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
    llvm/lib/Target/AArch64/AArch64InstrFormats.td
    llvm/lib/Target/AArch64/AArch64InstrInfo.td
    llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td
    llvm/lib/Target/AArch64/AArch64SystemOperands.td
    llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
    llvm/test/CodeGen/AArch64/aarch64-sme-za-call-lowering.ll
    llvm/test/CodeGen/AArch64/aarch64-sysreg128.ll
    llvm/test/CodeGen/AArch64/expand-sme-pseudos.mir
    llvm/test/CodeGen/AArch64/machine-sme-abi-find-insert-pt.mir
    llvm/test/CodeGen/AArch64/machine-sme-abi-skip-debug-inst.mir
    llvm/test/CodeGen/AArch64/sme-abi-eh-liveins.mir
    llvm/test/CodeGen/AArch64/sme-lazy-sve-nzcv-live.mir
    llvm/test/CodeGen/AArch64/special-reg.ll
    llvm/test/MC/AArch64/arm64-system-encoding.s
    llvm/test/MC/AArch64/armv9-mrrs-diagnostics.s
    llvm/test/MC/AArch64/armv9-mrrs.s
    llvm/test/MC/AArch64/armv9-msrr-diagnostics.s
    llvm/test/MC/AArch64/armv9-msrr.s
    llvm/test/MC/AArch64/basic-a64-instructions.s
    llvm/test/MC/Disassembler/AArch64/armv8.2a-uao.txt
    llvm/test/MC/Disassembler/AArch64/armv8.4a-dit.txt
    llvm/test/MC/Disassembler/AArch64/armv8.5a-dataproc.txt
    llvm/test/MC/Disassembler/AArch64/armv8.5a-mte.txt
    llvm/test/MC/Disassembler/AArch64/armv8.5a-sb.txt
    llvm/test/MC/Disassembler/AArch64/armv8.5a-ssbs.txt
    llvm/test/MC/Disassembler/AArch64/armv8.7a-wfxt.txt
    llvm/test/MC/Disassembler/AArch64/armv8.7a-xs.txt
    llvm/test/MC/Disassembler/AArch64/armv8.8a-nmi.txt
    llvm/test/MC/Disassembler/AArch64/basic-a64-instructions.txt

Removed: 
    llvm/test/CodeGen/AArch64/arm64-invalid-sys-reg.ll


################################################################################
diff  --git a/lldb/test/API/commands/register/aarch64_dynamic_regset/main.c b/lldb/test/API/commands/register/aarch64_dynamic_regset/main.c
index cef79caaebc34..93100f01502f8 100644
--- a/lldb/test/API/commands/register/aarch64_dynamic_regset/main.c
+++ b/lldb/test/API/commands/register/aarch64_dynamic_regset/main.c
@@ -75,7 +75,7 @@ void set_sve_registers() {
 int main(int argc, char *argv[]) {
   if (argc > 1) {
     // Enable streaming mode SVE and the ZA array storage.
-    asm volatile("smstart");
+    asm volatile("msr  s0_3_c4_c7_3, xzr" /*smstart*/);
   }
 
   // If we have SVE or SME, set the SVE registers.

diff  --git a/lldb/test/API/commands/register/aarch64_sve_registers/rw_access_static_config/main.c b/lldb/test/API/commands/register/aarch64_sve_registers/rw_access_static_config/main.c
index abff9734577ad..1e654ad26b1ce 100644
--- a/lldb/test/API/commands/register/aarch64_sve_registers/rw_access_static_config/main.c
+++ b/lldb/test/API/commands/register/aarch64_sve_registers/rw_access_static_config/main.c
@@ -9,7 +9,7 @@
 #define PR_SME_SET_VL 63
 #endif
 
-#define SMSTART_SM() asm volatile("smstart SM")
+#define SMSTART_SM() asm volatile("msr  s0_3_c4_c3_3, xzr" /*smstart sm*/)
 
 void write_sve_regs() {
   // We assume the smefa64 feature is present, which allows ffr access

diff  --git a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
index f25f45a058aa8..3fad1ef357762 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
@@ -4268,14 +4268,9 @@ static int getIntOperandFromRegisterString(StringRef RegString) {
           "Unexpected non-integer value in special register string.");
   (void)AllIntFields;
 
-  if (Ops[0] < 2 || Ops[1] > 7 || Ops[2] > 15 || Ops[3] > 15 || Ops[4] > 7)
-    return -1;
-
   // Need to combine the integer fields of the string into a single value
-  // based on the bit encoding of MRS/MSR instruction. We also mask Ops[0], as
-  // top bit as it is implicitly assumed to be 1 for MRS/MSR instruction and is
-  // not part of the encoding.
-  return ((Ops[0] & 0x1) << 14) | (Ops[1] << 11) | (Ops[2] << 7) |
+  // based on the bit encoding of MRS/MSR instruction.
+  return (Ops[0] << 14) | (Ops[1] << 11) | (Ops[2] << 7) |
          (Ops[3] << 3) | (Ops[4]);
 }
 

diff  --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
index 67474aea6c537..c252f4933dc18 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
@@ -2024,9 +2024,8 @@ def TIndexhint_op : Operand<i32> {
 
 class MRSI : RtSystemI<1, (outs GPR64:$Rt), (ins mrs_sysreg_op:$systemreg),
                        "mrs", "\t$Rt, $systemreg"> {
-  bits<15> systemreg;
-  let Inst{20}= 0b1;
-  let Inst{19-5} = systemreg;
+  bits<16> systemreg;
+  let Inst{20-5} = systemreg;
   let DecoderNamespace = "Fallback";
   // The MRS is set as a NZCV setting instruction. Not all MRS instructions
   // require doing this. The alternative was to explicitly model each one, but
@@ -2040,9 +2039,8 @@ class MRSI : RtSystemI<1, (outs GPR64:$Rt), (ins mrs_sysreg_op:$systemreg),
 // would do it, but feels like overkill at this point.
 class MSRI : RtSystemI<0, (outs), (ins msr_sysreg_op:$systemreg, GPR64:$Rt),
                        "msr", "\t$systemreg, $Rt"> {
-  bits<15> systemreg;
-  let Inst{20} = 0b1;
-  let Inst{19-5} = systemreg;
+  bits<16> systemreg;
+  let Inst{20-5} = systemreg;
   let DecoderNamespace = "Fallback";
 }
 

diff  --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
index 79dea283a1d23..82d4fcedc5a5e 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
@@ -2505,35 +2505,35 @@ def HWASAN_CHECK_MEMACCESS_SHORTGRANULES_FIXEDSHADOW : Pseudo<
 }
 
 // The virtual cycle counter register is CNTVCT_EL0.
-def : Pat<(readcyclecounter), (MRS 0x5f02)>;
+def : Pat<(readcyclecounter), (MRS 0xdf02)>;
 
 // FPCR and FPSR registers.
 let Uses = [FPCR] in
 def MRS_FPCR : Pseudo<(outs GPR64:$dst), (ins),
                       [(set GPR64:$dst, (int_aarch64_get_fpcr))]>,
-               PseudoInstExpansion<(MRS GPR64:$dst, 0x5a20)>,
+               PseudoInstExpansion<(MRS GPR64:$dst, 0xda20)>,
                Sched<[WriteSys]>;
 let Defs = [FPCR] in
 def MSR_FPCR : Pseudo<(outs), (ins GPR64:$val),
                       [(int_aarch64_set_fpcr i64:$val)]>,
-               PseudoInstExpansion<(MSR 0x5a20, GPR64:$val)>,
+               PseudoInstExpansion<(MSR 0xda20, GPR64:$val)>,
                Sched<[WriteSys]>;
 
 let Uses = [FPSR] in
 def MRS_FPSR : Pseudo<(outs GPR64:$dst), (ins),
                       [(set GPR64:$dst, (int_aarch64_get_fpsr))]>,
-               PseudoInstExpansion<(MRS GPR64:$dst, 0x5a21)>,
+               PseudoInstExpansion<(MRS GPR64:$dst, 0xda21)>,
                Sched<[WriteSys]>;
 let Defs = [FPSR] in
 def MSR_FPSR : Pseudo<(outs), (ins GPR64:$val),
                       [(int_aarch64_set_fpsr i64:$val)]>,
-               PseudoInstExpansion<(MSR 0x5a21, GPR64:$val)>,
+               PseudoInstExpansion<(MSR 0xda21, GPR64:$val)>,
                Sched<[WriteSys]>;
 
 let Defs = [FPMR] in
 def MSR_FPMR : Pseudo<(outs), (ins GPR64:$val),
                       [(int_aarch64_set_fpmr i64:$val)]>,
-               PseudoInstExpansion<(MSR 0x5a22, GPR64:$val)>,
+               PseudoInstExpansion<(MSR 0xda22, GPR64:$val)>,
                Sched<[WriteSys]>;
 
 // Generic system instructions
@@ -11732,18 +11732,16 @@ def MRRS : RtSystemI128<1,
   (outs MrrsMssrPairClassOperand:$Rt), (ins mrs_sysreg_op:$systemreg),
   "mrrs", "\t$Rt, $systemreg">
 {
-  bits<15> systemreg;
-  let Inst{20}= 0b1;
-  let Inst{19-5} = systemreg;
+  bits<16> systemreg;
+  let Inst{20-5} = systemreg;
 }
 
 def MSRR : RtSystemI128<0,
   (outs),  (ins msr_sysreg_op:$systemreg, MrrsMssrPairClassOperand:$Rt),
   "msrr", "\t$systemreg, $Rt">
 {
-  bits<15> systemreg;
-  let Inst{20} = 0b1;
-  let Inst{19-5} = systemreg;
+  bits<16> systemreg;
+  let Inst{20-5} = systemreg;
 }
 
 //===----------------------------===//

diff  --git a/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td
index 3a1a8ada697ab..022fed6473486 100644
--- a/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td
@@ -281,9 +281,9 @@ def RestoreZAPseudo :
 
 // Read and write TPIDR2_EL0
 def : Pat<(int_aarch64_sme_set_tpidr2 i64:$val),
-          (MSR 0x5e85, GPR64:$val)>;
+          (MSR 0xde85, GPR64:$val)>;
 def : Pat<(i64 (int_aarch64_sme_get_tpidr2)),
-          (MRS 0x5e85)>;
+          (MRS 0xde85)>;
 
 } // End let Predicates = [HasSMEandIsNonStreamingSafe]
 

diff  --git a/llvm/lib/Target/AArch64/AArch64SystemOperands.td b/llvm/lib/Target/AArch64/AArch64SystemOperands.td
index 5824bd9009257..bcd1786a0e9ea 100644
--- a/llvm/lib/Target/AArch64/AArch64SystemOperands.td
+++ b/llvm/lib/Target/AArch64/AArch64SystemOperands.td
@@ -1067,11 +1067,11 @@ let Requires = ["AArch64::FeatureTLBIW"] in {
 // MRS/MSR (system register read/write) instruction options.
 //===----------------------------------------------------------------------===//
 
-class SysReg<string name, bit op0, bits<3> op1, bits<4> crn, bits<4> crm,
+class SysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
              bits<3> op2> {
   string Name = name;
-  bits<15> Encoding;
-  let Encoding{14} = op0;
+  bits<16> Encoding;
+  let Encoding{15-14} = op0;
   let Encoding{13-11} = op1;
   let Encoding{10-7} = crn;
   let Encoding{6-3} = crm;
@@ -1101,21 +1101,21 @@ def lookupSysRegByName : SearchIndex {
   let Key = ["Name"];
 }
 
-class RWSysReg<string name, bit op0, bits<3> op1, bits<4> crn, bits<4> crm,
+class RWSysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
                bits<3> op2>
     : SysReg<name, op0, op1, crn, crm, op2> {
   let Readable = 1;
   let Writeable = 1;
 }
 
-class ROSysReg<string name, bit op0, bits<3> op1, bits<4> crn, bits<4> crm,
+class ROSysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
                bits<3> op2>
     : SysReg<name, op0, op1, crn, crm, op2> {
   let Readable = 1;
   let Writeable = 0;
 }
 
-class WOSysReg<string name, bit op0, bits<3> op1, bits<4> crn, bits<4> crm,
+class WOSysReg<string name, bits<2> op0, bits<3> op1, bits<4> crn, bits<4> crm,
                bits<3> op2>
     : SysReg<name, op0, op1, crn, crm, op2> {
   let Readable = 0;
@@ -1127,186 +1127,186 @@ class WOSysReg<string name, bit op0, bits<3> op1, bits<4> crn, bits<4> crm,
 //===----------------------
 
 //                                    Op0    Op1     CRn     CRm    Op2
-def : ROSysReg<"MDCCSR_EL0",         0b0, 0b011, 0b0000, 0b0001, 0b000>;
-def : ROSysReg<"DBGDTRRX_EL0",       0b0, 0b011, 0b0000, 0b0101, 0b000>;
-def : ROSysReg<"MDRAR_EL1",          0b0, 0b000, 0b0001, 0b0000, 0b000>;
-def : ROSysReg<"OSLSR_EL1",          0b0, 0b000, 0b0001, 0b0001, 0b100>;
-def : ROSysReg<"DBGAUTHSTATUS_EL1",  0b0, 0b000, 0b0111, 0b1110, 0b110>;
-def : ROSysReg<"PMCEID0_EL0",        0b1, 0b011, 0b1001, 0b1100, 0b110>;
-def : ROSysReg<"PMCEID1_EL0",        0b1, 0b011, 0b1001, 0b1100, 0b111>;
-def : ROSysReg<"PMMIR_EL1",          0b1, 0b000, 0b1001, 0b1110, 0b110>;
-def : ROSysReg<"MIDR_EL1",           0b1, 0b000, 0b0000, 0b0000, 0b000>;
-def : ROSysReg<"CCSIDR_EL1",         0b1, 0b001, 0b0000, 0b0000, 0b000>;
+def : ROSysReg<"MDCCSR_EL0",         0b10, 0b011, 0b0000, 0b0001, 0b000>;
+def : ROSysReg<"DBGDTRRX_EL0",       0b10, 0b011, 0b0000, 0b0101, 0b000>;
+def : ROSysReg<"MDRAR_EL1",          0b10, 0b000, 0b0001, 0b0000, 0b000>;
+def : ROSysReg<"OSLSR_EL1",          0b10, 0b000, 0b0001, 0b0001, 0b100>;
+def : ROSysReg<"DBGAUTHSTATUS_EL1",  0b10, 0b000, 0b0111, 0b1110, 0b110>;
+def : ROSysReg<"PMCEID0_EL0",        0b11, 0b011, 0b1001, 0b1100, 0b110>;
+def : ROSysReg<"PMCEID1_EL0",        0b11, 0b011, 0b1001, 0b1100, 0b111>;
+def : ROSysReg<"PMMIR_EL1",          0b11, 0b000, 0b1001, 0b1110, 0b110>;
+def : ROSysReg<"MIDR_EL1",           0b11, 0b000, 0b0000, 0b0000, 0b000>;
+def : ROSysReg<"CCSIDR_EL1",         0b11, 0b001, 0b0000, 0b0000, 0b000>;
 
 //v8.3 CCIDX - extending the CCsIDr number of sets
-def : ROSysReg<"CCSIDR2_EL1",        0b1, 0b001, 0b0000, 0b0000, 0b010> {
+def : ROSysReg<"CCSIDR2_EL1",        0b11, 0b001, 0b0000, 0b0000, 0b010> {
   let Requires = [{ {AArch64::FeatureCCIDX} }];
 }
-def : ROSysReg<"CLIDR_EL1",          0b1, 0b001, 0b0000, 0b0000, 0b001>;
-def : ROSysReg<"CTR_EL0",            0b1, 0b011, 0b0000, 0b0000, 0b001>;
-def : ROSysReg<"MPIDR_EL1",          0b1, 0b000, 0b0000, 0b0000, 0b101>;
-def : ROSysReg<"REVIDR_EL1",         0b1, 0b000, 0b0000, 0b0000, 0b110>;
-def : ROSysReg<"AIDR_EL1",           0b1, 0b001, 0b0000, 0b0000, 0b111>;
-def : ROSysReg<"DCZID_EL0",          0b1, 0b011, 0b0000, 0b0000, 0b111>;
-def : ROSysReg<"ID_PFR0_EL1",        0b1, 0b000, 0b0000, 0b0001, 0b000>;
-def : ROSysReg<"ID_PFR1_EL1",        0b1, 0b000, 0b0000, 0b0001, 0b001>;
-def : ROSysReg<"ID_PFR2_EL1",        0b1, 0b000, 0b0000, 0b0011, 0b100> {
+def : ROSysReg<"CLIDR_EL1",          0b11, 0b001, 0b0000, 0b0000, 0b001>;
+def : ROSysReg<"CTR_EL0",            0b11, 0b011, 0b0000, 0b0000, 0b001>;
+def : ROSysReg<"MPIDR_EL1",          0b11, 0b000, 0b0000, 0b0000, 0b101>;
+def : ROSysReg<"REVIDR_EL1",         0b11, 0b000, 0b0000, 0b0000, 0b110>;
+def : ROSysReg<"AIDR_EL1",           0b11, 0b001, 0b0000, 0b0000, 0b111>;
+def : ROSysReg<"DCZID_EL0",          0b11, 0b011, 0b0000, 0b0000, 0b111>;
+def : ROSysReg<"ID_PFR0_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b000>;
+def : ROSysReg<"ID_PFR1_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b001>;
+def : ROSysReg<"ID_PFR2_EL1",        0b11, 0b000, 0b0000, 0b0011, 0b100> {
     let Requires = [{ {AArch64::FeatureSpecRestrict} }];
 }
-def : ROSysReg<"ID_DFR0_EL1",        0b1, 0b000, 0b0000, 0b0001, 0b010>;
-def : ROSysReg<"ID_DFR1_EL1",        0b1, 0b000, 0b0000, 0b0011, 0b101>;
-def : ROSysReg<"ID_AFR0_EL1",        0b1, 0b000, 0b0000, 0b0001, 0b011>;
-def : ROSysReg<"ID_MMFR0_EL1",       0b1, 0b000, 0b0000, 0b0001, 0b100>;
-def : ROSysReg<"ID_MMFR1_EL1",       0b1, 0b000, 0b0000, 0b0001, 0b101>;
-def : ROSysReg<"ID_MMFR2_EL1",       0b1, 0b000, 0b0000, 0b0001, 0b110>;
-def : ROSysReg<"ID_MMFR3_EL1",       0b1, 0b000, 0b0000, 0b0001, 0b111>;
-def : ROSysReg<"ID_ISAR0_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b000>;
-def : ROSysReg<"ID_ISAR1_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b001>;
-def : ROSysReg<"ID_ISAR2_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b010>;
-def : ROSysReg<"ID_ISAR3_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b011>;
-def : ROSysReg<"ID_ISAR4_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b100>;
-def : ROSysReg<"ID_ISAR5_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b101>;
-def : ROSysReg<"ID_ISAR6_EL1",       0b1, 0b000, 0b0000, 0b0010, 0b111> {
+def : ROSysReg<"ID_DFR0_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b010>;
+def : ROSysReg<"ID_DFR1_EL1",        0b11, 0b000, 0b0000, 0b0011, 0b101>;
+def : ROSysReg<"ID_AFR0_EL1",        0b11, 0b000, 0b0000, 0b0001, 0b011>;
+def : ROSysReg<"ID_MMFR0_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b100>;
+def : ROSysReg<"ID_MMFR1_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b101>;
+def : ROSysReg<"ID_MMFR2_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b110>;
+def : ROSysReg<"ID_MMFR3_EL1",       0b11, 0b000, 0b0000, 0b0001, 0b111>;
+def : ROSysReg<"ID_ISAR0_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b000>;
+def : ROSysReg<"ID_ISAR1_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b001>;
+def : ROSysReg<"ID_ISAR2_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b010>;
+def : ROSysReg<"ID_ISAR3_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b011>;
+def : ROSysReg<"ID_ISAR4_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b100>;
+def : ROSysReg<"ID_ISAR5_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b101>;
+def : ROSysReg<"ID_ISAR6_EL1",       0b11, 0b000, 0b0000, 0b0010, 0b111> {
   let Requires = [{ {AArch64::HasV8_2aOps} }];
 }
-def : ROSysReg<"ID_AA64PFR0_EL1",     0b1, 0b000, 0b0000, 0b0100, 0b000>;
-def : ROSysReg<"ID_AA64PFR1_EL1",     0b1, 0b000, 0b0000, 0b0100, 0b001>;
-def : ROSysReg<"ID_AA64PFR2_EL1",     0b1, 0b000, 0b0000, 0b0100, 0b010>;
-def : ROSysReg<"ID_AA64DFR0_EL1",     0b1, 0b000, 0b0000, 0b0101, 0b000>;
-def : ROSysReg<"ID_AA64DFR1_EL1",     0b1, 0b000, 0b0000, 0b0101, 0b001>;
-def : ROSysReg<"ID_AA64DFR2_EL1",     0b1, 0b000, 0b0000, 0b0101, 0b010>;
-def : ROSysReg<"ID_AA64AFR0_EL1",     0b1, 0b000, 0b0000, 0b0101, 0b100>;
-def : ROSysReg<"ID_AA64AFR1_EL1",     0b1, 0b000, 0b0000, 0b0101, 0b101>;
-def : ROSysReg<"ID_AA64ISAR0_EL1",    0b1, 0b000, 0b0000, 0b0110, 0b000>;
-def : ROSysReg<"ID_AA64ISAR1_EL1",    0b1, 0b000, 0b0000, 0b0110, 0b001>;
-def : ROSysReg<"ID_AA64ISAR2_EL1",    0b1, 0b000, 0b0000, 0b0110, 0b010>;
-def : ROSysReg<"ID_AA64ISAR3_EL1",    0b1, 0b000, 0b0000, 0b0110, 0b011>;
-def : ROSysReg<"ID_AA64MMFR0_EL1",    0b1, 0b000, 0b0000, 0b0111, 0b000>;
-def : ROSysReg<"ID_AA64MMFR1_EL1",    0b1, 0b000, 0b0000, 0b0111, 0b001>;
-def : ROSysReg<"ID_AA64MMFR2_EL1",    0b1, 0b000, 0b0000, 0b0111, 0b010>;
-def : ROSysReg<"ID_AA64MMFR3_EL1",    0b1, 0b000, 0b0000, 0b0111, 0b011>;
-def : ROSysReg<"ID_AA64MMFR4_EL1",    0b1, 0b000, 0b0000, 0b0111, 0b100>;
-def : ROSysReg<"MVFR0_EL1",           0b1, 0b000, 0b0000, 0b0011, 0b000>;
-def : ROSysReg<"MVFR1_EL1",           0b1, 0b000, 0b0000, 0b0011, 0b001>;
-def : ROSysReg<"MVFR2_EL1",           0b1, 0b000, 0b0000, 0b0011, 0b010>;
-def : ROSysReg<"RVBAR_EL1",           0b1, 0b000, 0b1100, 0b0000, 0b001>;
-def : ROSysReg<"RVBAR_EL2",           0b1, 0b100, 0b1100, 0b0000, 0b001>;
-def : ROSysReg<"RVBAR_EL3",           0b1, 0b110, 0b1100, 0b0000, 0b001>;
-def : ROSysReg<"ISR_EL1",             0b1, 0b000, 0b1100, 0b0001, 0b000>;
-def : ROSysReg<"CNTPCT_EL0",          0b1, 0b011, 0b1110, 0b0000, 0b001>;
-def : ROSysReg<"CNTVCT_EL0",          0b1, 0b011, 0b1110, 0b0000, 0b010>;
-def : ROSysReg<"ID_MMFR4_EL1",        0b1, 0b000, 0b0000, 0b0010, 0b110>;
-def : ROSysReg<"ID_MMFR5_EL1",        0b1, 0b000, 0b0000, 0b0011, 0b110>;
+def : ROSysReg<"ID_AA64PFR0_EL1",     0b11, 0b000, 0b0000, 0b0100, 0b000>;
+def : ROSysReg<"ID_AA64PFR1_EL1",     0b11, 0b000, 0b0000, 0b0100, 0b001>;
+def : ROSysReg<"ID_AA64PFR2_EL1",     0b11, 0b000, 0b0000, 0b0100, 0b010>;
+def : ROSysReg<"ID_AA64DFR0_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b000>;
+def : ROSysReg<"ID_AA64DFR1_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b001>;
+def : ROSysReg<"ID_AA64DFR2_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b010>;
+def : ROSysReg<"ID_AA64AFR0_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b100>;
+def : ROSysReg<"ID_AA64AFR1_EL1",     0b11, 0b000, 0b0000, 0b0101, 0b101>;
+def : ROSysReg<"ID_AA64ISAR0_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b000>;
+def : ROSysReg<"ID_AA64ISAR1_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b001>;
+def : ROSysReg<"ID_AA64ISAR2_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b010>;
+def : ROSysReg<"ID_AA64ISAR3_EL1",    0b11, 0b000, 0b0000, 0b0110, 0b011>;
+def : ROSysReg<"ID_AA64MMFR0_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b000>;
+def : ROSysReg<"ID_AA64MMFR1_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b001>;
+def : ROSysReg<"ID_AA64MMFR2_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b010>;
+def : ROSysReg<"ID_AA64MMFR3_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b011>;
+def : ROSysReg<"ID_AA64MMFR4_EL1",    0b11, 0b000, 0b0000, 0b0111, 0b100>;
+def : ROSysReg<"MVFR0_EL1",           0b11, 0b000, 0b0000, 0b0011, 0b000>;
+def : ROSysReg<"MVFR1_EL1",           0b11, 0b000, 0b0000, 0b0011, 0b001>;
+def : ROSysReg<"MVFR2_EL1",           0b11, 0b000, 0b0000, 0b0011, 0b010>;
+def : ROSysReg<"RVBAR_EL1",           0b11, 0b000, 0b1100, 0b0000, 0b001>;
+def : ROSysReg<"RVBAR_EL2",           0b11, 0b100, 0b1100, 0b0000, 0b001>;
+def : ROSysReg<"RVBAR_EL3",           0b11, 0b110, 0b1100, 0b0000, 0b001>;
+def : ROSysReg<"ISR_EL1",             0b11, 0b000, 0b1100, 0b0001, 0b000>;
+def : ROSysReg<"CNTPCT_EL0",          0b11, 0b011, 0b1110, 0b0000, 0b001>;
+def : ROSysReg<"CNTVCT_EL0",          0b11, 0b011, 0b1110, 0b0000, 0b010>;
+def : ROSysReg<"ID_MMFR4_EL1",        0b11, 0b000, 0b0000, 0b0010, 0b110>;
+def : ROSysReg<"ID_MMFR5_EL1",        0b11, 0b000, 0b0000, 0b0011, 0b110>;
 
 // Trace registers
 //                                   Op0    Op1     CRn     CRm    Op2
-def : ROSysReg<"TRCSTATR",           0b0, 0b001, 0b0000, 0b0011, 0b000>;
-def : ROSysReg<"TRCIDR8",            0b0, 0b001, 0b0000, 0b0000, 0b110>;
-def : ROSysReg<"TRCIDR9",            0b0, 0b001, 0b0000, 0b0001, 0b110>;
-def : ROSysReg<"TRCIDR10",           0b0, 0b001, 0b0000, 0b0010, 0b110>;
-def : ROSysReg<"TRCIDR11",           0b0, 0b001, 0b0000, 0b0011, 0b110>;
-def : ROSysReg<"TRCIDR12",           0b0, 0b001, 0b0000, 0b0100, 0b110>;
-def : ROSysReg<"TRCIDR13",           0b0, 0b001, 0b0000, 0b0101, 0b110>;
-def : ROSysReg<"TRCIDR0",            0b0, 0b001, 0b0000, 0b1000, 0b111>;
-def : ROSysReg<"TRCIDR1",            0b0, 0b001, 0b0000, 0b1001, 0b111>;
-def : ROSysReg<"TRCIDR2",            0b0, 0b001, 0b0000, 0b1010, 0b111>;
-def : ROSysReg<"TRCIDR3",            0b0, 0b001, 0b0000, 0b1011, 0b111>;
-def : ROSysReg<"TRCIDR4",            0b0, 0b001, 0b0000, 0b1100, 0b111>;
-def : ROSysReg<"TRCIDR5",            0b0, 0b001, 0b0000, 0b1101, 0b111>;
-def : ROSysReg<"TRCIDR6",            0b0, 0b001, 0b0000, 0b1110, 0b111>;
-def : ROSysReg<"TRCIDR7",            0b0, 0b001, 0b0000, 0b1111, 0b111>;
-def : ROSysReg<"TRCOSLSR",           0b0, 0b001, 0b0001, 0b0001, 0b100>;
-def : ROSysReg<"TRCPDSR",            0b0, 0b001, 0b0001, 0b0101, 0b100>;
-def : ROSysReg<"TRCDEVAFF0",         0b0, 0b001, 0b0111, 0b1010, 0b110>;
-def : ROSysReg<"TRCDEVAFF1",         0b0, 0b001, 0b0111, 0b1011, 0b110>;
-def : ROSysReg<"TRCLSR",             0b0, 0b001, 0b0111, 0b1101, 0b110>;
-def : ROSysReg<"TRCAUTHSTATUS",      0b0, 0b001, 0b0111, 0b1110, 0b110>;
-def : ROSysReg<"TRCDEVARCH",         0b0, 0b001, 0b0111, 0b1111, 0b110>;
-def : ROSysReg<"TRCDEVID",           0b0, 0b001, 0b0111, 0b0010, 0b111>;
-def : ROSysReg<"TRCDEVTYPE",         0b0, 0b001, 0b0111, 0b0011, 0b111>;
-def : ROSysReg<"TRCPIDR4",           0b0, 0b001, 0b0111, 0b0100, 0b111>;
-def : ROSysReg<"TRCPIDR5",           0b0, 0b001, 0b0111, 0b0101, 0b111>;
-def : ROSysReg<"TRCPIDR6",           0b0, 0b001, 0b0111, 0b0110, 0b111>;
-def : ROSysReg<"TRCPIDR7",           0b0, 0b001, 0b0111, 0b0111, 0b111>;
-def : ROSysReg<"TRCPIDR0",           0b0, 0b001, 0b0111, 0b1000, 0b111>;
-def : ROSysReg<"TRCPIDR1",           0b0, 0b001, 0b0111, 0b1001, 0b111>;
-def : ROSysReg<"TRCPIDR2",           0b0, 0b001, 0b0111, 0b1010, 0b111>;
-def : ROSysReg<"TRCPIDR3",           0b0, 0b001, 0b0111, 0b1011, 0b111>;
-def : ROSysReg<"TRCCIDR0",           0b0, 0b001, 0b0111, 0b1100, 0b111>;
-def : ROSysReg<"TRCCIDR1",           0b0, 0b001, 0b0111, 0b1101, 0b111>;
-def : ROSysReg<"TRCCIDR2",           0b0, 0b001, 0b0111, 0b1110, 0b111>;
-def : ROSysReg<"TRCCIDR3",           0b0, 0b001, 0b0111, 0b1111, 0b111>;
+def : ROSysReg<"TRCSTATR",           0b10, 0b001, 0b0000, 0b0011, 0b000>;
+def : ROSysReg<"TRCIDR8",            0b10, 0b001, 0b0000, 0b0000, 0b110>;
+def : ROSysReg<"TRCIDR9",            0b10, 0b001, 0b0000, 0b0001, 0b110>;
+def : ROSysReg<"TRCIDR10",           0b10, 0b001, 0b0000, 0b0010, 0b110>;
+def : ROSysReg<"TRCIDR11",           0b10, 0b001, 0b0000, 0b0011, 0b110>;
+def : ROSysReg<"TRCIDR12",           0b10, 0b001, 0b0000, 0b0100, 0b110>;
+def : ROSysReg<"TRCIDR13",           0b10, 0b001, 0b0000, 0b0101, 0b110>;
+def : ROSysReg<"TRCIDR0",            0b10, 0b001, 0b0000, 0b1000, 0b111>;
+def : ROSysReg<"TRCIDR1",            0b10, 0b001, 0b0000, 0b1001, 0b111>;
+def : ROSysReg<"TRCIDR2",            0b10, 0b001, 0b0000, 0b1010, 0b111>;
+def : ROSysReg<"TRCIDR3",            0b10, 0b001, 0b0000, 0b1011, 0b111>;
+def : ROSysReg<"TRCIDR4",            0b10, 0b001, 0b0000, 0b1100, 0b111>;
+def : ROSysReg<"TRCIDR5",            0b10, 0b001, 0b0000, 0b1101, 0b111>;
+def : ROSysReg<"TRCIDR6",            0b10, 0b001, 0b0000, 0b1110, 0b111>;
+def : ROSysReg<"TRCIDR7",            0b10, 0b001, 0b0000, 0b1111, 0b111>;
+def : ROSysReg<"TRCOSLSR",           0b10, 0b001, 0b0001, 0b0001, 0b100>;
+def : ROSysReg<"TRCPDSR",            0b10, 0b001, 0b0001, 0b0101, 0b100>;
+def : ROSysReg<"TRCDEVAFF0",         0b10, 0b001, 0b0111, 0b1010, 0b110>;
+def : ROSysReg<"TRCDEVAFF1",         0b10, 0b001, 0b0111, 0b1011, 0b110>;
+def : ROSysReg<"TRCLSR",             0b10, 0b001, 0b0111, 0b1101, 0b110>;
+def : ROSysReg<"TRCAUTHSTATUS",      0b10, 0b001, 0b0111, 0b1110, 0b110>;
+def : ROSysReg<"TRCDEVARCH",         0b10, 0b001, 0b0111, 0b1111, 0b110>;
+def : ROSysReg<"TRCDEVID",           0b10, 0b001, 0b0111, 0b0010, 0b111>;
+def : ROSysReg<"TRCDEVTYPE",         0b10, 0b001, 0b0111, 0b0011, 0b111>;
+def : ROSysReg<"TRCPIDR4",           0b10, 0b001, 0b0111, 0b0100, 0b111>;
+def : ROSysReg<"TRCPIDR5",           0b10, 0b001, 0b0111, 0b0101, 0b111>;
+def : ROSysReg<"TRCPIDR6",           0b10, 0b001, 0b0111, 0b0110, 0b111>;
+def : ROSysReg<"TRCPIDR7",           0b10, 0b001, 0b0111, 0b0111, 0b111>;
+def : ROSysReg<"TRCPIDR0",           0b10, 0b001, 0b0111, 0b1000, 0b111>;
+def : ROSysReg<"TRCPIDR1",           0b10, 0b001, 0b0111, 0b1001, 0b111>;
+def : ROSysReg<"TRCPIDR2",           0b10, 0b001, 0b0111, 0b1010, 0b111>;
+def : ROSysReg<"TRCPIDR3",           0b10, 0b001, 0b0111, 0b1011, 0b111>;
+def : ROSysReg<"TRCCIDR0",           0b10, 0b001, 0b0111, 0b1100, 0b111>;
+def : ROSysReg<"TRCCIDR1",           0b10, 0b001, 0b0111, 0b1101, 0b111>;
+def : ROSysReg<"TRCCIDR2",           0b10, 0b001, 0b0111, 0b1110, 0b111>;
+def : ROSysReg<"TRCCIDR3",           0b10, 0b001, 0b0111, 0b1111, 0b111>;
 
 // GICv3 registers
 //                                 Op0    Op1     CRn     CRm    Op2
-def : ROSysReg<"ICC_IAR1_EL1",       0b1, 0b000, 0b1100, 0b1100, 0b000>;
-def : ROSysReg<"ICC_IAR0_EL1",       0b1, 0b000, 0b1100, 0b1000, 0b000>;
-def : ROSysReg<"ICC_HPPIR1_EL1",     0b1, 0b000, 0b1100, 0b1100, 0b010>;
-def : ROSysReg<"ICC_HPPIR0_EL1",     0b1, 0b000, 0b1100, 0b1000, 0b010>;
-def : ROSysReg<"ICC_RPR_EL1",        0b1, 0b000, 0b1100, 0b1011, 0b011>;
-def : ROSysReg<"ICH_VTR_EL2",        0b1, 0b100, 0b1100, 0b1011, 0b001>;
-def : ROSysReg<"ICH_EISR_EL2",       0b1, 0b100, 0b1100, 0b1011, 0b011>;
-def : ROSysReg<"ICH_ELRSR_EL2",      0b1, 0b100, 0b1100, 0b1011, 0b101>;
+def : ROSysReg<"ICC_IAR1_EL1",       0b11, 0b000, 0b1100, 0b1100, 0b000>;
+def : ROSysReg<"ICC_IAR0_EL1",       0b11, 0b000, 0b1100, 0b1000, 0b000>;
+def : ROSysReg<"ICC_HPPIR1_EL1",     0b11, 0b000, 0b1100, 0b1100, 0b010>;
+def : ROSysReg<"ICC_HPPIR0_EL1",     0b11, 0b000, 0b1100, 0b1000, 0b010>;
+def : ROSysReg<"ICC_RPR_EL1",        0b11, 0b000, 0b1100, 0b1011, 0b011>;
+def : ROSysReg<"ICH_VTR_EL2",        0b11, 0b100, 0b1100, 0b1011, 0b001>;
+def : ROSysReg<"ICH_EISR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b011>;
+def : ROSysReg<"ICH_ELRSR_EL2",      0b11, 0b100, 0b1100, 0b1011, 0b101>;
 
 // SVE control registers
 //                                   Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureSVE} }] in {
-def : ROSysReg<"ID_AA64ZFR0_EL1",    0b1, 0b000, 0b0000, 0b0100, 0b100>;
+def : ROSysReg<"ID_AA64ZFR0_EL1",    0b11, 0b000, 0b0000, 0b0100, 0b100>;
 }
 
 // v8.1a "Limited Ordering Regions" extension-specific system register
 //                         Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeatureLOR} }] in
-def : ROSysReg<"LORID_EL1",  0b1, 0b000, 0b1010, 0b0100, 0b111>;
+def : ROSysReg<"LORID_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b111>;
 
 // v8.2a "RAS extension" registers
 //                         Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeatureRAS} }] in {
-def : ROSysReg<"ERRIDR_EL1", 0b1, 0b000, 0b0101, 0b0011, 0b000>;
-def : ROSysReg<"ERXFR_EL1",  0b1, 0b000, 0b0101, 0b0100, 0b000>;
+def : ROSysReg<"ERRIDR_EL1", 0b11, 0b000, 0b0101, 0b0011, 0b000>;
+def : ROSysReg<"ERXFR_EL1",  0b11, 0b000, 0b0101, 0b0100, 0b000>;
 }
 
 // v8.5a "random number" registers
 //                       Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureRandGen} }] in {
-def : ROSysReg<"RNDR",   0b1, 0b011, 0b0010, 0b0100, 0b000>;
-def : ROSysReg<"RNDRRS", 0b1, 0b011, 0b0010, 0b0100, 0b001>;
+def : ROSysReg<"RNDR",   0b11, 0b011, 0b0010, 0b0100, 0b000>;
+def : ROSysReg<"RNDRRS", 0b11, 0b011, 0b0010, 0b0100, 0b001>;
 }
 
 // v8.5a Software Context Number registers
 let Requires = [{ {AArch64::FeatureSpecRestrict} }] in {
-def : RWSysReg<"SCXTNUM_EL0", 0b1, 0b011, 0b1101, 0b0000, 0b111>;
-def : RWSysReg<"SCXTNUM_EL1", 0b1, 0b000, 0b1101, 0b0000, 0b111>;
-def : RWSysReg<"SCXTNUM_EL2", 0b1, 0b100, 0b1101, 0b0000, 0b111>;
-def : RWSysReg<"SCXTNUM_EL3", 0b1, 0b110, 0b1101, 0b0000, 0b111>;
-def : RWSysReg<"SCXTNUM_EL12", 0b1, 0b101, 0b1101, 0b0000, 0b111>;
+def : RWSysReg<"SCXTNUM_EL0", 0b11, 0b011, 0b1101, 0b0000, 0b111>;
+def : RWSysReg<"SCXTNUM_EL1", 0b11, 0b000, 0b1101, 0b0000, 0b111>;
+def : RWSysReg<"SCXTNUM_EL2", 0b11, 0b100, 0b1101, 0b0000, 0b111>;
+def : RWSysReg<"SCXTNUM_EL3", 0b11, 0b110, 0b1101, 0b0000, 0b111>;
+def : RWSysReg<"SCXTNUM_EL12", 0b11, 0b101, 0b1101, 0b0000, 0b111>;
 }
 
 // v9a Realm Management Extension registers
 let Requires = [{ {AArch64::FeatureRME} }] in {
-def : RWSysReg<"GPCCR_EL3", 0b1, 0b110, 0b0010, 0b0001, 0b110>;
-def : RWSysReg<"GPTBR_EL3", 0b1, 0b110, 0b0010, 0b0001, 0b100>;
+def : RWSysReg<"GPCCR_EL3", 0b11, 0b110, 0b0010, 0b0001, 0b110>;
+def : RWSysReg<"GPTBR_EL3", 0b11, 0b110, 0b0010, 0b0001, 0b100>;
 }
 // MFAR_EL3 is part of both FEAT_RME and FEAT_PFAR (further below). The latter
 // is unconditional so this register has to be too.
-def : RWSysReg<"MFAR_EL3",  0b1, 0b110, 0b0110, 0b0000, 0b101>;
+def : RWSysReg<"MFAR_EL3",  0b11, 0b110, 0b0110, 0b0000, 0b101>;
 
 // v9a Memory Encryption Contexts Extension registers
 let Requires = [{ {AArch64::FeatureMEC} }] in {
-def : ROSysReg<"MECIDR_EL2",     0b1, 0b100, 0b1010, 0b1000, 0b111>;
-def : RWSysReg<"MECID_P0_EL2",   0b1, 0b100, 0b1010, 0b1000, 0b000>;
-def : RWSysReg<"MECID_A0_EL2",   0b1, 0b100, 0b1010, 0b1000, 0b001>;
-def : RWSysReg<"MECID_P1_EL2",   0b1, 0b100, 0b1010, 0b1000, 0b010>;
-def : RWSysReg<"MECID_A1_EL2",   0b1, 0b100, 0b1010, 0b1000, 0b011>;
-def : RWSysReg<"VMECID_P_EL2",   0b1, 0b100, 0b1010, 0b1001, 0b000>;
-def : RWSysReg<"VMECID_A_EL2",   0b1, 0b100, 0b1010, 0b1001, 0b001>;
-def : RWSysReg<"MECID_RL_A_EL3", 0b1, 0b110, 0b1010, 0b1010, 0b001>;
+def : ROSysReg<"MECIDR_EL2",     0b11, 0b100, 0b1010, 0b1000, 0b111>;
+def : RWSysReg<"MECID_P0_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b000>;
+def : RWSysReg<"MECID_A0_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b001>;
+def : RWSysReg<"MECID_P1_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b010>;
+def : RWSysReg<"MECID_A1_EL2",   0b11, 0b100, 0b1010, 0b1000, 0b011>;
+def : RWSysReg<"VMECID_P_EL2",   0b11, 0b100, 0b1010, 0b1001, 0b000>;
+def : RWSysReg<"VMECID_A_EL2",   0b11, 0b100, 0b1010, 0b1001, 0b001>;
+def : RWSysReg<"MECID_RL_A_EL3", 0b11, 0b110, 0b1010, 0b1010, 0b001>;
 }
 
 // v9-a Scalable Matrix Extension (SME) registers
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureSME} }] in {
-def : ROSysReg<"ID_AA64SMFR0_EL1", 0b1, 0b000, 0b0000, 0b0100, 0b101>;
+def : ROSysReg<"ID_AA64SMFR0_EL1", 0b11, 0b000, 0b0000, 0b0100, 0b101>;
 }
 
 //===----------------------
@@ -1314,503 +1314,503 @@ def : ROSysReg<"ID_AA64SMFR0_EL1", 0b1, 0b000, 0b0000, 0b0100, 0b101>;
 //===----------------------
 
 //                                 Op0    Op1     CRn     CRm    Op2
-def : WOSysReg<"DBGDTRTX_EL0",       0b0, 0b011, 0b0000, 0b0101, 0b000>;
-def : WOSysReg<"OSLAR_EL1",          0b0, 0b000, 0b0001, 0b0000, 0b100>;
-def : WOSysReg<"PMSWINC_EL0",        0b1, 0b011, 0b1001, 0b1100, 0b100>;
+def : WOSysReg<"DBGDTRTX_EL0",       0b10, 0b011, 0b0000, 0b0101, 0b000>;
+def : WOSysReg<"OSLAR_EL1",          0b10, 0b000, 0b0001, 0b0000, 0b100>;
+def : WOSysReg<"PMSWINC_EL0",        0b11, 0b011, 0b1001, 0b1100, 0b100>;
 
 // Trace Registers
 //                                 Op0    Op1     CRn     CRm    Op2
-def : WOSysReg<"TRCOSLAR",           0b0, 0b001, 0b0001, 0b0000, 0b100>;
-def : WOSysReg<"TRCLAR",             0b0, 0b001, 0b0111, 0b1100, 0b110>;
+def : WOSysReg<"TRCOSLAR",           0b10, 0b001, 0b0001, 0b0000, 0b100>;
+def : WOSysReg<"TRCLAR",             0b10, 0b001, 0b0111, 0b1100, 0b110>;
 
 // GICv3 registers
 //                                 Op0    Op1     CRn     CRm    Op2
-def : WOSysReg<"ICC_EOIR1_EL1",      0b1, 0b000, 0b1100, 0b1100, 0b001>;
-def : WOSysReg<"ICC_EOIR0_EL1",      0b1, 0b000, 0b1100, 0b1000, 0b001>;
-def : WOSysReg<"ICC_DIR_EL1",        0b1, 0b000, 0b1100, 0b1011, 0b001>;
-def : WOSysReg<"ICC_SGI1R_EL1",      0b1, 0b000, 0b1100, 0b1011, 0b101>;
-def : WOSysReg<"ICC_ASGI1R_EL1",     0b1, 0b000, 0b1100, 0b1011, 0b110>;
-def : WOSysReg<"ICC_SGI0R_EL1",      0b1, 0b000, 0b1100, 0b1011, 0b111>;
+def : WOSysReg<"ICC_EOIR1_EL1",      0b11, 0b000, 0b1100, 0b1100, 0b001>;
+def : WOSysReg<"ICC_EOIR0_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b001>;
+def : WOSysReg<"ICC_DIR_EL1",        0b11, 0b000, 0b1100, 0b1011, 0b001>;
+def : WOSysReg<"ICC_SGI1R_EL1",      0b11, 0b000, 0b1100, 0b1011, 0b101>;
+def : WOSysReg<"ICC_ASGI1R_EL1",     0b11, 0b000, 0b1100, 0b1011, 0b110>;
+def : WOSysReg<"ICC_SGI0R_EL1",      0b11, 0b000, 0b1100, 0b1011, 0b111>;
 
 //===----------------------
 // Read-write regs
 //===----------------------
 
 //                                   Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"OSDTRRX_EL1",        0b0, 0b000, 0b0000, 0b0000, 0b010>;
-def : RWSysReg<"OSDTRTX_EL1",        0b0, 0b000, 0b0000, 0b0011, 0b010>;
-def : RWSysReg<"TEECR32_EL1",        0b0, 0b010, 0b0000, 0b0000, 0b000>;
-def : RWSysReg<"MDCCINT_EL1",        0b0, 0b000, 0b0000, 0b0010, 0b000>;
-def : RWSysReg<"MDSCR_EL1",          0b0, 0b000, 0b0000, 0b0010, 0b010>;
-def : RWSysReg<"DBGDTR_EL0",         0b0, 0b011, 0b0000, 0b0100, 0b000>;
-def : RWSysReg<"OSECCR_EL1",         0b0, 0b000, 0b0000, 0b0110, 0b010>;
-def : RWSysReg<"DBGVCR32_EL2",       0b0, 0b100, 0b0000, 0b0111, 0b000>;
+def : RWSysReg<"OSDTRRX_EL1",        0b10, 0b000, 0b0000, 0b0000, 0b010>;
+def : RWSysReg<"OSDTRTX_EL1",        0b10, 0b000, 0b0000, 0b0011, 0b010>;
+def : RWSysReg<"TEECR32_EL1",        0b10, 0b010, 0b0000, 0b0000, 0b000>;
+def : RWSysReg<"MDCCINT_EL1",        0b10, 0b000, 0b0000, 0b0010, 0b000>;
+def : RWSysReg<"MDSCR_EL1",          0b10, 0b000, 0b0000, 0b0010, 0b010>;
+def : RWSysReg<"DBGDTR_EL0",         0b10, 0b011, 0b0000, 0b0100, 0b000>;
+def : RWSysReg<"OSECCR_EL1",         0b10, 0b000, 0b0000, 0b0110, 0b010>;
+def : RWSysReg<"DBGVCR32_EL2",       0b10, 0b100, 0b0000, 0b0111, 0b000>;
 foreach n = 0-15 in {
   defvar nb = !cast<bits<4>>(n);
   //                                 Op0   Op1    CRn     CRm Op2
-  def : RWSysReg<"DBGBVR"#n#"_EL1",  0b0, 0b000, 0b0000, nb, 0b100>;
-  def : RWSysReg<"DBGBCR"#n#"_EL1",  0b0, 0b000, 0b0000, nb, 0b101>;
-  def : RWSysReg<"DBGWVR"#n#"_EL1",  0b0, 0b000, 0b0000, nb, 0b110>;
-  def : RWSysReg<"DBGWCR"#n#"_EL1",  0b0, 0b000, 0b0000, nb, 0b111>;
+  def : RWSysReg<"DBGBVR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b100>;
+  def : RWSysReg<"DBGBCR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b101>;
+  def : RWSysReg<"DBGWVR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b110>;
+  def : RWSysReg<"DBGWCR"#n#"_EL1",  0b10, 0b000, 0b0000, nb, 0b111>;
 }
 //                                   Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TEEHBR32_EL1",       0b0, 0b010, 0b0001, 0b0000, 0b000>;
-def : RWSysReg<"OSDLR_EL1",          0b0, 0b000, 0b0001, 0b0011, 0b100>;
-def : RWSysReg<"DBGPRCR_EL1",        0b0, 0b000, 0b0001, 0b0100, 0b100>;
-def : RWSysReg<"DBGCLAIMSET_EL1",    0b0, 0b000, 0b0111, 0b1000, 0b110>;
-def : RWSysReg<"DBGCLAIMCLR_EL1",    0b0, 0b000, 0b0111, 0b1001, 0b110>;
-def : RWSysReg<"CSSELR_EL1",         0b1, 0b010, 0b0000, 0b0000, 0b000>;
-def : RWSysReg<"VPIDR_EL2",          0b1, 0b100, 0b0000, 0b0000, 0b000>;
-def : RWSysReg<"VMPIDR_EL2",         0b1, 0b100, 0b0000, 0b0000, 0b101>;
-def : RWSysReg<"CPACR_EL1",          0b1, 0b000, 0b0001, 0b0000, 0b010>;
-def : RWSysReg<"SCTLR_EL1",          0b1, 0b000, 0b0001, 0b0000, 0b000>;
-def : RWSysReg<"SCTLR_EL2",          0b1, 0b100, 0b0001, 0b0000, 0b000>;
-def : RWSysReg<"SCTLR_EL3",          0b1, 0b110, 0b0001, 0b0000, 0b000>;
-def : RWSysReg<"ACTLR_EL1",          0b1, 0b000, 0b0001, 0b0000, 0b001>;
-def : RWSysReg<"ACTLR_EL12",         0b1, 0b101, 0b0001, 0b0000, 0b001>;
-def : RWSysReg<"ACTLR_EL2",          0b1, 0b100, 0b0001, 0b0000, 0b001>;
-def : RWSysReg<"ACTLR_EL3",          0b1, 0b110, 0b0001, 0b0000, 0b001>;
-def : RWSysReg<"HCR_EL2",            0b1, 0b100, 0b0001, 0b0001, 0b000>;
-def : RWSysReg<"HCRX_EL2",           0b1, 0b100, 0b0001, 0b0010, 0b010> {
+def : RWSysReg<"TEEHBR32_EL1",       0b10, 0b010, 0b0001, 0b0000, 0b000>;
+def : RWSysReg<"OSDLR_EL1",          0b10, 0b000, 0b0001, 0b0011, 0b100>;
+def : RWSysReg<"DBGPRCR_EL1",        0b10, 0b000, 0b0001, 0b0100, 0b100>;
+def : RWSysReg<"DBGCLAIMSET_EL1",    0b10, 0b000, 0b0111, 0b1000, 0b110>;
+def : RWSysReg<"DBGCLAIMCLR_EL1",    0b10, 0b000, 0b0111, 0b1001, 0b110>;
+def : RWSysReg<"CSSELR_EL1",         0b11, 0b010, 0b0000, 0b0000, 0b000>;
+def : RWSysReg<"VPIDR_EL2",          0b11, 0b100, 0b0000, 0b0000, 0b000>;
+def : RWSysReg<"VMPIDR_EL2",         0b11, 0b100, 0b0000, 0b0000, 0b101>;
+def : RWSysReg<"CPACR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b010>;
+def : RWSysReg<"SCTLR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b000>;
+def : RWSysReg<"SCTLR_EL2",          0b11, 0b100, 0b0001, 0b0000, 0b000>;
+def : RWSysReg<"SCTLR_EL3",          0b11, 0b110, 0b0001, 0b0000, 0b000>;
+def : RWSysReg<"ACTLR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b001>;
+def : RWSysReg<"ACTLR_EL12",         0b11, 0b101, 0b0001, 0b0000, 0b001>;
+def : RWSysReg<"ACTLR_EL2",          0b11, 0b100, 0b0001, 0b0000, 0b001>;
+def : RWSysReg<"ACTLR_EL3",          0b11, 0b110, 0b0001, 0b0000, 0b001>;
+def : RWSysReg<"HCR_EL2",            0b11, 0b100, 0b0001, 0b0001, 0b000>;
+def : RWSysReg<"HCRX_EL2",           0b11, 0b100, 0b0001, 0b0010, 0b010> {
   let Requires = [{ {AArch64::FeatureHCX} }];
 }
-def : RWSysReg<"SCR_EL3",            0b1, 0b110, 0b0001, 0b0001, 0b000>;
-def : RWSysReg<"MDCR_EL2",           0b1, 0b100, 0b0001, 0b0001, 0b001>;
-def : RWSysReg<"SDER32_EL3",         0b1, 0b110, 0b0001, 0b0001, 0b001>;
-def : RWSysReg<"CPTR_EL2",           0b1, 0b100, 0b0001, 0b0001, 0b010>;
-def : RWSysReg<"CPTR_EL3",           0b1, 0b110, 0b0001, 0b0001, 0b010>;
-def : RWSysReg<"HSTR_EL2",           0b1, 0b100, 0b0001, 0b0001, 0b011>;
-def : RWSysReg<"HACR_EL2",           0b1, 0b100, 0b0001, 0b0001, 0b111>;
-def : RWSysReg<"MDCR_EL3",           0b1, 0b110, 0b0001, 0b0011, 0b001>;
-def : RWSysReg<"TTBR0_EL1",          0b1, 0b000, 0b0010, 0b0000, 0b000>;
-def : RWSysReg<"TTBR0_EL3",          0b1, 0b110, 0b0010, 0b0000, 0b000>;
+def : RWSysReg<"SCR_EL3",            0b11, 0b110, 0b0001, 0b0001, 0b000>;
+def : RWSysReg<"MDCR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b001>;
+def : RWSysReg<"SDER32_EL3",         0b11, 0b110, 0b0001, 0b0001, 0b001>;
+def : RWSysReg<"CPTR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b010>;
+def : RWSysReg<"CPTR_EL3",           0b11, 0b110, 0b0001, 0b0001, 0b010>;
+def : RWSysReg<"HSTR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b011>;
+def : RWSysReg<"HACR_EL2",           0b11, 0b100, 0b0001, 0b0001, 0b111>;
+def : RWSysReg<"MDCR_EL3",           0b11, 0b110, 0b0001, 0b0011, 0b001>;
+def : RWSysReg<"TTBR0_EL1",          0b11, 0b000, 0b0010, 0b0000, 0b000>;
+def : RWSysReg<"TTBR0_EL3",          0b11, 0b110, 0b0010, 0b0000, 0b000>;
 
 let Requires = [{ {AArch64::FeatureEL2VMSA} }] in {
-def : RWSysReg<"TTBR0_EL2",          0b1, 0b100, 0b0010, 0b0000, 0b000>;
-def : RWSysReg<"VTTBR_EL2",          0b1, 0b100, 0b0010, 0b0001, 0b000>;
-}
-
-def : RWSysReg<"TTBR1_EL1",          0b1, 0b000, 0b0010, 0b0000, 0b001>;
-def : RWSysReg<"TCR_EL1",            0b1, 0b000, 0b0010, 0b0000, 0b010>;
-def : RWSysReg<"TCR_EL2",            0b1, 0b100, 0b0010, 0b0000, 0b010>;
-def : RWSysReg<"TCR_EL3",            0b1, 0b110, 0b0010, 0b0000, 0b010>;
-def : RWSysReg<"VTCR_EL2",           0b1, 0b100, 0b0010, 0b0001, 0b010>;
-def : RWSysReg<"DACR32_EL2",         0b1, 0b100, 0b0011, 0b0000, 0b000>;
-def : RWSysReg<"SPSR_EL1",           0b1, 0b000, 0b0100, 0b0000, 0b000>;
-def : RWSysReg<"SPSR_EL2",           0b1, 0b100, 0b0100, 0b0000, 0b000>;
-def : RWSysReg<"SPSR_EL3",           0b1, 0b110, 0b0100, 0b0000, 0b000>;
-def : RWSysReg<"ELR_EL1",            0b1, 0b000, 0b0100, 0b0000, 0b001>;
-def : RWSysReg<"ELR_EL2",            0b1, 0b100, 0b0100, 0b0000, 0b001>;
-def : RWSysReg<"ELR_EL3",            0b1, 0b110, 0b0100, 0b0000, 0b001>;
-def : RWSysReg<"SP_EL0",             0b1, 0b000, 0b0100, 0b0001, 0b000>;
-def : RWSysReg<"SP_EL1",             0b1, 0b100, 0b0100, 0b0001, 0b000>;
-def : RWSysReg<"SP_EL2",             0b1, 0b110, 0b0100, 0b0001, 0b000>;
-def : RWSysReg<"SPSel",              0b1, 0b000, 0b0100, 0b0010, 0b000>;
-def : RWSysReg<"NZCV",               0b1, 0b011, 0b0100, 0b0010, 0b000>;
-def : RWSysReg<"DAIF",               0b1, 0b011, 0b0100, 0b0010, 0b001>;
-def : ROSysReg<"CurrentEL",          0b1, 0b000, 0b0100, 0b0010, 0b010>;
-def : RWSysReg<"SPSR_irq",           0b1, 0b100, 0b0100, 0b0011, 0b000>;
-def : RWSysReg<"SPSR_abt",           0b1, 0b100, 0b0100, 0b0011, 0b001>;
-def : RWSysReg<"SPSR_und",           0b1, 0b100, 0b0100, 0b0011, 0b010>;
-def : RWSysReg<"SPSR_fiq",           0b1, 0b100, 0b0100, 0b0011, 0b011>;
+def : RWSysReg<"TTBR0_EL2",          0b11, 0b100, 0b0010, 0b0000, 0b000>;
+def : RWSysReg<"VTTBR_EL2",          0b11, 0b100, 0b0010, 0b0001, 0b000>;
+}
+
+def : RWSysReg<"TTBR1_EL1",          0b11, 0b000, 0b0010, 0b0000, 0b001>;
+def : RWSysReg<"TCR_EL1",            0b11, 0b000, 0b0010, 0b0000, 0b010>;
+def : RWSysReg<"TCR_EL2",            0b11, 0b100, 0b0010, 0b0000, 0b010>;
+def : RWSysReg<"TCR_EL3",            0b11, 0b110, 0b0010, 0b0000, 0b010>;
+def : RWSysReg<"VTCR_EL2",           0b11, 0b100, 0b0010, 0b0001, 0b010>;
+def : RWSysReg<"DACR32_EL2",         0b11, 0b100, 0b0011, 0b0000, 0b000>;
+def : RWSysReg<"SPSR_EL1",           0b11, 0b000, 0b0100, 0b0000, 0b000>;
+def : RWSysReg<"SPSR_EL2",           0b11, 0b100, 0b0100, 0b0000, 0b000>;
+def : RWSysReg<"SPSR_EL3",           0b11, 0b110, 0b0100, 0b0000, 0b000>;
+def : RWSysReg<"ELR_EL1",            0b11, 0b000, 0b0100, 0b0000, 0b001>;
+def : RWSysReg<"ELR_EL2",            0b11, 0b100, 0b0100, 0b0000, 0b001>;
+def : RWSysReg<"ELR_EL3",            0b11, 0b110, 0b0100, 0b0000, 0b001>;
+def : RWSysReg<"SP_EL0",             0b11, 0b000, 0b0100, 0b0001, 0b000>;
+def : RWSysReg<"SP_EL1",             0b11, 0b100, 0b0100, 0b0001, 0b000>;
+def : RWSysReg<"SP_EL2",             0b11, 0b110, 0b0100, 0b0001, 0b000>;
+def : RWSysReg<"SPSel",              0b11, 0b000, 0b0100, 0b0010, 0b000>;
+def : RWSysReg<"NZCV",               0b11, 0b011, 0b0100, 0b0010, 0b000>;
+def : RWSysReg<"DAIF",               0b11, 0b011, 0b0100, 0b0010, 0b001>;
+def : ROSysReg<"CurrentEL",          0b11, 0b000, 0b0100, 0b0010, 0b010>;
+def : RWSysReg<"SPSR_irq",           0b11, 0b100, 0b0100, 0b0011, 0b000>;
+def : RWSysReg<"SPSR_abt",           0b11, 0b100, 0b0100, 0b0011, 0b001>;
+def : RWSysReg<"SPSR_und",           0b11, 0b100, 0b0100, 0b0011, 0b010>;
+def : RWSysReg<"SPSR_fiq",           0b11, 0b100, 0b0100, 0b0011, 0b011>;
 let Requires = [{ {AArch64::FeatureFPARMv8} }] in {
-def : RWSysReg<"FPCR",               0b1, 0b011, 0b0100, 0b0100, 0b000>;
-def : RWSysReg<"FPSR",               0b1, 0b011, 0b0100, 0b0100, 0b001>;
-}
-def : RWSysReg<"DSPSR_EL0",          0b1, 0b011, 0b0100, 0b0101, 0b000>;
-def : RWSysReg<"DLR_EL0",            0b1, 0b011, 0b0100, 0b0101, 0b001>;
-def : RWSysReg<"IFSR32_EL2",         0b1, 0b100, 0b0101, 0b0000, 0b001>;
-def : RWSysReg<"AFSR0_EL1",          0b1, 0b000, 0b0101, 0b0001, 0b000>;
-def : RWSysReg<"AFSR0_EL2",          0b1, 0b100, 0b0101, 0b0001, 0b000>;
-def : RWSysReg<"AFSR0_EL3",          0b1, 0b110, 0b0101, 0b0001, 0b000>;
-def : RWSysReg<"AFSR1_EL1",          0b1, 0b000, 0b0101, 0b0001, 0b001>;
-def : RWSysReg<"AFSR1_EL2",          0b1, 0b100, 0b0101, 0b0001, 0b001>;
-def : RWSysReg<"AFSR1_EL3",          0b1, 0b110, 0b0101, 0b0001, 0b001>;
-def : RWSysReg<"ESR_EL1",            0b1, 0b000, 0b0101, 0b0010, 0b000>;
-def : RWSysReg<"ESR_EL2",            0b1, 0b100, 0b0101, 0b0010, 0b000>;
-def : RWSysReg<"ESR_EL3",            0b1, 0b110, 0b0101, 0b0010, 0b000>;
-def : RWSysReg<"FPEXC32_EL2",        0b1, 0b100, 0b0101, 0b0011, 0b000>;
-def : RWSysReg<"FAR_EL1",            0b1, 0b000, 0b0110, 0b0000, 0b000>;
-def : RWSysReg<"FAR_EL2",            0b1, 0b100, 0b0110, 0b0000, 0b000>;
-def : RWSysReg<"FAR_EL3",            0b1, 0b110, 0b0110, 0b0000, 0b000>;
-def : RWSysReg<"HPFAR_EL2",          0b1, 0b100, 0b0110, 0b0000, 0b100>;
-def : RWSysReg<"PAR_EL1",            0b1, 0b000, 0b0111, 0b0100, 0b000>;
-def : RWSysReg<"PMCR_EL0",           0b1, 0b011, 0b1001, 0b1100, 0b000>;
-def : RWSysReg<"PMCNTENSET_EL0",     0b1, 0b011, 0b1001, 0b1100, 0b001>;
-def : RWSysReg<"PMCNTENCLR_EL0",     0b1, 0b011, 0b1001, 0b1100, 0b010>;
-def : RWSysReg<"PMOVSCLR_EL0",       0b1, 0b011, 0b1001, 0b1100, 0b011>;
-def : RWSysReg<"PMSELR_EL0",         0b1, 0b011, 0b1001, 0b1100, 0b101>;
-def : RWSysReg<"PMCCNTR_EL0",        0b1, 0b011, 0b1001, 0b1101, 0b000>;
-def : RWSysReg<"PMXEVTYPER_EL0",     0b1, 0b011, 0b1001, 0b1101, 0b001>;
-def : RWSysReg<"PMXEVCNTR_EL0",      0b1, 0b011, 0b1001, 0b1101, 0b010>;
-def : RWSysReg<"PMUSERENR_EL0",      0b1, 0b011, 0b1001, 0b1110, 0b000>;
-def : RWSysReg<"PMINTENSET_EL1",     0b1, 0b000, 0b1001, 0b1110, 0b001>;
-def : RWSysReg<"PMINTENCLR_EL1",     0b1, 0b000, 0b1001, 0b1110, 0b010>;
-def : RWSysReg<"PMOVSSET_EL0",       0b1, 0b011, 0b1001, 0b1110, 0b011>;
-def : RWSysReg<"MAIR_EL1",           0b1, 0b000, 0b1010, 0b0010, 0b000>;
-def : RWSysReg<"MAIR_EL2",           0b1, 0b100, 0b1010, 0b0010, 0b000>;
-def : RWSysReg<"MAIR_EL3",           0b1, 0b110, 0b1010, 0b0010, 0b000>;
-def : RWSysReg<"AMAIR_EL1",          0b1, 0b000, 0b1010, 0b0011, 0b000>;
-def : RWSysReg<"AMAIR_EL2",          0b1, 0b100, 0b1010, 0b0011, 0b000>;
-def : RWSysReg<"AMAIR_EL3",          0b1, 0b110, 0b1010, 0b0011, 0b000>;
-def : RWSysReg<"VBAR_EL1",           0b1, 0b000, 0b1100, 0b0000, 0b000>;
-def : RWSysReg<"VBAR_EL2",           0b1, 0b100, 0b1100, 0b0000, 0b000>;
-def : RWSysReg<"VBAR_EL3",           0b1, 0b110, 0b1100, 0b0000, 0b000>;
-def : RWSysReg<"RMR_EL1",            0b1, 0b000, 0b1100, 0b0000, 0b010>;
-def : RWSysReg<"RMR_EL2",            0b1, 0b100, 0b1100, 0b0000, 0b010>;
-def : RWSysReg<"RMR_EL3",            0b1, 0b110, 0b1100, 0b0000, 0b010>;
-def : RWSysReg<"CONTEXTIDR_EL1",     0b1, 0b000, 0b1101, 0b0000, 0b001>;
-def : RWSysReg<"TPIDR_EL0",          0b1, 0b011, 0b1101, 0b0000, 0b010>;
-def : RWSysReg<"TPIDR_EL2",          0b1, 0b100, 0b1101, 0b0000, 0b010>;
-def : RWSysReg<"TPIDR_EL3",          0b1, 0b110, 0b1101, 0b0000, 0b010>;
-def : RWSysReg<"TPIDRRO_EL0",        0b1, 0b011, 0b1101, 0b0000, 0b011>;
-def : RWSysReg<"TPIDR_EL1",          0b1, 0b000, 0b1101, 0b0000, 0b100>;
-def : RWSysReg<"CNTFRQ_EL0",         0b1, 0b011, 0b1110, 0b0000, 0b000>;
-def : RWSysReg<"CNTVOFF_EL2",        0b1, 0b100, 0b1110, 0b0000, 0b011>;
-def : RWSysReg<"CNTKCTL_EL1",        0b1, 0b000, 0b1110, 0b0001, 0b000>;
-def : RWSysReg<"CNTHCTL_EL2",        0b1, 0b100, 0b1110, 0b0001, 0b000>;
-def : RWSysReg<"CNTP_TVAL_EL0",      0b1, 0b011, 0b1110, 0b0010, 0b000>;
-def : RWSysReg<"CNTHP_TVAL_EL2",     0b1, 0b100, 0b1110, 0b0010, 0b000>;
-def : RWSysReg<"CNTPS_TVAL_EL1",     0b1, 0b111, 0b1110, 0b0010, 0b000>;
-def : RWSysReg<"CNTP_CTL_EL0",       0b1, 0b011, 0b1110, 0b0010, 0b001>;
-def : RWSysReg<"CNTHP_CTL_EL2",      0b1, 0b100, 0b1110, 0b0010, 0b001>;
-def : RWSysReg<"CNTPS_CTL_EL1",      0b1, 0b111, 0b1110, 0b0010, 0b001>;
-def : RWSysReg<"CNTP_CVAL_EL0",      0b1, 0b011, 0b1110, 0b0010, 0b010>;
-def : RWSysReg<"CNTHP_CVAL_EL2",     0b1, 0b100, 0b1110, 0b0010, 0b010>;
-def : RWSysReg<"CNTPS_CVAL_EL1",     0b1, 0b111, 0b1110, 0b0010, 0b010>;
-def : RWSysReg<"CNTV_TVAL_EL0",      0b1, 0b011, 0b1110, 0b0011, 0b000>;
-def : RWSysReg<"CNTV_CTL_EL0",       0b1, 0b011, 0b1110, 0b0011, 0b001>;
-def : RWSysReg<"CNTV_CVAL_EL0",      0b1, 0b011, 0b1110, 0b0011, 0b010>;
-def : RWSysReg<"PMEVCNTR0_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b000>;
-def : RWSysReg<"PMEVCNTR1_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b001>;
-def : RWSysReg<"PMEVCNTR2_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b010>;
-def : RWSysReg<"PMEVCNTR3_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b011>;
-def : RWSysReg<"PMEVCNTR4_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b100>;
-def : RWSysReg<"PMEVCNTR5_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b101>;
-def : RWSysReg<"PMEVCNTR6_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b110>;
-def : RWSysReg<"PMEVCNTR7_EL0",      0b1, 0b011, 0b1110, 0b1000, 0b111>;
-def : RWSysReg<"PMEVCNTR8_EL0",      0b1, 0b011, 0b1110, 0b1001, 0b000>;
-def : RWSysReg<"PMEVCNTR9_EL0",      0b1, 0b011, 0b1110, 0b1001, 0b001>;
-def : RWSysReg<"PMEVCNTR10_EL0",     0b1, 0b011, 0b1110, 0b1001, 0b010>;
-def : RWSysReg<"PMEVCNTR11_EL0",     0b1, 0b011, 0b1110, 0b1001, 0b011>;
-def : RWSysReg<"PMEVCNTR12_EL0",     0b1, 0b011, 0b1110, 0b1001, 0b100>;
-def : RWSysReg<"PMEVCNTR13_EL0",     0b1, 0b011, 0b1110, 0b1001, 0b101>;
-def : RWSysReg<"PMEVCNTR14_EL0",     0b1, 0b011, 0b1110, 0b1001, 0b110>;
-def : RWSysReg<"PMEVCNTR15_EL0",     0b1, 0b011, 0b1110, 0b1001, 0b111>;
-def : RWSysReg<"PMEVCNTR16_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b000>;
-def : RWSysReg<"PMEVCNTR17_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b001>;
-def : RWSysReg<"PMEVCNTR18_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b010>;
-def : RWSysReg<"PMEVCNTR19_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b011>;
-def : RWSysReg<"PMEVCNTR20_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b100>;
-def : RWSysReg<"PMEVCNTR21_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b101>;
-def : RWSysReg<"PMEVCNTR22_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b110>;
-def : RWSysReg<"PMEVCNTR23_EL0",     0b1, 0b011, 0b1110, 0b1010, 0b111>;
-def : RWSysReg<"PMEVCNTR24_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b000>;
-def : RWSysReg<"PMEVCNTR25_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b001>;
-def : RWSysReg<"PMEVCNTR26_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b010>;
-def : RWSysReg<"PMEVCNTR27_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b011>;
-def : RWSysReg<"PMEVCNTR28_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b100>;
-def : RWSysReg<"PMEVCNTR29_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b101>;
-def : RWSysReg<"PMEVCNTR30_EL0",     0b1, 0b011, 0b1110, 0b1011, 0b110>;
-def : RWSysReg<"PMCCFILTR_EL0",      0b1, 0b011, 0b1110, 0b1111, 0b111>;
-def : RWSysReg<"PMEVTYPER0_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b000>;
-def : RWSysReg<"PMEVTYPER1_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b001>;
-def : RWSysReg<"PMEVTYPER2_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b010>;
-def : RWSysReg<"PMEVTYPER3_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b011>;
-def : RWSysReg<"PMEVTYPER4_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b100>;
-def : RWSysReg<"PMEVTYPER5_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b101>;
-def : RWSysReg<"PMEVTYPER6_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b110>;
-def : RWSysReg<"PMEVTYPER7_EL0",     0b1, 0b011, 0b1110, 0b1100, 0b111>;
-def : RWSysReg<"PMEVTYPER8_EL0",     0b1, 0b011, 0b1110, 0b1101, 0b000>;
-def : RWSysReg<"PMEVTYPER9_EL0",     0b1, 0b011, 0b1110, 0b1101, 0b001>;
-def : RWSysReg<"PMEVTYPER10_EL0",    0b1, 0b011, 0b1110, 0b1101, 0b010>;
-def : RWSysReg<"PMEVTYPER11_EL0",    0b1, 0b011, 0b1110, 0b1101, 0b011>;
-def : RWSysReg<"PMEVTYPER12_EL0",    0b1, 0b011, 0b1110, 0b1101, 0b100>;
-def : RWSysReg<"PMEVTYPER13_EL0",    0b1, 0b011, 0b1110, 0b1101, 0b101>;
-def : RWSysReg<"PMEVTYPER14_EL0",    0b1, 0b011, 0b1110, 0b1101, 0b110>;
-def : RWSysReg<"PMEVTYPER15_EL0",    0b1, 0b011, 0b1110, 0b1101, 0b111>;
-def : RWSysReg<"PMEVTYPER16_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b000>;
-def : RWSysReg<"PMEVTYPER17_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b001>;
-def : RWSysReg<"PMEVTYPER18_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b010>;
-def : RWSysReg<"PMEVTYPER19_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b011>;
-def : RWSysReg<"PMEVTYPER20_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b100>;
-def : RWSysReg<"PMEVTYPER21_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b101>;
-def : RWSysReg<"PMEVTYPER22_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b110>;
-def : RWSysReg<"PMEVTYPER23_EL0",    0b1, 0b011, 0b1110, 0b1110, 0b111>;
-def : RWSysReg<"PMEVTYPER24_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b000>;
-def : RWSysReg<"PMEVTYPER25_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b001>;
-def : RWSysReg<"PMEVTYPER26_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b010>;
-def : RWSysReg<"PMEVTYPER27_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b011>;
-def : RWSysReg<"PMEVTYPER28_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b100>;
-def : RWSysReg<"PMEVTYPER29_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b101>;
-def : RWSysReg<"PMEVTYPER30_EL0",    0b1, 0b011, 0b1110, 0b1111, 0b110>;
+def : RWSysReg<"FPCR",               0b11, 0b011, 0b0100, 0b0100, 0b000>;
+def : RWSysReg<"FPSR",               0b11, 0b011, 0b0100, 0b0100, 0b001>;
+}
+def : RWSysReg<"DSPSR_EL0",          0b11, 0b011, 0b0100, 0b0101, 0b000>;
+def : RWSysReg<"DLR_EL0",            0b11, 0b011, 0b0100, 0b0101, 0b001>;
+def : RWSysReg<"IFSR32_EL2",         0b11, 0b100, 0b0101, 0b0000, 0b001>;
+def : RWSysReg<"AFSR0_EL1",          0b11, 0b000, 0b0101, 0b0001, 0b000>;
+def : RWSysReg<"AFSR0_EL2",          0b11, 0b100, 0b0101, 0b0001, 0b000>;
+def : RWSysReg<"AFSR0_EL3",          0b11, 0b110, 0b0101, 0b0001, 0b000>;
+def : RWSysReg<"AFSR1_EL1",          0b11, 0b000, 0b0101, 0b0001, 0b001>;
+def : RWSysReg<"AFSR1_EL2",          0b11, 0b100, 0b0101, 0b0001, 0b001>;
+def : RWSysReg<"AFSR1_EL3",          0b11, 0b110, 0b0101, 0b0001, 0b001>;
+def : RWSysReg<"ESR_EL1",            0b11, 0b000, 0b0101, 0b0010, 0b000>;
+def : RWSysReg<"ESR_EL2",            0b11, 0b100, 0b0101, 0b0010, 0b000>;
+def : RWSysReg<"ESR_EL3",            0b11, 0b110, 0b0101, 0b0010, 0b000>;
+def : RWSysReg<"FPEXC32_EL2",        0b11, 0b100, 0b0101, 0b0011, 0b000>;
+def : RWSysReg<"FAR_EL1",            0b11, 0b000, 0b0110, 0b0000, 0b000>;
+def : RWSysReg<"FAR_EL2",            0b11, 0b100, 0b0110, 0b0000, 0b000>;
+def : RWSysReg<"FAR_EL3",            0b11, 0b110, 0b0110, 0b0000, 0b000>;
+def : RWSysReg<"HPFAR_EL2",          0b11, 0b100, 0b0110, 0b0000, 0b100>;
+def : RWSysReg<"PAR_EL1",            0b11, 0b000, 0b0111, 0b0100, 0b000>;
+def : RWSysReg<"PMCR_EL0",           0b11, 0b011, 0b1001, 0b1100, 0b000>;
+def : RWSysReg<"PMCNTENSET_EL0",     0b11, 0b011, 0b1001, 0b1100, 0b001>;
+def : RWSysReg<"PMCNTENCLR_EL0",     0b11, 0b011, 0b1001, 0b1100, 0b010>;
+def : RWSysReg<"PMOVSCLR_EL0",       0b11, 0b011, 0b1001, 0b1100, 0b011>;
+def : RWSysReg<"PMSELR_EL0",         0b11, 0b011, 0b1001, 0b1100, 0b101>;
+def : RWSysReg<"PMCCNTR_EL0",        0b11, 0b011, 0b1001, 0b1101, 0b000>;
+def : RWSysReg<"PMXEVTYPER_EL0",     0b11, 0b011, 0b1001, 0b1101, 0b001>;
+def : RWSysReg<"PMXEVCNTR_EL0",      0b11, 0b011, 0b1001, 0b1101, 0b010>;
+def : RWSysReg<"PMUSERENR_EL0",      0b11, 0b011, 0b1001, 0b1110, 0b000>;
+def : RWSysReg<"PMINTENSET_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b001>;
+def : RWSysReg<"PMINTENCLR_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b010>;
+def : RWSysReg<"PMOVSSET_EL0",       0b11, 0b011, 0b1001, 0b1110, 0b011>;
+def : RWSysReg<"MAIR_EL1",           0b11, 0b000, 0b1010, 0b0010, 0b000>;
+def : RWSysReg<"MAIR_EL2",           0b11, 0b100, 0b1010, 0b0010, 0b000>;
+def : RWSysReg<"MAIR_EL3",           0b11, 0b110, 0b1010, 0b0010, 0b000>;
+def : RWSysReg<"AMAIR_EL1",          0b11, 0b000, 0b1010, 0b0011, 0b000>;
+def : RWSysReg<"AMAIR_EL2",          0b11, 0b100, 0b1010, 0b0011, 0b000>;
+def : RWSysReg<"AMAIR_EL3",          0b11, 0b110, 0b1010, 0b0011, 0b000>;
+def : RWSysReg<"VBAR_EL1",           0b11, 0b000, 0b1100, 0b0000, 0b000>;
+def : RWSysReg<"VBAR_EL2",           0b11, 0b100, 0b1100, 0b0000, 0b000>;
+def : RWSysReg<"VBAR_EL3",           0b11, 0b110, 0b1100, 0b0000, 0b000>;
+def : RWSysReg<"RMR_EL1",            0b11, 0b000, 0b1100, 0b0000, 0b010>;
+def : RWSysReg<"RMR_EL2",            0b11, 0b100, 0b1100, 0b0000, 0b010>;
+def : RWSysReg<"RMR_EL3",            0b11, 0b110, 0b1100, 0b0000, 0b010>;
+def : RWSysReg<"CONTEXTIDR_EL1",     0b11, 0b000, 0b1101, 0b0000, 0b001>;
+def : RWSysReg<"TPIDR_EL0",          0b11, 0b011, 0b1101, 0b0000, 0b010>;
+def : RWSysReg<"TPIDR_EL2",          0b11, 0b100, 0b1101, 0b0000, 0b010>;
+def : RWSysReg<"TPIDR_EL3",          0b11, 0b110, 0b1101, 0b0000, 0b010>;
+def : RWSysReg<"TPIDRRO_EL0",        0b11, 0b011, 0b1101, 0b0000, 0b011>;
+def : RWSysReg<"TPIDR_EL1",          0b11, 0b000, 0b1101, 0b0000, 0b100>;
+def : RWSysReg<"CNTFRQ_EL0",         0b11, 0b011, 0b1110, 0b0000, 0b000>;
+def : RWSysReg<"CNTVOFF_EL2",        0b11, 0b100, 0b1110, 0b0000, 0b011>;
+def : RWSysReg<"CNTKCTL_EL1",        0b11, 0b000, 0b1110, 0b0001, 0b000>;
+def : RWSysReg<"CNTHCTL_EL2",        0b11, 0b100, 0b1110, 0b0001, 0b000>;
+def : RWSysReg<"CNTP_TVAL_EL0",      0b11, 0b011, 0b1110, 0b0010, 0b000>;
+def : RWSysReg<"CNTHP_TVAL_EL2",     0b11, 0b100, 0b1110, 0b0010, 0b000>;
+def : RWSysReg<"CNTPS_TVAL_EL1",     0b11, 0b111, 0b1110, 0b0010, 0b000>;
+def : RWSysReg<"CNTP_CTL_EL0",       0b11, 0b011, 0b1110, 0b0010, 0b001>;
+def : RWSysReg<"CNTHP_CTL_EL2",      0b11, 0b100, 0b1110, 0b0010, 0b001>;
+def : RWSysReg<"CNTPS_CTL_EL1",      0b11, 0b111, 0b1110, 0b0010, 0b001>;
+def : RWSysReg<"CNTP_CVAL_EL0",      0b11, 0b011, 0b1110, 0b0010, 0b010>;
+def : RWSysReg<"CNTHP_CVAL_EL2",     0b11, 0b100, 0b1110, 0b0010, 0b010>;
+def : RWSysReg<"CNTPS_CVAL_EL1",     0b11, 0b111, 0b1110, 0b0010, 0b010>;
+def : RWSysReg<"CNTV_TVAL_EL0",      0b11, 0b011, 0b1110, 0b0011, 0b000>;
+def : RWSysReg<"CNTV_CTL_EL0",       0b11, 0b011, 0b1110, 0b0011, 0b001>;
+def : RWSysReg<"CNTV_CVAL_EL0",      0b11, 0b011, 0b1110, 0b0011, 0b010>;
+def : RWSysReg<"PMEVCNTR0_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b000>;
+def : RWSysReg<"PMEVCNTR1_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b001>;
+def : RWSysReg<"PMEVCNTR2_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b010>;
+def : RWSysReg<"PMEVCNTR3_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b011>;
+def : RWSysReg<"PMEVCNTR4_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b100>;
+def : RWSysReg<"PMEVCNTR5_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b101>;
+def : RWSysReg<"PMEVCNTR6_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b110>;
+def : RWSysReg<"PMEVCNTR7_EL0",      0b11, 0b011, 0b1110, 0b1000, 0b111>;
+def : RWSysReg<"PMEVCNTR8_EL0",      0b11, 0b011, 0b1110, 0b1001, 0b000>;
+def : RWSysReg<"PMEVCNTR9_EL0",      0b11, 0b011, 0b1110, 0b1001, 0b001>;
+def : RWSysReg<"PMEVCNTR10_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b010>;
+def : RWSysReg<"PMEVCNTR11_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b011>;
+def : RWSysReg<"PMEVCNTR12_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b100>;
+def : RWSysReg<"PMEVCNTR13_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b101>;
+def : RWSysReg<"PMEVCNTR14_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b110>;
+def : RWSysReg<"PMEVCNTR15_EL0",     0b11, 0b011, 0b1110, 0b1001, 0b111>;
+def : RWSysReg<"PMEVCNTR16_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b000>;
+def : RWSysReg<"PMEVCNTR17_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b001>;
+def : RWSysReg<"PMEVCNTR18_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b010>;
+def : RWSysReg<"PMEVCNTR19_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b011>;
+def : RWSysReg<"PMEVCNTR20_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b100>;
+def : RWSysReg<"PMEVCNTR21_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b101>;
+def : RWSysReg<"PMEVCNTR22_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b110>;
+def : RWSysReg<"PMEVCNTR23_EL0",     0b11, 0b011, 0b1110, 0b1010, 0b111>;
+def : RWSysReg<"PMEVCNTR24_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b000>;
+def : RWSysReg<"PMEVCNTR25_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b001>;
+def : RWSysReg<"PMEVCNTR26_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b010>;
+def : RWSysReg<"PMEVCNTR27_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b011>;
+def : RWSysReg<"PMEVCNTR28_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b100>;
+def : RWSysReg<"PMEVCNTR29_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b101>;
+def : RWSysReg<"PMEVCNTR30_EL0",     0b11, 0b011, 0b1110, 0b1011, 0b110>;
+def : RWSysReg<"PMCCFILTR_EL0",      0b11, 0b011, 0b1110, 0b1111, 0b111>;
+def : RWSysReg<"PMEVTYPER0_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b000>;
+def : RWSysReg<"PMEVTYPER1_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b001>;
+def : RWSysReg<"PMEVTYPER2_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b010>;
+def : RWSysReg<"PMEVTYPER3_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b011>;
+def : RWSysReg<"PMEVTYPER4_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b100>;
+def : RWSysReg<"PMEVTYPER5_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b101>;
+def : RWSysReg<"PMEVTYPER6_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b110>;
+def : RWSysReg<"PMEVTYPER7_EL0",     0b11, 0b011, 0b1110, 0b1100, 0b111>;
+def : RWSysReg<"PMEVTYPER8_EL0",     0b11, 0b011, 0b1110, 0b1101, 0b000>;
+def : RWSysReg<"PMEVTYPER9_EL0",     0b11, 0b011, 0b1110, 0b1101, 0b001>;
+def : RWSysReg<"PMEVTYPER10_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b010>;
+def : RWSysReg<"PMEVTYPER11_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b011>;
+def : RWSysReg<"PMEVTYPER12_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b100>;
+def : RWSysReg<"PMEVTYPER13_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b101>;
+def : RWSysReg<"PMEVTYPER14_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b110>;
+def : RWSysReg<"PMEVTYPER15_EL0",    0b11, 0b011, 0b1110, 0b1101, 0b111>;
+def : RWSysReg<"PMEVTYPER16_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b000>;
+def : RWSysReg<"PMEVTYPER17_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b001>;
+def : RWSysReg<"PMEVTYPER18_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b010>;
+def : RWSysReg<"PMEVTYPER19_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b011>;
+def : RWSysReg<"PMEVTYPER20_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b100>;
+def : RWSysReg<"PMEVTYPER21_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b101>;
+def : RWSysReg<"PMEVTYPER22_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b110>;
+def : RWSysReg<"PMEVTYPER23_EL0",    0b11, 0b011, 0b1110, 0b1110, 0b111>;
+def : RWSysReg<"PMEVTYPER24_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b000>;
+def : RWSysReg<"PMEVTYPER25_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b001>;
+def : RWSysReg<"PMEVTYPER26_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b010>;
+def : RWSysReg<"PMEVTYPER27_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b011>;
+def : RWSysReg<"PMEVTYPER28_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b100>;
+def : RWSysReg<"PMEVTYPER29_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b101>;
+def : RWSysReg<"PMEVTYPER30_EL0",    0b11, 0b011, 0b1110, 0b1111, 0b110>;
 
 // Trace registers
 //                                 Op0    Op1     CRn     CRm    Op2
-def : RWSysReg<"TRCPRGCTLR",         0b0, 0b001, 0b0000, 0b0001, 0b000>;
-def : RWSysReg<"TRCPROCSELR",        0b0, 0b001, 0b0000, 0b0010, 0b000>;
-def : RWSysReg<"TRCCONFIGR",         0b0, 0b001, 0b0000, 0b0100, 0b000>;
-def : RWSysReg<"TRCAUXCTLR",         0b0, 0b001, 0b0000, 0b0110, 0b000>;
-def : RWSysReg<"TRCEVENTCTL0R",      0b0, 0b001, 0b0000, 0b1000, 0b000>;
-def : RWSysReg<"TRCEVENTCTL1R",      0b0, 0b001, 0b0000, 0b1001, 0b000>;
-def : RWSysReg<"TRCSTALLCTLR",       0b0, 0b001, 0b0000, 0b1011, 0b000>;
-def : RWSysReg<"TRCTSCTLR",          0b0, 0b001, 0b0000, 0b1100, 0b000>;
-def : RWSysReg<"TRCSYNCPR",          0b0, 0b001, 0b0000, 0b1101, 0b000>;
-def : RWSysReg<"TRCCCCTLR",          0b0, 0b001, 0b0000, 0b1110, 0b000>;
-def : RWSysReg<"TRCBBCTLR",          0b0, 0b001, 0b0000, 0b1111, 0b000>;
-def : RWSysReg<"TRCTRACEIDR",        0b0, 0b001, 0b0000, 0b0000, 0b001>;
-def : RWSysReg<"TRCQCTLR",           0b0, 0b001, 0b0000, 0b0001, 0b001>;
-def : RWSysReg<"TRCVICTLR",          0b0, 0b001, 0b0000, 0b0000, 0b010>;
-def : RWSysReg<"TRCVIIECTLR",        0b0, 0b001, 0b0000, 0b0001, 0b010>;
-def : RWSysReg<"TRCVISSCTLR",        0b0, 0b001, 0b0000, 0b0010, 0b010>;
-def : RWSysReg<"TRCVIPCSSCTLR",      0b0, 0b001, 0b0000, 0b0011, 0b010>;
-def : RWSysReg<"TRCVDCTLR",          0b0, 0b001, 0b0000, 0b1000, 0b010>;
-def : RWSysReg<"TRCVDSACCTLR",       0b0, 0b001, 0b0000, 0b1001, 0b010>;
-def : RWSysReg<"TRCVDARCCTLR",       0b0, 0b001, 0b0000, 0b1010, 0b010>;
-def : RWSysReg<"TRCSEQEVR0",         0b0, 0b001, 0b0000, 0b0000, 0b100>;
-def : RWSysReg<"TRCSEQEVR1",         0b0, 0b001, 0b0000, 0b0001, 0b100>;
-def : RWSysReg<"TRCSEQEVR2",         0b0, 0b001, 0b0000, 0b0010, 0b100>;
-def : RWSysReg<"TRCSEQRSTEVR",       0b0, 0b001, 0b0000, 0b0110, 0b100>;
-def : RWSysReg<"TRCSEQSTR",          0b0, 0b001, 0b0000, 0b0111, 0b100>;
-def : RWSysReg<"TRCEXTINSELR",       0b0, 0b001, 0b0000, 0b1000, 0b100>;
-def : RWSysReg<"TRCCNTRLDVR0",       0b0, 0b001, 0b0000, 0b0000, 0b101>;
-def : RWSysReg<"TRCCNTRLDVR1",       0b0, 0b001, 0b0000, 0b0001, 0b101>;
-def : RWSysReg<"TRCCNTRLDVR2",       0b0, 0b001, 0b0000, 0b0010, 0b101>;
-def : RWSysReg<"TRCCNTRLDVR3",       0b0, 0b001, 0b0000, 0b0011, 0b101>;
-def : RWSysReg<"TRCCNTCTLR0",        0b0, 0b001, 0b0000, 0b0100, 0b101>;
-def : RWSysReg<"TRCCNTCTLR1",        0b0, 0b001, 0b0000, 0b0101, 0b101>;
-def : RWSysReg<"TRCCNTCTLR2",        0b0, 0b001, 0b0000, 0b0110, 0b101>;
-def : RWSysReg<"TRCCNTCTLR3",        0b0, 0b001, 0b0000, 0b0111, 0b101>;
-def : RWSysReg<"TRCCNTVR0",          0b0, 0b001, 0b0000, 0b1000, 0b101>;
-def : RWSysReg<"TRCCNTVR1",          0b0, 0b001, 0b0000, 0b1001, 0b101>;
-def : RWSysReg<"TRCCNTVR2",          0b0, 0b001, 0b0000, 0b1010, 0b101>;
-def : RWSysReg<"TRCCNTVR3",          0b0, 0b001, 0b0000, 0b1011, 0b101>;
-def : RWSysReg<"TRCIMSPEC0",         0b0, 0b001, 0b0000, 0b0000, 0b111>;
-def : RWSysReg<"TRCIMSPEC1",         0b0, 0b001, 0b0000, 0b0001, 0b111>;
-def : RWSysReg<"TRCIMSPEC2",         0b0, 0b001, 0b0000, 0b0010, 0b111>;
-def : RWSysReg<"TRCIMSPEC3",         0b0, 0b001, 0b0000, 0b0011, 0b111>;
-def : RWSysReg<"TRCIMSPEC4",         0b0, 0b001, 0b0000, 0b0100, 0b111>;
-def : RWSysReg<"TRCIMSPEC5",         0b0, 0b001, 0b0000, 0b0101, 0b111>;
-def : RWSysReg<"TRCIMSPEC6",         0b0, 0b001, 0b0000, 0b0110, 0b111>;
-def : RWSysReg<"TRCIMSPEC7",         0b0, 0b001, 0b0000, 0b0111, 0b111>;
-def : RWSysReg<"TRCRSCTLR2",         0b0, 0b001, 0b0001, 0b0010, 0b000>;
-def : RWSysReg<"TRCRSCTLR3",         0b0, 0b001, 0b0001, 0b0011, 0b000>;
-def : RWSysReg<"TRCRSCTLR4",         0b0, 0b001, 0b0001, 0b0100, 0b000>;
-def : RWSysReg<"TRCRSCTLR5",         0b0, 0b001, 0b0001, 0b0101, 0b000>;
-def : RWSysReg<"TRCRSCTLR6",         0b0, 0b001, 0b0001, 0b0110, 0b000>;
-def : RWSysReg<"TRCRSCTLR7",         0b0, 0b001, 0b0001, 0b0111, 0b000>;
-def : RWSysReg<"TRCRSCTLR8",         0b0, 0b001, 0b0001, 0b1000, 0b000>;
-def : RWSysReg<"TRCRSCTLR9",         0b0, 0b001, 0b0001, 0b1001, 0b000>;
-def : RWSysReg<"TRCRSCTLR10",        0b0, 0b001, 0b0001, 0b1010, 0b000>;
-def : RWSysReg<"TRCRSCTLR11",        0b0, 0b001, 0b0001, 0b1011, 0b000>;
-def : RWSysReg<"TRCRSCTLR12",        0b0, 0b001, 0b0001, 0b1100, 0b000>;
-def : RWSysReg<"TRCRSCTLR13",        0b0, 0b001, 0b0001, 0b1101, 0b000>;
-def : RWSysReg<"TRCRSCTLR14",        0b0, 0b001, 0b0001, 0b1110, 0b000>;
-def : RWSysReg<"TRCRSCTLR15",        0b0, 0b001, 0b0001, 0b1111, 0b000>;
-def : RWSysReg<"TRCRSCTLR16",        0b0, 0b001, 0b0001, 0b0000, 0b001>;
-def : RWSysReg<"TRCRSCTLR17",        0b0, 0b001, 0b0001, 0b0001, 0b001>;
-def : RWSysReg<"TRCRSCTLR18",        0b0, 0b001, 0b0001, 0b0010, 0b001>;
-def : RWSysReg<"TRCRSCTLR19",        0b0, 0b001, 0b0001, 0b0011, 0b001>;
-def : RWSysReg<"TRCRSCTLR20",        0b0, 0b001, 0b0001, 0b0100, 0b001>;
-def : RWSysReg<"TRCRSCTLR21",        0b0, 0b001, 0b0001, 0b0101, 0b001>;
-def : RWSysReg<"TRCRSCTLR22",        0b0, 0b001, 0b0001, 0b0110, 0b001>;
-def : RWSysReg<"TRCRSCTLR23",        0b0, 0b001, 0b0001, 0b0111, 0b001>;
-def : RWSysReg<"TRCRSCTLR24",        0b0, 0b001, 0b0001, 0b1000, 0b001>;
-def : RWSysReg<"TRCRSCTLR25",        0b0, 0b001, 0b0001, 0b1001, 0b001>;
-def : RWSysReg<"TRCRSCTLR26",        0b0, 0b001, 0b0001, 0b1010, 0b001>;
-def : RWSysReg<"TRCRSCTLR27",        0b0, 0b001, 0b0001, 0b1011, 0b001>;
-def : RWSysReg<"TRCRSCTLR28",        0b0, 0b001, 0b0001, 0b1100, 0b001>;
-def : RWSysReg<"TRCRSCTLR29",        0b0, 0b001, 0b0001, 0b1101, 0b001>;
-def : RWSysReg<"TRCRSCTLR30",        0b0, 0b001, 0b0001, 0b1110, 0b001>;
-def : RWSysReg<"TRCRSCTLR31",        0b0, 0b001, 0b0001, 0b1111, 0b001>;
-def : RWSysReg<"TRCSSCCR0",          0b0, 0b001, 0b0001, 0b0000, 0b010>;
-def : RWSysReg<"TRCSSCCR1",          0b0, 0b001, 0b0001, 0b0001, 0b010>;
-def : RWSysReg<"TRCSSCCR2",          0b0, 0b001, 0b0001, 0b0010, 0b010>;
-def : RWSysReg<"TRCSSCCR3",          0b0, 0b001, 0b0001, 0b0011, 0b010>;
-def : RWSysReg<"TRCSSCCR4",          0b0, 0b001, 0b0001, 0b0100, 0b010>;
-def : RWSysReg<"TRCSSCCR5",          0b0, 0b001, 0b0001, 0b0101, 0b010>;
-def : RWSysReg<"TRCSSCCR6",          0b0, 0b001, 0b0001, 0b0110, 0b010>;
-def : RWSysReg<"TRCSSCCR7",          0b0, 0b001, 0b0001, 0b0111, 0b010>;
-def : RWSysReg<"TRCSSCSR0",          0b0, 0b001, 0b0001, 0b1000, 0b010>;
-def : RWSysReg<"TRCSSCSR1",          0b0, 0b001, 0b0001, 0b1001, 0b010>;
-def : RWSysReg<"TRCSSCSR2",          0b0, 0b001, 0b0001, 0b1010, 0b010>;
-def : RWSysReg<"TRCSSCSR3",          0b0, 0b001, 0b0001, 0b1011, 0b010>;
-def : RWSysReg<"TRCSSCSR4",          0b0, 0b001, 0b0001, 0b1100, 0b010>;
-def : RWSysReg<"TRCSSCSR5",          0b0, 0b001, 0b0001, 0b1101, 0b010>;
-def : RWSysReg<"TRCSSCSR6",          0b0, 0b001, 0b0001, 0b1110, 0b010>;
-def : RWSysReg<"TRCSSCSR7",          0b0, 0b001, 0b0001, 0b1111, 0b010>;
-def : RWSysReg<"TRCSSPCICR0",        0b0, 0b001, 0b0001, 0b0000, 0b011>;
-def : RWSysReg<"TRCSSPCICR1",        0b0, 0b001, 0b0001, 0b0001, 0b011>;
-def : RWSysReg<"TRCSSPCICR2",        0b0, 0b001, 0b0001, 0b0010, 0b011>;
-def : RWSysReg<"TRCSSPCICR3",        0b0, 0b001, 0b0001, 0b0011, 0b011>;
-def : RWSysReg<"TRCSSPCICR4",        0b0, 0b001, 0b0001, 0b0100, 0b011>;
-def : RWSysReg<"TRCSSPCICR5",        0b0, 0b001, 0b0001, 0b0101, 0b011>;
-def : RWSysReg<"TRCSSPCICR6",        0b0, 0b001, 0b0001, 0b0110, 0b011>;
-def : RWSysReg<"TRCSSPCICR7",        0b0, 0b001, 0b0001, 0b0111, 0b011>;
-def : RWSysReg<"TRCPDCR",            0b0, 0b001, 0b0001, 0b0100, 0b100>;
-def : RWSysReg<"TRCACVR0",           0b0, 0b001, 0b0010, 0b0000, 0b000>;
-def : RWSysReg<"TRCACVR1",           0b0, 0b001, 0b0010, 0b0010, 0b000>;
-def : RWSysReg<"TRCACVR2",           0b0, 0b001, 0b0010, 0b0100, 0b000>;
-def : RWSysReg<"TRCACVR3",           0b0, 0b001, 0b0010, 0b0110, 0b000>;
-def : RWSysReg<"TRCACVR4",           0b0, 0b001, 0b0010, 0b1000, 0b000>;
-def : RWSysReg<"TRCACVR5",           0b0, 0b001, 0b0010, 0b1010, 0b000>;
-def : RWSysReg<"TRCACVR6",           0b0, 0b001, 0b0010, 0b1100, 0b000>;
-def : RWSysReg<"TRCACVR7",           0b0, 0b001, 0b0010, 0b1110, 0b000>;
-def : RWSysReg<"TRCACVR8",           0b0, 0b001, 0b0010, 0b0000, 0b001>;
-def : RWSysReg<"TRCACVR9",           0b0, 0b001, 0b0010, 0b0010, 0b001>;
-def : RWSysReg<"TRCACVR10",          0b0, 0b001, 0b0010, 0b0100, 0b001>;
-def : RWSysReg<"TRCACVR11",          0b0, 0b001, 0b0010, 0b0110, 0b001>;
-def : RWSysReg<"TRCACVR12",          0b0, 0b001, 0b0010, 0b1000, 0b001>;
-def : RWSysReg<"TRCACVR13",          0b0, 0b001, 0b0010, 0b1010, 0b001>;
-def : RWSysReg<"TRCACVR14",          0b0, 0b001, 0b0010, 0b1100, 0b001>;
-def : RWSysReg<"TRCACVR15",          0b0, 0b001, 0b0010, 0b1110, 0b001>;
-def : RWSysReg<"TRCACATR0",          0b0, 0b001, 0b0010, 0b0000, 0b010>;
-def : RWSysReg<"TRCACATR1",          0b0, 0b001, 0b0010, 0b0010, 0b010>;
-def : RWSysReg<"TRCACATR2",          0b0, 0b001, 0b0010, 0b0100, 0b010>;
-def : RWSysReg<"TRCACATR3",          0b0, 0b001, 0b0010, 0b0110, 0b010>;
-def : RWSysReg<"TRCACATR4",          0b0, 0b001, 0b0010, 0b1000, 0b010>;
-def : RWSysReg<"TRCACATR5",          0b0, 0b001, 0b0010, 0b1010, 0b010>;
-def : RWSysReg<"TRCACATR6",          0b0, 0b001, 0b0010, 0b1100, 0b010>;
-def : RWSysReg<"TRCACATR7",          0b0, 0b001, 0b0010, 0b1110, 0b010>;
-def : RWSysReg<"TRCACATR8",          0b0, 0b001, 0b0010, 0b0000, 0b011>;
-def : RWSysReg<"TRCACATR9",          0b0, 0b001, 0b0010, 0b0010, 0b011>;
-def : RWSysReg<"TRCACATR10",         0b0, 0b001, 0b0010, 0b0100, 0b011>;
-def : RWSysReg<"TRCACATR11",         0b0, 0b001, 0b0010, 0b0110, 0b011>;
-def : RWSysReg<"TRCACATR12",         0b0, 0b001, 0b0010, 0b1000, 0b011>;
-def : RWSysReg<"TRCACATR13",         0b0, 0b001, 0b0010, 0b1010, 0b011>;
-def : RWSysReg<"TRCACATR14",         0b0, 0b001, 0b0010, 0b1100, 0b011>;
-def : RWSysReg<"TRCACATR15",         0b0, 0b001, 0b0010, 0b1110, 0b011>;
-def : RWSysReg<"TRCDVCVR0",          0b0, 0b001, 0b0010, 0b0000, 0b100>;
-def : RWSysReg<"TRCDVCVR1",          0b0, 0b001, 0b0010, 0b0100, 0b100>;
-def : RWSysReg<"TRCDVCVR2",          0b0, 0b001, 0b0010, 0b1000, 0b100>;
-def : RWSysReg<"TRCDVCVR3",          0b0, 0b001, 0b0010, 0b1100, 0b100>;
-def : RWSysReg<"TRCDVCVR4",          0b0, 0b001, 0b0010, 0b0000, 0b101>;
-def : RWSysReg<"TRCDVCVR5",          0b0, 0b001, 0b0010, 0b0100, 0b101>;
-def : RWSysReg<"TRCDVCVR6",          0b0, 0b001, 0b0010, 0b1000, 0b101>;
-def : RWSysReg<"TRCDVCVR7",          0b0, 0b001, 0b0010, 0b1100, 0b101>;
-def : RWSysReg<"TRCDVCMR0",          0b0, 0b001, 0b0010, 0b0000, 0b110>;
-def : RWSysReg<"TRCDVCMR1",          0b0, 0b001, 0b0010, 0b0100, 0b110>;
-def : RWSysReg<"TRCDVCMR2",          0b0, 0b001, 0b0010, 0b1000, 0b110>;
-def : RWSysReg<"TRCDVCMR3",          0b0, 0b001, 0b0010, 0b1100, 0b110>;
-def : RWSysReg<"TRCDVCMR4",          0b0, 0b001, 0b0010, 0b0000, 0b111>;
-def : RWSysReg<"TRCDVCMR5",          0b0, 0b001, 0b0010, 0b0100, 0b111>;
-def : RWSysReg<"TRCDVCMR6",          0b0, 0b001, 0b0010, 0b1000, 0b111>;
-def : RWSysReg<"TRCDVCMR7",          0b0, 0b001, 0b0010, 0b1100, 0b111>;
-def : RWSysReg<"TRCCIDCVR0",         0b0, 0b001, 0b0011, 0b0000, 0b000>;
-def : RWSysReg<"TRCCIDCVR1",         0b0, 0b001, 0b0011, 0b0010, 0b000>;
-def : RWSysReg<"TRCCIDCVR2",         0b0, 0b001, 0b0011, 0b0100, 0b000>;
-def : RWSysReg<"TRCCIDCVR3",         0b0, 0b001, 0b0011, 0b0110, 0b000>;
-def : RWSysReg<"TRCCIDCVR4",         0b0, 0b001, 0b0011, 0b1000, 0b000>;
-def : RWSysReg<"TRCCIDCVR5",         0b0, 0b001, 0b0011, 0b1010, 0b000>;
-def : RWSysReg<"TRCCIDCVR6",         0b0, 0b001, 0b0011, 0b1100, 0b000>;
-def : RWSysReg<"TRCCIDCVR7",         0b0, 0b001, 0b0011, 0b1110, 0b000>;
-def : RWSysReg<"TRCVMIDCVR0",        0b0, 0b001, 0b0011, 0b0000, 0b001>;
-def : RWSysReg<"TRCVMIDCVR1",        0b0, 0b001, 0b0011, 0b0010, 0b001>;
-def : RWSysReg<"TRCVMIDCVR2",        0b0, 0b001, 0b0011, 0b0100, 0b001>;
-def : RWSysReg<"TRCVMIDCVR3",        0b0, 0b001, 0b0011, 0b0110, 0b001>;
-def : RWSysReg<"TRCVMIDCVR4",        0b0, 0b001, 0b0011, 0b1000, 0b001>;
-def : RWSysReg<"TRCVMIDCVR5",        0b0, 0b001, 0b0011, 0b1010, 0b001>;
-def : RWSysReg<"TRCVMIDCVR6",        0b0, 0b001, 0b0011, 0b1100, 0b001>;
-def : RWSysReg<"TRCVMIDCVR7",        0b0, 0b001, 0b0011, 0b1110, 0b001>;
-def : RWSysReg<"TRCCIDCCTLR0",       0b0, 0b001, 0b0011, 0b0000, 0b010>;
-def : RWSysReg<"TRCCIDCCTLR1",       0b0, 0b001, 0b0011, 0b0001, 0b010>;
-def : RWSysReg<"TRCVMIDCCTLR0",      0b0, 0b001, 0b0011, 0b0010, 0b010>;
-def : RWSysReg<"TRCVMIDCCTLR1",      0b0, 0b001, 0b0011, 0b0011, 0b010>;
-def : RWSysReg<"TRCITCTRL",          0b0, 0b001, 0b0111, 0b0000, 0b100>;
-def : RWSysReg<"TRCCLAIMSET",        0b0, 0b001, 0b0111, 0b1000, 0b110>;
-def : RWSysReg<"TRCCLAIMCLR",        0b0, 0b001, 0b0111, 0b1001, 0b110>;
+def : RWSysReg<"TRCPRGCTLR",         0b10, 0b001, 0b0000, 0b0001, 0b000>;
+def : RWSysReg<"TRCPROCSELR",        0b10, 0b001, 0b0000, 0b0010, 0b000>;
+def : RWSysReg<"TRCCONFIGR",         0b10, 0b001, 0b0000, 0b0100, 0b000>;
+def : RWSysReg<"TRCAUXCTLR",         0b10, 0b001, 0b0000, 0b0110, 0b000>;
+def : RWSysReg<"TRCEVENTCTL0R",      0b10, 0b001, 0b0000, 0b1000, 0b000>;
+def : RWSysReg<"TRCEVENTCTL1R",      0b10, 0b001, 0b0000, 0b1001, 0b000>;
+def : RWSysReg<"TRCSTALLCTLR",       0b10, 0b001, 0b0000, 0b1011, 0b000>;
+def : RWSysReg<"TRCTSCTLR",          0b10, 0b001, 0b0000, 0b1100, 0b000>;
+def : RWSysReg<"TRCSYNCPR",          0b10, 0b001, 0b0000, 0b1101, 0b000>;
+def : RWSysReg<"TRCCCCTLR",          0b10, 0b001, 0b0000, 0b1110, 0b000>;
+def : RWSysReg<"TRCBBCTLR",          0b10, 0b001, 0b0000, 0b1111, 0b000>;
+def : RWSysReg<"TRCTRACEIDR",        0b10, 0b001, 0b0000, 0b0000, 0b001>;
+def : RWSysReg<"TRCQCTLR",           0b10, 0b001, 0b0000, 0b0001, 0b001>;
+def : RWSysReg<"TRCVICTLR",          0b10, 0b001, 0b0000, 0b0000, 0b010>;
+def : RWSysReg<"TRCVIIECTLR",        0b10, 0b001, 0b0000, 0b0001, 0b010>;
+def : RWSysReg<"TRCVISSCTLR",        0b10, 0b001, 0b0000, 0b0010, 0b010>;
+def : RWSysReg<"TRCVIPCSSCTLR",      0b10, 0b001, 0b0000, 0b0011, 0b010>;
+def : RWSysReg<"TRCVDCTLR",          0b10, 0b001, 0b0000, 0b1000, 0b010>;
+def : RWSysReg<"TRCVDSACCTLR",       0b10, 0b001, 0b0000, 0b1001, 0b010>;
+def : RWSysReg<"TRCVDARCCTLR",       0b10, 0b001, 0b0000, 0b1010, 0b010>;
+def : RWSysReg<"TRCSEQEVR0",         0b10, 0b001, 0b0000, 0b0000, 0b100>;
+def : RWSysReg<"TRCSEQEVR1",         0b10, 0b001, 0b0000, 0b0001, 0b100>;
+def : RWSysReg<"TRCSEQEVR2",         0b10, 0b001, 0b0000, 0b0010, 0b100>;
+def : RWSysReg<"TRCSEQRSTEVR",       0b10, 0b001, 0b0000, 0b0110, 0b100>;
+def : RWSysReg<"TRCSEQSTR",          0b10, 0b001, 0b0000, 0b0111, 0b100>;
+def : RWSysReg<"TRCEXTINSELR",       0b10, 0b001, 0b0000, 0b1000, 0b100>;
+def : RWSysReg<"TRCCNTRLDVR0",       0b10, 0b001, 0b0000, 0b0000, 0b101>;
+def : RWSysReg<"TRCCNTRLDVR1",       0b10, 0b001, 0b0000, 0b0001, 0b101>;
+def : RWSysReg<"TRCCNTRLDVR2",       0b10, 0b001, 0b0000, 0b0010, 0b101>;
+def : RWSysReg<"TRCCNTRLDVR3",       0b10, 0b001, 0b0000, 0b0011, 0b101>;
+def : RWSysReg<"TRCCNTCTLR0",        0b10, 0b001, 0b0000, 0b0100, 0b101>;
+def : RWSysReg<"TRCCNTCTLR1",        0b10, 0b001, 0b0000, 0b0101, 0b101>;
+def : RWSysReg<"TRCCNTCTLR2",        0b10, 0b001, 0b0000, 0b0110, 0b101>;
+def : RWSysReg<"TRCCNTCTLR3",        0b10, 0b001, 0b0000, 0b0111, 0b101>;
+def : RWSysReg<"TRCCNTVR0",          0b10, 0b001, 0b0000, 0b1000, 0b101>;
+def : RWSysReg<"TRCCNTVR1",          0b10, 0b001, 0b0000, 0b1001, 0b101>;
+def : RWSysReg<"TRCCNTVR2",          0b10, 0b001, 0b0000, 0b1010, 0b101>;
+def : RWSysReg<"TRCCNTVR3",          0b10, 0b001, 0b0000, 0b1011, 0b101>;
+def : RWSysReg<"TRCIMSPEC0",         0b10, 0b001, 0b0000, 0b0000, 0b111>;
+def : RWSysReg<"TRCIMSPEC1",         0b10, 0b001, 0b0000, 0b0001, 0b111>;
+def : RWSysReg<"TRCIMSPEC2",         0b10, 0b001, 0b0000, 0b0010, 0b111>;
+def : RWSysReg<"TRCIMSPEC3",         0b10, 0b001, 0b0000, 0b0011, 0b111>;
+def : RWSysReg<"TRCIMSPEC4",         0b10, 0b001, 0b0000, 0b0100, 0b111>;
+def : RWSysReg<"TRCIMSPEC5",         0b10, 0b001, 0b0000, 0b0101, 0b111>;
+def : RWSysReg<"TRCIMSPEC6",         0b10, 0b001, 0b0000, 0b0110, 0b111>;
+def : RWSysReg<"TRCIMSPEC7",         0b10, 0b001, 0b0000, 0b0111, 0b111>;
+def : RWSysReg<"TRCRSCTLR2",         0b10, 0b001, 0b0001, 0b0010, 0b000>;
+def : RWSysReg<"TRCRSCTLR3",         0b10, 0b001, 0b0001, 0b0011, 0b000>;
+def : RWSysReg<"TRCRSCTLR4",         0b10, 0b001, 0b0001, 0b0100, 0b000>;
+def : RWSysReg<"TRCRSCTLR5",         0b10, 0b001, 0b0001, 0b0101, 0b000>;
+def : RWSysReg<"TRCRSCTLR6",         0b10, 0b001, 0b0001, 0b0110, 0b000>;
+def : RWSysReg<"TRCRSCTLR7",         0b10, 0b001, 0b0001, 0b0111, 0b000>;
+def : RWSysReg<"TRCRSCTLR8",         0b10, 0b001, 0b0001, 0b1000, 0b000>;
+def : RWSysReg<"TRCRSCTLR9",         0b10, 0b001, 0b0001, 0b1001, 0b000>;
+def : RWSysReg<"TRCRSCTLR10",        0b10, 0b001, 0b0001, 0b1010, 0b000>;
+def : RWSysReg<"TRCRSCTLR11",        0b10, 0b001, 0b0001, 0b1011, 0b000>;
+def : RWSysReg<"TRCRSCTLR12",        0b10, 0b001, 0b0001, 0b1100, 0b000>;
+def : RWSysReg<"TRCRSCTLR13",        0b10, 0b001, 0b0001, 0b1101, 0b000>;
+def : RWSysReg<"TRCRSCTLR14",        0b10, 0b001, 0b0001, 0b1110, 0b000>;
+def : RWSysReg<"TRCRSCTLR15",        0b10, 0b001, 0b0001, 0b1111, 0b000>;
+def : RWSysReg<"TRCRSCTLR16",        0b10, 0b001, 0b0001, 0b0000, 0b001>;
+def : RWSysReg<"TRCRSCTLR17",        0b10, 0b001, 0b0001, 0b0001, 0b001>;
+def : RWSysReg<"TRCRSCTLR18",        0b10, 0b001, 0b0001, 0b0010, 0b001>;
+def : RWSysReg<"TRCRSCTLR19",        0b10, 0b001, 0b0001, 0b0011, 0b001>;
+def : RWSysReg<"TRCRSCTLR20",        0b10, 0b001, 0b0001, 0b0100, 0b001>;
+def : RWSysReg<"TRCRSCTLR21",        0b10, 0b001, 0b0001, 0b0101, 0b001>;
+def : RWSysReg<"TRCRSCTLR22",        0b10, 0b001, 0b0001, 0b0110, 0b001>;
+def : RWSysReg<"TRCRSCTLR23",        0b10, 0b001, 0b0001, 0b0111, 0b001>;
+def : RWSysReg<"TRCRSCTLR24",        0b10, 0b001, 0b0001, 0b1000, 0b001>;
+def : RWSysReg<"TRCRSCTLR25",        0b10, 0b001, 0b0001, 0b1001, 0b001>;
+def : RWSysReg<"TRCRSCTLR26",        0b10, 0b001, 0b0001, 0b1010, 0b001>;
+def : RWSysReg<"TRCRSCTLR27",        0b10, 0b001, 0b0001, 0b1011, 0b001>;
+def : RWSysReg<"TRCRSCTLR28",        0b10, 0b001, 0b0001, 0b1100, 0b001>;
+def : RWSysReg<"TRCRSCTLR29",        0b10, 0b001, 0b0001, 0b1101, 0b001>;
+def : RWSysReg<"TRCRSCTLR30",        0b10, 0b001, 0b0001, 0b1110, 0b001>;
+def : RWSysReg<"TRCRSCTLR31",        0b10, 0b001, 0b0001, 0b1111, 0b001>;
+def : RWSysReg<"TRCSSCCR0",          0b10, 0b001, 0b0001, 0b0000, 0b010>;
+def : RWSysReg<"TRCSSCCR1",          0b10, 0b001, 0b0001, 0b0001, 0b010>;
+def : RWSysReg<"TRCSSCCR2",          0b10, 0b001, 0b0001, 0b0010, 0b010>;
+def : RWSysReg<"TRCSSCCR3",          0b10, 0b001, 0b0001, 0b0011, 0b010>;
+def : RWSysReg<"TRCSSCCR4",          0b10, 0b001, 0b0001, 0b0100, 0b010>;
+def : RWSysReg<"TRCSSCCR5",          0b10, 0b001, 0b0001, 0b0101, 0b010>;
+def : RWSysReg<"TRCSSCCR6",          0b10, 0b001, 0b0001, 0b0110, 0b010>;
+def : RWSysReg<"TRCSSCCR7",          0b10, 0b001, 0b0001, 0b0111, 0b010>;
+def : RWSysReg<"TRCSSCSR0",          0b10, 0b001, 0b0001, 0b1000, 0b010>;
+def : RWSysReg<"TRCSSCSR1",          0b10, 0b001, 0b0001, 0b1001, 0b010>;
+def : RWSysReg<"TRCSSCSR2",          0b10, 0b001, 0b0001, 0b1010, 0b010>;
+def : RWSysReg<"TRCSSCSR3",          0b10, 0b001, 0b0001, 0b1011, 0b010>;
+def : RWSysReg<"TRCSSCSR4",          0b10, 0b001, 0b0001, 0b1100, 0b010>;
+def : RWSysReg<"TRCSSCSR5",          0b10, 0b001, 0b0001, 0b1101, 0b010>;
+def : RWSysReg<"TRCSSCSR6",          0b10, 0b001, 0b0001, 0b1110, 0b010>;
+def : RWSysReg<"TRCSSCSR7",          0b10, 0b001, 0b0001, 0b1111, 0b010>;
+def : RWSysReg<"TRCSSPCICR0",        0b10, 0b001, 0b0001, 0b0000, 0b011>;
+def : RWSysReg<"TRCSSPCICR1",        0b10, 0b001, 0b0001, 0b0001, 0b011>;
+def : RWSysReg<"TRCSSPCICR2",        0b10, 0b001, 0b0001, 0b0010, 0b011>;
+def : RWSysReg<"TRCSSPCICR3",        0b10, 0b001, 0b0001, 0b0011, 0b011>;
+def : RWSysReg<"TRCSSPCICR4",        0b10, 0b001, 0b0001, 0b0100, 0b011>;
+def : RWSysReg<"TRCSSPCICR5",        0b10, 0b001, 0b0001, 0b0101, 0b011>;
+def : RWSysReg<"TRCSSPCICR6",        0b10, 0b001, 0b0001, 0b0110, 0b011>;
+def : RWSysReg<"TRCSSPCICR7",        0b10, 0b001, 0b0001, 0b0111, 0b011>;
+def : RWSysReg<"TRCPDCR",            0b10, 0b001, 0b0001, 0b0100, 0b100>;
+def : RWSysReg<"TRCACVR0",           0b10, 0b001, 0b0010, 0b0000, 0b000>;
+def : RWSysReg<"TRCACVR1",           0b10, 0b001, 0b0010, 0b0010, 0b000>;
+def : RWSysReg<"TRCACVR2",           0b10, 0b001, 0b0010, 0b0100, 0b000>;
+def : RWSysReg<"TRCACVR3",           0b10, 0b001, 0b0010, 0b0110, 0b000>;
+def : RWSysReg<"TRCACVR4",           0b10, 0b001, 0b0010, 0b1000, 0b000>;
+def : RWSysReg<"TRCACVR5",           0b10, 0b001, 0b0010, 0b1010, 0b000>;
+def : RWSysReg<"TRCACVR6",           0b10, 0b001, 0b0010, 0b1100, 0b000>;
+def : RWSysReg<"TRCACVR7",           0b10, 0b001, 0b0010, 0b1110, 0b000>;
+def : RWSysReg<"TRCACVR8",           0b10, 0b001, 0b0010, 0b0000, 0b001>;
+def : RWSysReg<"TRCACVR9",           0b10, 0b001, 0b0010, 0b0010, 0b001>;
+def : RWSysReg<"TRCACVR10",          0b10, 0b001, 0b0010, 0b0100, 0b001>;
+def : RWSysReg<"TRCACVR11",          0b10, 0b001, 0b0010, 0b0110, 0b001>;
+def : RWSysReg<"TRCACVR12",          0b10, 0b001, 0b0010, 0b1000, 0b001>;
+def : RWSysReg<"TRCACVR13",          0b10, 0b001, 0b0010, 0b1010, 0b001>;
+def : RWSysReg<"TRCACVR14",          0b10, 0b001, 0b0010, 0b1100, 0b001>;
+def : RWSysReg<"TRCACVR15",          0b10, 0b001, 0b0010, 0b1110, 0b001>;
+def : RWSysReg<"TRCACATR0",          0b10, 0b001, 0b0010, 0b0000, 0b010>;
+def : RWSysReg<"TRCACATR1",          0b10, 0b001, 0b0010, 0b0010, 0b010>;
+def : RWSysReg<"TRCACATR2",          0b10, 0b001, 0b0010, 0b0100, 0b010>;
+def : RWSysReg<"TRCACATR3",          0b10, 0b001, 0b0010, 0b0110, 0b010>;
+def : RWSysReg<"TRCACATR4",          0b10, 0b001, 0b0010, 0b1000, 0b010>;
+def : RWSysReg<"TRCACATR5",          0b10, 0b001, 0b0010, 0b1010, 0b010>;
+def : RWSysReg<"TRCACATR6",          0b10, 0b001, 0b0010, 0b1100, 0b010>;
+def : RWSysReg<"TRCACATR7",          0b10, 0b001, 0b0010, 0b1110, 0b010>;
+def : RWSysReg<"TRCACATR8",          0b10, 0b001, 0b0010, 0b0000, 0b011>;
+def : RWSysReg<"TRCACATR9",          0b10, 0b001, 0b0010, 0b0010, 0b011>;
+def : RWSysReg<"TRCACATR10",         0b10, 0b001, 0b0010, 0b0100, 0b011>;
+def : RWSysReg<"TRCACATR11",         0b10, 0b001, 0b0010, 0b0110, 0b011>;
+def : RWSysReg<"TRCACATR12",         0b10, 0b001, 0b0010, 0b1000, 0b011>;
+def : RWSysReg<"TRCACATR13",         0b10, 0b001, 0b0010, 0b1010, 0b011>;
+def : RWSysReg<"TRCACATR14",         0b10, 0b001, 0b0010, 0b1100, 0b011>;
+def : RWSysReg<"TRCACATR15",         0b10, 0b001, 0b0010, 0b1110, 0b011>;
+def : RWSysReg<"TRCDVCVR0",          0b10, 0b001, 0b0010, 0b0000, 0b100>;
+def : RWSysReg<"TRCDVCVR1",          0b10, 0b001, 0b0010, 0b0100, 0b100>;
+def : RWSysReg<"TRCDVCVR2",          0b10, 0b001, 0b0010, 0b1000, 0b100>;
+def : RWSysReg<"TRCDVCVR3",          0b10, 0b001, 0b0010, 0b1100, 0b100>;
+def : RWSysReg<"TRCDVCVR4",          0b10, 0b001, 0b0010, 0b0000, 0b101>;
+def : RWSysReg<"TRCDVCVR5",          0b10, 0b001, 0b0010, 0b0100, 0b101>;
+def : RWSysReg<"TRCDVCVR6",          0b10, 0b001, 0b0010, 0b1000, 0b101>;
+def : RWSysReg<"TRCDVCVR7",          0b10, 0b001, 0b0010, 0b1100, 0b101>;
+def : RWSysReg<"TRCDVCMR0",          0b10, 0b001, 0b0010, 0b0000, 0b110>;
+def : RWSysReg<"TRCDVCMR1",          0b10, 0b001, 0b0010, 0b0100, 0b110>;
+def : RWSysReg<"TRCDVCMR2",          0b10, 0b001, 0b0010, 0b1000, 0b110>;
+def : RWSysReg<"TRCDVCMR3",          0b10, 0b001, 0b0010, 0b1100, 0b110>;
+def : RWSysReg<"TRCDVCMR4",          0b10, 0b001, 0b0010, 0b0000, 0b111>;
+def : RWSysReg<"TRCDVCMR5",          0b10, 0b001, 0b0010, 0b0100, 0b111>;
+def : RWSysReg<"TRCDVCMR6",          0b10, 0b001, 0b0010, 0b1000, 0b111>;
+def : RWSysReg<"TRCDVCMR7",          0b10, 0b001, 0b0010, 0b1100, 0b111>;
+def : RWSysReg<"TRCCIDCVR0",         0b10, 0b001, 0b0011, 0b0000, 0b000>;
+def : RWSysReg<"TRCCIDCVR1",         0b10, 0b001, 0b0011, 0b0010, 0b000>;
+def : RWSysReg<"TRCCIDCVR2",         0b10, 0b001, 0b0011, 0b0100, 0b000>;
+def : RWSysReg<"TRCCIDCVR3",         0b10, 0b001, 0b0011, 0b0110, 0b000>;
+def : RWSysReg<"TRCCIDCVR4",         0b10, 0b001, 0b0011, 0b1000, 0b000>;
+def : RWSysReg<"TRCCIDCVR5",         0b10, 0b001, 0b0011, 0b1010, 0b000>;
+def : RWSysReg<"TRCCIDCVR6",         0b10, 0b001, 0b0011, 0b1100, 0b000>;
+def : RWSysReg<"TRCCIDCVR7",         0b10, 0b001, 0b0011, 0b1110, 0b000>;
+def : RWSysReg<"TRCVMIDCVR0",        0b10, 0b001, 0b0011, 0b0000, 0b001>;
+def : RWSysReg<"TRCVMIDCVR1",        0b10, 0b001, 0b0011, 0b0010, 0b001>;
+def : RWSysReg<"TRCVMIDCVR2",        0b10, 0b001, 0b0011, 0b0100, 0b001>;
+def : RWSysReg<"TRCVMIDCVR3",        0b10, 0b001, 0b0011, 0b0110, 0b001>;
+def : RWSysReg<"TRCVMIDCVR4",        0b10, 0b001, 0b0011, 0b1000, 0b001>;
+def : RWSysReg<"TRCVMIDCVR5",        0b10, 0b001, 0b0011, 0b1010, 0b001>;
+def : RWSysReg<"TRCVMIDCVR6",        0b10, 0b001, 0b0011, 0b1100, 0b001>;
+def : RWSysReg<"TRCVMIDCVR7",        0b10, 0b001, 0b0011, 0b1110, 0b001>;
+def : RWSysReg<"TRCCIDCCTLR0",       0b10, 0b001, 0b0011, 0b0000, 0b010>;
+def : RWSysReg<"TRCCIDCCTLR1",       0b10, 0b001, 0b0011, 0b0001, 0b010>;
+def : RWSysReg<"TRCVMIDCCTLR0",      0b10, 0b001, 0b0011, 0b0010, 0b010>;
+def : RWSysReg<"TRCVMIDCCTLR1",      0b10, 0b001, 0b0011, 0b0011, 0b010>;
+def : RWSysReg<"TRCITCTRL",          0b10, 0b001, 0b0111, 0b0000, 0b100>;
+def : RWSysReg<"TRCCLAIMSET",        0b10, 0b001, 0b0111, 0b1000, 0b110>;
+def : RWSysReg<"TRCCLAIMCLR",        0b10, 0b001, 0b0111, 0b1001, 0b110>;
 
 // GICv3 registers
 //                                 Op0    Op1     CRn     CRm    Op2
-def : RWSysReg<"ICC_BPR1_EL1",       0b1, 0b000, 0b1100, 0b1100, 0b011>;
-def : RWSysReg<"ICC_BPR0_EL1",       0b1, 0b000, 0b1100, 0b1000, 0b011>;
-def : RWSysReg<"ICC_PMR_EL1",        0b1, 0b000, 0b0100, 0b0110, 0b000>;
-def : RWSysReg<"ICC_CTLR_EL1",       0b1, 0b000, 0b1100, 0b1100, 0b100>;
-def : RWSysReg<"ICC_CTLR_EL3",       0b1, 0b110, 0b1100, 0b1100, 0b100>;
-def : RWSysReg<"ICC_SRE_EL1",        0b1, 0b000, 0b1100, 0b1100, 0b101>;
-def : RWSysReg<"ICC_SRE_EL2",        0b1, 0b100, 0b1100, 0b1001, 0b101>;
-def : RWSysReg<"ICC_SRE_EL3",        0b1, 0b110, 0b1100, 0b1100, 0b101>;
-def : RWSysReg<"ICC_IGRPEN0_EL1",    0b1, 0b000, 0b1100, 0b1100, 0b110>;
-def : RWSysReg<"ICC_IGRPEN1_EL1",    0b1, 0b000, 0b1100, 0b1100, 0b111>;
-def : RWSysReg<"ICC_IGRPEN1_EL3",    0b1, 0b110, 0b1100, 0b1100, 0b111>;
-def : RWSysReg<"ICC_AP0R0_EL1",      0b1, 0b000, 0b1100, 0b1000, 0b100>;
-def : RWSysReg<"ICC_AP0R1_EL1",      0b1, 0b000, 0b1100, 0b1000, 0b101>;
-def : RWSysReg<"ICC_AP0R2_EL1",      0b1, 0b000, 0b1100, 0b1000, 0b110>;
-def : RWSysReg<"ICC_AP0R3_EL1",      0b1, 0b000, 0b1100, 0b1000, 0b111>;
-def : RWSysReg<"ICC_AP1R0_EL1",      0b1, 0b000, 0b1100, 0b1001, 0b000>;
-def : RWSysReg<"ICC_AP1R1_EL1",      0b1, 0b000, 0b1100, 0b1001, 0b001>;
-def : RWSysReg<"ICC_AP1R2_EL1",      0b1, 0b000, 0b1100, 0b1001, 0b010>;
-def : RWSysReg<"ICC_AP1R3_EL1",      0b1, 0b000, 0b1100, 0b1001, 0b011>;
-def : RWSysReg<"ICH_AP0R0_EL2",      0b1, 0b100, 0b1100, 0b1000, 0b000>;
-def : RWSysReg<"ICH_AP0R1_EL2",      0b1, 0b100, 0b1100, 0b1000, 0b001>;
-def : RWSysReg<"ICH_AP0R2_EL2",      0b1, 0b100, 0b1100, 0b1000, 0b010>;
-def : RWSysReg<"ICH_AP0R3_EL2",      0b1, 0b100, 0b1100, 0b1000, 0b011>;
-def : RWSysReg<"ICH_AP1R0_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b000>;
-def : RWSysReg<"ICH_AP1R1_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b001>;
-def : RWSysReg<"ICH_AP1R2_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b010>;
-def : RWSysReg<"ICH_AP1R3_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b011>;
-def : RWSysReg<"ICH_HCR_EL2",        0b1, 0b100, 0b1100, 0b1011, 0b000>;
-def : ROSysReg<"ICH_MISR_EL2",       0b1, 0b100, 0b1100, 0b1011, 0b010>;
-def : RWSysReg<"ICH_VMCR_EL2",       0b1, 0b100, 0b1100, 0b1011, 0b111>;
-def : RWSysReg<"ICH_LR0_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b000>;
-def : RWSysReg<"ICH_LR1_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b001>;
-def : RWSysReg<"ICH_LR2_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b010>;
-def : RWSysReg<"ICH_LR3_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b011>;
-def : RWSysReg<"ICH_LR4_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b100>;
-def : RWSysReg<"ICH_LR5_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b101>;
-def : RWSysReg<"ICH_LR6_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b110>;
-def : RWSysReg<"ICH_LR7_EL2",        0b1, 0b100, 0b1100, 0b1100, 0b111>;
-def : RWSysReg<"ICH_LR8_EL2",        0b1, 0b100, 0b1100, 0b1101, 0b000>;
-def : RWSysReg<"ICH_LR9_EL2",        0b1, 0b100, 0b1100, 0b1101, 0b001>;
-def : RWSysReg<"ICH_LR10_EL2",       0b1, 0b100, 0b1100, 0b1101, 0b010>;
-def : RWSysReg<"ICH_LR11_EL2",       0b1, 0b100, 0b1100, 0b1101, 0b011>;
-def : RWSysReg<"ICH_LR12_EL2",       0b1, 0b100, 0b1100, 0b1101, 0b100>;
-def : RWSysReg<"ICH_LR13_EL2",       0b1, 0b100, 0b1100, 0b1101, 0b101>;
-def : RWSysReg<"ICH_LR14_EL2",       0b1, 0b100, 0b1100, 0b1101, 0b110>;
-def : RWSysReg<"ICH_LR15_EL2",       0b1, 0b100, 0b1100, 0b1101, 0b111>;
+def : RWSysReg<"ICC_BPR1_EL1",       0b11, 0b000, 0b1100, 0b1100, 0b011>;
+def : RWSysReg<"ICC_BPR0_EL1",       0b11, 0b000, 0b1100, 0b1000, 0b011>;
+def : RWSysReg<"ICC_PMR_EL1",        0b11, 0b000, 0b0100, 0b0110, 0b000>;
+def : RWSysReg<"ICC_CTLR_EL1",       0b11, 0b000, 0b1100, 0b1100, 0b100>;
+def : RWSysReg<"ICC_CTLR_EL3",       0b11, 0b110, 0b1100, 0b1100, 0b100>;
+def : RWSysReg<"ICC_SRE_EL1",        0b11, 0b000, 0b1100, 0b1100, 0b101>;
+def : RWSysReg<"ICC_SRE_EL2",        0b11, 0b100, 0b1100, 0b1001, 0b101>;
+def : RWSysReg<"ICC_SRE_EL3",        0b11, 0b110, 0b1100, 0b1100, 0b101>;
+def : RWSysReg<"ICC_IGRPEN0_EL1",    0b11, 0b000, 0b1100, 0b1100, 0b110>;
+def : RWSysReg<"ICC_IGRPEN1_EL1",    0b11, 0b000, 0b1100, 0b1100, 0b111>;
+def : RWSysReg<"ICC_IGRPEN1_EL3",    0b11, 0b110, 0b1100, 0b1100, 0b111>;
+def : RWSysReg<"ICC_AP0R0_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b100>;
+def : RWSysReg<"ICC_AP0R1_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b101>;
+def : RWSysReg<"ICC_AP0R2_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b110>;
+def : RWSysReg<"ICC_AP0R3_EL1",      0b11, 0b000, 0b1100, 0b1000, 0b111>;
+def : RWSysReg<"ICC_AP1R0_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b000>;
+def : RWSysReg<"ICC_AP1R1_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b001>;
+def : RWSysReg<"ICC_AP1R2_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b010>;
+def : RWSysReg<"ICC_AP1R3_EL1",      0b11, 0b000, 0b1100, 0b1001, 0b011>;
+def : RWSysReg<"ICH_AP0R0_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b000>;
+def : RWSysReg<"ICH_AP0R1_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b001>;
+def : RWSysReg<"ICH_AP0R2_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b010>;
+def : RWSysReg<"ICH_AP0R3_EL2",      0b11, 0b100, 0b1100, 0b1000, 0b011>;
+def : RWSysReg<"ICH_AP1R0_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b000>;
+def : RWSysReg<"ICH_AP1R1_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b001>;
+def : RWSysReg<"ICH_AP1R2_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b010>;
+def : RWSysReg<"ICH_AP1R3_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b011>;
+def : RWSysReg<"ICH_HCR_EL2",        0b11, 0b100, 0b1100, 0b1011, 0b000>;
+def : ROSysReg<"ICH_MISR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b010>;
+def : RWSysReg<"ICH_VMCR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b111>;
+def : RWSysReg<"ICH_LR0_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b000>;
+def : RWSysReg<"ICH_LR1_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b001>;
+def : RWSysReg<"ICH_LR2_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b010>;
+def : RWSysReg<"ICH_LR3_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b011>;
+def : RWSysReg<"ICH_LR4_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b100>;
+def : RWSysReg<"ICH_LR5_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b101>;
+def : RWSysReg<"ICH_LR6_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b110>;
+def : RWSysReg<"ICH_LR7_EL2",        0b11, 0b100, 0b1100, 0b1100, 0b111>;
+def : RWSysReg<"ICH_LR8_EL2",        0b11, 0b100, 0b1100, 0b1101, 0b000>;
+def : RWSysReg<"ICH_LR9_EL2",        0b11, 0b100, 0b1100, 0b1101, 0b001>;
+def : RWSysReg<"ICH_LR10_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b010>;
+def : RWSysReg<"ICH_LR11_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b011>;
+def : RWSysReg<"ICH_LR12_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b100>;
+def : RWSysReg<"ICH_LR13_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b101>;
+def : RWSysReg<"ICH_LR14_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b110>;
+def : RWSysReg<"ICH_LR15_EL2",       0b11, 0b100, 0b1100, 0b1101, 0b111>;
 
 // v8r system registers
 let Requires = [{ {AArch64::HasV8_0rOps} }] in {
 //Virtualization System Control Register
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"VSCTLR_EL2",       0b1, 0b100, 0b0010, 0b0000, 0b000>;
+def : RWSysReg<"VSCTLR_EL2",       0b11, 0b100, 0b0010, 0b0000, 0b000>;
 
 //MPU Type Register
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"MPUIR_EL1",        0b1, 0b000, 0b0000, 0b0000, 0b100>;
-def : RWSysReg<"MPUIR_EL2",        0b1, 0b100, 0b0000, 0b0000, 0b100>;
+def : RWSysReg<"MPUIR_EL1",        0b11, 0b000, 0b0000, 0b0000, 0b100>;
+def : RWSysReg<"MPUIR_EL2",        0b11, 0b100, 0b0000, 0b0000, 0b100>;
 
 //Protection Region Enable Register
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PRENR_EL1",        0b1, 0b000, 0b0110, 0b0001, 0b001>;
-def : RWSysReg<"PRENR_EL2",        0b1, 0b100, 0b0110, 0b0001, 0b001>;
+def : RWSysReg<"PRENR_EL1",        0b11, 0b000, 0b0110, 0b0001, 0b001>;
+def : RWSysReg<"PRENR_EL2",        0b11, 0b100, 0b0110, 0b0001, 0b001>;
 
 //Protection Region Selection Register
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PRSELR_EL1",       0b1, 0b000, 0b0110, 0b0010, 0b001>;
-def : RWSysReg<"PRSELR_EL2",       0b1, 0b100, 0b0110, 0b0010, 0b001>;
+def : RWSysReg<"PRSELR_EL1",       0b11, 0b000, 0b0110, 0b0010, 0b001>;
+def : RWSysReg<"PRSELR_EL2",       0b11, 0b100, 0b0110, 0b0010, 0b001>;
 
 //Protection Region Base Address Register
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PRBAR_EL1",        0b1, 0b000, 0b0110, 0b1000, 0b000>;
-def : RWSysReg<"PRBAR_EL2",        0b1, 0b100, 0b0110, 0b1000, 0b000>;
+def : RWSysReg<"PRBAR_EL1",        0b11, 0b000, 0b0110, 0b1000, 0b000>;
+def : RWSysReg<"PRBAR_EL2",        0b11, 0b100, 0b0110, 0b1000, 0b000>;
 
 //Protection Region Limit Address Register
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PRLAR_EL1",        0b1, 0b000, 0b0110, 0b1000, 0b001>;
-def : RWSysReg<"PRLAR_EL2",        0b1, 0b100, 0b0110, 0b1000, 0b001>;
+def : RWSysReg<"PRLAR_EL1",        0b11, 0b000, 0b0110, 0b1000, 0b001>;
+def : RWSysReg<"PRLAR_EL2",        0b11, 0b100, 0b0110, 0b1000, 0b001>;
 
 foreach n = 1-15 in {
 foreach x = 1-2 in {
 //Direct access to Protection Region Base Address Register for n th MPU region
   def : RWSysReg<!strconcat("PRBAR"#n, "_EL"#x),
-    0b1, 0b000, 0b0110, 0b1000, 0b000>{
+    0b11, 0b000, 0b0110, 0b1000, 0b000>{
     let Encoding{5-2} = n;
     let Encoding{13} = !add(x,-1);
   }
 
   def : RWSysReg<!strconcat("PRLAR"#n, "_EL"#x),
-    0b1, 0b000, 0b0110, 0b1000, 0b001>{
+    0b11, 0b000, 0b0110, 0b1000, 0b001>{
     let Encoding{5-2} = n;
     let Encoding{13} = !add(x,-1);
   }
@@ -1820,196 +1820,196 @@ foreach x = 1-2 in {
 
 // v8.1a "Privileged Access Never" extension-specific system registers
 let Requires = [{ {AArch64::FeaturePAN} }] in
-def : RWSysReg<"PAN", 0b1, 0b000, 0b0100, 0b0010, 0b011>;
+def : RWSysReg<"PAN", 0b11, 0b000, 0b0100, 0b0010, 0b011>;
 
 // v8.1a "Limited Ordering Regions" extension-specific system registers
 //                         Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeatureLOR} }] in {
-def : RWSysReg<"LORSA_EL1",  0b1, 0b000, 0b1010, 0b0100, 0b000>;
-def : RWSysReg<"LOREA_EL1",  0b1, 0b000, 0b1010, 0b0100, 0b001>;
-def : RWSysReg<"LORN_EL1",   0b1, 0b000, 0b1010, 0b0100, 0b010>;
-def : RWSysReg<"LORC_EL1",   0b1, 0b000, 0b1010, 0b0100, 0b011>;
+def : RWSysReg<"LORSA_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b000>;
+def : RWSysReg<"LOREA_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b001>;
+def : RWSysReg<"LORN_EL1",   0b11, 0b000, 0b1010, 0b0100, 0b010>;
+def : RWSysReg<"LORC_EL1",   0b11, 0b000, 0b1010, 0b0100, 0b011>;
 }
 
 // v8.1a "Virtualization Host extensions" system registers
 //                              Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeatureVH} }] in {
-def : RWSysReg<"TTBR1_EL2",       0b1, 0b100, 0b0010, 0b0000, 0b001>;
-def : RWSysReg<"CNTHV_TVAL_EL2",  0b1, 0b100, 0b1110, 0b0011, 0b000>;
-def : RWSysReg<"CNTHV_CVAL_EL2",  0b1, 0b100, 0b1110, 0b0011, 0b010>;
-def : RWSysReg<"CNTHV_CTL_EL2",   0b1, 0b100, 0b1110, 0b0011, 0b001>;
-def : RWSysReg<"SCTLR_EL12",      0b1, 0b101, 0b0001, 0b0000, 0b000>;
-def : RWSysReg<"CPACR_EL12",      0b1, 0b101, 0b0001, 0b0000, 0b010>;
-def : RWSysReg<"TTBR0_EL12",      0b1, 0b101, 0b0010, 0b0000, 0b000>;
-def : RWSysReg<"TTBR1_EL12",      0b1, 0b101, 0b0010, 0b0000, 0b001>;
-def : RWSysReg<"TCR_EL12",        0b1, 0b101, 0b0010, 0b0000, 0b010>;
-def : RWSysReg<"AFSR0_EL12",      0b1, 0b101, 0b0101, 0b0001, 0b000>;
-def : RWSysReg<"AFSR1_EL12",      0b1, 0b101, 0b0101, 0b0001, 0b001>;
-def : RWSysReg<"ESR_EL12",        0b1, 0b101, 0b0101, 0b0010, 0b000>;
-def : RWSysReg<"FAR_EL12",        0b1, 0b101, 0b0110, 0b0000, 0b000>;
-def : RWSysReg<"MAIR_EL12",       0b1, 0b101, 0b1010, 0b0010, 0b000>;
-def : RWSysReg<"AMAIR_EL12",      0b1, 0b101, 0b1010, 0b0011, 0b000>;
-def : RWSysReg<"VBAR_EL12",       0b1, 0b101, 0b1100, 0b0000, 0b000>;
-def : RWSysReg<"CONTEXTIDR_EL12", 0b1, 0b101, 0b1101, 0b0000, 0b001>;
-def : RWSysReg<"CNTKCTL_EL12",    0b1, 0b101, 0b1110, 0b0001, 0b000>;
-def : RWSysReg<"CNTP_TVAL_EL02",  0b1, 0b101, 0b1110, 0b0010, 0b000>;
-def : RWSysReg<"CNTP_CTL_EL02",   0b1, 0b101, 0b1110, 0b0010, 0b001>;
-def : RWSysReg<"CNTP_CVAL_EL02",  0b1, 0b101, 0b1110, 0b0010, 0b010>;
-def : RWSysReg<"CNTV_TVAL_EL02",  0b1, 0b101, 0b1110, 0b0011, 0b000>;
-def : RWSysReg<"CNTV_CTL_EL02",   0b1, 0b101, 0b1110, 0b0011, 0b001>;
-def : RWSysReg<"CNTV_CVAL_EL02",  0b1, 0b101, 0b1110, 0b0011, 0b010>;
-def : RWSysReg<"SPSR_EL12",       0b1, 0b101, 0b0100, 0b0000, 0b000>;
-def : RWSysReg<"ELR_EL12",        0b1, 0b101, 0b0100, 0b0000, 0b001>;
+def : RWSysReg<"TTBR1_EL2",       0b11, 0b100, 0b0010, 0b0000, 0b001>;
+def : RWSysReg<"CNTHV_TVAL_EL2",  0b11, 0b100, 0b1110, 0b0011, 0b000>;
+def : RWSysReg<"CNTHV_CVAL_EL2",  0b11, 0b100, 0b1110, 0b0011, 0b010>;
+def : RWSysReg<"CNTHV_CTL_EL2",   0b11, 0b100, 0b1110, 0b0011, 0b001>;
+def : RWSysReg<"SCTLR_EL12",      0b11, 0b101, 0b0001, 0b0000, 0b000>;
+def : RWSysReg<"CPACR_EL12",      0b11, 0b101, 0b0001, 0b0000, 0b010>;
+def : RWSysReg<"TTBR0_EL12",      0b11, 0b101, 0b0010, 0b0000, 0b000>;
+def : RWSysReg<"TTBR1_EL12",      0b11, 0b101, 0b0010, 0b0000, 0b001>;
+def : RWSysReg<"TCR_EL12",        0b11, 0b101, 0b0010, 0b0000, 0b010>;
+def : RWSysReg<"AFSR0_EL12",      0b11, 0b101, 0b0101, 0b0001, 0b000>;
+def : RWSysReg<"AFSR1_EL12",      0b11, 0b101, 0b0101, 0b0001, 0b001>;
+def : RWSysReg<"ESR_EL12",        0b11, 0b101, 0b0101, 0b0010, 0b000>;
+def : RWSysReg<"FAR_EL12",        0b11, 0b101, 0b0110, 0b0000, 0b000>;
+def : RWSysReg<"MAIR_EL12",       0b11, 0b101, 0b1010, 0b0010, 0b000>;
+def : RWSysReg<"AMAIR_EL12",      0b11, 0b101, 0b1010, 0b0011, 0b000>;
+def : RWSysReg<"VBAR_EL12",       0b11, 0b101, 0b1100, 0b0000, 0b000>;
+def : RWSysReg<"CONTEXTIDR_EL12", 0b11, 0b101, 0b1101, 0b0000, 0b001>;
+def : RWSysReg<"CNTKCTL_EL12",    0b11, 0b101, 0b1110, 0b0001, 0b000>;
+def : RWSysReg<"CNTP_TVAL_EL02",  0b11, 0b101, 0b1110, 0b0010, 0b000>;
+def : RWSysReg<"CNTP_CTL_EL02",   0b11, 0b101, 0b1110, 0b0010, 0b001>;
+def : RWSysReg<"CNTP_CVAL_EL02",  0b11, 0b101, 0b1110, 0b0010, 0b010>;
+def : RWSysReg<"CNTV_TVAL_EL02",  0b11, 0b101, 0b1110, 0b0011, 0b000>;
+def : RWSysReg<"CNTV_CTL_EL02",   0b11, 0b101, 0b1110, 0b0011, 0b001>;
+def : RWSysReg<"CNTV_CVAL_EL02",  0b11, 0b101, 0b1110, 0b0011, 0b010>;
+def : RWSysReg<"SPSR_EL12",       0b11, 0b101, 0b0100, 0b0000, 0b000>;
+def : RWSysReg<"ELR_EL12",        0b11, 0b101, 0b0100, 0b0000, 0b001>;
 let Requires = [{ {AArch64::FeatureCONTEXTIDREL2} }] in {
-  def : RWSysReg<"CONTEXTIDR_EL2",  0b1, 0b100, 0b1101, 0b0000, 0b001>;
+  def : RWSysReg<"CONTEXTIDR_EL2",  0b11, 0b100, 0b1101, 0b0000, 0b001>;
 }
 }
 // v8.2a registers
 //                  Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeaturePsUAO} }] in
-def : RWSysReg<"UAO", 0b1, 0b000, 0b0100, 0b0010, 0b100>;
+def : RWSysReg<"UAO", 0b11, 0b000, 0b0100, 0b0010, 0b100>;
 
 // v8.2a "Statistical Profiling extension" registers
 //                            Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeatureSPE} }] in {
-def : RWSysReg<"PMBLIMITR_EL1", 0b1, 0b000, 0b1001, 0b1010, 0b000>;
-def : RWSysReg<"PMBPTR_EL1",    0b1, 0b000, 0b1001, 0b1010, 0b001>;
-def : RWSysReg<"PMBSR_EL1",     0b1, 0b000, 0b1001, 0b1010, 0b011>;
-def : ROSysReg<"PMBIDR_EL1",    0b1, 0b000, 0b1001, 0b1010, 0b111>;
-def : RWSysReg<"PMSCR_EL2",     0b1, 0b100, 0b1001, 0b1001, 0b000>;
-def : RWSysReg<"PMSCR_EL12",    0b1, 0b101, 0b1001, 0b1001, 0b000>;
-def : RWSysReg<"PMSCR_EL1",     0b1, 0b000, 0b1001, 0b1001, 0b000>;
-def : RWSysReg<"PMSICR_EL1",    0b1, 0b000, 0b1001, 0b1001, 0b010>;
-def : RWSysReg<"PMSIRR_EL1",    0b1, 0b000, 0b1001, 0b1001, 0b011>;
-def : RWSysReg<"PMSFCR_EL1",    0b1, 0b000, 0b1001, 0b1001, 0b100>;
-def : RWSysReg<"PMSEVFR_EL1",   0b1, 0b000, 0b1001, 0b1001, 0b101>;
-def : RWSysReg<"PMSLATFR_EL1",  0b1, 0b000, 0b1001, 0b1001, 0b110>;
-def : ROSysReg<"PMSIDR_EL1",    0b1, 0b000, 0b1001, 0b1001, 0b111>;
+def : RWSysReg<"PMBLIMITR_EL1", 0b11, 0b000, 0b1001, 0b1010, 0b000>;
+def : RWSysReg<"PMBPTR_EL1",    0b11, 0b000, 0b1001, 0b1010, 0b001>;
+def : RWSysReg<"PMBSR_EL1",     0b11, 0b000, 0b1001, 0b1010, 0b011>;
+def : ROSysReg<"PMBIDR_EL1",    0b11, 0b000, 0b1001, 0b1010, 0b111>;
+def : RWSysReg<"PMSCR_EL2",     0b11, 0b100, 0b1001, 0b1001, 0b000>;
+def : RWSysReg<"PMSCR_EL12",    0b11, 0b101, 0b1001, 0b1001, 0b000>;
+def : RWSysReg<"PMSCR_EL1",     0b11, 0b000, 0b1001, 0b1001, 0b000>;
+def : RWSysReg<"PMSICR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b010>;
+def : RWSysReg<"PMSIRR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b011>;
+def : RWSysReg<"PMSFCR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b100>;
+def : RWSysReg<"PMSEVFR_EL1",   0b11, 0b000, 0b1001, 0b1001, 0b101>;
+def : RWSysReg<"PMSLATFR_EL1",  0b11, 0b000, 0b1001, 0b1001, 0b110>;
+def : ROSysReg<"PMSIDR_EL1",    0b11, 0b000, 0b1001, 0b1001, 0b111>;
 }
 
 // v8.2a "RAS extension" registers
 //                         Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeatureRAS} }] in {
-def : RWSysReg<"ERRSELR_EL1",   0b1, 0b000, 0b0101, 0b0011, 0b001>;
-def : RWSysReg<"ERXCTLR_EL1",   0b1, 0b000, 0b0101, 0b0100, 0b001>;
-def : RWSysReg<"ERXSTATUS_EL1", 0b1, 0b000, 0b0101, 0b0100, 0b010>;
-def : RWSysReg<"ERXADDR_EL1",   0b1, 0b000, 0b0101, 0b0100, 0b011>;
-def : RWSysReg<"ERXMISC0_EL1",  0b1, 0b000, 0b0101, 0b0101, 0b000>;
-def : RWSysReg<"ERXMISC1_EL1",  0b1, 0b000, 0b0101, 0b0101, 0b001>;
-def : RWSysReg<"DISR_EL1",      0b1, 0b000, 0b1100, 0b0001, 0b001>;
-def : RWSysReg<"VDISR_EL2",     0b1, 0b100, 0b1100, 0b0001, 0b001>;
-def : RWSysReg<"VSESR_EL2",     0b1, 0b100, 0b0101, 0b0010, 0b011>;
+def : RWSysReg<"ERRSELR_EL1",   0b11, 0b000, 0b0101, 0b0011, 0b001>;
+def : RWSysReg<"ERXCTLR_EL1",   0b11, 0b000, 0b0101, 0b0100, 0b001>;
+def : RWSysReg<"ERXSTATUS_EL1", 0b11, 0b000, 0b0101, 0b0100, 0b010>;
+def : RWSysReg<"ERXADDR_EL1",   0b11, 0b000, 0b0101, 0b0100, 0b011>;
+def : RWSysReg<"ERXMISC0_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b000>;
+def : RWSysReg<"ERXMISC1_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b001>;
+def : RWSysReg<"DISR_EL1",      0b11, 0b000, 0b1100, 0b0001, 0b001>;
+def : RWSysReg<"VDISR_EL2",     0b11, 0b100, 0b1100, 0b0001, 0b001>;
+def : RWSysReg<"VSESR_EL2",     0b11, 0b100, 0b0101, 0b0010, 0b011>;
 }
 
 // v8.3a "Pointer authentication extension" registers
 //                              Op0    Op1     CRn     CRm    Op2
 let Requires = [{ {AArch64::FeaturePAuth} }] in {
-def : RWSysReg<"APIAKeyLo_EL1", 0b1, 0b000, 0b0010, 0b0001, 0b000>;
-def : RWSysReg<"APIAKeyHi_EL1", 0b1, 0b000, 0b0010, 0b0001, 0b001>;
-def : RWSysReg<"APIBKeyLo_EL1", 0b1, 0b000, 0b0010, 0b0001, 0b010>;
-def : RWSysReg<"APIBKeyHi_EL1", 0b1, 0b000, 0b0010, 0b0001, 0b011>;
-def : RWSysReg<"APDAKeyLo_EL1", 0b1, 0b000, 0b0010, 0b0010, 0b000>;
-def : RWSysReg<"APDAKeyHi_EL1", 0b1, 0b000, 0b0010, 0b0010, 0b001>;
-def : RWSysReg<"APDBKeyLo_EL1", 0b1, 0b000, 0b0010, 0b0010, 0b010>;
-def : RWSysReg<"APDBKeyHi_EL1", 0b1, 0b000, 0b0010, 0b0010, 0b011>;
-def : RWSysReg<"APGAKeyLo_EL1", 0b1, 0b000, 0b0010, 0b0011, 0b000>;
-def : RWSysReg<"APGAKeyHi_EL1", 0b1, 0b000, 0b0010, 0b0011, 0b001>;
+def : RWSysReg<"APIAKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b000>;
+def : RWSysReg<"APIAKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b001>;
+def : RWSysReg<"APIBKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b010>;
+def : RWSysReg<"APIBKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0001, 0b011>;
+def : RWSysReg<"APDAKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b000>;
+def : RWSysReg<"APDAKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b001>;
+def : RWSysReg<"APDBKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b010>;
+def : RWSysReg<"APDBKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0010, 0b011>;
+def : RWSysReg<"APGAKeyLo_EL1", 0b11, 0b000, 0b0010, 0b0011, 0b000>;
+def : RWSysReg<"APGAKeyHi_EL1", 0b11, 0b000, 0b0010, 0b0011, 0b001>;
 }
 
 // v8.4 "Secure Exception Level 2 extension"
 let Requires = [{ {AArch64::FeatureSEL2} }] in {
 // v8.4a "Virtualization secure second stage translation" registers
 //                           Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"VSTCR_EL2" , 0b1, 0b100, 0b0010, 0b0110, 0b010>;
-def : RWSysReg<"VSTTBR_EL2", 0b1, 0b100, 0b0010, 0b0110, 0b000> {
+def : RWSysReg<"VSTCR_EL2" , 0b11, 0b100, 0b0010, 0b0110, 0b010>;
+def : RWSysReg<"VSTTBR_EL2", 0b11, 0b100, 0b0010, 0b0110, 0b000> {
   let Requires = [{ {AArch64::HasV8_0aOps} }];
 }
 
 // v8.4a "Virtualization timer" registers
 //                                Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"CNTHVS_TVAL_EL2", 0b1, 0b100, 0b1110, 0b0100, 0b000>;
-def : RWSysReg<"CNTHVS_CVAL_EL2", 0b1, 0b100, 0b1110, 0b0100, 0b010>;
-def : RWSysReg<"CNTHVS_CTL_EL2",  0b1, 0b100, 0b1110, 0b0100, 0b001>;
-def : RWSysReg<"CNTHPS_TVAL_EL2", 0b1, 0b100, 0b1110, 0b0101, 0b000>;
-def : RWSysReg<"CNTHPS_CVAL_EL2", 0b1, 0b100, 0b1110, 0b0101, 0b010>;
-def : RWSysReg<"CNTHPS_CTL_EL2",  0b1, 0b100, 0b1110, 0b0101, 0b001>;
+def : RWSysReg<"CNTHVS_TVAL_EL2", 0b11, 0b100, 0b1110, 0b0100, 0b000>;
+def : RWSysReg<"CNTHVS_CVAL_EL2", 0b11, 0b100, 0b1110, 0b0100, 0b010>;
+def : RWSysReg<"CNTHVS_CTL_EL2",  0b11, 0b100, 0b1110, 0b0100, 0b001>;
+def : RWSysReg<"CNTHPS_TVAL_EL2", 0b11, 0b100, 0b1110, 0b0101, 0b000>;
+def : RWSysReg<"CNTHPS_CVAL_EL2", 0b11, 0b100, 0b1110, 0b0101, 0b010>;
+def : RWSysReg<"CNTHPS_CTL_EL2",  0b11, 0b100, 0b1110, 0b0101, 0b001>;
 
 // v8.4a "Virtualization debug state" registers
 //                           Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"SDER32_EL2", 0b1, 0b100, 0b0001, 0b0011, 0b001>;
+def : RWSysReg<"SDER32_EL2", 0b11, 0b100, 0b0001, 0b0011, 0b001>;
 } // FeatureSEL2
 
 // v8.4a RAS registers
 //                              Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"ERXPFGCTL_EL1", 0b1, 0b000, 0b0101, 0b0100, 0b101>;
-def : RWSysReg<"ERXPFGCDN_EL1", 0b1, 0b000, 0b0101, 0b0100, 0b110>;
-def : RWSysReg<"ERXMISC2_EL1",  0b1, 0b000, 0b0101, 0b0101, 0b010>;
-def : RWSysReg<"ERXMISC3_EL1",  0b1, 0b000, 0b0101, 0b0101, 0b011>;
-def : ROSysReg<"ERXPFGF_EL1",   0b1, 0b000, 0b0101, 0b0100, 0b100>;
+def : RWSysReg<"ERXPFGCTL_EL1", 0b11, 0b000, 0b0101, 0b0100, 0b101>;
+def : RWSysReg<"ERXPFGCDN_EL1", 0b11, 0b000, 0b0101, 0b0100, 0b110>;
+def : RWSysReg<"ERXMISC2_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b010>;
+def : RWSysReg<"ERXMISC3_EL1",  0b11, 0b000, 0b0101, 0b0101, 0b011>;
+def : ROSysReg<"ERXPFGF_EL1",   0b11, 0b000, 0b0101, 0b0100, 0b100>;
 
 // v8.4a MPAM registers
 //                             Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"MPAMVPMV_EL2", 0b1, 0b100, 0b1010, 0b0100, 0b001>;
-def : RWSysReg<"MPAMVPM0_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b000>;
-def : RWSysReg<"MPAMVPM1_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b001>;
-def : RWSysReg<"MPAMVPM2_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b010>;
-def : RWSysReg<"MPAMVPM3_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b011>;
-def : RWSysReg<"MPAMVPM4_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b100>;
-def : RWSysReg<"MPAMVPM5_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b101>;
-def : RWSysReg<"MPAMVPM6_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b110>;
-def : RWSysReg<"MPAMVPM7_EL2", 0b1, 0b100, 0b1010, 0b0110, 0b111>;
+def : RWSysReg<"MPAMVPMV_EL2", 0b11, 0b100, 0b1010, 0b0100, 0b001>;
+def : RWSysReg<"MPAMVPM0_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b000>;
+def : RWSysReg<"MPAMVPM1_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b001>;
+def : RWSysReg<"MPAMVPM2_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b010>;
+def : RWSysReg<"MPAMVPM3_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b011>;
+def : RWSysReg<"MPAMVPM4_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b100>;
+def : RWSysReg<"MPAMVPM5_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b101>;
+def : RWSysReg<"MPAMVPM6_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b110>;
+def : RWSysReg<"MPAMVPM7_EL2", 0b11, 0b100, 0b1010, 0b0110, 0b111>;
 
 // v8.4a Activity Monitor registers
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureAM} }] in {
-def : RWSysReg<"AMCR_EL0",         0b1, 0b011, 0b1101, 0b0010, 0b000>;
-def : ROSysReg<"AMCFGR_EL0",       0b1, 0b011, 0b1101, 0b0010, 0b001>;
-def : ROSysReg<"AMCGCR_EL0",       0b1, 0b011, 0b1101, 0b0010, 0b010>;
-def : RWSysReg<"AMUSERENR_EL0",    0b1, 0b011, 0b1101, 0b0010, 0b011>;
-def : RWSysReg<"AMCNTENCLR0_EL0",  0b1, 0b011, 0b1101, 0b0010, 0b100>;
-def : RWSysReg<"AMCNTENSET0_EL0",  0b1, 0b011, 0b1101, 0b0010, 0b101>;
-def : RWSysReg<"AMEVCNTR00_EL0",   0b1, 0b011, 0b1101, 0b0100, 0b000>;
-def : RWSysReg<"AMEVCNTR01_EL0",   0b1, 0b011, 0b1101, 0b0100, 0b001>;
-def : RWSysReg<"AMEVCNTR02_EL0",   0b1, 0b011, 0b1101, 0b0100, 0b010>;
-def : RWSysReg<"AMEVCNTR03_EL0",   0b1, 0b011, 0b1101, 0b0100, 0b011>;
-def : ROSysReg<"AMEVTYPER00_EL0",  0b1, 0b011, 0b1101, 0b0110, 0b000>;
-def : ROSysReg<"AMEVTYPER01_EL0",  0b1, 0b011, 0b1101, 0b0110, 0b001>;
-def : ROSysReg<"AMEVTYPER02_EL0",  0b1, 0b011, 0b1101, 0b0110, 0b010>;
-def : ROSysReg<"AMEVTYPER03_EL0",  0b1, 0b011, 0b1101, 0b0110, 0b011>;
-def : RWSysReg<"AMCNTENCLR1_EL0",  0b1, 0b011, 0b1101, 0b0011, 0b000>;
-def : RWSysReg<"AMCNTENSET1_EL0",  0b1, 0b011, 0b1101, 0b0011, 0b001>;
-def : RWSysReg<"AMEVCNTR10_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b000>;
-def : RWSysReg<"AMEVCNTR11_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b001>;
-def : RWSysReg<"AMEVCNTR12_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b010>;
-def : RWSysReg<"AMEVCNTR13_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b011>;
-def : RWSysReg<"AMEVCNTR14_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b100>;
-def : RWSysReg<"AMEVCNTR15_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b101>;
-def : RWSysReg<"AMEVCNTR16_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b110>;
-def : RWSysReg<"AMEVCNTR17_EL0",   0b1, 0b011, 0b1101, 0b1100, 0b111>;
-def : RWSysReg<"AMEVCNTR18_EL0",   0b1, 0b011, 0b1101, 0b1101, 0b000>;
-def : RWSysReg<"AMEVCNTR19_EL0",   0b1, 0b011, 0b1101, 0b1101, 0b001>;
-def : RWSysReg<"AMEVCNTR110_EL0",  0b1, 0b011, 0b1101, 0b1101, 0b010>;
-def : RWSysReg<"AMEVCNTR111_EL0",  0b1, 0b011, 0b1101, 0b1101, 0b011>;
-def : RWSysReg<"AMEVCNTR112_EL0",  0b1, 0b011, 0b1101, 0b1101, 0b100>;
-def : RWSysReg<"AMEVCNTR113_EL0",  0b1, 0b011, 0b1101, 0b1101, 0b101>;
-def : RWSysReg<"AMEVCNTR114_EL0",  0b1, 0b011, 0b1101, 0b1101, 0b110>;
-def : RWSysReg<"AMEVCNTR115_EL0",  0b1, 0b011, 0b1101, 0b1101, 0b111>;
-def : RWSysReg<"AMEVTYPER10_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b000>;
-def : RWSysReg<"AMEVTYPER11_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b001>;
-def : RWSysReg<"AMEVTYPER12_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b010>;
-def : RWSysReg<"AMEVTYPER13_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b011>;
-def : RWSysReg<"AMEVTYPER14_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b100>;
-def : RWSysReg<"AMEVTYPER15_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b101>;
-def : RWSysReg<"AMEVTYPER16_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b110>;
-def : RWSysReg<"AMEVTYPER17_EL0",  0b1, 0b011, 0b1101, 0b1110, 0b111>;
-def : RWSysReg<"AMEVTYPER18_EL0",  0b1, 0b011, 0b1101, 0b1111, 0b000>;
-def : RWSysReg<"AMEVTYPER19_EL0",  0b1, 0b011, 0b1101, 0b1111, 0b001>;
-def : RWSysReg<"AMEVTYPER110_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b010>;
-def : RWSysReg<"AMEVTYPER111_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b011>;
-def : RWSysReg<"AMEVTYPER112_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b100>;
-def : RWSysReg<"AMEVTYPER113_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b101>;
-def : RWSysReg<"AMEVTYPER114_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b110>;
-def : RWSysReg<"AMEVTYPER115_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b111>;
+def : RWSysReg<"AMCR_EL0",         0b11, 0b011, 0b1101, 0b0010, 0b000>;
+def : ROSysReg<"AMCFGR_EL0",       0b11, 0b011, 0b1101, 0b0010, 0b001>;
+def : ROSysReg<"AMCGCR_EL0",       0b11, 0b011, 0b1101, 0b0010, 0b010>;
+def : RWSysReg<"AMUSERENR_EL0",    0b11, 0b011, 0b1101, 0b0010, 0b011>;
+def : RWSysReg<"AMCNTENCLR0_EL0",  0b11, 0b011, 0b1101, 0b0010, 0b100>;
+def : RWSysReg<"AMCNTENSET0_EL0",  0b11, 0b011, 0b1101, 0b0010, 0b101>;
+def : RWSysReg<"AMEVCNTR00_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b000>;
+def : RWSysReg<"AMEVCNTR01_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b001>;
+def : RWSysReg<"AMEVCNTR02_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b010>;
+def : RWSysReg<"AMEVCNTR03_EL0",   0b11, 0b011, 0b1101, 0b0100, 0b011>;
+def : ROSysReg<"AMEVTYPER00_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b000>;
+def : ROSysReg<"AMEVTYPER01_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b001>;
+def : ROSysReg<"AMEVTYPER02_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b010>;
+def : ROSysReg<"AMEVTYPER03_EL0",  0b11, 0b011, 0b1101, 0b0110, 0b011>;
+def : RWSysReg<"AMCNTENCLR1_EL0",  0b11, 0b011, 0b1101, 0b0011, 0b000>;
+def : RWSysReg<"AMCNTENSET1_EL0",  0b11, 0b011, 0b1101, 0b0011, 0b001>;
+def : RWSysReg<"AMEVCNTR10_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b000>;
+def : RWSysReg<"AMEVCNTR11_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b001>;
+def : RWSysReg<"AMEVCNTR12_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b010>;
+def : RWSysReg<"AMEVCNTR13_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b011>;
+def : RWSysReg<"AMEVCNTR14_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b100>;
+def : RWSysReg<"AMEVCNTR15_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b101>;
+def : RWSysReg<"AMEVCNTR16_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b110>;
+def : RWSysReg<"AMEVCNTR17_EL0",   0b11, 0b011, 0b1101, 0b1100, 0b111>;
+def : RWSysReg<"AMEVCNTR18_EL0",   0b11, 0b011, 0b1101, 0b1101, 0b000>;
+def : RWSysReg<"AMEVCNTR19_EL0",   0b11, 0b011, 0b1101, 0b1101, 0b001>;
+def : RWSysReg<"AMEVCNTR110_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b010>;
+def : RWSysReg<"AMEVCNTR111_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b011>;
+def : RWSysReg<"AMEVCNTR112_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b100>;
+def : RWSysReg<"AMEVCNTR113_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b101>;
+def : RWSysReg<"AMEVCNTR114_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b110>;
+def : RWSysReg<"AMEVCNTR115_EL0",  0b11, 0b011, 0b1101, 0b1101, 0b111>;
+def : RWSysReg<"AMEVTYPER10_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b000>;
+def : RWSysReg<"AMEVTYPER11_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b001>;
+def : RWSysReg<"AMEVTYPER12_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b010>;
+def : RWSysReg<"AMEVTYPER13_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b011>;
+def : RWSysReg<"AMEVTYPER14_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b100>;
+def : RWSysReg<"AMEVTYPER15_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b101>;
+def : RWSysReg<"AMEVTYPER16_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b110>;
+def : RWSysReg<"AMEVTYPER17_EL0",  0b11, 0b011, 0b1101, 0b1110, 0b111>;
+def : RWSysReg<"AMEVTYPER18_EL0",  0b11, 0b011, 0b1101, 0b1111, 0b000>;
+def : RWSysReg<"AMEVTYPER19_EL0",  0b11, 0b011, 0b1101, 0b1111, 0b001>;
+def : RWSysReg<"AMEVTYPER110_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b010>;
+def : RWSysReg<"AMEVTYPER111_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b011>;
+def : RWSysReg<"AMEVTYPER112_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b100>;
+def : RWSysReg<"AMEVTYPER113_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b101>;
+def : RWSysReg<"AMEVTYPER114_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b110>;
+def : RWSysReg<"AMEVTYPER115_EL0", 0b11, 0b011, 0b1101, 0b1111, 0b111>;
 } //FeatureAM
 
 // v8.4a Trace Extension registers
@@ -2020,85 +2020,85 @@ def : RWSysReg<"AMEVTYPER115_EL0", 0b1, 0b011, 0b1101, 0b1111, 0b111>;
 //
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureTRACEV8_4} }] in {
-def : RWSysReg<"TRFCR_EL1",        0b1, 0b000, 0b0001, 0b0010, 0b001>;
-def : RWSysReg<"TRFCR_EL2",        0b1, 0b100, 0b0001, 0b0010, 0b001>;
-def : RWSysReg<"TRFCR_EL12",       0b1, 0b101, 0b0001, 0b0010, 0b001>;
+def : RWSysReg<"TRFCR_EL1",        0b11, 0b000, 0b0001, 0b0010, 0b001>;
+def : RWSysReg<"TRFCR_EL2",        0b11, 0b100, 0b0001, 0b0010, 0b001>;
+def : RWSysReg<"TRFCR_EL12",       0b11, 0b101, 0b0001, 0b0010, 0b001>;
 } //FeatureTRACEV8_4
 
 // v8.4a Timing insensitivity of data processing instructions
 // DIT: Data Independent Timing instructions
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureDIT} }] in {
-def : RWSysReg<"DIT",              0b1, 0b011, 0b0100, 0b0010, 0b101>;
+def : RWSysReg<"DIT",              0b11, 0b011, 0b0100, 0b0010, 0b101>;
 } //FeatureDIT
 
 // v8.4a Enhanced Support for Nested Virtualization
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureNV} }] in {
-def : RWSysReg<"VNCR_EL2",         0b1, 0b100, 0b0010, 0b0010, 0b000>;
+def : RWSysReg<"VNCR_EL2",         0b11, 0b100, 0b0010, 0b0010, 0b000>;
 } //FeatureNV
 
 // SVE control registers
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureSVE} }] in {
-def : RWSysReg<"ZCR_EL1",          0b1, 0b000, 0b0001, 0b0010, 0b000>;
-def : RWSysReg<"ZCR_EL2",          0b1, 0b100, 0b0001, 0b0010, 0b000>;
-def : RWSysReg<"ZCR_EL3",          0b1, 0b110, 0b0001, 0b0010, 0b000>;
-def : RWSysReg<"ZCR_EL12",         0b1, 0b101, 0b0001, 0b0010, 0b000>;
+def : RWSysReg<"ZCR_EL1",          0b11, 0b000, 0b0001, 0b0010, 0b000>;
+def : RWSysReg<"ZCR_EL2",          0b11, 0b100, 0b0001, 0b0010, 0b000>;
+def : RWSysReg<"ZCR_EL3",          0b11, 0b110, 0b0001, 0b0010, 0b000>;
+def : RWSysReg<"ZCR_EL12",         0b11, 0b101, 0b0001, 0b0010, 0b000>;
 }
 
 // V8.5a Spectre mitigation SSBS register
 //                     Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureSSBS} }] in
-def : RWSysReg<"SSBS", 0b1, 0b011, 0b0100, 0b0010, 0b110>;
+def : RWSysReg<"SSBS", 0b11, 0b011, 0b0100, 0b0010, 0b110>;
 
 // v8.5a Memory Tagging Extension
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureMTE} }] in {
-def : RWSysReg<"TCO",              0b1, 0b011, 0b0100, 0b0010, 0b111>;
-def : RWSysReg<"GCR_EL1",          0b1, 0b000, 0b0001, 0b0000, 0b110>;
-def : RWSysReg<"RGSR_EL1",         0b1, 0b000, 0b0001, 0b0000, 0b101>;
-def : RWSysReg<"TFSR_EL1",         0b1, 0b000, 0b0101, 0b0110, 0b000>;
-def : RWSysReg<"TFSR_EL2",         0b1, 0b100, 0b0101, 0b0110, 0b000>;
-def : RWSysReg<"TFSR_EL3",         0b1, 0b110, 0b0101, 0b0110, 0b000>;
-def : RWSysReg<"TFSR_EL12",        0b1, 0b101, 0b0101, 0b0110, 0b000>;
-def : RWSysReg<"TFSRE0_EL1",       0b1, 0b000, 0b0101, 0b0110, 0b001>;
-def : ROSysReg<"GMID_EL1",         0b1, 0b001, 0b0000, 0b0000, 0b100>;
+def : RWSysReg<"TCO",              0b11, 0b011, 0b0100, 0b0010, 0b111>;
+def : RWSysReg<"GCR_EL1",          0b11, 0b000, 0b0001, 0b0000, 0b110>;
+def : RWSysReg<"RGSR_EL1",         0b11, 0b000, 0b0001, 0b0000, 0b101>;
+def : RWSysReg<"TFSR_EL1",         0b11, 0b000, 0b0101, 0b0110, 0b000>;
+def : RWSysReg<"TFSR_EL2",         0b11, 0b100, 0b0101, 0b0110, 0b000>;
+def : RWSysReg<"TFSR_EL3",         0b11, 0b110, 0b0101, 0b0110, 0b000>;
+def : RWSysReg<"TFSR_EL12",        0b11, 0b101, 0b0101, 0b0110, 0b000>;
+def : RWSysReg<"TFSRE0_EL1",       0b11, 0b000, 0b0101, 0b0110, 0b001>;
+def : ROSysReg<"GMID_EL1",         0b11, 0b001, 0b0000, 0b0000, 0b100>;
 } // HasMTE
 
 // Embedded Trace Extension R/W System registers
 let Requires = [{ {AArch64::FeatureETE} }] in {
 //              Name            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TRCRSR",        0b0, 0b001, 0b0000, 0b1010, 0b000>;
+def : RWSysReg<"TRCRSR",        0b10, 0b001, 0b0000, 0b1010, 0b000>;
 //  TRCEXTINSELR0 has the same encoding as ETM TRCEXTINSELR
-def : RWSysReg<"TRCEXTINSELR0", 0b0, 0b001, 0b0000, 0b1000, 0b100>;
-def : RWSysReg<"TRCEXTINSELR1", 0b0, 0b001, 0b0000, 0b1001, 0b100>;
-def : RWSysReg<"TRCEXTINSELR2", 0b0, 0b001, 0b0000, 0b1010, 0b100>;
-def : RWSysReg<"TRCEXTINSELR3", 0b0, 0b001, 0b0000, 0b1011, 0b100>;
+def : RWSysReg<"TRCEXTINSELR0", 0b10, 0b001, 0b0000, 0b1000, 0b100>;
+def : RWSysReg<"TRCEXTINSELR1", 0b10, 0b001, 0b0000, 0b1001, 0b100>;
+def : RWSysReg<"TRCEXTINSELR2", 0b10, 0b001, 0b0000, 0b1010, 0b100>;
+def : RWSysReg<"TRCEXTINSELR3", 0b10, 0b001, 0b0000, 0b1011, 0b100>;
 } // FeatureETE
 
 // Trace Buffer Extension System registers
 let Requires = [{ {AArch64::FeatureTRBE} }] in {
 //                   Name       Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TRBLIMITR_EL1", 0b1, 0b000, 0b1001, 0b1011, 0b000>;
-def : RWSysReg<"TRBPTR_EL1",    0b1, 0b000, 0b1001, 0b1011, 0b001>;
-def : RWSysReg<"TRBBASER_EL1",  0b1, 0b000, 0b1001, 0b1011, 0b010>;
-def : RWSysReg<"TRBSR_EL1",     0b1, 0b000, 0b1001, 0b1011, 0b011>;
-def : RWSysReg<"TRBMAR_EL1",    0b1, 0b000, 0b1001, 0b1011, 0b100>;
-def : RWSysReg<"TRBMPAM_EL1",   0b1, 0b000, 0b1001, 0b1011, 0b101>;
-def : RWSysReg<"TRBTRG_EL1",    0b1, 0b000, 0b1001, 0b1011, 0b110>;
-def : ROSysReg<"TRBIDR_EL1",    0b1, 0b000, 0b1001, 0b1011, 0b111>;
+def : RWSysReg<"TRBLIMITR_EL1", 0b11, 0b000, 0b1001, 0b1011, 0b000>;
+def : RWSysReg<"TRBPTR_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b001>;
+def : RWSysReg<"TRBBASER_EL1",  0b11, 0b000, 0b1001, 0b1011, 0b010>;
+def : RWSysReg<"TRBSR_EL1",     0b11, 0b000, 0b1001, 0b1011, 0b011>;
+def : RWSysReg<"TRBMAR_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b100>;
+def : RWSysReg<"TRBMPAM_EL1",   0b11, 0b000, 0b1001, 0b1011, 0b101>;
+def : RWSysReg<"TRBTRG_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b110>;
+def : ROSysReg<"TRBIDR_EL1",    0b11, 0b000, 0b1001, 0b1011, 0b111>;
 } // FeatureTRBE
 
 
 // v8.6a Activity Monitors Virtualization Support
 let Requires = [{ {AArch64::FeatureAMVS} }] in {
 //              Name            Op0   Op1    CRn     CRm     Op2
-def : ROSysReg<"AMCG1IDR_EL0",  0b1, 0b011, 0b1101, 0b0010, 0b110>;
+def : ROSysReg<"AMCG1IDR_EL0",  0b11, 0b011, 0b1101, 0b0010, 0b110>;
 foreach n = 0-15 in {
   foreach x = 0-1 in {
   def : RWSysReg<"AMEVCNTVOFF"#x#n#"_EL2",
-    0b1, 0b100, 0b1101, 0b1000, 0b000>{
+    0b11, 0b100, 0b1101, 0b1000, 0b000>{
       let Encoding{4} = x;
       let Encoding{3-0} = n;
     }
@@ -2109,342 +2109,342 @@ foreach n = 0-15 in {
 // v8.6a Fine Grained Virtualization Traps
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureFineGrainedTraps} }] in {
-def : RWSysReg<"HFGRTR_EL2",       0b1, 0b100, 0b0001, 0b0001, 0b100>;
-def : RWSysReg<"HFGWTR_EL2",       0b1, 0b100, 0b0001, 0b0001, 0b101>;
-def : RWSysReg<"HFGITR_EL2",       0b1, 0b100, 0b0001, 0b0001, 0b110>;
-def : RWSysReg<"HDFGRTR_EL2",      0b1, 0b100, 0b0011, 0b0001, 0b100>;
-def : RWSysReg<"HDFGWTR_EL2",      0b1, 0b100, 0b0011, 0b0001, 0b101>;
-def : RWSysReg<"HAFGRTR_EL2",      0b1, 0b100, 0b0011, 0b0001, 0b110>;
+def : RWSysReg<"HFGRTR_EL2",       0b11, 0b100, 0b0001, 0b0001, 0b100>;
+def : RWSysReg<"HFGWTR_EL2",       0b11, 0b100, 0b0001, 0b0001, 0b101>;
+def : RWSysReg<"HFGITR_EL2",       0b11, 0b100, 0b0001, 0b0001, 0b110>;
+def : RWSysReg<"HDFGRTR_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b100>;
+def : RWSysReg<"HDFGWTR_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b101>;
+def : RWSysReg<"HAFGRTR_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b110>;
 
 // v8.9a/v9.4a additions to Fine Grained Traps (FEAT_FGT2)
 //                                 Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"HDFGRTR2_EL2",     0b1, 0b100, 0b0011, 0b0001, 0b000>;
-def : RWSysReg<"HDFGWTR2_EL2",     0b1, 0b100, 0b0011, 0b0001, 0b001>;
-def : RWSysReg<"HFGRTR2_EL2",      0b1, 0b100, 0b0011, 0b0001, 0b010>;
-def : RWSysReg<"HFGWTR2_EL2",      0b1, 0b100, 0b0011, 0b0001, 0b011>;
-def : RWSysReg<"HFGITR2_EL2",      0b1, 0b100, 0b0011, 0b0001, 0b111>;
+def : RWSysReg<"HDFGRTR2_EL2",     0b11, 0b100, 0b0011, 0b0001, 0b000>;
+def : RWSysReg<"HDFGWTR2_EL2",     0b11, 0b100, 0b0011, 0b0001, 0b001>;
+def : RWSysReg<"HFGRTR2_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b010>;
+def : RWSysReg<"HFGWTR2_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b011>;
+def : RWSysReg<"HFGITR2_EL2",      0b11, 0b100, 0b0011, 0b0001, 0b111>;
 }
 
 // v8.6a Enhanced Counter Virtualization
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureEnhancedCounterVirtualization} }] in {
-def : RWSysReg<"CNTSCALE_EL2",     0b1, 0b100, 0b1110, 0b0000, 0b100>;
-def : RWSysReg<"CNTISCALE_EL2",    0b1, 0b100, 0b1110, 0b0000, 0b101>;
-def : RWSysReg<"CNTPOFF_EL2",      0b1, 0b100, 0b1110, 0b0000, 0b110>;
-def : RWSysReg<"CNTVFRQ_EL2",      0b1, 0b100, 0b1110, 0b0000, 0b111>;
-def : ROSysReg<"CNTPCTSS_EL0",     0b1, 0b011, 0b1110, 0b0000, 0b101>;
-def : ROSysReg<"CNTVCTSS_EL0",     0b1, 0b011, 0b1110, 0b0000, 0b110>;
+def : RWSysReg<"CNTSCALE_EL2",     0b11, 0b100, 0b1110, 0b0000, 0b100>;
+def : RWSysReg<"CNTISCALE_EL2",    0b11, 0b100, 0b1110, 0b0000, 0b101>;
+def : RWSysReg<"CNTPOFF_EL2",      0b11, 0b100, 0b1110, 0b0000, 0b110>;
+def : RWSysReg<"CNTVFRQ_EL2",      0b11, 0b100, 0b1110, 0b0000, 0b111>;
+def : ROSysReg<"CNTPCTSS_EL0",     0b11, 0b011, 0b1110, 0b0000, 0b101>;
+def : ROSysReg<"CNTVCTSS_EL0",     0b11, 0b011, 0b1110, 0b0000, 0b110>;
 }
 
 // v8.7a LD64B/ST64B Accelerator Extension system register
 let Requires = [{ {AArch64::FeatureLS64} }] in
-def : RWSysReg<"ACCDATA_EL1",       0b1, 0b000, 0b1101, 0b0000, 0b101>;
+def : RWSysReg<"ACCDATA_EL1",       0b11, 0b000, 0b1101, 0b0000, 0b101>;
 
 // Branch Record Buffer system registers
 let Requires = [{ {AArch64::FeatureBRBE} }] in {
-def : RWSysReg<"BRBCR_EL1",         0b0, 0b001, 0b1001, 0b0000, 0b000>;
-def : RWSysReg<"BRBCR_EL12",        0b0, 0b101, 0b1001, 0b0000, 0b000>;
-def : RWSysReg<"BRBCR_EL2",         0b0, 0b100, 0b1001, 0b0000, 0b000>;
-def : RWSysReg<"BRBFCR_EL1",        0b0, 0b001, 0b1001, 0b0000, 0b001>;
-def : ROSysReg<"BRBIDR0_EL1",       0b0, 0b001, 0b1001, 0b0010, 0b000>;
-def : RWSysReg<"BRBINFINJ_EL1",     0b0, 0b001, 0b1001, 0b0001, 0b000>;
-def : RWSysReg<"BRBSRCINJ_EL1",     0b0, 0b001, 0b1001, 0b0001, 0b001>;
-def : RWSysReg<"BRBTGTINJ_EL1",     0b0, 0b001, 0b1001, 0b0001, 0b010>;
-def : RWSysReg<"BRBTS_EL1",         0b0, 0b001, 0b1001, 0b0000, 0b010>;
+def : RWSysReg<"BRBCR_EL1",         0b10, 0b001, 0b1001, 0b0000, 0b000>;
+def : RWSysReg<"BRBCR_EL12",        0b10, 0b101, 0b1001, 0b0000, 0b000>;
+def : RWSysReg<"BRBCR_EL2",         0b10, 0b100, 0b1001, 0b0000, 0b000>;
+def : RWSysReg<"BRBFCR_EL1",        0b10, 0b001, 0b1001, 0b0000, 0b001>;
+def : ROSysReg<"BRBIDR0_EL1",       0b10, 0b001, 0b1001, 0b0010, 0b000>;
+def : RWSysReg<"BRBINFINJ_EL1",     0b10, 0b001, 0b1001, 0b0001, 0b000>;
+def : RWSysReg<"BRBSRCINJ_EL1",     0b10, 0b001, 0b1001, 0b0001, 0b001>;
+def : RWSysReg<"BRBTGTINJ_EL1",     0b10, 0b001, 0b1001, 0b0001, 0b010>;
+def : RWSysReg<"BRBTS_EL1",         0b10, 0b001, 0b1001, 0b0000, 0b010>;
 foreach n = 0-31 in {
   defvar nb = !cast<bits<5>>(n);
-  def : ROSysReg<"BRBINF"#n#"_EL1", 0b0, 0b001, 0b1000, nb{3-0}, {nb{4},0b00}>;
-  def : ROSysReg<"BRBSRC"#n#"_EL1", 0b0, 0b001, 0b1000, nb{3-0}, {nb{4},0b01}>;
-  def : ROSysReg<"BRBTGT"#n#"_EL1", 0b0, 0b001, 0b1000, nb{3-0}, {nb{4},0b10}>;
+  def : ROSysReg<"BRBINF"#n#"_EL1", 0b10, 0b001, 0b1000, nb{3-0}, {nb{4},0b00}>;
+  def : ROSysReg<"BRBSRC"#n#"_EL1", 0b10, 0b001, 0b1000, nb{3-0}, {nb{4},0b01}>;
+  def : ROSysReg<"BRBTGT"#n#"_EL1", 0b10, 0b001, 0b1000, nb{3-0}, {nb{4},0b10}>;
 }
 }
 
 // Statistical Profiling Extension system register
 let Requires = [{ {AArch64::FeatureSPE_EEF} }] in
-def : RWSysReg<"PMSNEVFR_EL1",      0b1, 0b000, 0b1001, 0b1001, 0b001>;
+def : RWSysReg<"PMSNEVFR_EL1",      0b11, 0b000, 0b1001, 0b1001, 0b001>;
 
 // Scalable Matrix Extension (SME)
 //                                 Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureSME} }] in {
-def : RWSysReg<"SMCR_EL1",         0b1, 0b000, 0b0001, 0b0010, 0b110>;
-def : RWSysReg<"SMCR_EL2",         0b1, 0b100, 0b0001, 0b0010, 0b110>;
-def : RWSysReg<"SMCR_EL3",         0b1, 0b110, 0b0001, 0b0010, 0b110>;
-def : RWSysReg<"SMCR_EL12",        0b1, 0b101, 0b0001, 0b0010, 0b110>;
-def : RWSysReg<"SVCR",             0b1, 0b011, 0b0100, 0b0010, 0b010>;
-def : RWSysReg<"SMPRI_EL1",        0b1, 0b000, 0b0001, 0b0010, 0b100>;
-def : RWSysReg<"SMPRIMAP_EL2",     0b1, 0b100, 0b0001, 0b0010, 0b101>;
-def : ROSysReg<"SMIDR_EL1",        0b1, 0b001, 0b0000, 0b0000, 0b110>;
-def : RWSysReg<"TPIDR2_EL0",       0b1, 0b011, 0b1101, 0b0000, 0b101>;
+def : RWSysReg<"SMCR_EL1",         0b11, 0b000, 0b0001, 0b0010, 0b110>;
+def : RWSysReg<"SMCR_EL2",         0b11, 0b100, 0b0001, 0b0010, 0b110>;
+def : RWSysReg<"SMCR_EL3",         0b11, 0b110, 0b0001, 0b0010, 0b110>;
+def : RWSysReg<"SMCR_EL12",        0b11, 0b101, 0b0001, 0b0010, 0b110>;
+def : RWSysReg<"SVCR",             0b11, 0b011, 0b0100, 0b0010, 0b010>;
+def : RWSysReg<"SMPRI_EL1",        0b11, 0b000, 0b0001, 0b0010, 0b100>;
+def : RWSysReg<"SMPRIMAP_EL2",     0b11, 0b100, 0b0001, 0b0010, 0b101>;
+def : ROSysReg<"SMIDR_EL1",        0b11, 0b001, 0b0000, 0b0000, 0b110>;
+def : RWSysReg<"TPIDR2_EL0",       0b11, 0b011, 0b1101, 0b0000, 0b101>;
 } // HasSME
 
 // v8.4a MPAM and SME registers
 //                              Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureMPAM, AArch64::FeatureSME} }] in {
-def : RWSysReg<"MPAMSM_EL1",    0b1, 0b000, 0b1010, 0b0101, 0b011>;
+def : RWSysReg<"MPAMSM_EL1",    0b11, 0b000, 0b1010, 0b0101, 0b011>;
 } // HasMPAM, HasSME
 
 // v8.8a Non-Maskable Interrupts
 let Requires = [{ {AArch64::FeatureNMI} }] in {
   //                               Op0   Op1    CRn     CRm     Op2
-  def : RWSysReg<"ALLINT",         0b1, 0b000, 0b0100, 0b0011, 0b000>;
-  def : ROSysReg<"ICC_NMIAR1_EL1", 0b1, 0b000, 0b1100, 0b1001, 0b101>; // FEAT_GICv3_NMI
+  def : RWSysReg<"ALLINT",         0b11, 0b000, 0b0100, 0b0011, 0b000>;
+  def : ROSysReg<"ICC_NMIAR1_EL1", 0b11, 0b000, 0b1100, 0b1001, 0b101>; // FEAT_GICv3_NMI
 }
 
 // v9.4a Guarded Control Stack Extension (GCS)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"GCSCR_EL1",   0b1, 0b000, 0b0010, 0b0101, 0b000>;
-def : RWSysReg<"GCSPR_EL1",   0b1, 0b000, 0b0010, 0b0101, 0b001>;
-def : RWSysReg<"GCSCRE0_EL1", 0b1, 0b000, 0b0010, 0b0101, 0b010>;
-def : RWSysReg<"GCSPR_EL0",   0b1, 0b011, 0b0010, 0b0101, 0b001>;
-def : RWSysReg<"GCSCR_EL2",   0b1, 0b100, 0b0010, 0b0101, 0b000>;
-def : RWSysReg<"GCSPR_EL2",   0b1, 0b100, 0b0010, 0b0101, 0b001>;
-def : RWSysReg<"GCSCR_EL12",  0b1, 0b101, 0b0010, 0b0101, 0b000>;
-def : RWSysReg<"GCSPR_EL12",  0b1, 0b101, 0b0010, 0b0101, 0b001>;
-def : RWSysReg<"GCSCR_EL3",   0b1, 0b110, 0b0010, 0b0101, 0b000>;
-def : RWSysReg<"GCSPR_EL3",   0b1, 0b110, 0b0010, 0b0101, 0b001>;
+def : RWSysReg<"GCSCR_EL1",   0b11, 0b000, 0b0010, 0b0101, 0b000>;
+def : RWSysReg<"GCSPR_EL1",   0b11, 0b000, 0b0010, 0b0101, 0b001>;
+def : RWSysReg<"GCSCRE0_EL1", 0b11, 0b000, 0b0010, 0b0101, 0b010>;
+def : RWSysReg<"GCSPR_EL0",   0b11, 0b011, 0b0010, 0b0101, 0b001>;
+def : RWSysReg<"GCSCR_EL2",   0b11, 0b100, 0b0010, 0b0101, 0b000>;
+def : RWSysReg<"GCSPR_EL2",   0b11, 0b100, 0b0010, 0b0101, 0b001>;
+def : RWSysReg<"GCSCR_EL12",  0b11, 0b101, 0b0010, 0b0101, 0b000>;
+def : RWSysReg<"GCSPR_EL12",  0b11, 0b101, 0b0010, 0b0101, 0b001>;
+def : RWSysReg<"GCSCR_EL3",   0b11, 0b110, 0b0010, 0b0101, 0b000>;
+def : RWSysReg<"GCSPR_EL3",   0b11, 0b110, 0b0010, 0b0101, 0b001>;
 
 // v8.9a/v9.4a Memory Attribute Index Enhancement (FEAT_AIE)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"AMAIR2_EL1",  0b1, 0b000, 0b1010, 0b0011, 0b001>;
-def : RWSysReg<"AMAIR2_EL12", 0b1, 0b101, 0b1010, 0b0011, 0b001>;
-def : RWSysReg<"AMAIR2_EL2",  0b1, 0b100, 0b1010, 0b0011, 0b001>;
-def : RWSysReg<"AMAIR2_EL3",  0b1, 0b110, 0b1010, 0b0011, 0b001>;
-def : RWSysReg<"MAIR2_EL1",   0b1, 0b000, 0b1010, 0b0010, 0b001>;
-def : RWSysReg<"MAIR2_EL12",  0b1, 0b101, 0b1010, 0b0010, 0b001>;
-def : RWSysReg<"MAIR2_EL2",   0b1, 0b100, 0b1010, 0b0001, 0b001>;
-def : RWSysReg<"MAIR2_EL3",   0b1, 0b110, 0b1010, 0b0001, 0b001>;
+def : RWSysReg<"AMAIR2_EL1",  0b11, 0b000, 0b1010, 0b0011, 0b001>;
+def : RWSysReg<"AMAIR2_EL12", 0b11, 0b101, 0b1010, 0b0011, 0b001>;
+def : RWSysReg<"AMAIR2_EL2",  0b11, 0b100, 0b1010, 0b0011, 0b001>;
+def : RWSysReg<"AMAIR2_EL3",  0b11, 0b110, 0b1010, 0b0011, 0b001>;
+def : RWSysReg<"MAIR2_EL1",   0b11, 0b000, 0b1010, 0b0010, 0b001>;
+def : RWSysReg<"MAIR2_EL12",  0b11, 0b101, 0b1010, 0b0010, 0b001>;
+def : RWSysReg<"MAIR2_EL2",   0b11, 0b100, 0b1010, 0b0001, 0b001>;
+def : RWSysReg<"MAIR2_EL3",   0b11, 0b110, 0b1010, 0b0001, 0b001>;
 
 // v8.9a/9.4a Stage 1 Permission Indirection Extension (FEAT_S1PIE)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PIRE0_EL1",   0b1, 0b000, 0b1010, 0b0010, 0b010>;
-def : RWSysReg<"PIRE0_EL12",  0b1, 0b101, 0b1010, 0b0010, 0b010>;
-def : RWSysReg<"PIRE0_EL2",   0b1, 0b100, 0b1010, 0b0010, 0b010>;
-def : RWSysReg<"PIR_EL1",     0b1, 0b000, 0b1010, 0b0010, 0b011>;
-def : RWSysReg<"PIR_EL12",    0b1, 0b101, 0b1010, 0b0010, 0b011>;
-def : RWSysReg<"PIR_EL2",     0b1, 0b100, 0b1010, 0b0010, 0b011>;
-def : RWSysReg<"PIR_EL3",     0b1, 0b110, 0b1010, 0b0010, 0b011>;
+def : RWSysReg<"PIRE0_EL1",   0b11, 0b000, 0b1010, 0b0010, 0b010>;
+def : RWSysReg<"PIRE0_EL12",  0b11, 0b101, 0b1010, 0b0010, 0b010>;
+def : RWSysReg<"PIRE0_EL2",   0b11, 0b100, 0b1010, 0b0010, 0b010>;
+def : RWSysReg<"PIR_EL1",     0b11, 0b000, 0b1010, 0b0010, 0b011>;
+def : RWSysReg<"PIR_EL12",    0b11, 0b101, 0b1010, 0b0010, 0b011>;
+def : RWSysReg<"PIR_EL2",     0b11, 0b100, 0b1010, 0b0010, 0b011>;
+def : RWSysReg<"PIR_EL3",     0b11, 0b110, 0b1010, 0b0010, 0b011>;
 
 // v8.9a/v9.4a Stage 2 Permission Indirection Extension (FEAT_S2PIE)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"S2PIR_EL2",   0b1, 0b100, 0b1010, 0b0010, 0b101>;
+def : RWSysReg<"S2PIR_EL2",   0b11, 0b100, 0b1010, 0b0010, 0b101>;
 
 // v8.9a/v9.4a Stage 1 Permission Overlay Extension (FEAT_S1POE)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"POR_EL0",     0b1, 0b011, 0b1010, 0b0010, 0b100>;
-def : RWSysReg<"POR_EL1",     0b1, 0b000, 0b1010, 0b0010, 0b100>;
-def : RWSysReg<"POR_EL12",    0b1, 0b101, 0b1010, 0b0010, 0b100>;
-def : RWSysReg<"POR_EL2",     0b1, 0b100, 0b1010, 0b0010, 0b100>;
-def : RWSysReg<"POR_EL3",     0b1, 0b110, 0b1010, 0b0010, 0b100>;
+def : RWSysReg<"POR_EL0",     0b11, 0b011, 0b1010, 0b0010, 0b100>;
+def : RWSysReg<"POR_EL1",     0b11, 0b000, 0b1010, 0b0010, 0b100>;
+def : RWSysReg<"POR_EL12",    0b11, 0b101, 0b1010, 0b0010, 0b100>;
+def : RWSysReg<"POR_EL2",     0b11, 0b100, 0b1010, 0b0010, 0b100>;
+def : RWSysReg<"POR_EL3",     0b11, 0b110, 0b1010, 0b0010, 0b100>;
 
 // v8.9a/v9.4a Stage 2 Permission Overlay Extension (FEAT_S2POE)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"S2POR_EL1",   0b1, 0b000, 0b1010, 0b0010, 0b101>;
+def : RWSysReg<"S2POR_EL1",   0b11, 0b000, 0b1010, 0b0010, 0b101>;
 
 // v8.9a/v9.4a Extension to System Control Registers (FEAT_SCTLR2)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"SCTLR2_EL1",  0b1, 0b000, 0b0001, 0b0000, 0b011>;
-def : RWSysReg<"SCTLR2_EL12", 0b1, 0b101, 0b0001, 0b0000, 0b011>;
-def : RWSysReg<"SCTLR2_EL2",  0b1, 0b100, 0b0001, 0b0000, 0b011>;
-def : RWSysReg<"SCTLR2_EL3",  0b1, 0b110, 0b0001, 0b0000, 0b011>;
+def : RWSysReg<"SCTLR2_EL1",  0b11, 0b000, 0b0001, 0b0000, 0b011>;
+def : RWSysReg<"SCTLR2_EL12", 0b11, 0b101, 0b0001, 0b0000, 0b011>;
+def : RWSysReg<"SCTLR2_EL2",  0b11, 0b100, 0b0001, 0b0000, 0b011>;
+def : RWSysReg<"SCTLR2_EL3",  0b11, 0b110, 0b0001, 0b0000, 0b011>;
 
 // v8.9a/v9.4a Extension to Translation Control Registers (FEAT_TCR2)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TCR2_EL1",    0b1, 0b000, 0b0010, 0b0000, 0b011>;
-def : RWSysReg<"TCR2_EL12",   0b1, 0b101, 0b0010, 0b0000, 0b011>;
-def : RWSysReg<"TCR2_EL2",    0b1, 0b100, 0b0010, 0b0000, 0b011>;
+def : RWSysReg<"TCR2_EL1",    0b11, 0b000, 0b0010, 0b0000, 0b011>;
+def : RWSysReg<"TCR2_EL12",   0b11, 0b101, 0b0010, 0b0000, 0b011>;
+def : RWSysReg<"TCR2_EL2",    0b11, 0b100, 0b0010, 0b0000, 0b011>;
 
 // v8.9a/9.4a Translation Hardening Extension (FEAT_THE)
 //                             Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureTHE} }] in {
-def : RWSysReg<"RCWMASK_EL1",  0b1, 0b000, 0b1101, 0b0000, 0b110>;
-def : RWSysReg<"RCWSMASK_EL1", 0b1, 0b000, 0b1101, 0b0000, 0b011>;
+def : RWSysReg<"RCWMASK_EL1",  0b11, 0b000, 0b1101, 0b0000, 0b110>;
+def : RWSysReg<"RCWSMASK_EL1", 0b11, 0b000, 0b1101, 0b0000, 0b011>;
 }
 
 // v8.9a/9.4a new Debug feature (FEAT_DEBUGv8p9)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"MDSELR_EL1", 0b0, 0b000, 0b0000, 0b0100, 0b010>;
+def : RWSysReg<"MDSELR_EL1", 0b10, 0b000, 0b0000, 0b0100, 0b010>;
 
 // v8.9a/9.4a new Performance Monitors Extension (FEAT_PMUv3p9)
 //                            Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PMUACR_EL1", 0b1, 0b000, 0b1001, 0b1110, 0b100>;
+def : RWSysReg<"PMUACR_EL1", 0b11, 0b000, 0b1001, 0b1110, 0b100>;
 
 // v8.9a/9.4a PMU Snapshot Extension (FEAT_PMUv3_SS)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : ROSysReg<"PMCCNTSVR_EL1",     0b0, 0b000, 0b1110, 0b1011, 0b111>;
-def : ROSysReg<"PMICNTSVR_EL1",     0b0, 0b000, 0b1110, 0b1100, 0b000>;
-def : RWSysReg<"PMSSCR_EL1",        0b1, 0b000, 0b1001, 0b1101, 0b011>;
+def : ROSysReg<"PMCCNTSVR_EL1",     0b10, 0b000, 0b1110, 0b1011, 0b111>;
+def : ROSysReg<"PMICNTSVR_EL1",     0b10, 0b000, 0b1110, 0b1100, 0b000>;
+def : RWSysReg<"PMSSCR_EL1",        0b11, 0b000, 0b1001, 0b1101, 0b011>;
 foreach n = 0-30 in {
   defvar nb = !cast<bits<5>>(n);
-  def : ROSysReg<"PMEVCNTSVR"#n#"_EL1", 0b0, 0b000, 0b1110, {0b10,nb{4-3}}, nb{2-0}>;
+  def : ROSysReg<"PMEVCNTSVR"#n#"_EL1", 0b10, 0b000, 0b1110, {0b10,nb{4-3}}, nb{2-0}>;
 }
 
 // v8.9a/v9.4a PMUv3 Fixed-function instruction counter (FEAT_PMUv3_ICNTR)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PMICNTR_EL0",       0b1, 0b011, 0b1001, 0b0100, 0b000>;
-def : RWSysReg<"PMICFILTR_EL0",     0b1, 0b011, 0b1001, 0b0110, 0b000>;
+def : RWSysReg<"PMICNTR_EL0",       0b11, 0b011, 0b1001, 0b0100, 0b000>;
+def : RWSysReg<"PMICFILTR_EL0",     0b11, 0b011, 0b1001, 0b0110, 0b000>;
 
 // v8.9a/v9.4a PMUv3 Performance Monitors Zero with Mask (FEAT_PMUv3p9/FEAT_PMUv3_ICNTR)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : WOSysReg<"PMZR_EL0",          0b1, 0b011, 0b1001, 0b1101, 0b100>;
+def : WOSysReg<"PMZR_EL0",          0b11, 0b011, 0b1001, 0b1101, 0b100>;
 
 // v8.9a/9.4a Synchronous-Exception-Based Event Profiling extension (FEAT_SEBEP)
 //                              Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PMECR_EL1",     0b1, 0b000, 0b1001, 0b1110, 0b101>;
-def : RWSysReg<"PMIAR_EL1",     0b1, 0b000, 0b1001, 0b1110, 0b111>;
+def : RWSysReg<"PMECR_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b101>;
+def : RWSysReg<"PMIAR_EL1",     0b11, 0b000, 0b1001, 0b1110, 0b111>;
 
 // v8.9a/9.4a System Performance Monitors Extension (FEAT_SPMU)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"SPMACCESSR_EL1",    0b0, 0b000, 0b1001, 0b1101, 0b011>;
-def : RWSysReg<"SPMACCESSR_EL12",   0b0, 0b101, 0b1001, 0b1101, 0b011>;
-def : RWSysReg<"SPMACCESSR_EL2",    0b0, 0b100, 0b1001, 0b1101, 0b011>;
-def : RWSysReg<"SPMACCESSR_EL3",    0b0, 0b110, 0b1001, 0b1101, 0b011>;
-def : RWSysReg<"SPMCNTENCLR_EL0",   0b0, 0b011, 0b1001, 0b1100, 0b010>;
-def : RWSysReg<"SPMCNTENSET_EL0",   0b0, 0b011, 0b1001, 0b1100, 0b001>;
-def : RWSysReg<"SPMCR_EL0",         0b0, 0b011, 0b1001, 0b1100, 0b000>;
-def : ROSysReg<"SPMDEVAFF_EL1",     0b0, 0b000, 0b1001, 0b1101, 0b110>;
-def : ROSysReg<"SPMDEVARCH_EL1",    0b0, 0b000, 0b1001, 0b1101, 0b101>;
+def : RWSysReg<"SPMACCESSR_EL1",    0b10, 0b000, 0b1001, 0b1101, 0b011>;
+def : RWSysReg<"SPMACCESSR_EL12",   0b10, 0b101, 0b1001, 0b1101, 0b011>;
+def : RWSysReg<"SPMACCESSR_EL2",    0b10, 0b100, 0b1001, 0b1101, 0b011>;
+def : RWSysReg<"SPMACCESSR_EL3",    0b10, 0b110, 0b1001, 0b1101, 0b011>;
+def : RWSysReg<"SPMCNTENCLR_EL0",   0b10, 0b011, 0b1001, 0b1100, 0b010>;
+def : RWSysReg<"SPMCNTENSET_EL0",   0b10, 0b011, 0b1001, 0b1100, 0b001>;
+def : RWSysReg<"SPMCR_EL0",         0b10, 0b011, 0b1001, 0b1100, 0b000>;
+def : ROSysReg<"SPMDEVAFF_EL1",     0b10, 0b000, 0b1001, 0b1101, 0b110>;
+def : ROSysReg<"SPMDEVARCH_EL1",    0b10, 0b000, 0b1001, 0b1101, 0b101>;
 foreach n = 0-15 in {
   defvar nb = !cast<bits<4>>(n);
   //                                     Op0   Op1    CRn     CRm            Op2
-  def : RWSysReg<"SPMEVCNTR"#n#"_EL0",   0b0, 0b011, 0b1110, {0b000,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"SPMEVFILT2R"#n#"_EL0", 0b0, 0b011, 0b1110, {0b011,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"SPMEVFILTR"#n#"_EL0",  0b0, 0b011, 0b1110, {0b010,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"SPMEVTYPER"#n#"_EL0",  0b0, 0b011, 0b1110, {0b001,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"SPMEVCNTR"#n#"_EL0",   0b10, 0b011, 0b1110, {0b000,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"SPMEVFILT2R"#n#"_EL0", 0b10, 0b011, 0b1110, {0b011,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"SPMEVFILTR"#n#"_EL0",  0b10, 0b011, 0b1110, {0b010,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"SPMEVTYPER"#n#"_EL0",  0b10, 0b011, 0b1110, {0b001,nb{3}}, nb{2-0}>;
 }
 //                                  Op0   Op1    CRn     CRm     Op2
-def : ROSysReg<"SPMIIDR_EL1",       0b0, 0b000, 0b1001, 0b1101, 0b100>;
-def : RWSysReg<"SPMINTENCLR_EL1",   0b0, 0b000, 0b1001, 0b1110, 0b010>;
-def : RWSysReg<"SPMINTENSET_EL1",   0b0, 0b000, 0b1001, 0b1110, 0b001>;
-def : RWSysReg<"SPMOVSCLR_EL0",     0b0, 0b011, 0b1001, 0b1100, 0b011>;
-def : RWSysReg<"SPMOVSSET_EL0",     0b0, 0b011, 0b1001, 0b1110, 0b011>;
-def : RWSysReg<"SPMSELR_EL0",       0b0, 0b011, 0b1001, 0b1100, 0b101>;
-def : ROSysReg<"SPMCGCR0_EL1",      0b0, 0b000, 0b1001, 0b1101, 0b000>;
-def : ROSysReg<"SPMCGCR1_EL1",      0b0, 0b000, 0b1001, 0b1101, 0b001>;
-def : ROSysReg<"SPMCFGR_EL1",       0b0, 0b000, 0b1001, 0b1101, 0b111>;
-def : RWSysReg<"SPMROOTCR_EL3",     0b0, 0b110, 0b1001, 0b1110, 0b111>;
-def : RWSysReg<"SPMSCR_EL1",        0b0, 0b111, 0b1001, 0b1110, 0b111>;
+def : ROSysReg<"SPMIIDR_EL1",       0b10, 0b000, 0b1001, 0b1101, 0b100>;
+def : RWSysReg<"SPMINTENCLR_EL1",   0b10, 0b000, 0b1001, 0b1110, 0b010>;
+def : RWSysReg<"SPMINTENSET_EL1",   0b10, 0b000, 0b1001, 0b1110, 0b001>;
+def : RWSysReg<"SPMOVSCLR_EL0",     0b10, 0b011, 0b1001, 0b1100, 0b011>;
+def : RWSysReg<"SPMOVSSET_EL0",     0b10, 0b011, 0b1001, 0b1110, 0b011>;
+def : RWSysReg<"SPMSELR_EL0",       0b10, 0b011, 0b1001, 0b1100, 0b101>;
+def : ROSysReg<"SPMCGCR0_EL1",      0b10, 0b000, 0b1001, 0b1101, 0b000>;
+def : ROSysReg<"SPMCGCR1_EL1",      0b10, 0b000, 0b1001, 0b1101, 0b001>;
+def : ROSysReg<"SPMCFGR_EL1",       0b10, 0b000, 0b1001, 0b1101, 0b111>;
+def : RWSysReg<"SPMROOTCR_EL3",     0b10, 0b110, 0b1001, 0b1110, 0b111>;
+def : RWSysReg<"SPMSCR_EL1",        0b10, 0b111, 0b1001, 0b1110, 0b111>;
 
 // v8.9a/9.4a Instrumentation Extension (FEAT_ITE)
 //                                  Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureITE} }] in {
-def : RWSysReg<"TRCITEEDCR",        0b0, 0b001, 0b0000, 0b0010, 0b001>;
-def : RWSysReg<"TRCITECR_EL1",      0b1, 0b000, 0b0001, 0b0010, 0b011>;
-def : RWSysReg<"TRCITECR_EL12",     0b1, 0b101, 0b0001, 0b0010, 0b011>;
-def : RWSysReg<"TRCITECR_EL2",      0b1, 0b100, 0b0001, 0b0010, 0b011>;
+def : RWSysReg<"TRCITEEDCR",        0b10, 0b001, 0b0000, 0b0010, 0b001>;
+def : RWSysReg<"TRCITECR_EL1",      0b11, 0b000, 0b0001, 0b0010, 0b011>;
+def : RWSysReg<"TRCITECR_EL12",     0b11, 0b101, 0b0001, 0b0010, 0b011>;
+def : RWSysReg<"TRCITECR_EL2",      0b11, 0b100, 0b0001, 0b0010, 0b011>;
 }
 
 // v8.9a/9.4a SPE Data Source Filtering (FEAT_SPE_FDS)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PMSDSFR_EL1",       0b1, 0b000, 0b1001, 0b1010, 0b100>;
+def : RWSysReg<"PMSDSFR_EL1",       0b11, 0b000, 0b1001, 0b1010, 0b100>;
 
 // v8.9a/9.4a RASv2 (FEAT_RASv2)
 //                                  Op0   Op1    CRn     CRm     Op2
 let Requires = [{ {AArch64::FeatureRASv2} }] in
-def : ROSysReg<"ERXGSR_EL1",        0b1, 0b000, 0b0101, 0b0011, 0b010>;
+def : ROSysReg<"ERXGSR_EL1",        0b11, 0b000, 0b0101, 0b0011, 0b010>;
 
 // v8.9a/9.4a Physical Fault Address (FEAT_PFAR)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PFAR_EL1",          0b1, 0b000, 0b0110, 0b0000, 0b101>;
-def : RWSysReg<"PFAR_EL12",         0b1, 0b101, 0b0110, 0b0000, 0b101>;
-def : RWSysReg<"PFAR_EL2",          0b1, 0b100, 0b0110, 0b0000, 0b101>;
+def : RWSysReg<"PFAR_EL1",          0b11, 0b000, 0b0110, 0b0000, 0b101>;
+def : RWSysReg<"PFAR_EL12",         0b11, 0b101, 0b0110, 0b0000, 0b101>;
+def : RWSysReg<"PFAR_EL2",          0b11, 0b100, 0b0110, 0b0000, 0b101>;
 
 // v9.4a Exception-based event profiling (FEAT_EBEP)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PM",                0b1, 0b000, 0b0100, 0b0011, 0b001>;
+def : RWSysReg<"PM",                0b11, 0b000, 0b0100, 0b0011, 0b001>;
 
 // 2023 ISA Extension
 // AArch64 Floating-point Mode Register controls behaviors of the FP8
 // instructions (FEAT_FPMR)
 //                                 Op0   Op1    CRn     CRm     Op2
-def : ROSysReg<"ID_AA64FPFR0_EL1", 0b1, 0b000, 0b0000, 0b0100, 0b111>;
-def : RWSysReg<"FPMR",             0b1, 0b011, 0b0100, 0b0100, 0b010>;
+def : ROSysReg<"ID_AA64FPFR0_EL1", 0b11, 0b000, 0b0000, 0b0100, 0b111>;
+def : RWSysReg<"FPMR",             0b11, 0b011, 0b0100, 0b0100, 0b010>;
 
 // v9.5a Software Stepping Enhancements (FEAT_STEP2)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"MDSTEPOP_EL1",      0b0, 0b000, 0b0000, 0b0101, 0b010>;
+def : RWSysReg<"MDSTEPOP_EL1",      0b10, 0b000, 0b0000, 0b0101, 0b010>;
 
 // v9.5a System PMU zero register (FEAT_SPMU2)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : WOSysReg<"SPMZR_EL0",         0b0, 0b011, 0b1001, 0b1100, 0b100>;
+def : WOSysReg<"SPMZR_EL0",         0b10, 0b011, 0b1001, 0b1100, 0b100>;
 
 // v9.5a Delegated SError exceptions for EL3 (FEAT_E3DSE)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"VDISR_EL3",         0b1, 0b110, 0b1100, 0b0001, 0b001>;
-def : RWSysReg<"VSESR_EL3",         0b1, 0b110, 0b0101, 0b0010, 0b011>;
+def : RWSysReg<"VDISR_EL3",         0b11, 0b110, 0b1100, 0b0001, 0b001>;
+def : RWSysReg<"VSESR_EL3",         0b11, 0b110, 0b0101, 0b0010, 0b011>;
 
 // v9.5a Hardware Dirty State Tracking Structure (FEAT_HDBSS)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"HDBSSBR_EL2",       0b1, 0b100, 0b0010, 0b0011, 0b010>;
-def : RWSysReg<"HDBSSPROD_EL2",     0b1, 0b100, 0b0010, 0b0011, 0b011>;
+def : RWSysReg<"HDBSSBR_EL2",       0b11, 0b100, 0b0010, 0b0011, 0b010>;
+def : RWSysReg<"HDBSSPROD_EL2",     0b11, 0b100, 0b0010, 0b0011, 0b011>;
 
 // v9.5a Hardware Accelerator for Cleaning Dirty State (FEAT_HACDBS)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"HACDBSBR_EL2",      0b1, 0b100, 0b0010, 0b0011, 0b100>;
-def : RWSysReg<"HACDBSCONS_EL2",    0b1, 0b100, 0b0010, 0b0011, 0b101>;
+def : RWSysReg<"HACDBSBR_EL2",      0b11, 0b100, 0b0010, 0b0011, 0b100>;
+def : RWSysReg<"HACDBSCONS_EL2",    0b11, 0b100, 0b0010, 0b0011, 0b101>;
 
 // v9.5a Fine Grained Write Trap EL3 (FEAT_FGWTE3)
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"FGWTE3_EL3",        0b1, 0b110, 0b0001, 0b0001, 0b101>;
+def : RWSysReg<"FGWTE3_EL3",        0b11, 0b110, 0b0001, 0b0001, 0b101>;
 
 // v9.6a Memory partitioning and monitoring (FEAT_MPAM) registers
 //                                        Op0   Op1    CRn     CRm     Op2
-def : ROSysReg<"MPAMBWIDR_EL1",           0b1, 0b000, 0b1010, 0b0100, 0b101>;
-def : RWSysReg<"MPAMBW3_EL3",             0b1, 0b110, 0b1010, 0b0101, 0b100>;
-def : RWSysReg<"MPAMBW2_EL2",             0b1, 0b100, 0b1010, 0b0101, 0b100>;
-def : RWSysReg<"MPAMBW1_EL1",             0b1, 0b000, 0b1010, 0b0101, 0b100>;
-def : RWSysReg<"MPAMBW1_EL12",            0b1, 0b101, 0b1010, 0b0101, 0b100>;
-def : RWSysReg<"MPAMBW0_EL1",             0b1, 0b000, 0b1010, 0b0101, 0b101>;
-def : RWSysReg<"MPAMBWCAP_EL2",           0b1, 0b100, 0b1010, 0b0101, 0b110>;
-def : RWSysReg<"MPAMBWSM_EL1",            0b1, 0b000, 0b1010, 0b0101, 0b111>;
+def : ROSysReg<"MPAMBWIDR_EL1",           0b11, 0b000, 0b1010, 0b0100, 0b101>;
+def : RWSysReg<"MPAMBW3_EL3",             0b11, 0b110, 0b1010, 0b0101, 0b100>;
+def : RWSysReg<"MPAMBW2_EL2",             0b11, 0b100, 0b1010, 0b0101, 0b100>;
+def : RWSysReg<"MPAMBW1_EL1",             0b11, 0b000, 0b1010, 0b0101, 0b100>;
+def : RWSysReg<"MPAMBW1_EL12",            0b11, 0b101, 0b1010, 0b0101, 0b100>;
+def : RWSysReg<"MPAMBW0_EL1",             0b11, 0b000, 0b1010, 0b0101, 0b101>;
+def : RWSysReg<"MPAMBWCAP_EL2",           0b11, 0b100, 0b1010, 0b0101, 0b110>;
+def : RWSysReg<"MPAMBWSM_EL1",            0b11, 0b000, 0b1010, 0b0101, 0b111>;
 
 // v9.7a Memory partitioning and monitoring version 2
 // (FEAT_MPAMv2) registers
 //                               Op0   Op1    CRn     CRm     Op2
 // MPAM system registers that are also available for MPAMv2
-def : RWSysReg<"MPAM0_EL1",    0b1, 0b000, 0b1010, 0b0101, 0b001>;
-def : RWSysReg<"MPAM1_EL1",    0b1, 0b000, 0b1010, 0b0101, 0b000>;
-def : RWSysReg<"MPAM1_EL12",   0b1, 0b101, 0b1010, 0b0101, 0b000>;
-def : RWSysReg<"MPAM2_EL2",    0b1, 0b100, 0b1010, 0b0101, 0b000>;
-def : RWSysReg<"MPAM3_EL3",    0b1, 0b110, 0b1010, 0b0101, 0b000>;
-def : RWSysReg<"MPAMHCR_EL2",  0b1, 0b100, 0b1010, 0b0100, 0b000>;
-def : ROSysReg<"MPAMIDR_EL1",  0b1, 0b000, 0b1010, 0b0100, 0b100>;
+def : RWSysReg<"MPAM0_EL1",    0b11, 0b000, 0b1010, 0b0101, 0b001>;
+def : RWSysReg<"MPAM1_EL1",    0b11, 0b000, 0b1010, 0b0101, 0b000>;
+def : RWSysReg<"MPAM1_EL12",   0b11, 0b101, 0b1010, 0b0101, 0b000>;
+def : RWSysReg<"MPAM2_EL2",    0b11, 0b100, 0b1010, 0b0101, 0b000>;
+def : RWSysReg<"MPAM3_EL3",    0b11, 0b110, 0b1010, 0b0101, 0b000>;
+def : RWSysReg<"MPAMHCR_EL2",  0b11, 0b100, 0b1010, 0b0100, 0b000>;
+def : ROSysReg<"MPAMIDR_EL1",  0b11, 0b000, 0b1010, 0b0100, 0b100>;
 // Only MPAMv2 registers
-def : RWSysReg<"MPAMCTL_EL1",   0b1, 0b000, 0b1010, 0b0101, 0b010>;
-def : RWSysReg<"MPAMCTL_EL12",  0b1, 0b101, 0b1010, 0b0101, 0b010>;
-def : RWSysReg<"MPAMCTL_EL2",   0b1, 0b100, 0b1010, 0b0101, 0b010>;
-def : RWSysReg<"MPAMCTL_EL3",   0b1, 0b110, 0b1010, 0b0101, 0b010>;
+def : RWSysReg<"MPAMCTL_EL1",   0b11, 0b000, 0b1010, 0b0101, 0b010>;
+def : RWSysReg<"MPAMCTL_EL12",  0b11, 0b101, 0b1010, 0b0101, 0b010>;
+def : RWSysReg<"MPAMCTL_EL2",   0b11, 0b100, 0b1010, 0b0101, 0b010>;
+def : RWSysReg<"MPAMCTL_EL3",   0b11, 0b110, 0b1010, 0b0101, 0b010>;
 
 // v9.7a General Improvements
 //                                        Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"SCR2_EL3",                0b1, 0b110, 0b0001, 0b0010, 0b010>;
+def : RWSysReg<"SCR2_EL3",                0b11, 0b110, 0b0001, 0b0010, 0b010>;
 
 //===----------------------------------------------------------------------===//
 // FEAT_SRMASK v9.6a registers
 //===----------------------------------------------------------------------===//
-def : RWSysReg<"SCTLRMASK_EL1",   0b1, 0b000, 0b0001, 0b0100, 0b000>;
-def : RWSysReg<"SCTLRMASK_EL2",   0b1, 0b100, 0b0001, 0b0100, 0b000>;
-def : RWSysReg<"SCTLRMASK_EL12",  0b1, 0b101, 0b0001, 0b0100, 0b000>;
-def : RWSysReg<"CPACRMASK_EL1",   0b1, 0b000, 0b0001, 0b0100, 0b010>;
-def : RWSysReg<"CPTRMASK_EL2",    0b1, 0b100, 0b0001, 0b0100, 0b010>;
-def : RWSysReg<"CPACRMASK_EL12",  0b1, 0b101, 0b0001, 0b0100, 0b010>;
-def : RWSysReg<"SCTLR2MASK_EL1",  0b1, 0b000, 0b0001, 0b0100, 0b011>;
-def : RWSysReg<"SCTLR2MASK_EL2",  0b1, 0b100, 0b0001, 0b0100, 0b011>;
-def : RWSysReg<"SCTLR2MASK_EL12", 0b1, 0b101, 0b0001, 0b0100, 0b011>;
-def : RWSysReg<"CPACRALIAS_EL1",  0b1, 0b000, 0b0001, 0b0100, 0b100>;
-def : RWSysReg<"SCTLRALIAS_EL1",  0b1, 0b000, 0b0001, 0b0100, 0b110>;
-def : RWSysReg<"SCTLR2ALIAS_EL1", 0b1, 0b000, 0b0001, 0b0100, 0b111>;
-def : RWSysReg<"TCRMASK_EL1",     0b1, 0b000, 0b0010, 0b0111, 0b010>;
-def : RWSysReg<"TCRMASK_EL2",     0b1, 0b100, 0b0010, 0b0111, 0b010>;
-def : RWSysReg<"TCRMASK_EL12",    0b1, 0b101, 0b0010, 0b0111, 0b010>;
-def : RWSysReg<"TCR2MASK_EL1",    0b1, 0b000, 0b0010, 0b0111, 0b011>;
-def : RWSysReg<"TCR2MASK_EL2",    0b1, 0b100, 0b0010, 0b0111, 0b011>;
-def : RWSysReg<"TCR2MASK_EL12",   0b1, 0b101, 0b0010, 0b0111, 0b011>;
-def : RWSysReg<"TCRALIAS_EL1",    0b1, 0b000, 0b0010, 0b0111, 0b110>;
-def : RWSysReg<"TCR2ALIAS_EL1",   0b1, 0b000, 0b0010, 0b0111, 0b111>;
-def : RWSysReg<"ACTLRMASK_EL1",   0b1, 0b000, 0b0001, 0b0100, 0b001>;
-def : RWSysReg<"ACTLRMASK_EL2",   0b1, 0b100, 0b0001, 0b0100, 0b001>;
-def : RWSysReg<"ACTLRMASK_EL12",  0b1, 0b101, 0b0001, 0b0100, 0b001>;
-def : RWSysReg<"ACTLRALIAS_EL1",  0b1, 0b000, 0b0001, 0b0100, 0b101>;
+def : RWSysReg<"SCTLRMASK_EL1",   0b11, 0b000, 0b0001, 0b0100, 0b000>;
+def : RWSysReg<"SCTLRMASK_EL2",   0b11, 0b100, 0b0001, 0b0100, 0b000>;
+def : RWSysReg<"SCTLRMASK_EL12",  0b11, 0b101, 0b0001, 0b0100, 0b000>;
+def : RWSysReg<"CPACRMASK_EL1",   0b11, 0b000, 0b0001, 0b0100, 0b010>;
+def : RWSysReg<"CPTRMASK_EL2",    0b11, 0b100, 0b0001, 0b0100, 0b010>;
+def : RWSysReg<"CPACRMASK_EL12",  0b11, 0b101, 0b0001, 0b0100, 0b010>;
+def : RWSysReg<"SCTLR2MASK_EL1",  0b11, 0b000, 0b0001, 0b0100, 0b011>;
+def : RWSysReg<"SCTLR2MASK_EL2",  0b11, 0b100, 0b0001, 0b0100, 0b011>;
+def : RWSysReg<"SCTLR2MASK_EL12", 0b11, 0b101, 0b0001, 0b0100, 0b011>;
+def : RWSysReg<"CPACRALIAS_EL1",  0b11, 0b000, 0b0001, 0b0100, 0b100>;
+def : RWSysReg<"SCTLRALIAS_EL1",  0b11, 0b000, 0b0001, 0b0100, 0b110>;
+def : RWSysReg<"SCTLR2ALIAS_EL1", 0b11, 0b000, 0b0001, 0b0100, 0b111>;
+def : RWSysReg<"TCRMASK_EL1",     0b11, 0b000, 0b0010, 0b0111, 0b010>;
+def : RWSysReg<"TCRMASK_EL2",     0b11, 0b100, 0b0010, 0b0111, 0b010>;
+def : RWSysReg<"TCRMASK_EL12",    0b11, 0b101, 0b0010, 0b0111, 0b010>;
+def : RWSysReg<"TCR2MASK_EL1",    0b11, 0b000, 0b0010, 0b0111, 0b011>;
+def : RWSysReg<"TCR2MASK_EL2",    0b11, 0b100, 0b0010, 0b0111, 0b011>;
+def : RWSysReg<"TCR2MASK_EL12",   0b11, 0b101, 0b0010, 0b0111, 0b011>;
+def : RWSysReg<"TCRALIAS_EL1",    0b11, 0b000, 0b0010, 0b0111, 0b110>;
+def : RWSysReg<"TCR2ALIAS_EL1",   0b11, 0b000, 0b0010, 0b0111, 0b111>;
+def : RWSysReg<"ACTLRMASK_EL1",   0b11, 0b000, 0b0001, 0b0100, 0b001>;
+def : RWSysReg<"ACTLRMASK_EL2",   0b11, 0b100, 0b0001, 0b0100, 0b001>;
+def : RWSysReg<"ACTLRMASK_EL12",  0b11, 0b101, 0b0001, 0b0100, 0b001>;
+def : RWSysReg<"ACTLRALIAS_EL1",  0b11, 0b000, 0b0001, 0b0100, 0b101>;
 
 //===----------------------------------------------------------------------===//
 // v9.6a PCDPHINT instruction options.
@@ -2485,20 +2485,20 @@ def KEEP : PHint<0b00, 0b000, 0b0000, 0b0000, 0b000, "keep">;
 def STRM : PHint<0b00, 0b000, 0b0000, 0b0000, 0b001, "strm">;
 
 // v9.6a Realm management extension enhancements
-def : RWSysReg<"GPCBW_EL3", 0b1, 0b110, 0b0010, 0b0001, 0b101>;
+def : RWSysReg<"GPCBW_EL3", 0b11, 0b110, 0b0010, 0b0001, 0b101>;
 
 // v9.6a Statistical Profiling Extension exception registers (FEAT_SPE_EXC)
 //                                Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"PMBMAR_EL1",      0b1, 0b000, 0b1001, 0b1010, 0b101>;
-def : RWSysReg<"PMBSR_EL12",      0b1, 0b101, 0b1001, 0b1010, 0b011>;
-def : RWSysReg<"PMBSR_EL2",       0b1, 0b100, 0b1001, 0b1010, 0b011>;
-def : RWSysReg<"PMBSR_EL3",       0b1, 0b110, 0b1001, 0b1010, 0b011>;
+def : RWSysReg<"PMBMAR_EL1",      0b11, 0b000, 0b1001, 0b1010, 0b101>;
+def : RWSysReg<"PMBSR_EL12",      0b11, 0b101, 0b1001, 0b1010, 0b011>;
+def : RWSysReg<"PMBSR_EL2",       0b11, 0b100, 0b1001, 0b1010, 0b011>;
+def : RWSysReg<"PMBSR_EL3",       0b11, 0b110, 0b1001, 0b1010, 0b011>;
 
 // v9.6a Trace Buffer Management Events exception registers (FEAT_TRBE_EXC)
 //                                Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TRBSR_EL12",      0b1, 0b101, 0b1001, 0b1011, 0b011>;
-def : RWSysReg<"TRBSR_EL2",       0b1, 0b100, 0b1001, 0b1011, 0b011>;
-def : RWSysReg<"TRBSR_EL3",       0b1, 0b110, 0b1001, 0b1011, 0b011>;
+def : RWSysReg<"TRBSR_EL12",      0b11, 0b101, 0b1001, 0b1011, 0b011>;
+def : RWSysReg<"TRBSR_EL2",       0b11, 0b100, 0b1001, 0b1011, 0b011>;
+def : RWSysReg<"TRBSR_EL3",       0b11, 0b110, 0b1001, 0b1011, 0b011>;
 
 // v9.6 FEAT_PoPS
 //
@@ -2513,52 +2513,52 @@ def : DC<"CIGDVAPS",  0b000, 0b0111, 0b1111, 0b101>;
 // v9.7a TLBI domains system registers (MemSys)
 foreach n = 0-3 in {
   defvar nb = !cast<bits<3>>(n);
-  def : RWSysReg<"VTLBID"#n#"_EL2", 0b1,  0b100, 0b0010, 0b1000, nb>;
+  def : RWSysReg<"VTLBID"#n#"_EL2", 0b11,  0b100, 0b0010, 0b1000, nb>;
 }
 
 foreach n = 0-3 in {
   defvar nb = !cast<bits<3>>(n);
-  def : RWSysReg<"VTLBIDOS"#n#"_EL2", 0b1,  0b100, 0b0010, 0b1001, nb>;
+  def : RWSysReg<"VTLBIDOS"#n#"_EL2", 0b11,  0b100, 0b0010, 0b1001, nb>;
 }
 
-def : ROSysReg<"TLBIDIDR_EL1",      0b1,  0b000, 0b1010, 0b0100, 0b110>;
+def : ROSysReg<"TLBIDIDR_EL1",      0b11,  0b000, 0b1010, 0b0100, 0b110>;
 
 // v9.7-A GICv5 (FEAT_GCIE)
 // CPU Interface Registers
 //                                        Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"ICC_APR_EL1",             0b1, 0b001, 0b1100, 0b0000, 0b000>;
-def : RWSysReg<"ICC_APR_EL3",             0b1, 0b110, 0b1100, 0b1000, 0b000>;
-def : RWSysReg<"ICC_CR0_EL1",             0b1, 0b001, 0b1100, 0b0000, 0b001>;
-def : RWSysReg<"ICC_CR0_EL3",             0b1, 0b110, 0b1100, 0b1001, 0b000>;
-def : ROSysReg<"ICC_DOMHPPIR_EL3",        0b1, 0b110, 0b1100, 0b1000, 0b010>;
-def : ROSysReg<"ICC_HAPR_EL1",            0b1, 0b001, 0b1100, 0b0000, 0b011>;
-def : ROSysReg<"ICC_HPPIR_EL1",           0b1, 0b000, 0b1100, 0b1010, 0b011>;
-def : ROSysReg<"ICC_HPPIR_EL3",           0b1, 0b110, 0b1100, 0b1001, 0b001>;
-def : ROSysReg<"ICC_IAFFIDR_EL1",         0b1, 0b000, 0b1100, 0b1010, 0b101>;
-def : RWSysReg<"ICC_ICSR_EL1",            0b1, 0b000, 0b1100, 0b1010, 0b100>;
-def : ROSysReg<"ICC_IDR0_EL1",            0b1, 0b000, 0b1100, 0b1010, 0b010>;
-def : RWSysReg<"ICC_PCR_EL1",             0b1, 0b001, 0b1100, 0b0000, 0b010>;
-def : RWSysReg<"ICC_PCR_EL3",             0b1, 0b110, 0b1100, 0b1000, 0b001>;
+def : RWSysReg<"ICC_APR_EL1",             0b11, 0b001, 0b1100, 0b0000, 0b000>;
+def : RWSysReg<"ICC_APR_EL3",             0b11, 0b110, 0b1100, 0b1000, 0b000>;
+def : RWSysReg<"ICC_CR0_EL1",             0b11, 0b001, 0b1100, 0b0000, 0b001>;
+def : RWSysReg<"ICC_CR0_EL3",             0b11, 0b110, 0b1100, 0b1001, 0b000>;
+def : ROSysReg<"ICC_DOMHPPIR_EL3",        0b11, 0b110, 0b1100, 0b1000, 0b010>;
+def : ROSysReg<"ICC_HAPR_EL1",            0b11, 0b001, 0b1100, 0b0000, 0b011>;
+def : ROSysReg<"ICC_HPPIR_EL1",           0b11, 0b000, 0b1100, 0b1010, 0b011>;
+def : ROSysReg<"ICC_HPPIR_EL3",           0b11, 0b110, 0b1100, 0b1001, 0b001>;
+def : ROSysReg<"ICC_IAFFIDR_EL1",         0b11, 0b000, 0b1100, 0b1010, 0b101>;
+def : RWSysReg<"ICC_ICSR_EL1",            0b11, 0b000, 0b1100, 0b1010, 0b100>;
+def : ROSysReg<"ICC_IDR0_EL1",            0b11, 0b000, 0b1100, 0b1010, 0b010>;
+def : RWSysReg<"ICC_PCR_EL1",             0b11, 0b001, 0b1100, 0b0000, 0b010>;
+def : RWSysReg<"ICC_PCR_EL3",             0b11, 0b110, 0b1100, 0b1000, 0b001>;
 
 // Virtual CPU Interface Registers
 //                                        Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"ICV_APR_EL1",             0b1, 0b001, 0b1100, 0b0000, 0b000>;
-def : RWSysReg<"ICV_CR0_EL1",             0b1, 0b001, 0b1100, 0b0000, 0b001>;
-def : RWSysReg<"ICV_HAPR_EL1",            0b1, 0b001, 0b1100, 0b0000, 0b011>;
-def : RWSysReg<"ICV_HPPIR_EL1",           0b1, 0b000, 0b1100, 0b1010, 0b011>;
-def : RWSysReg<"ICV_PCR_EL1",             0b1, 0b001, 0b1100, 0b0000, 0b010>;
+def : RWSysReg<"ICV_APR_EL1",             0b11, 0b001, 0b1100, 0b0000, 0b000>;
+def : RWSysReg<"ICV_CR0_EL1",             0b11, 0b001, 0b1100, 0b0000, 0b001>;
+def : RWSysReg<"ICV_HAPR_EL1",            0b11, 0b001, 0b1100, 0b0000, 0b011>;
+def : RWSysReg<"ICV_HPPIR_EL1",           0b11, 0b000, 0b1100, 0b1010, 0b011>;
+def : RWSysReg<"ICV_PCR_EL1",             0b11, 0b001, 0b1100, 0b0000, 0b010>;
 
 foreach n=0-3 in {
   defvar nb = !cast<bits<2>>(n);
 //                                             Op0   Op1    CRn     CRm     Op2
-  def : RWSysReg<"ICC_PPI_DOMAINR"#n#"_EL3",   0b1, 0b110, 0b1100, 0b1000, {0b1,nb{1-0}}>;
+  def : RWSysReg<"ICC_PPI_DOMAINR"#n#"_EL3",   0b11, 0b110, 0b1100, 0b1000, {0b1,nb{1-0}}>;
 
 }
 
 foreach n=0-15 in{
   defvar nb = !cast<bits<4>>(n);
 //                                               Op0   Op1    CRn     CRm            Op2
-  def : RWSysReg<"ICC_PPI_PRIORITYR"#n#"_EL1",   0b1, 0b000, 0b1100, {0b111,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"ICC_PPI_PRIORITYR"#n#"_EL1",   0b11, 0b000, 0b1100, {0b111,nb{3}}, nb{2-0}>;
 }
 
 // PPI and Virtual PPI Registers
@@ -2566,12 +2566,12 @@ multiclass PPIRegisters<string prefix> {
   foreach n=0-1 in {
     defvar nb = !cast<bit>(n);
 //                                                  Op0   Op1    CRn     CRm     Op2
-    def : RWSysReg<prefix#"_PPI_CACTIVER"#n#"_EL1", 0b1, 0b000, 0b1100, 0b1101, {0b00,nb}>;
-    def : RWSysReg<prefix#"_PPI_CPENDR"#n#"_EL1",   0b1, 0b000, 0b1100, 0b1101, {0b10,nb}>;
-    def : RWSysReg<prefix#"_PPI_ENABLER"#n#"_EL1",  0b1, 0b000, 0b1100, 0b1010, {0b11,nb}>;
-    def : RWSysReg<prefix#"_PPI_SACTIVER"#n#"_EL1", 0b1, 0b000, 0b1100, 0b1101, {0b01,nb}>;
-    def : RWSysReg<prefix#"_PPI_SPENDR"#n#"_EL1",   0b1, 0b000, 0b1100, 0b1101, {0b11,nb}>;
-    def : RWSysReg<prefix#"_PPI_HMR"#n#"_EL1",      0b1, 0b000, 0b1100, 0b1010, {0b00,nb}>;
+    def : RWSysReg<prefix#"_PPI_CACTIVER"#n#"_EL1", 0b11, 0b000, 0b1100, 0b1101, {0b00,nb}>;
+    def : RWSysReg<prefix#"_PPI_CPENDR"#n#"_EL1",   0b11, 0b000, 0b1100, 0b1101, {0b10,nb}>;
+    def : RWSysReg<prefix#"_PPI_ENABLER"#n#"_EL1",  0b11, 0b000, 0b1100, 0b1010, {0b11,nb}>;
+    def : RWSysReg<prefix#"_PPI_SACTIVER"#n#"_EL1", 0b11, 0b000, 0b1100, 0b1101, {0b01,nb}>;
+    def : RWSysReg<prefix#"_PPI_SPENDR"#n#"_EL1",   0b11, 0b000, 0b1100, 0b1101, {0b11,nb}>;
+    def : RWSysReg<prefix#"_PPI_HMR"#n#"_EL1",      0b11, 0b000, 0b1100, 0b1010, {0b00,nb}>;
   }
 }
 
@@ -2581,33 +2581,33 @@ defm : PPIRegisters<"ICV">;  // Virtual PPI Registers
 foreach n=0-15 in {
   defvar nb = !cast<bits<4>>(n);
 //                                               Op0   Op1    CRn     CRm            Op2
-  def : RWSysReg<"ICV_PPI_PRIORITYR"#n#"_EL1",   0b1, 0b000, 0b1100, {0b111,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"ICV_PPI_PRIORITYR"#n#"_EL1",   0b11, 0b000, 0b1100, {0b111,nb{3}}, nb{2-0}>;
 }
 
 // Hypervisor Control Registers
 //                                    Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"ICH_APR_EL2",         0b1, 0b100, 0b1100, 0b1000, 0b100>;
-def : RWSysReg<"ICH_CONTEXTR_EL2",    0b1, 0b100, 0b1100, 0b1011, 0b110>;
-def : RWSysReg<"ICH_HFGITR_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b111>;
-def : RWSysReg<"ICH_HFGRTR_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b100>;
-def : RWSysReg<"ICH_HFGWTR_EL2",      0b1, 0b100, 0b1100, 0b1001, 0b110>;
-def : ROSysReg<"ICH_HPPIR_EL2",       0b1, 0b100, 0b1100, 0b1000, 0b101>;
-def : RWSysReg<"ICH_VCTLR_EL2",       0b1, 0b100, 0b1100, 0b1011, 0b100>;
+def : RWSysReg<"ICH_APR_EL2",         0b11, 0b100, 0b1100, 0b1000, 0b100>;
+def : RWSysReg<"ICH_CONTEXTR_EL2",    0b11, 0b100, 0b1100, 0b1011, 0b110>;
+def : RWSysReg<"ICH_HFGITR_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b111>;
+def : RWSysReg<"ICH_HFGRTR_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b100>;
+def : RWSysReg<"ICH_HFGWTR_EL2",      0b11, 0b100, 0b1100, 0b1001, 0b110>;
+def : ROSysReg<"ICH_HPPIR_EL2",       0b11, 0b100, 0b1100, 0b1000, 0b101>;
+def : RWSysReg<"ICH_VCTLR_EL2",       0b11, 0b100, 0b1100, 0b1011, 0b100>;
 
 foreach n=0-1 in {
   defvar nb = !cast<bit>(n);
 //                                           Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"ICH_PPI_ACTIVER"#n#"_EL2",   0b1, 0b100, 0b1100, 0b1010, {0b11,nb}>;
-def : RWSysReg<"ICH_PPI_DVIR"#n#"_EL2",      0b1, 0b100, 0b1100, 0b1010, {0b00,nb}>;
-def : RWSysReg<"ICH_PPI_ENABLER"#n#"_EL2",   0b1, 0b100, 0b1100, 0b1010, {0b01,nb}>;
-def : RWSysReg<"ICH_PPI_HVIR"#n#"_EL2",      0b1, 0b100, 0b1100, 0b0111, {0b00,nb}>;
-def : RWSysReg<"ICH_PPI_PENDR"#n#"_EL2",     0b1, 0b100, 0b1100, 0b1010, {0b10,nb}>;
+def : RWSysReg<"ICH_PPI_ACTIVER"#n#"_EL2",   0b11, 0b100, 0b1100, 0b1010, {0b11,nb}>;
+def : RWSysReg<"ICH_PPI_DVIR"#n#"_EL2",      0b11, 0b100, 0b1100, 0b1010, {0b00,nb}>;
+def : RWSysReg<"ICH_PPI_ENABLER"#n#"_EL2",   0b11, 0b100, 0b1100, 0b1010, {0b01,nb}>;
+def : RWSysReg<"ICH_PPI_HVIR"#n#"_EL2",      0b11, 0b100, 0b1100, 0b0111, {0b00,nb}>;
+def : RWSysReg<"ICH_PPI_PENDR"#n#"_EL2",     0b11, 0b100, 0b1100, 0b1010, {0b10,nb}>;
 }
 
 foreach n=0-15 in {
   defvar nb = !cast<bits<4>>(n);
 //                                               Op0   Op1    CRn     CRm            Op2
-  def : RWSysReg<"ICH_PPI_PRIORITYR"#n#"_EL2",   0b1, 0b100, 0b1100, {0b111,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"ICH_PPI_PRIORITYR"#n#"_EL2",   0b11, 0b100, 0b1100, {0b111,nb{3}}, nb{2-0}>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -2729,109 +2729,109 @@ def : GIC<"ldrcfg",   0b110, 0b1100, 0b0001, 0b101>;
 
 // Stage 1 Permission Overlays Extension 2 (FEAT_S1POE2).
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"DPOTBR0_EL1",       0b1, 0b000, 0b0010, 0b0000, 0b110>;
-def : RWSysReg<"DPOTBR0_EL12",      0b1, 0b101, 0b0010, 0b0000, 0b110>;
-def : RWSysReg<"DPOTBR1_EL1",       0b1, 0b000, 0b0010, 0b0000, 0b111>;
-def : RWSysReg<"DPOTBR1_EL12",      0b1, 0b101, 0b0010, 0b0000, 0b111>;
-def : RWSysReg<"DPOTBR0_EL2",       0b1, 0b100, 0b0010, 0b0000, 0b110>;
-def : RWSysReg<"DPOTBR1_EL2",       0b1, 0b100, 0b0010, 0b0000, 0b111>;
-def : RWSysReg<"DPOTBR0_EL3",       0b1, 0b110, 0b0010, 0b0000, 0b110>;
+def : RWSysReg<"DPOTBR0_EL1",       0b11, 0b000, 0b0010, 0b0000, 0b110>;
+def : RWSysReg<"DPOTBR0_EL12",      0b11, 0b101, 0b0010, 0b0000, 0b110>;
+def : RWSysReg<"DPOTBR1_EL1",       0b11, 0b000, 0b0010, 0b0000, 0b111>;
+def : RWSysReg<"DPOTBR1_EL12",      0b11, 0b101, 0b0010, 0b0000, 0b111>;
+def : RWSysReg<"DPOTBR0_EL2",       0b11, 0b100, 0b0010, 0b0000, 0b110>;
+def : RWSysReg<"DPOTBR1_EL2",       0b11, 0b100, 0b0010, 0b0000, 0b111>;
+def : RWSysReg<"DPOTBR0_EL3",       0b11, 0b110, 0b0010, 0b0000, 0b110>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"IRTBRU_EL1",        0b1, 0b000, 0b0010, 0b0000, 0b100>;
-def : RWSysReg<"IRTBRU_EL12",       0b1, 0b101, 0b0010, 0b0000, 0b100>;
-def : RWSysReg<"IRTBRP_EL1",        0b1, 0b000, 0b0010, 0b0000, 0b101>;
-def : RWSysReg<"IRTBRP_EL12",       0b1, 0b101, 0b0010, 0b0000, 0b101>;
-def : RWSysReg<"IRTBRU_EL2",        0b1, 0b100, 0b0010, 0b0000, 0b100>;
-def : RWSysReg<"IRTBRP_EL2",        0b1, 0b100, 0b0010, 0b0000, 0b101>;
-def : RWSysReg<"IRTBRP_EL3",        0b1, 0b110, 0b0010, 0b0000, 0b101>;
+def : RWSysReg<"IRTBRU_EL1",        0b11, 0b000, 0b0010, 0b0000, 0b100>;
+def : RWSysReg<"IRTBRU_EL12",       0b11, 0b101, 0b0010, 0b0000, 0b100>;
+def : RWSysReg<"IRTBRP_EL1",        0b11, 0b000, 0b0010, 0b0000, 0b101>;
+def : RWSysReg<"IRTBRP_EL12",       0b11, 0b101, 0b0010, 0b0000, 0b101>;
+def : RWSysReg<"IRTBRU_EL2",        0b11, 0b100, 0b0010, 0b0000, 0b100>;
+def : RWSysReg<"IRTBRP_EL2",        0b11, 0b100, 0b0010, 0b0000, 0b101>;
+def : RWSysReg<"IRTBRP_EL3",        0b11, 0b110, 0b0010, 0b0000, 0b101>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TTTBRU_EL1",        0b1, 0b000, 0b1010, 0b0010, 0b110>;
-def : RWSysReg<"TTTBRU_EL12",       0b1, 0b101, 0b1010, 0b0010, 0b110>;
-def : RWSysReg<"TTTBRP_EL1",        0b1, 0b000, 0b1010, 0b0010, 0b111>;
-def : RWSysReg<"TTTBRP_EL12",       0b1, 0b101, 0b1010, 0b0010, 0b111>;
-def : RWSysReg<"TTTBRU_EL2",        0b1, 0b100, 0b1010, 0b0010, 0b110>;
-def : RWSysReg<"TTTBRP_EL2",        0b1, 0b100, 0b1010, 0b0010, 0b111>;
-def : RWSysReg<"TTTBRP_EL3",        0b1, 0b110, 0b1010, 0b0010, 0b111>;
+def : RWSysReg<"TTTBRU_EL1",        0b11, 0b000, 0b1010, 0b0010, 0b110>;
+def : RWSysReg<"TTTBRU_EL12",       0b11, 0b101, 0b1010, 0b0010, 0b110>;
+def : RWSysReg<"TTTBRP_EL1",        0b11, 0b000, 0b1010, 0b0010, 0b111>;
+def : RWSysReg<"TTTBRP_EL12",       0b11, 0b101, 0b1010, 0b0010, 0b111>;
+def : RWSysReg<"TTTBRU_EL2",        0b11, 0b100, 0b1010, 0b0010, 0b110>;
+def : RWSysReg<"TTTBRP_EL2",        0b11, 0b100, 0b1010, 0b0010, 0b111>;
+def : RWSysReg<"TTTBRP_EL3",        0b11, 0b110, 0b1010, 0b0010, 0b111>;
 
 foreach n = 0-15 in {
   defvar nb = !cast<bits<4>>(n);
   //                                Op0   Op1    CRn     CRm            Op2
-  def : RWSysReg<"FGDTP"#n#"_EL1",  0b1, 0b000, 0b0011, {0b001,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"FGDTP"#n#"_EL2",  0b1, 0b100, 0b0011, {0b001,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"FGDTP"#n#"_EL12", 0b1, 0b101, 0b0011, {0b001,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"FGDTP"#n#"_EL3",  0b1, 0b110, 0b0011, {0b001,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTP"#n#"_EL1",  0b11, 0b000, 0b0011, {0b001,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTP"#n#"_EL2",  0b11, 0b100, 0b0011, {0b001,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTP"#n#"_EL12", 0b11, 0b101, 0b0011, {0b001,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTP"#n#"_EL3",  0b11, 0b110, 0b0011, {0b001,nb{3}}, nb{2-0}>;
 
-  def : RWSysReg<"FGDTU"#n#"_EL1",  0b1, 0b000, 0b0011, {0b010,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"FGDTU"#n#"_EL2",  0b1, 0b100, 0b0011, {0b010,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"FGDTU"#n#"_EL12", 0b1, 0b101, 0b0011, {0b010,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTU"#n#"_EL1",  0b11, 0b000, 0b0011, {0b010,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTU"#n#"_EL2",  0b11, 0b100, 0b0011, {0b010,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"FGDTU"#n#"_EL12", 0b11, 0b101, 0b0011, {0b010,nb{3}}, nb{2-0}>;
 }
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"LDSTT_EL1",         0b1, 0b000, 0b0010, 0b0001, 0b111>;
-def : RWSysReg<"LDSTT_EL12",        0b1, 0b101, 0b0010, 0b0001, 0b111>;
-def : RWSysReg<"LDSTT_EL2",         0b1, 0b100, 0b0010, 0b0001, 0b111>;
+def : RWSysReg<"LDSTT_EL1",         0b11, 0b000, 0b0010, 0b0001, 0b111>;
+def : RWSysReg<"LDSTT_EL12",        0b11, 0b101, 0b0010, 0b0001, 0b111>;
+def : RWSysReg<"LDSTT_EL2",         0b11, 0b100, 0b0010, 0b0001, 0b111>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TINDEX_EL0",        0b1, 0b011, 0b0100, 0b0000, 0b011>;
-def : RWSysReg<"TINDEX_EL1",        0b1, 0b000, 0b0100, 0b0000, 0b011>;
-def : RWSysReg<"TINDEX_EL2",        0b1, 0b100, 0b0100, 0b0000, 0b011>;
-def : RWSysReg<"TINDEX_EL12",       0b1, 0b101, 0b0100, 0b0000, 0b011>;
-def : RWSysReg<"TINDEX_EL3",        0b1, 0b110, 0b0100, 0b0000, 0b011>;
+def : RWSysReg<"TINDEX_EL0",        0b11, 0b011, 0b0100, 0b0000, 0b011>;
+def : RWSysReg<"TINDEX_EL1",        0b11, 0b000, 0b0100, 0b0000, 0b011>;
+def : RWSysReg<"TINDEX_EL2",        0b11, 0b100, 0b0100, 0b0000, 0b011>;
+def : RWSysReg<"TINDEX_EL12",       0b11, 0b101, 0b0100, 0b0000, 0b011>;
+def : RWSysReg<"TINDEX_EL3",        0b11, 0b110, 0b0100, 0b0000, 0b011>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"STINDEX_EL1",       0b1, 0b000, 0b0100, 0b0000, 0b010>;
-def : RWSysReg<"STINDEX_EL2",       0b1, 0b100, 0b0100, 0b0000, 0b010>;
-def : RWSysReg<"STINDEX_EL12",      0b1, 0b101, 0b0100, 0b0000, 0b010>;
-def : RWSysReg<"STINDEX_EL3",       0b1, 0b110, 0b0100, 0b0000, 0b010>;
+def : RWSysReg<"STINDEX_EL1",       0b11, 0b000, 0b0100, 0b0000, 0b010>;
+def : RWSysReg<"STINDEX_EL2",       0b11, 0b100, 0b0100, 0b0000, 0b010>;
+def : RWSysReg<"STINDEX_EL12",      0b11, 0b101, 0b0100, 0b0000, 0b010>;
+def : RWSysReg<"STINDEX_EL3",       0b11, 0b110, 0b0100, 0b0000, 0b010>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"TPIDR3_EL0",        0b1, 0b011, 0b1101, 0b0000, 0b000>;
-def : RWSysReg<"TPIDR3_EL1",        0b1, 0b000, 0b1101, 0b0000, 0b000>;
-def : RWSysReg<"TPIDR3_EL12",       0b1, 0b101, 0b1101, 0b0000, 0b000>;
-def : RWSysReg<"TPIDR3_EL2",        0b1, 0b100, 0b1101, 0b0000, 0b000>;
-def : RWSysReg<"TPIDR3_EL3",        0b1, 0b110, 0b1101, 0b0000, 0b000>;
+def : RWSysReg<"TPIDR3_EL0",        0b11, 0b011, 0b1101, 0b0000, 0b000>;
+def : RWSysReg<"TPIDR3_EL1",        0b11, 0b000, 0b1101, 0b0000, 0b000>;
+def : RWSysReg<"TPIDR3_EL12",       0b11, 0b101, 0b1101, 0b0000, 0b000>;
+def : RWSysReg<"TPIDR3_EL2",        0b11, 0b100, 0b1101, 0b0000, 0b000>;
+def : RWSysReg<"TPIDR3_EL3",        0b11, 0b110, 0b1101, 0b0000, 0b000>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"VNCCR_EL2",         0b1, 0b100, 0b0010, 0b0010, 0b001>;
+def : RWSysReg<"VNCCR_EL2",         0b11, 0b100, 0b0010, 0b0010, 0b001>;
 
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"DPOCR_EL0",         0b1, 0b011, 0b0100, 0b0101, 0b010>;
+def : RWSysReg<"DPOCR_EL0",         0b11, 0b011, 0b0100, 0b0101, 0b010>;
 
 foreach n = 0-15 in {
   defvar nb = !cast<bits<4>>(n);
   //                                 Op0   Op1    CRn      CRm           Op2
-  def : RWSysReg<"AFGDTP"#n#"_EL1",  0b1, 0b000, 0b0011, {0b011,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"AFGDTU"#n#"_EL1",  0b1, 0b000, 0b0011, {0b100,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"AFGDTP"#n#"_EL2",  0b1, 0b100, 0b0011, {0b011,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"AFGDTU"#n#"_EL2",  0b1, 0b100, 0b0011, {0b100,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"AFGDTP"#n#"_EL12", 0b1, 0b101, 0b0011, {0b011,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"AFGDTU"#n#"_EL12", 0b1, 0b101, 0b0011, {0b100,nb{3}}, nb{2-0}>;
-  def : RWSysReg<"AFGDTP"#n#"_EL3",  0b1, 0b110, 0b0011, {0b011,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTP"#n#"_EL1",  0b11, 0b000, 0b0011, {0b011,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTU"#n#"_EL1",  0b11, 0b000, 0b0011, {0b100,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTP"#n#"_EL2",  0b11, 0b100, 0b0011, {0b011,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTU"#n#"_EL2",  0b11, 0b100, 0b0011, {0b100,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTP"#n#"_EL12", 0b11, 0b101, 0b0011, {0b011,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTU"#n#"_EL12", 0b11, 0b101, 0b0011, {0b100,nb{3}}, nb{2-0}>;
+  def : RWSysReg<"AFGDTP"#n#"_EL3",  0b11, 0b110, 0b0011, {0b011,nb{3}}, nb{2-0}>;
 }
 
 // Extra S1POE2 Hypervisor Configuration Registers
 //                                  Op0   Op1    CRn     CRm     Op2
-def : RWSysReg<"HCRMASK_EL2",       0b1, 0b100, 0b0001, 0b0101, 0b110>;
-def : RWSysReg<"HCRXMASK_EL2",      0b1, 0b100, 0b0001, 0b0101, 0b111>;
-def : RWSysReg<"NVHCR_EL2",         0b1, 0b100, 0b0001, 0b0101, 0b000>;
-def : RWSysReg<"NVHCRX_EL2",        0b1, 0b100, 0b0001, 0b0101, 0b001>;
-def : RWSysReg<"NVHCRMASK_EL2",     0b1, 0b100, 0b0001, 0b0101, 0b100>;
-def : RWSysReg<"NVHCRXMASK_EL2",    0b1, 0b100, 0b0001, 0b0101, 0b101>;
+def : RWSysReg<"HCRMASK_EL2",       0b11, 0b100, 0b0001, 0b0101, 0b110>;
+def : RWSysReg<"HCRXMASK_EL2",      0b11, 0b100, 0b0001, 0b0101, 0b111>;
+def : RWSysReg<"NVHCR_EL2",         0b11, 0b100, 0b0001, 0b0101, 0b000>;
+def : RWSysReg<"NVHCRX_EL2",        0b11, 0b100, 0b0001, 0b0101, 0b001>;
+def : RWSysReg<"NVHCRMASK_EL2",     0b11, 0b100, 0b0001, 0b0101, 0b100>;
+def : RWSysReg<"NVHCRXMASK_EL2",    0b11, 0b100, 0b0001, 0b0101, 0b101>;
 
 // S1POE2 Thread private state extension (FEAT_TPS/TPSP).
 foreach n = 0-1 in {
   defvar nb = !cast<bits<1>>(n);
   //                                Op0   Op1    CRn     CRm     Op2
-  def : RWSysReg<"TPMIN"#n#"_EL0",  0b1, 0b011, 0b0010, 0b0010, {0b1,nb,0}>;
-  def : RWSysReg<"TPMAX"#n#"_EL0",  0b1, 0b011, 0b0010, 0b0010, {0b1,nb,1}>;
-  def : RWSysReg<"TPMIN"#n#"_EL1",  0b1, 0b000, 0b0010, 0b0010, {0b1,nb,0}>;
-  def : RWSysReg<"TPMAX"#n#"_EL1",  0b1, 0b000, 0b0010, 0b0010, {0b1,nb,1}>;
-  def : RWSysReg<"TPMIN"#n#"_EL2",  0b1, 0b100, 0b0010, 0b0010, {0b1,nb,0}>;
-  def : RWSysReg<"TPMAX"#n#"_EL2",  0b1, 0b100, 0b0010, 0b0010, {0b1,nb,1}>;
-  def : RWSysReg<"TPMIN"#n#"_EL12", 0b1, 0b101, 0b0010, 0b0010, {0b1,nb,0}>;
-  def : RWSysReg<"TPMAX"#n#"_EL12", 0b1, 0b101, 0b0010, 0b0010, {0b1,nb,1}>;
+  def : RWSysReg<"TPMIN"#n#"_EL0",  0b11, 0b011, 0b0010, 0b0010, {0b1,nb,0}>;
+  def : RWSysReg<"TPMAX"#n#"_EL0",  0b11, 0b011, 0b0010, 0b0010, {0b1,nb,1}>;
+  def : RWSysReg<"TPMIN"#n#"_EL1",  0b11, 0b000, 0b0010, 0b0010, {0b1,nb,0}>;
+  def : RWSysReg<"TPMAX"#n#"_EL1",  0b11, 0b000, 0b0010, 0b0010, {0b1,nb,1}>;
+  def : RWSysReg<"TPMIN"#n#"_EL2",  0b11, 0b100, 0b0010, 0b0010, {0b1,nb,0}>;
+  def : RWSysReg<"TPMAX"#n#"_EL2",  0b11, 0b100, 0b0010, 0b0010, {0b1,nb,1}>;
+  def : RWSysReg<"TPMIN"#n#"_EL12", 0b11, 0b101, 0b0010, 0b0010, {0b1,nb,0}>;
+  def : RWSysReg<"TPMAX"#n#"_EL12", 0b11, 0b101, 0b0010, 0b0010, {0b1,nb,1}>;
 }
 
 class PLBIEntry<bits<3> op1, bits<4> crn, bits<4> crm, bits<3> op2, string name,

diff  --git a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
index e4cf805b13092..c2fccc91cfec9 100644
--- a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
+++ b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
@@ -175,26 +175,21 @@ uint32_t AArch64SysReg::parseGenericRegister(StringRef Name) {
   Ops[3].getAsInteger(10, CRn);
   Ops[4].getAsInteger(10, CRm);
   Ops[5].getAsInteger(10, Op2);
+  Bits = (Op0 << 14) | (Op1 << 11) | (CRn << 7) | (CRm << 3) | Op2;
 
-  if (Op0 < 2)
-    return -1; // Op0 must be 2 or 3 for a valid system register.
-
-  // Top bit of Op0 is assumed to be 1.
-  Bits = ((Op0 & 0x1) << 14) | (Op1 << 11) | (CRn << 7) | (CRm << 3) | Op2;
   return Bits;
 }
 
 std::string AArch64SysReg::genericRegisterString(uint32_t Bits) {
-  assert(Bits < 0x8000);
-  uint32_t Op0 = (Bits >> 14) & 0x1;
+  assert(Bits < 0x10000);
+  uint32_t Op0 = (Bits >> 14) & 0x3;
   uint32_t Op1 = (Bits >> 11) & 0x7;
   uint32_t CRn = (Bits >> 7) & 0xf;
   uint32_t CRm = (Bits >> 3) & 0xf;
   uint32_t Op2 = Bits & 0x7;
 
-  // Add the top bit of Op0 back in.
-  return "S" + utostr(Op0 | 0x2) + "_" + utostr(Op1) + "_C" + utostr(CRn) +
-         "_C" + utostr(CRm) + "_" + utostr(Op2);
+  return "S" + utostr(Op0) + "_" + utostr(Op1) + "_C" + utostr(CRn) + "_C" +
+         utostr(CRm) + "_" + utostr(Op2);
 }
 
 namespace llvm {

diff  --git a/llvm/test/CodeGen/AArch64/aarch64-sme-za-call-lowering.ll b/llvm/test/CodeGen/AArch64/aarch64-sme-za-call-lowering.ll
index 0539d5e9ef2eb..d956a231ba922 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-sme-za-call-lowering.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-sme-za-call-lowering.ll
@@ -25,16 +25,16 @@ define void @requires_za_save() nounwind "aarch64_inout_za" {
   ; CHECK-AFTER-SMEABI-NEXT:   STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0
   ; CHECK-AFTER-SMEABI-NEXT:   [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
   ; CHECK-AFTER-SMEABI-NEXT:   [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-  ; CHECK-AFTER-SMEABI-NEXT:   MSR 24197, [[COPY1]]
+  ; CHECK-AFTER-SMEABI-NEXT:   MSR 56965, [[COPY1]]
   ; CHECK-AFTER-SMEABI-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-AFTER-SMEABI-NEXT:   RequiresZASavePseudo
   ; CHECK-AFTER-SMEABI-NEXT:   BL @private_za_callee, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
   ; CHECK-AFTER-SMEABI-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-AFTER-SMEABI-NEXT:   MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-  ; CHECK-AFTER-SMEABI-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+  ; CHECK-AFTER-SMEABI-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
   ; CHECK-AFTER-SMEABI-NEXT:   $x0 = ADDXri %stack.0, 0, 0
   ; CHECK-AFTER-SMEABI-NEXT:   RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-  ; CHECK-AFTER-SMEABI-NEXT:   MSR 24197, $xzr
+  ; CHECK-AFTER-SMEABI-NEXT:   MSR 56965, $xzr
   ; CHECK-AFTER-SMEABI-NEXT:   RET_ReallyLR
   call void @private_za_callee()
   ret void
@@ -61,7 +61,7 @@ define void @requires_za_save_streaming_mode_change() nounwind "aarch64_inout_za
   ; CHECK-AFTER-SMEABI-NEXT:   STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0
   ; CHECK-AFTER-SMEABI-NEXT:   [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
   ; CHECK-AFTER-SMEABI-NEXT:   [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-  ; CHECK-AFTER-SMEABI-NEXT:   MSR 24197, [[COPY1]]
+  ; CHECK-AFTER-SMEABI-NEXT:   MSR 56965, [[COPY1]]
   ; CHECK-AFTER-SMEABI-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-AFTER-SMEABI-NEXT:   RequiresZASavePseudo
   ; CHECK-AFTER-SMEABI-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit $vg, implicit-def $vg, implicit-def $fpmr
@@ -69,10 +69,10 @@ define void @requires_za_save_streaming_mode_change() nounwind "aarch64_inout_za
   ; CHECK-AFTER-SMEABI-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-AFTER-SMEABI-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr
   ; CHECK-AFTER-SMEABI-NEXT:   MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-  ; CHECK-AFTER-SMEABI-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+  ; CHECK-AFTER-SMEABI-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
   ; CHECK-AFTER-SMEABI-NEXT:   $x0 = ADDXri %stack.0, 0, 0
   ; CHECK-AFTER-SMEABI-NEXT:   RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-  ; CHECK-AFTER-SMEABI-NEXT:   MSR 24197, $xzr
+  ; CHECK-AFTER-SMEABI-NEXT:   MSR 56965, $xzr
   ; CHECK-AFTER-SMEABI-NEXT:   RET_ReallyLR
   call void @private_za_callee()
   ret void

diff  --git a/llvm/test/CodeGen/AArch64/aarch64-sysreg128.ll b/llvm/test/CodeGen/AArch64/aarch64-sysreg128.ll
index b5fc00f3e3207..7f20b5e5ee4df 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-sysreg128.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-sysreg128.ll
@@ -5,12 +5,12 @@
 define i128 @test_rsr128() #0 {
 ; CHECK-LE-LABEL: test_rsr128:
 ; CHECK-LE:       // %bb.0: // %entry
-; CHECK-LE-NEXT:    mrrs x0, x1, S3_2_C3_C4_5
+; CHECK-LE-NEXT:    mrrs x0, x1, S1_2_C3_C4_5
 ; CHECK-LE-NEXT:    ret
 ;
 ; CHECK-BE-LABEL: test_rsr128:
 ; CHECK-BE:       // %bb.0: // %entry
-; CHECK-BE-NEXT:    mrrs x2, x3, S3_2_C3_C4_5
+; CHECK-BE-NEXT:    mrrs x2, x3, S1_2_C3_C4_5
 ; CHECK-BE-NEXT:    mov x0, x3
 ; CHECK-BE-NEXT:    mov x1, x2
 ; CHECK-BE-NEXT:    ret
@@ -26,14 +26,14 @@ define void @test_wsr128(i128 noundef %v) #0 {
 ; CHECK-LE:       // %bb.0: // %entry
 ; CHECK-LE-NEXT:    // kill: def $x1 killed $x1 killed $x0_x1 def $x0_x1
 ; CHECK-LE-NEXT:    // kill: def $x0 killed $x0 killed $x0_x1 def $x0_x1
-; CHECK-LE-NEXT:    msrr S3_2_C3_C4_5, x0, x1
+; CHECK-LE-NEXT:    msrr S1_2_C3_C4_5, x0, x1
 ; CHECK-LE-NEXT:    ret
 ;
 ; CHECK-BE-LABEL: test_wsr128:
 ; CHECK-BE:       // %bb.0: // %entry
 ; CHECK-BE-NEXT:    mov x2, x1
 ; CHECK-BE-NEXT:    mov x3, x0
-; CHECK-BE-NEXT:    msrr S3_2_C3_C4_5, x2, x3
+; CHECK-BE-NEXT:    msrr S1_2_C3_C4_5, x2, x3
 ; CHECK-BE-NEXT:    ret
 entry:
   call void @llvm.write_register.i128(metadata !1, i128 %v)
@@ -45,4 +45,4 @@ declare void @llvm.write_register.i128(metadata, i128) #1
 attributes #0 = { noinline nounwind }
 attributes #1 = { nounwind }
 
-!1 = !{!"3:2:3:4:5"}
+!1 = !{!"1:2:3:4:5"}

diff  --git a/llvm/test/CodeGen/AArch64/arm64-invalid-sys-reg.ll b/llvm/test/CodeGen/AArch64/arm64-invalid-sys-reg.ll
deleted file mode 100644
index a8d45d437e0d7..0000000000000
--- a/llvm/test/CodeGen/AArch64/arm64-invalid-sys-reg.ll
+++ /dev/null
@@ -1,26 +0,0 @@
-; RUN: not llc < %s -mtriple=arm64-apple-darwin 2>&1 | FileCheck %s
-; RUN: not llc < %s -mtriple=arm64-linux-gnueabi 2>&1 | FileCheck %s
-
-define i32 @get_stack() nounwind {
-entry:
-; CHECK: error: <unknown>:0:0: invalid register "notareg" for llvm.read_register
-  %sp = call i32 @llvm.read_register.i32(metadata !0)
-  ret i32 %sp
-}
-
-define i64 @read_invalid() nounwind {
-; CHECK: error: <unknown>:0:0: invalid register "1:2:3:4:5" for llvm.read_register
-entry:
-  %reg = call i64 @llvm.read_register.i64(metadata !1)
-  ret i64 %reg
-}
-
-define void @write_invalid(i64 %x) nounwind {
-; CHECK: error: <unknown>:0:0: invalid register "1:2:3:4:5" for llvm.write_register
-entry:
-  call void @llvm.write_register.i64(metadata !1, i64 %x)
-  ret void
-}
-
-!0 = !{!"notareg\00"}
-!1 = !{!"1:2:3:4:5"}
\ No newline at end of file

diff  --git a/llvm/test/CodeGen/AArch64/arm64-named-reg-notareg.ll b/llvm/test/CodeGen/AArch64/arm64-named-reg-notareg.ll
new file mode 100644
index 0000000000000..b671026251da8
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/arm64-named-reg-notareg.ll
@@ -0,0 +1,13 @@
+; RUN: not llc < %s -mtriple=arm64-apple-darwin 2>&1 | FileCheck %s
+; RUN: not llc < %s -mtriple=arm64-linux-gnueabi 2>&1 | FileCheck %s
+
+define i32 @get_stack() nounwind {
+entry:
+; CHECK: error: <unknown>:0:0: invalid register "notareg" for llvm.read_register
+  %sp = call i32 @llvm.read_register.i32(metadata !0)
+  ret i32 %sp
+}
+
+declare i32 @llvm.read_register.i32(metadata) nounwind
+
+!0 = !{!"notareg\00"}

diff  --git a/llvm/test/CodeGen/AArch64/expand-sme-pseudos.mir b/llvm/test/CodeGen/AArch64/expand-sme-pseudos.mir
index 4dbca6f53350a..f06b3bb71982d 100644
--- a/llvm/test/CodeGen/AArch64/expand-sme-pseudos.mir
+++ b/llvm/test/CodeGen/AArch64/expand-sme-pseudos.mir
@@ -56,7 +56,7 @@ body:             |
     ; CHECK-NEXT: liveins: $x8
     ; CHECK-NEXT: {{  $}}
     ; CHECK-NEXT: BL &__arm_tpidr2_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: B %bb.2
     ; CHECK-NEXT: {{  $}}
     ; CHECK-NEXT: .2:
@@ -87,7 +87,7 @@ body:             |
     ; CHECK-NEXT: liveins: $x8
     ; CHECK-NEXT: {{  $}}
     ; CHECK-NEXT: BL &__arm_tpidr2_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp, implicit-def $zab0
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: ZERO_M 255, implicit-def $zab0
     ; CHECK-NEXT: B %bb.2
     ; CHECK-NEXT: {{  $}}
@@ -119,7 +119,7 @@ body:             |
     ; CHECK-NEXT: liveins: $x8
     ; CHECK-NEXT: {{  $}}
     ; CHECK-NEXT: BL &__arm_tpidr2_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp, implicit-def $zt0
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: $zt0 = ZERO_T
     ; CHECK-NEXT: B %bb.2
     ; CHECK-NEXT: {{  $}}
@@ -151,7 +151,7 @@ body:             |
     ; CHECK-NEXT: liveins: $x8
     ; CHECK-NEXT: {{  $}}
     ; CHECK-NEXT: BL &__arm_tpidr2_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp, implicit-def $zab0, implicit-def $zt0
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: ZERO_M 255, implicit-def $zab0
     ; CHECK-NEXT: $zt0 = ZERO_T
     ; CHECK-NEXT: B %bb.2

diff  --git a/llvm/test/CodeGen/AArch64/machine-sme-abi-find-insert-pt.mir b/llvm/test/CodeGen/AArch64/machine-sme-abi-find-insert-pt.mir
index 7aa89f990b71a..ed768dec77998 100644
--- a/llvm/test/CodeGen/AArch64/machine-sme-abi-find-insert-pt.mir
+++ b/llvm/test/CodeGen/AArch64/machine-sme-abi-find-insert-pt.mir
@@ -33,16 +33,16 @@ body:             |
     ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0
     ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-    ; CHECK-NEXT: MSR 24197, [[COPY1]]
+    ; CHECK-NEXT: MSR 56965, [[COPY1]]
     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: RequiresZASavePseudo
     ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
     ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: $nzcv = IMPLICIT_DEF
     ; CHECK-NEXT: $zab0 = IMPLICIT_DEF
     ; CHECK-NEXT: FAKE_USE $nzcv
@@ -74,16 +74,16 @@ body:             |
     ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0
     ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-    ; CHECK-NEXT: MSR 24197, [[COPY1]]
+    ; CHECK-NEXT: MSR 56965, [[COPY1]]
     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: RequiresZASavePseudo
     ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
     ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: $x0 = IMPLICIT_DEF
     ; CHECK-NEXT: $nzcv = IMPLICIT_DEF
     ; CHECK-NEXT: FAKE_USE $x0
@@ -121,10 +121,10 @@ body:             |
   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr64 = COPY $sp
   ; CHECK-NEXT:   $nzcv = IMPLICIT_DEF
   ; CHECK-NEXT:   $zab0 = IMPLICIT_DEF
-  ; CHECK-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 23056, implicit-def $nzcv, implicit $nzcv
+  ; CHECK-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 55824, implicit-def $nzcv, implicit $nzcv
   ; CHECK-NEXT:   $x0 = COPY [[COPY1]]
   ; CHECK-NEXT:   BL &__arm_sme_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x1, implicit-def $lr, implicit $sp, implicit $x0
-  ; CHECK-NEXT:   MSR 23056, [[MRS]], implicit-def $nzcv
+  ; CHECK-NEXT:   MSR 55824, [[MRS]], implicit-def $nzcv
   ; CHECK-NEXT:   Bcc 2, %bb.1, implicit $nzcv
   ; CHECK-NEXT:   B %bb.2
   ; CHECK-NEXT: {{  $}}
@@ -193,19 +193,19 @@ body:             |
     ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0
     ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-    ; CHECK-NEXT: MSR 24197, [[COPY1]]
+    ; CHECK-NEXT: MSR 56965, [[COPY1]]
     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: RequiresZASavePseudo
     ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
     ; CHECK-NEXT: $nzcv = IMPLICIT_DEF
     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
-    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 23056, implicit-def $nzcv, implicit $nzcv
+    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 55824, implicit-def $nzcv, implicit $nzcv
     ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-    ; CHECK-NEXT: [[MRS1:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+    ; CHECK-NEXT: [[MRS1:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
     ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: RestoreZAPseudo [[MRS1]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-    ; CHECK-NEXT: MSR 24197, $xzr
-    ; CHECK-NEXT: MSR 23056, [[MRS]], implicit-def $nzcv
+    ; CHECK-NEXT: MSR 56965, $xzr
+    ; CHECK-NEXT: MSR 55824, [[MRS]], implicit-def $nzcv
     ; CHECK-NEXT: $zab0 = IMPLICIT_DEF
     ; CHECK-NEXT: FAKE_USE $nzcv
     ; CHECK-NEXT: RET_ReallyLR

diff  --git a/llvm/test/CodeGen/AArch64/machine-sme-abi-skip-debug-inst.mir b/llvm/test/CodeGen/AArch64/machine-sme-abi-skip-debug-inst.mir
index 04490e64ccf60..3ceca8eb10e47 100644
--- a/llvm/test/CodeGen/AArch64/machine-sme-abi-skip-debug-inst.mir
+++ b/llvm/test/CodeGen/AArch64/machine-sme-abi-skip-debug-inst.mir
@@ -1,3 +1,4 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
 # RUN: llc -mtriple=aarch64 -mattr=+sve -mattr=+sme -run-pass=aarch64-machine-sme-abi -verify-machineinstrs %s -o - | FileCheck %s
 
 --- |
@@ -44,19 +45,19 @@ body:             |
     ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0
     ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-    ; CHECK-NEXT: MSR 24197, [[COPY1]]
+    ; CHECK-NEXT: MSR 56965, [[COPY1]]
     ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: RequiresZASavePseudo
     ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
     ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
     ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
     ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 0
     ; CHECK-NEXT: RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-    ; CHECK-NEXT: MSR 24197, $xzr
+    ; CHECK-NEXT: MSR 56965, $xzr
     ; CHECK-NEXT: $nzcv = IMPLICIT_DEF
     ; CHECK-NEXT: DBG_VALUE $w0, $noreg
-   ; CHECK-NEXT: $zab0 = IMPLICIT_DEF
+    ; CHECK-NEXT: $zab0 = IMPLICIT_DEF
     ; CHECK-NEXT: FAKE_USE $nzcv
     ; CHECK-NEXT: RET_ReallyLR
     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp

diff  --git a/llvm/test/CodeGen/AArch64/sme-abi-eh-liveins.mir b/llvm/test/CodeGen/AArch64/sme-abi-eh-liveins.mir
index 0dfbdd0d49011..711745e528bbf 100644
--- a/llvm/test/CodeGen/AArch64/sme-abi-eh-liveins.mir
+++ b/llvm/test/CodeGen/AArch64/sme-abi-eh-liveins.mir
@@ -31,15 +31,15 @@ body:             |
   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-NEXT:   [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-  ; CHECK-NEXT:   MSR 24197, [[COPY1]]
+  ; CHECK-NEXT:   MSR 56965, [[COPY1]]
   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-NEXT:   RequiresZASavePseudo
   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-NEXT:   MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-  ; CHECK-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+  ; CHECK-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
   ; CHECK-NEXT:   $x0 = ADDXri %stack.0, 0, 0
   ; CHECK-NEXT:   RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-  ; CHECK-NEXT:   MSR 24197, $xzr
+  ; CHECK-NEXT:   MSR 56965, $xzr
   ; CHECK-NEXT:   B %bb.2
   ; CHECK-NEXT: {{  $}}
   ; CHECK-NEXT: bb.1 (landing-pad):
@@ -47,10 +47,10 @@ body:             |
   ; CHECK-NEXT:   liveins: $x0, $x1
   ; CHECK-NEXT: {{  $}}
   ; CHECK-NEXT:   MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-  ; CHECK-NEXT:   [[MRS1:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+  ; CHECK-NEXT:   [[MRS1:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
   ; CHECK-NEXT:   $x0 = ADDXri %stack.0, 0, 0
   ; CHECK-NEXT:   RestoreZAPseudo [[MRS1]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-  ; CHECK-NEXT:   MSR 24197, $xzr
+  ; CHECK-NEXT:   MSR 56965, $xzr
   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-NEXT:   InOutZAUsePseudo
   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp

diff  --git a/llvm/test/CodeGen/AArch64/sme-lazy-sve-nzcv-live.mir b/llvm/test/CodeGen/AArch64/sme-lazy-sve-nzcv-live.mir
index c9496b5d9ecc5..9a2811bc1abef 100644
--- a/llvm/test/CodeGen/AArch64/sme-lazy-sve-nzcv-live.mir
+++ b/llvm/test/CodeGen/AArch64/sme-lazy-sve-nzcv-live.mir
@@ -57,16 +57,16 @@ body:             |
   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32common = COPY $w0
   ; CHECK-NEXT:   [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gpr64 = COPY [[ADDXri]]
-  ; CHECK-NEXT:   MSR 24197, [[COPY2]]
+  ; CHECK-NEXT:   MSR 56965, [[COPY2]]
   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-NEXT:   RequiresZASavePseudo
   ; CHECK-NEXT:   BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
   ; CHECK-NEXT:   MSRpstatesvcrImm1 2, 1, implicit-def $nzcv
-  ; CHECK-NEXT:   [[MRS1:%[0-9]+]]:gpr64 = MRS 24197, implicit-def $nzcv
+  ; CHECK-NEXT:   [[MRS1:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv
   ; CHECK-NEXT:   $x0 = ADDXri %stack.0, 0, 0
   ; CHECK-NEXT:   RestoreZAPseudo [[MRS1]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
-  ; CHECK-NEXT:   MSR 24197, $xzr
+  ; CHECK-NEXT:   MSR 56965, $xzr
   ; CHECK-NEXT:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri [[COPY1]], 101, 0, implicit-def $nzcv
   ; CHECK-NEXT:   Bcc 11, %bb.2, implicit $nzcv
   ; CHECK-NEXT:   B %bb.1

diff  --git a/llvm/test/CodeGen/AArch64/special-reg.ll b/llvm/test/CodeGen/AArch64/special-reg.ll
index 9e68aa3453aa2..7c02d0b2e1de3 100644
--- a/llvm/test/CodeGen/AArch64/special-reg.ll
+++ b/llvm/test/CodeGen/AArch64/special-reg.ll
@@ -1,54 +1,41 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
 ; RUN: llc < %s -mtriple=aarch64 -mcpu=cortex-a57 2>&1 | FileCheck %s
 
-
-
 define i64 @read_encoded_register() nounwind {
-; CHECK-LABEL: read_encoded_register:
-; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    mrs x0, S3_2_C3_C4_5
-; CHECK-NEXT:    ret
 entry:
+; CHECK-LABEL: read_encoded_register:
+; CHECK: mrs x0, S1_2_C3_C4_5
   %reg = call i64 @llvm.read_register.i64(metadata !0)
   ret i64 %reg
 }
 
 define i64 @read_daif() nounwind {
-; CHECK-LABEL: read_daif:
-; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    mrs x0, DAIF
-; CHECK-NEXT:    ret
 entry:
+; CHECK-LABEL: read_daif:
+; CHECK: mrs x0, DAIF
   %reg = call i64 @llvm.read_register.i64(metadata !1)
   ret i64 %reg
 }
 
 define void @write_encoded_register(i64 %x) nounwind {
-; CHECK-LABEL: write_encoded_register:
-; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    msr S3_2_C3_C4_5, x0
-; CHECK-NEXT:    ret
 entry:
+; CHECK-LABEL: write_encoded_register:
+; CHECK: msr S1_2_C3_C4_5, x0
   call void @llvm.write_register.i64(metadata !0, i64 %x)
   ret void
 }
 
 define void @write_daif(i64 %x) nounwind {
-; CHECK-LABEL: write_daif:
-; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    msr DAIF, x0
-; CHECK-NEXT:    ret
 entry:
+; CHECK-LABEL: write_daif:
+; CHECK: msr DAIF, x0
   call void @llvm.write_register.i64(metadata !1, i64 %x)
   ret void
 }
 
 define void @write_daifset() nounwind {
-; CHECK-LABEL: write_daifset:
-; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    msr DAIFSet, #2
-; CHECK-NEXT:    ret
 entry:
+; CHECK-LABEL: write_daifset:
+; CHECK: msr DAIFSet, #2
   call void @llvm.write_register.i64(metadata !2, i64 2)
   ret void
 }
@@ -56,6 +43,6 @@ entry:
 declare i64 @llvm.read_register.i64(metadata) nounwind
 declare void @llvm.write_register.i64(metadata, i64) nounwind
 
-!0 = !{!"3:2:3:4:5"}
+!0 = !{!"1:2:3:4:5"}
 !1 = !{!"daif"}
 !2 = !{!"daifset"}

diff  --git a/llvm/test/MC/AArch64/arm64-system-encoding.s b/llvm/test/MC/AArch64/arm64-system-encoding.s
index 762b64e109a08..d38f3ac9871fe 100644
--- a/llvm/test/MC/AArch64/arm64-system-encoding.s
+++ b/llvm/test/MC/AArch64/arm64-system-encoding.s
@@ -165,6 +165,8 @@ foo:
   msr TCR2_EL12, x3
   msr TCR2_EL2, x3
   msr S3_2_C11_C6_4, x1
+  msr  S0_0_C0_C0_0, x0
+  msr  S1_2_C3_C4_5, x2
 ; CHECK: msr ACTLR_EL1, x3              ; encoding: [0x23,0x10,0x18,0xd5]
 ; CHECK: msr ACTLR_EL12, x3             ; encoding: [0x23,0x10,0x1d,0xd5]
 ; CHECK: msr ACTLR_EL2, x3              ; encoding: [0x23,0x10,0x1c,0xd5]
@@ -272,15 +274,8 @@ foo:
 ; CHECK: msr TCR2_EL12, x3              ; encoding: [0x63,0x20,0x1d,0xd5]
 ; CHECK: msr TCR2_EL2, x3               ; encoding: [0x63,0x20,0x1c,0xd5]
 ; CHECK: msr  S3_2_C11_C6_4, x1         ; encoding: [0x81,0xb6,0x1a,0xd5]
-
-// Invalid System register encodings
-  msr S0_0_C0_C0_0, x0
-  msr S1_2_C3_C4_5, x2
-  msr S4_2_C3_C4_5, x2
-; CHECK-ERRORS: :[[@LINE-3]]:7: error: expected writable system register or pstate
-; CHECK-ERRORS: :[[@LINE-3]]:7: error: expected writable system register or pstate
-; CHECK-ERRORS: :[[@LINE-3]]:7: error: expected writable system register or pstate
-
+; CHECK: msr  S0_0_C0_C0_0, x0          ; encoding: [0x00,0x00,0x00,0xd5]
+; CHECK: msr  S1_2_C3_C4_5, x2          ; encoding: [0xa2,0x34,0x0a,0xd5]
 
 // Readonly system registers: writing to them gives an error
   msr CURRENTEL, x3
@@ -769,12 +764,3 @@ foo:
 ; CHECK: mrs	x0, AFSR1_EL1           ; encoding: [0x20,0x51,0x38,0xd5]
 ; CHECK: mrs	x0, AFSR0_EL1           ; encoding: [0x00,0x51,0x38,0xd5]
 ; CHECK: mrs	x0, REVIDR_EL1          ; encoding: [0xc0,0x00,0x38,0xd5]
-
-// Invalid System register encodings
-  mrs x3, S0_0_C0_C0_0
-  mrs x3, S1_2_C3_C4_5
-  mrs x3, S4_2_C3_C4_5
-; CHECK-ERRORS: :[[@LINE-3]]:11: error: expected readable system register
-; CHECK-ERRORS: :[[@LINE-3]]:11: error: expected readable system register
-; CHECK-ERRORS: :[[@LINE-3]]:11: error: expected readable system register
-

diff  --git a/llvm/test/MC/AArch64/armv9-mrrs-diagnostics.s b/llvm/test/MC/AArch64/armv9-mrrs-diagnostics.s
index 8945d11ff789f..4eb8861784653 100644
--- a/llvm/test/MC/AArch64/armv9-mrrs-diagnostics.s
+++ b/llvm/test/MC/AArch64/armv9-mrrs-diagnostics.s
@@ -28,26 +28,3 @@ mrrs S3_0_c2_c0_1
 
 mrrs S3_0_c2_c0_1, x0, x1
 // CHECK-ERROR: error: expected first even register of a consecutive same-size even/odd register pair
-
-// Test invalid system register name
-
-mrrs x0, x1, S0_0_c2_c0_1
-// CHECK-ERROR: error: expected readable system register
-
-mrrs x0, x1, S4_0_c2_c0_1
-// CHECK-ERROR: error: expected readable system register
-
-mrrs x0, x1, S1_0_c2_c0_1
-// CHECK-ERROR: error: expected readable system register
-
-mrrs x0, x1, S2_8_c2_c0_1
-// CHECK-ERROR: error: expected readable system register
-
-mrrs x0, x1, S2_0_c16_c0_1
-// CHECK-ERROR: error: expected readable system register
-
-mrrs x0, x1, S2_0_c0_c16_1
-// CHECK-ERROR: error: expected readable system register
-
-mrrs x0, x1, S2_0_c0_c0_8
-// CHECK-ERROR: error: expected readable system register

diff  --git a/llvm/test/MC/AArch64/armv9-mrrs.s b/llvm/test/MC/AArch64/armv9-mrrs.s
index d0d917fb9f502..253ae15708683 100644
--- a/llvm/test/MC/AArch64/armv9-mrrs.s
+++ b/llvm/test/MC/AArch64/armv9-mrrs.s
@@ -188,29 +188,3 @@ msrr   VTTBR_EL2, x24, x25
 msrr   VTTBR_EL2, x26, x27
 // CHECK-INST: msrr VTTBR_EL2, x26, x27
 // CHECK-ENCODING: encoding: [0x1a,0x21,0x5c,0xd5]
-
-// Test generic register assembly
-
-mrrs x0, x1, S2_0_C0_C0_0
-// CHECK-INST: mrrs x0, x1, S2_0_C0_C0_0
-// CHECK-ENCODING: encoding: [0x00,0x00,0x70,0xd5]
-
-mrrs x0, x1, S3_0_C0_C0_0
-// CHECK-INST: mrrs x0, x1, MIDR_EL1
-// CHECK-ENCODING: encoding: [0x00,0x00,0x78,0xd5]
-
-mrrs x0, x1, S2_7_C0_C0_0
-// CHECK-INST: mrrs x0, x1, S2_7_C0_C0_0
-// CHECK-ENCODING: encoding: [0x00,0x00,0x77,0xd5]
-
-mrrs x0, x1, S2_0_C15_C0_0
-// CHECK-INST: mrrs x0, x1, S2_0_C15_C0_0
-// CHECK-ENCODING: encoding: [0x00,0xf0,0x70,0xd5]
-
-mrrs x0, x1, S2_0_C0_C15_0
-// CHECK-INST: mrrs x0, x1, S2_0_C0_C15_0
-// CHECK-ENCODING: encoding: [0x00,0x0f,0x70,0xd5]
-
-mrrs x0, x1, S2_0_C0_C0_7
-// CHECK-INST: mrrs x0, x1, DBGWCR0_EL1
-// CHECK-ENCODING: encoding: [0xe0,0x00,0x70,0xd5]

diff  --git a/llvm/test/MC/AArch64/armv9-msrr-diagnostics.s b/llvm/test/MC/AArch64/armv9-msrr-diagnostics.s
index 3fc343f247f48..d49a3ee68b63f 100644
--- a/llvm/test/MC/AArch64/armv9-msrr-diagnostics.s
+++ b/llvm/test/MC/AArch64/armv9-msrr-diagnostics.s
@@ -28,26 +28,3 @@ msrr S3_0_c2_c0_1
 
 msrr x0, x1, S3_0_c2_c0_1
 // CHECK-ERROR: error: expected first even register of a consecutive same-size even/odd register pair
-
-// Test invalid system register name
-
-msrr   S0_0_c2_c0_1, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate
-
-msrr   S1_0_c2_c0_1, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate
-
-msrr   S4_0_c2_c0_1, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate
-
-msrr   S2_8_c2_c0_1, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate
-
-msrr   S2_0_c16_c0_1, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate
-
-msrr   S2_0_c0_c16_1, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate
-
-msrr   S2_0_c0_c0_8, x26, x27
-// CHECK-ERROR: error: expected writable system register or pstate

diff  --git a/llvm/test/MC/AArch64/armv9-msrr.s b/llvm/test/MC/AArch64/armv9-msrr.s
index 8080cd5e87d7e..3b2be6fdeea69 100644
--- a/llvm/test/MC/AArch64/armv9-msrr.s
+++ b/llvm/test/MC/AArch64/armv9-msrr.s
@@ -100,29 +100,3 @@ msrr   VTTBR_EL2, x24, x25
 msrr   VTTBR_EL2, x26, x27
 // CHECK-INST: msrr VTTBR_EL2, x26, x27
 // CHECK-ENCODING: encoding: [0x1a,0x21,0x5c,0xd5]
-
-// Test generic register assembly
-
-msrr S2_0_C0_C0_0, x0, x1
-// CHECK-INST: msrr S2_0_C0_C0_0, x0, x1
-// CHECK-ENCODING: encoding: [0x00,0x00,0x50,0xd5]
-
-msrr S3_0_C0_C0_0, x0, x1
-// CHECK-INST: msrr S3_0_C0_C0_0, x0, x1
-// CHECK-ENCODING: encoding: [0x00,0x00,0x58,0xd5]
-
-msrr S2_7_C0_C0_0, x0, x1
-// CHECK-INST: msrr S2_7_C0_C0_0, x0, x1
-// CHECK-ENCODING: encoding: [0x00,0x00,0x57,0xd5]
-
-msrr S2_0_C15_C0_0, x0, x1
-// CHECK-INST: msrr S2_0_C15_C0_0, x0, x1
-// CHECK-ENCODING: encoding: [0x00,0xf0,0x50,0xd5]
-
-msrr S2_0_C0_C15_0, x0, x1
-// CHECK-INST: msrr S2_0_C0_C15_0, x0, x1
-// CHECK-ENCODING: encoding: [0x00,0x0f,0x50,0xd5]
-
-msrr S2_0_C0_C0_7, x0, x1
-// CHECK-INST: msrr DBGWCR0_EL1, x0, x1
-// CHECK-ENCODING: encoding: [0xe0,0x00,0x50,0xd5]

diff  --git a/llvm/test/MC/AArch64/basic-a64-instructions.s b/llvm/test/MC/AArch64/basic-a64-instructions.s
index f1491d93e0ac0..093c09c67bacb 100644
--- a/llvm/test/MC/AArch64/basic-a64-instructions.s
+++ b/llvm/test/MC/AArch64/basic-a64-instructions.s
@@ -4939,12 +4939,16 @@ _func:
 
         mrs x12, s3_7_c15_c1_5
         mrs x13, s3_2_c11_c15_7
+        mrs x14, s1_3_c9_c2_1
         msr s3_0_c15_c0_0, x12
         msr s3_7_c11_c13_7, x5
+        msr s1_3_c9_c2_1, x4
 // CHECK: mrs     x12, {{s3_7_c15_c1_5|S3_7_C15_C1_5}}      // encoding: [0xac,0xf1,0x3f,0xd5]
 // CHECK: mrs     x13, {{s3_2_c11_c15_7|S3_2_C11_C15_7}}    // encoding: [0xed,0xbf,0x3a,0xd5]
+// CHECK: mrs     x14, {{s1_3_c9_c2_1|S1_3_C9_C2_1}}        // encoding: [0x2e,0x92,0x2b,0xd5]
 // CHECK: msr     {{s3_0_c15_c0_0|S3_0_C15_C0_0}}, x12      // encoding: [0x0c,0xf0,0x18,0xd5]
 // CHECK: msr     {{s3_7_c11_c13_7|S3_7_C11_C13_7}}, x5     // encoding: [0xe5,0xbd,0x1f,0xd5]
+// CHECK: msr     {{s1_3_c9_c2_1|S1_3_C9_C2_1}}, x4         // encoding: [0x24,0x92,0x0b,0xd5]
 
 //------------------------------------------------------------------------------
 // Unconditional branch (immediate)

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.2a-uao.txt b/llvm/test/MC/Disassembler/AArch64/armv8.2a-uao.txt
index 25bf009a33dfe..2e45be4b342fe 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.2a-uao.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.2a-uao.txt
@@ -1,16 +1,16 @@
 # NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
 # RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a --disassemble < %s | FileCheck %s
-# RUN: not llvm-mc -triple aarch64-none-linux-gnu --disassemble < %s 2>&1 | FileCheck --check-prefix=NO_V82A %s
+# RUN: llvm-mc -triple aarch64-none-linux-gnu --disassemble < %s 2>&1 | FileCheck --check-prefix=NO_V82A %s
 
 [0x7f,0x40,0x00,0xd5]
 # CHECK: msr	UAO, #0
-# NO_V82A: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# NO_V82A: msr	S0_0_C4_C0_3, xzr
 [0x7f,0x41,0x00,0xd5]
 # CHECK: msr	UAO, #1
-# NO_V82A: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# NO_V82A: msr	S0_0_C4_C1_3, xzr
 [0x7f,0x4f,0x00,0xd5]
 # CHECK: msr	UAO, #15
-# NO_V82A: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# NO_V82A: msr	S0_0_C4_C15_3, xzr
 
 [0x81,0x42,0x18,0xd5]
 # CHECK: msr	UAO, x1

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.4a-dit.txt b/llvm/test/MC/Disassembler/AArch64/armv8.4a-dit.txt
index 2c4c112f35738..b923ed8515ffa 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.4a-dit.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.4a-dit.txt
@@ -1,11 +1,11 @@
 # NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
 # RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.4a --disassemble < %s | FileCheck %s
 # RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8r --disassemble < %s | FileCheck %s
-# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=-v8.4a --disassemble < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-V84
+# RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=-v8.4a --disassemble < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-V84
 
 [0x5f,0x41,0x03,0xd5]
 # CHECK: msr	DIT, #1
-# CHECK-NO-V84: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-V84: msr	S0_3_C4_C1_2, xzr
 [0xa0,0x42,0x1b,0xd5]
 # CHECK: msr	DIT, x0
 # CHECK-NO-V84: msr	S3_3_C4_C2_5, x0
@@ -13,3 +13,4 @@
 # CHECK: mrs	x0, DIT
 # CHECK-NO-V84: mrs	x0, S3_3_C4_C2_5
 
+

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.5a-dataproc.txt b/llvm/test/MC/Disassembler/AArch64/armv8.5a-dataproc.txt
index 706c2bdd631ca..53fc812028a7a 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.5a-dataproc.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.5a-dataproc.txt
@@ -69,7 +69,7 @@
 # Flag manipulation
 [0x3f,0x40,0x00,0xd5]
 # CHECK: xaflag
-# CHECK-NOV85: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NOV85: msr	S0_0_C4_C0_1, xzr
 [0x5f,0x40,0x00,0xd5]
 # CHECK: axflag
-# CHECK-NOV85: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NOV85: msr	S0_0_C4_C0_2, xzr

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.5a-mte.txt b/llvm/test/MC/Disassembler/AArch64/armv8.5a-mte.txt
index 2d1cb3042933c..fb1a0ec728d42 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.5a-mte.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.5a-mte.txt
@@ -384,10 +384,6 @@
 # NOMTE: :[[@LINE-2]]:2: warning: invalid instruction encoding
 
 
-[0x9f,0x40,0x03,0xd5]
-# CHECK: msr	TCO, #0
-# NOMTE: :[[@LINE-2]]:2: warning: invalid instruction encoding
-
 
 [0x60,0x76,0x08,0xd5]
 # CHECK: dc	igvac, x0
@@ -476,6 +472,11 @@
 
 
 
+[0x9f,0x40,0x03,0xd5]
+# CHECK: msr	TCO, #0
+# NOMTE: msr	S0_3_C4_C0_4, xzr
+
+
 [0xe0,0x42,0x1b,0xd5]
 # CHECK: msr	TCO, x0
 # NOMTE: msr	S3_3_C4_C2_7, x0

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.5a-sb.txt b/llvm/test/MC/Disassembler/AArch64/armv8.5a-sb.txt
index 3273e1d13a872..d3d7e8e6112f2 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.5a-sb.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.5a-sb.txt
@@ -6,4 +6,5 @@
 # New reg
 0xff 0x30 0x03 0xd5
 # CHECK: sb
-# NOSB: :[[@LINE-2]]:1: warning: invalid instruction encoding
+# NOSB: msr	S0_3_C3_C0_7, xzr
+

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.5a-ssbs.txt b/llvm/test/MC/Disassembler/AArch64/armv8.5a-ssbs.txt
index ca4f0063a6b57..2ff24ee8c567f 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.5a-ssbs.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.5a-ssbs.txt
@@ -1,14 +1,14 @@
 # NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
 # RUN: llvm-mc -triple=aarch64 -mattr=+ssbs  -disassemble < %s | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64 -mattr=+v8.5a -disassemble < %s 2>&1 | FileCheck %s --check-prefix=NOSPECID
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8.5a -disassemble < %s | FileCheck %s --check-prefix=NOSPECID
 # RUN: llvm-mc -triple=aarch64 -mcpu=cortex-a76 -disassemble < %s | FileCheck %s
 # RUN: llvm-mc -triple=aarch64 -mcpu=cortex-a76ae -disassemble < %s | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64 -mattr=+v8r -disassemble < %s 2>&1 | FileCheck %s --check-prefix=NOSPECID
-# RUN: not llvm-mc -triple=aarch64 -mattr=-ssbs  -disassemble < %s 2>&1 | FileCheck %s --check-prefix=NOSPECID
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8r -disassemble < %s | FileCheck %s --check-prefix=NOSPECID
+# RUN: llvm-mc -triple=aarch64 -mattr=-ssbs  -disassemble < %s | FileCheck %s --check-prefix=NOSPECID
 
 [0x3f 0x41 0x03 0xd5]
 # CHECK: msr	SSBS, #1
-# NOSPECID: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# NOSPECID: msr	S0_3_C4_C1_1, xzr
 [0xc3 0x42 0x1b 0xd5]
 # CHECK: msr	SSBS, x3
 # NOSPECID: msr	S3_3_C4_C2_6, x3

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.7a-wfxt.txt b/llvm/test/MC/Disassembler/AArch64/armv8.7a-wfxt.txt
index e00727a99fb6f..58ce8e9aa7316 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.7a-wfxt.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.7a-wfxt.txt
@@ -1,12 +1,12 @@
 # NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
 # RUN: llvm-mc -triple=aarch64 -mattr=+wfxt -disassemble %s | FileCheck %s
 # RUN: llvm-mc -triple=aarch64 -mattr=+v8.7a -disassemble %s | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64 -disassemble %s 2>&1 | FileCheck --check-prefix=CHECK-NO-WFxT %s
+# RUN: llvm-mc -triple=aarch64 -disassemble %s | FileCheck --check-prefix=CHECK-NO-WFxT %s
 
 [0x11,0x10,0x03,0xd5]
 # CHECK: wfet	x17
-# CHECK-NO-WFxT: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-WFxT: msr	S0_3_C1_C0_0, x17
 
 [0x23,0x10,0x03,0xd5]
 # CHECK: wfit	x3
-# CHECK-NO-WFxT: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-WFxT: msr	S0_3_C1_C0_1, x3

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.7a-xs.txt b/llvm/test/MC/Disassembler/AArch64/armv8.7a-xs.txt
index 36292edb4374e..d4c14ba3fd54f 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.7a-xs.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.7a-xs.txt
@@ -1,32 +1,30 @@
 # NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
-# RUN: not llvm-mc -triple=aarch64 -mattr=+v8.4a,+xs -disassemble %s 2>&1 | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64 -mattr=+v8.7a -disassemble %s 2>&1 | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64 -mattr=+v8.4a -disassemble %s 2>&1 | FileCheck --check-prefix=CHECK-NO-XS %s
-
-[0x3f,0x30,0x03,0xd5]
-# CHECK: :[[@LINE-1]]:2: warning: invalid instruction encoding
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
-
-[0x3f,0x35,0x03,0xd5]
-# CHECK: :[[@LINE-1]]:2: warning: invalid instruction encoding
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
-
-[0x3f,0x3f,0x03,0xd5]
-# CHECK: :[[@LINE-1]]:2: warning: invalid instruction encoding
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8.4a,+xs -disassemble %s | FileCheck %s
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8.7a -disassemble %s | FileCheck %s
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8.4a -disassemble %s | FileCheck --check-prefix=CHECK-NO-XS %s
 
 [0x3f,0x32,0x03,0xd5]
 # CHECK: dsb	oshnxs
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-XS: msr	S0_3_C3_C2_1, xzr
 [0x3f,0x36,0x03,0xd5]
 # CHECK: dsb	nshnxs
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-XS: msr	S0_3_C3_C6_1, xzr
 [0x3f,0x3a,0x03,0xd5]
 # CHECK: dsb	ishnxs
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-XS: msr	S0_3_C3_C10_1, xzr
 [0x3f,0x3e,0x03,0xd5]
 # CHECK: dsb	synxs
-# CHECK-NO-XS: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# CHECK-NO-XS: msr	S0_3_C3_C14_1, xzr
+
+[0x3f,0x30,0x03,0xd5]
+# CHECK: msr	S0_3_C3_C0_1, xzr
+# CHECK-NO-XS: msr	S0_3_C3_C0_1, xzr
+[0x3f,0x35,0x03,0xd5]
+# CHECK: msr	S0_3_C3_C5_1, xzr
+# CHECK-NO-XS: msr	S0_3_C3_C5_1, xzr
+[0x3f,0x3f,0x03,0xd5]
+# CHECK: msr	S0_3_C3_C15_1, xzr
+# CHECK-NO-XS: msr	S0_3_C3_C15_1, xzr
 
 [0x21,0x90,0x0c,0xd5]
 # CHECK: tlbi	ipas2e1isnxs, x1

diff  --git a/llvm/test/MC/Disassembler/AArch64/armv8.8a-nmi.txt b/llvm/test/MC/Disassembler/AArch64/armv8.8a-nmi.txt
index 5a83f0bcd6a4a..ec124010a527d 100644
--- a/llvm/test/MC/Disassembler/AArch64/armv8.8a-nmi.txt
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.8a-nmi.txt
@@ -1,21 +1,7 @@
 # NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
-# RUN: not llvm-mc -triple=aarch64 -mattr=+nmi   -disassemble %s 2>&1 | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64 -mattr=+v8.8a -disassemble %s 2>&1 | FileCheck %s
-# RUN: not llvm-mc -triple=aarch64               -disassemble %s 2>&1| FileCheck %s --check-prefix=NO-NMI
-
-# Regression test for a defect, where the bit-pattern, which should have allowed
-# only ALLSTATE, allowed SPSel (and others).
-[0xbf,0x51,0x00,0xd5]
-# CHECK: :[[@LINE-1]]:2: warning: invalid instruction encoding
-# NO-NMI: :[[@LINE-2]]:2: warning: invalid instruction encoding
-
-[0x1f,0x40,0x01,0xd5]
-# CHECK: msr	ALLINT, #0
-# NO-NMI: :[[@LINE-2]]:2: warning: invalid instruction encoding
-
-[0x1f,0x41,0x01,0xd5]
-# CHECK: msr	ALLINT, #1
-# NO-NMI: :[[@LINE-2]]:2: warning: invalid instruction encoding
+# RUN: llvm-mc -triple=aarch64 -mattr=+nmi   -disassemble %s | FileCheck %s
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8.8a -disassemble %s | FileCheck %s
+# RUN: llvm-mc -triple=aarch64               -disassemble %s | FileCheck %s --check-prefix=NO-NMI
 
 
 [0x03,0x43,0x38,0xd5]
@@ -26,6 +12,20 @@
 # CHECK: msr	ALLINT, x6
 # NO-NMI: msr	S3_0_C4_C3_0, x6
 
+[0x1f,0x40,0x01,0xd5]
+# CHECK: msr	ALLINT, #0
+# NO-NMI: msr	S0_1_C4_C0_0, xzr
+
+[0x1f,0x41,0x01,0xd5]
+# CHECK: msr	ALLINT, #1
+# NO-NMI: msr	S0_1_C4_C1_0, xzr
+
+# Regression test for a defect, where the bit-pattern, which should have allowed
+# only ALLSTATE, allowed SPSel (and others).
+[0xbf,0x51,0x00,0xd5]
+# CHECK: msr	S0_0_C5_C1_5, xzr
+# NO-NMI: msr	S0_0_C5_C1_5, xzr
+
 [0xa7,0xc9,0x38,0xd5]
 # CHECK: mrs	x7, ICC_NMIAR1_EL1
 # NO-NMI: mrs	x7, S3_0_C12_C9_5

diff  --git a/llvm/test/MC/Disassembler/AArch64/basic-a64-instructions.txt b/llvm/test/MC/Disassembler/AArch64/basic-a64-instructions.txt
index 8b0fb4f8c6afd..aa69236ef6fc4 100644
--- a/llvm/test/MC/Disassembler/AArch64/basic-a64-instructions.txt
+++ b/llvm/test/MC/Disassembler/AArch64/basic-a64-instructions.txt
@@ -4412,12 +4412,16 @@
 
 # CHECK: mrs     x12, {{s3_7_c15_c1_5|S3_7_C15_C1_5}}
 # CHECK: mrs     x13, {{s3_2_c11_c15_7|S3_2_C11_C15_7}}
+# CHECK: mrs     xzr, {{s0_0_c4_c0_0|S0_0_C4_C0_0}}
 # CHECK: msr     {{s3_0_c15_c0_0|S3_0_C15_C0_0}}, x12
 # CHECK: msr     {{s3_7_c11_c13_7|S3_7_C11_C13_7}}, x5
+# CHECK: msr     {{s0_0_c4_c0_0|S0_0_C4_C0_0}}, xzr
 0xac 0xf1 0x3f 0xd5
 0xed 0xbf 0x3a 0xd5
+0x1f 0x40 0x20 0xd5
 0x0c 0xf0 0x18 0xd5
 0xe5 0xbd 0x1f 0xd5
+0x1f 0x40 0x00 0xd5
 
 #------------------------------------------------------------------------------
 # Test and branch (immediate)


        


More information about the llvm-branch-commits mailing list