[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