[clang] [llvm] [AArch64][llvm] Add support for Permission Overlays Extension 2 (FEAT_S1POE2) (PR #164912)

Jonathan Thackray via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 3 03:55:54 PST 2025


https://github.com/jthackray updated https://github.com/llvm/llvm-project/pull/164912

>From 715ea155e500e5d84881fbb64640b5d95561e842 Mon Sep 17 00:00:00 2001
From: Jonathan Thackray <jonathan.thackray at arm.com>
Date: Tue, 2 Sep 2025 16:43:43 +0100
Subject: [PATCH 1/2] [AArch64][llvm] Add support for Permission Overlays
 Extension 2 (FEAT_S1POE2)

Add assembly/disassembly support for AArch64 FEAT_S1POE2 (Stage 1
Permission Overlays Extension 2), as documented here:

   https://developer.arm.com/documentation/109697/2025_09/Future-Architecture-Technologies

Co-authored-by: Rodolfo Wottrich <rodolfo.wottrich at arm.com>
---
 clang/test/Driver/aarch64-vfat.c              |   15 +
 .../print-supported-extensions-aarch64.c      |    3 +
 llvm/lib/Target/AArch64/AArch64Features.td    |   13 +
 .../lib/Target/AArch64/AArch64InstrFormats.td |   98 +
 llvm/lib/Target/AArch64/AArch64InstrInfo.td   |   27 +
 .../Target/AArch64/AArch64SystemOperands.td   |  177 +
 .../AArch64/AsmParser/AArch64AsmParser.cpp    |   78 +-
 .../MCTargetDesc/AArch64InstPrinter.cpp       |   25 +
 .../AArch64/MCTargetDesc/AArch64InstPrinter.h |    3 +
 .../Target/AArch64/Utils/AArch64BaseInfo.cpp  |   20 +-
 .../Target/AArch64/Utils/AArch64BaseInfo.h    |   16 +
 llvm/test/MC/AArch64/arm-btie.s               |   27 +
 .../MC/AArch64/arm-poe2-tlbid-diagnostics.s   |   88 +
 llvm/test/MC/AArch64/arm-poe2-tlbid.s         |  117 +
 llvm/test/MC/AArch64/arm-poe2.s               | 3263 +++++++++++++++++
 llvm/test/MC/AArch64/arm-tev.s                |   41 +
 .../TargetParser/TargetParserTest.cpp         |   13 +-
 17 files changed, 4018 insertions(+), 6 deletions(-)
 create mode 100644 clang/test/Driver/aarch64-vfat.c
 create mode 100644 llvm/test/MC/AArch64/arm-btie.s
 create mode 100644 llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s
 create mode 100644 llvm/test/MC/AArch64/arm-poe2-tlbid.s
 create mode 100644 llvm/test/MC/AArch64/arm-poe2.s
 create mode 100644 llvm/test/MC/AArch64/arm-tev.s

diff --git a/clang/test/Driver/aarch64-vfat.c b/clang/test/Driver/aarch64-vfat.c
new file mode 100644
index 0000000000000..fa268641a86e0
--- /dev/null
+++ b/clang/test/Driver/aarch64-vfat.c
@@ -0,0 +1,15 @@
+// ===== Features supported on aarch64 =====
+
+// FAT features (Future Architecture Technologies)
+
+// RUN: %clang -target aarch64 -march=armv9.7a+poe2 -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-POE2 %s
+// RUN: %clang -target aarch64 -march=armv9.7-a+poe2 -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-POE2 %s
+// VFAT-POE2: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+poe2"
+
+// RUN: %clang -target aarch64 -march=armv9.7a+tev -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-TEV %s
+// RUN: %clang -target aarch64 -march=armv9.7-a+tev -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-TEV %s
+// VFAT-TEV: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+tev"
+
+// RUN: %clang -target aarch64 -march=armv9.7a+btie -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-BTIE %s
+// RUN: %clang -target aarch64 -march=armv9.7-a+btie -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-BTIE %s
+// VFAT-BTIE: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+btie"
diff --git a/clang/test/Driver/print-supported-extensions-aarch64.c b/clang/test/Driver/print-supported-extensions-aarch64.c
index 7294c33959e7e..d0c86c7065281 100644
--- a/clang/test/Driver/print-supported-extensions-aarch64.c
+++ b/clang/test/Driver/print-supported-extensions-aarch64.c
@@ -8,6 +8,7 @@
 // CHECK-NEXT:     bf16                FEAT_BF16                                              Enable BFloat16 Extension
 // CHECK-NEXT:     brbe                FEAT_BRBE                                              Enable Branch Record Buffer Extension
 // CHECK-NEXT:     bti                 FEAT_BTI                                               Enable Branch Target Identification
+// CHECK-NEXT:     btie                FEAT_BTIE                                              Enable Enhanced Branch Target Identification extension
 // CHECK-NEXT:     cmh                 FEAT_CMH                                               Enable Armv9.7-A Contention Management Hints
 // CHECK-NEXT:     cmpbr               FEAT_CMPBR                                             Enable Armv9.6-A base compare and branch instructions
 // CHECK-NEXT:     fcma                FEAT_FCMA                                              Enable Armv8.3-A Floating-point complex number support
@@ -58,6 +59,7 @@
 // CHECK-NEXT:     pauth-lr            FEAT_PAuth_LR                                          Enable Armv9.5-A PAC enhancements
 // CHECK-NEXT:     pcdphint            FEAT_PCDPHINT                                          Enable Armv9.6-A Producer Consumer Data Placement hints
 // CHECK-NEXT:     pmuv3               FEAT_PMUv3                                             Enable Armv8.0-A PMUv3 Performance Monitors extension
+// CHECK-NEXT:     poe2                FEAT_S1POE2                                            Enable Stage 1 Permission Overlays Extension 2 instructions
 // CHECK-NEXT:     pops                FEAT_PoPS                                              Enable Armv9.6-A Point Of Physical Storage (PoPS) DC instructions
 // CHECK-NEXT:     predres             FEAT_SPECRES                                           Enable Armv8.5-A execution and data prediction invalidation instructions
 // CHECK-NEXT:     rng                 FEAT_RNG                                               Enable Random Number generation instructions
@@ -112,6 +114,7 @@
 // CHECK-NEXT:     sve2p1              FEAT_SVE2p1                                            Enable Scalable Vector Extension 2.1 instructions
 // CHECK-NEXT:     sve2p2              FEAT_SVE2p2                                            Enable Armv9.6-A Scalable Vector Extension 2.2 instructions
 // CHECK-NEXT:     sve2p3              FEAT_SVE2p3                                            Enable Armv9.7-A Scalable Vector Extension 2.3 instructions
+// CHECK-NEXT:     tev                 FEAT_TEV                                               Enable TIndex Exception-like Vector instructions
 // CHECK-NEXT:     the                 FEAT_THE                                               Enable Armv8.9-A Translation Hardening Extension
 // CHECK-NEXT:     tlbid               FEAT_TLBID                                             Enable Armv9.7-A TLBI Domains extension
 // CHECK-NEXT:     tlbiw               FEAT_TLBIW                                             Enable Armv9.5-A TLBI VMALL for Dirty State
diff --git a/llvm/lib/Target/AArch64/AArch64Features.td b/llvm/lib/Target/AArch64/AArch64Features.td
index 0e94b78d11d83..c4f6e000dff66 100644
--- a/llvm/lib/Target/AArch64/AArch64Features.td
+++ b/llvm/lib/Target/AArch64/AArch64Features.td
@@ -625,6 +625,19 @@ def FeatureF16F32DOT : ExtensionWithMArch<"f16f32dot", "F16F32DOT", "FEAT_F16F32
 def FeatureF16F32MM : ExtensionWithMArch<"f16f32mm", "F16F32MM", "FEAT_F16F32MM",
   "Enable Armv9.7-A Advanced SIMD half-precision matrix multiply-accumulate to single-precision", [FeatureNEON, FeatureFullFP16]>;
 
+//===----------------------------------------------------------------------===//
+//  Future Architecture Technologies
+//===----------------------------------------------------------------------===//
+
+def FeatureBTIE: ExtensionWithMArch<"btie", "BTIE", "FEAT_BTIE",
+  "Enable Enhanced Branch Target Identification extension">;
+
+def FeatureS1POE2: ExtensionWithMArch<"poe2", "POE2", "FEAT_S1POE2",
+  "Enable Stage 1 Permission Overlays Extension 2 instructions", [FeatureBTIE]>;
+
+def FeatureTEV: ExtensionWithMArch<"tev", "TEV", "FEAT_TEV",
+  "Enable TIndex Exception-like Vector instructions">;
+
 //===----------------------------------------------------------------------===//
 //  Other Features
 //===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
index 58a53af76e1b5..a39bb31e61196 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
@@ -1909,6 +1909,21 @@ def CMHPriorityHint_op : Operand<i32> {
   }];
 }
 
+def TIndexHintOperand : AsmOperandClass {
+  let Name = "TIndexHint";
+  let ParserMethod = "tryParseTIndexHint";
+}
+
+def TIndexhint_op : Operand<i32> {
+  let ParserMatchClass = TIndexHintOperand;
+  let PrintMethod = "printTIndexHintOp";
+  let MCOperandPredicate = [{
+    if (!MCOp.isImm())
+      return false;
+    return AArch64TIndexHint::lookupTIndexByEncoding(MCOp.getImm()) != nullptr;
+  }];
+}
+
 class MRSI : RtSystemI<1, (outs GPR64:$Rt), (ins mrs_sysreg_op:$systemreg),
                        "mrs", "\t$Rt, $systemreg"> {
   bits<16> systemreg;
@@ -13338,3 +13353,86 @@ class STCPHInst<string asm> : I<
     let Inst{7-5}   = 0b100;
     let Inst{4-0}   = 0b11111;
 }
+
+//---
+// Permission Overlays Extension 2 (FEAT_S1POE2)
+//---
+
+class TCHANGERegInst<string asm, bit isB> : I<
+    (outs GPR64:$Xd),
+    (ins GPR64:$Xn, TIndexhint_op:$nb),
+    asm, "\t$Xd, $Xn, $nb", "", []>, Sched<[]> {
+  bits<5> Xd;
+  bits<5> Xn;
+  bits<1> nb;
+  let Inst{31-19} = 0b1101010110000;
+  let Inst{18}    = isB;
+  let Inst{17}    = nb;
+  let Inst{16-10} = 0b0000000;
+  let Inst{9-5}   = Xn;
+  let Inst{4-0}   = Xd;
+}
+
+class TCHANGEImmInst<string asm, bit isB> : I<
+    (outs GPR64:$Xd),
+    (ins imm0_127:$imm, TIndexhint_op:$nb),
+    asm, "\t$Xd, $imm, $nb", "", []>, Sched<[]> {
+  bits<5> Xd;
+  bits<7> imm;
+  bits<1> nb;
+  let Inst{31-19} = 0b1101010110010;
+  let Inst{18}    = isB;
+  let Inst{17}    = nb;
+  let Inst{16-12} = 0b00000;
+  let Inst{11-5}  = imm;
+  let Inst{4-0}   = Xd;
+}
+
+class TENTERInst<string asm> : I<
+    (outs),
+    (ins imm0_127:$imm, TIndexhint_op:$nb),
+    asm, "\t$imm, $nb", "", []>, Sched<[]> {
+  bits<7> imm;
+  bits<1> nb;
+  let Inst{31-20} = 0b110101001110;
+  let Inst{19-18} = 0b00;
+  let Inst{17}    = nb;
+  let Inst{16-12} = 0b00000;
+  let Inst{11-5}  = imm;
+  let Inst{4-0}   = 0b00000;
+}
+
+class TEXITInst<string asm> : I<
+    (outs),
+    (ins TIndexhint_op:$nb),
+    asm, "\t$nb", "", []>, Sched<[]> {
+  bits<1> nb;
+  let Inst{31-13} = 0b1101011011111111000;
+  let Inst{12-11} = 0b00;
+  let Inst{10}    = nb;
+  let Inst{9-0}   = 0b1111100000;
+}
+
+
+multiclass TCHANGEReg<string asm , bit isB> {
+  def NAME : TCHANGERegInst<asm, isB>;
+  def      : InstAlias<asm # "\t$Xd, $Xn",
+                      (!cast<Instruction>(NAME) GPR64:$Xd, GPR64:$Xn, 0), 1>;
+}
+
+multiclass TCHANGEImm<string asm, bit isB> {
+  def NAME : TCHANGEImmInst<asm, isB>;
+  def      : InstAlias<asm # "\t$Xd, $Xn",
+                      (!cast<Instruction>(NAME) GPR64:$Xd, imm0_127:$Xn, 0), 1>;
+}
+
+multiclass TENTER<string asm> {
+  def NAME : TENTERInst<asm>;
+  def      : InstAlias<asm # "\t$imm",
+                      (!cast<Instruction>(NAME) imm0_127:$imm, 0), 1>;
+}
+
+multiclass TEXIT<string asm> {
+  def NAME : TEXITInst<asm>;
+  def      : InstAlias<asm, (!cast<Instruction>(NAME) 0), 1>;
+}
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
index 2871a20e28b65..cbba169f4db92 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
@@ -346,6 +346,8 @@ def HasCCDP          : Predicate<"Subtarget->hasCCDP()">,
                                  AssemblerPredicateWithAll<(all_of FeatureCacheDeepPersist), "ccdp">;
 def HasBTI           : Predicate<"Subtarget->hasBTI()">,
                                  AssemblerPredicateWithAll<(all_of FeatureBranchTargetId), "bti">;
+def HasBTIE          : Predicate<"Subtarget->hasBTIE()">,
+                                 AssemblerPredicateWithAll<(all_of FeatureBTIE), "btie">;
 def HasMTE           : Predicate<"Subtarget->hasMTE()">,
                                  AssemblerPredicateWithAll<(all_of FeatureMTE), "mte">;
 def HasTME           : Predicate<"Subtarget->hasTME()">,
@@ -405,6 +407,10 @@ def HasMTETC         : Predicate<"Subtarget->hasMTETC()">,
                                  AssemblerPredicateWithAll<(all_of FeatureMTETC), "mtetc">;
 def HasGCIE          : Predicate<"Subtarget->hasGCIE()">,
                                  AssemblerPredicateWithAll<(all_of FeatureGCIE), "gcie">;
+def HasS1POE2        : Predicate<"Subtarget->hasS1POE2()">,
+                                 AssemblerPredicateWithAll<(all_of FeatureS1POE2), "poe2">;
+def HasTEV           : Predicate<"Subtarget->hasTEV()">,
+                                 AssemblerPredicateWithAll<(all_of FeatureTEV), "tev">;
 def IsLE             : Predicate<"Subtarget->isLittleEndian()">;
 def IsBE             : Predicate<"!Subtarget->isLittleEndian()">;
 def IsWindows        : Predicate<"Subtarget->isTargetWindows()">;
@@ -1540,6 +1546,7 @@ let Predicates = [HasPCDPHINT] in {
 // should not emit these mnemonics unless BTI is enabled.
 def : InstAlias<"bti",  (HINT 32), 0>;
 def : InstAlias<"bti $op", (HINT btihint_op:$op), 0>;
+def : InstAlias<"bti r", (HINT 32)>, Requires<[HasBTIE]>;
 def : InstAlias<"bti",  (HINT 32)>, Requires<[HasBTI]>;
 def : InstAlias<"bti $op", (HINT btihint_op:$op)>, Requires<[HasBTI]>;
 
@@ -11426,6 +11433,26 @@ let Predicates = [HasCMH] in {
   def STCPH  : STCPHInst<"stcph">; // Store Concurrent Priority Hint instruction
 }
 
+//===----------------------------------------------------------------------===//
+// Permission Overlays Extension 2 (FEAT_S1POE2)
+//===----------------------------------------------------------------------===//
+
+let Predicates = [HasS1POE2] in {
+  defm TCHANGEBrr : TCHANGEReg<"tchangeb", true>;
+  defm TCHANGEFrr : TCHANGEReg<"tchangef", false>;
+  defm TCHANGEBri : TCHANGEImm<"tchangeb", true>;
+  defm TCHANGEFri : TCHANGEImm<"tchangef", false>;
+}
+
+//===----------------------------------------------------------------------===//
+// TIndex Exception-like Vector (FEAT_TEV)
+//===----------------------------------------------------------------------===//
+
+let Predicates = [HasTEV] in {
+  defm TENTER : TENTER<"tenter">;
+  defm TEXIT : TEXIT<"texit">;
+}
+
 include "AArch64InstrAtomics.td"
 include "AArch64SVEInstrInfo.td"
 include "AArch64SMEInstrInfo.td"
diff --git a/llvm/lib/Target/AArch64/AArch64SystemOperands.td b/llvm/lib/Target/AArch64/AArch64SystemOperands.td
index ae46d717d0cb1..51913f6cb5c1f 100644
--- a/llvm/lib/Target/AArch64/AArch64SystemOperands.td
+++ b/llvm/lib/Target/AArch64/AArch64SystemOperands.td
@@ -814,10 +814,12 @@ def lookupBTIByName : SearchIndex {
   let Key = ["Name"];
 }
 
+def : BTI<"r",  0b000>;
 def : BTI<"c",  0b010>;
 def : BTI<"j",  0b100>;
 def : BTI<"jc", 0b110>;
 
+
 //===----------------------------------------------------------------------===//
 // CMHPriority instruction options.
 //===----------------------------------------------------------------------===//
@@ -833,6 +835,23 @@ class CMHPriorityHint<string name, bits<1> encoding> : SearchableTable {
 
 def : CMHPriorityHint<"ph", 0b1>;
 
+
+//===----------------------------------------------------------------------===//
+// TIndex instruction options.
+//===----------------------------------------------------------------------===//
+
+class TIndex<string name, bits<1> encoding> : SearchableTable {
+  let SearchableFields = ["Name", "Encoding"];
+  let EnumValueField = "Encoding";
+
+  string Name = name;
+  bits<1> Encoding;
+  let Encoding = encoding;
+}
+
+def : TIndex<"nb", 0b1>;
+
+
 //===----------------------------------------------------------------------===//
 // TLBI (translation lookaside buffer invalidate) instruction options.
 //===----------------------------------------------------------------------===//
@@ -2694,3 +2713,161 @@ def : GIC<"ldhm",     0b110, 0b1100, 0b0010, 0b001>;
 def : GIC<"ldpend",   0b110, 0b1100, 0b0001, 0b100>;
 def : GIC<"ldpri",    0b110, 0b1100, 0b0001, 0b010>;
 def : GIC<"ldrcfg",   0b110, 0b1100, 0b0001, 0b101>;
+
+
+// Stage 1 Permission Overlays Extension 2 (FEAT_S1POE2).
+//                                  Op0   Op1    CRn     CRm     Op2
+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",        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",        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",  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",  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",         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",        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",       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",        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",         0b11, 0b100, 0b0010, 0b0010, 0b001>;
+
+//                                  Op0   Op1    CRn     CRm     Op2
+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",  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",       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",  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,
+                bit needsreg, bit optionalreg> {
+  string Name = name;
+  bits<14> Encoding;
+  let Encoding{13-11} = op1;
+  let Encoding{10-7} = crn;
+  let Encoding{6-3} = crm;
+  let Encoding{2-0} = op2;
+  bit NeedsReg = needsreg;
+  bit OptionalReg = optionalreg;
+  string RequiresStr = [{ {AArch64::FeatureS1POE2} }];
+}
+
+def PLBITable : GenericTable {
+  let FilterClass = "PLBIEntry";
+  let CppTypeName = "PLBI";
+  let Fields = ["Name", "Encoding", "NeedsReg", "OptionalReg", "RequiresStr"];
+
+  let PrimaryKey = ["Encoding"];
+  let PrimaryKeyName = "lookupPLBIByEncoding";
+}
+
+def lookupPLBIByName : SearchIndex {
+  let Table = PLBITable;
+  let Key = ["Name"];
+}
+
+multiclass PLBI<string name, bits<3> op1, bits<4> crn, bits<3> op2,
+                bit needsreg> {
+  // Entries containing "IS" or "OS" allow optional regs when +tlbid enabled
+  def : PLBIEntry<op1, crn, 0b0111, op2, name,         needsreg, 0>;
+  def : PLBIEntry<op1, crn, 0b0011, op2, name#"IS",    needsreg, 1>;
+  def : PLBIEntry<op1, crn, 0b0001, op2, name#"OS",    needsreg, 1>;
+  def : PLBIEntry<op1, crn, 0b1111, op2, name#"NXS",   needsreg, 0>;
+  def : PLBIEntry<op1, crn, 0b1011, op2, name#"ISNXS", needsreg, 1>;
+  def : PLBIEntry<op1, crn, 0b1001, op2, name#"OSNXS", needsreg, 1>;
+}
+
+// CRm defines above six variants of each instruction. It is omitted here.
+//                     Op1    CRn     Op2    needsreg
+defm : PLBI<"ALLE3",   0b110, 0b1010, 0b000, 0>;
+defm : PLBI<"ALLE2",   0b100, 0b1010, 0b000, 0>;
+defm : PLBI<"ALLE1",   0b100, 0b1010, 0b100, 0>;
+defm : PLBI<"VMALLE1", 0b000, 0b1010, 0b000, 0>;
+defm : PLBI<"ASIDE1",  0b000, 0b1010, 0b010, 1>;
+defm : PLBI<"PERME3",  0b110, 0b1010, 0b001, 1>;
+defm : PLBI<"PERME2",  0b100, 0b1010, 0b001, 1>;
+defm : PLBI<"PERME1",  0b000, 0b1010, 0b001, 1>;
+defm : PLBI<"PERMAE1", 0b000, 0b1010, 0b011, 1>;
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 6273cfc1005d6..71cde9ddf0978 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -268,6 +268,7 @@ class AArch64AsmParser : public MCTargetAsmParser {
   ParseStatus tryParsePSBHint(OperandVector &Operands);
   ParseStatus tryParseBTIHint(OperandVector &Operands);
   ParseStatus tryParseCMHPriorityHint(OperandVector &Operands);
+  ParseStatus tryParseTIndexHint(OperandVector &Operands);
   ParseStatus tryParseAdrpLabel(OperandVector &Operands);
   ParseStatus tryParseAdrLabel(OperandVector &Operands);
   template <bool AddFPZeroAsLiteral>
@@ -373,6 +374,7 @@ class AArch64Operand : public MCParsedAsmOperand {
     k_PHint,
     k_BTIHint,
     k_CMHPriorityHint,
+    k_TIndexHint,
   } Kind;
 
   SMLoc StartLoc, EndLoc;
@@ -507,6 +509,11 @@ class AArch64Operand : public MCParsedAsmOperand {
     unsigned Length;
     unsigned Val;
   };
+  struct TIndexHintOp {
+    const char *Data;
+    unsigned Length;
+    unsigned Val;
+  };
 
   struct SVCROp {
     const char *Data;
@@ -534,6 +541,7 @@ class AArch64Operand : public MCParsedAsmOperand {
     struct PHintOp PHint;
     struct BTIHintOp BTIHint;
     struct CMHPriorityHintOp CMHPriorityHint;
+    struct TIndexHintOp TIndexHint;
     struct ShiftExtendOp ShiftExtend;
     struct SVCROp SVCR;
   };
@@ -607,6 +615,9 @@ class AArch64Operand : public MCParsedAsmOperand {
     case k_CMHPriorityHint:
       CMHPriorityHint = o.CMHPriorityHint;
       break;
+    case k_TIndexHint:
+      TIndexHint = o.TIndexHint;
+      break;
     case k_ShiftExtend:
       ShiftExtend = o.ShiftExtend;
       break;
@@ -791,6 +802,16 @@ class AArch64Operand : public MCParsedAsmOperand {
     return StringRef(CMHPriorityHint.Data, CMHPriorityHint.Length);
   }
 
+  unsigned getTIndexHint() const {
+    assert(Kind == k_TIndexHint && "Invalid access!");
+    return TIndexHint.Val;
+  }
+
+  StringRef getTIndexHintName() const {
+    assert(Kind == k_TIndexHint && "Invalid access!");
+    return StringRef(TIndexHint.Data, TIndexHint.Length);
+  }
+
   StringRef getSVCR() const {
     assert(Kind == k_SVCR && "Invalid access!");
     return StringRef(SVCR.Data, SVCR.Length);
@@ -1534,6 +1555,7 @@ class AArch64Operand : public MCParsedAsmOperand {
   bool isPHint() const { return Kind == k_PHint; }
   bool isBTIHint() const { return Kind == k_BTIHint; }
   bool isCMHPriorityHint() const { return Kind == k_CMHPriorityHint; }
+  bool isTIndexHint() const { return Kind == k_TIndexHint; }
   bool isShiftExtend() const { return Kind == k_ShiftExtend; }
   bool isShifter() const {
     if (!isShiftExtend())
@@ -2224,6 +2246,11 @@ class AArch64Operand : public MCParsedAsmOperand {
     Inst.addOperand(MCOperand::createImm(getCMHPriorityHint()));
   }
 
+  void addTIndexHintOperands(MCInst &Inst, unsigned N) const {
+    assert(N == 1 && "Invalid number of operands!");
+    Inst.addOperand(MCOperand::createImm(getTIndexHint()));
+  }
+
   void addShifterOperands(MCInst &Inst, unsigned N) const {
     assert(N == 1 && "Invalid number of operands!");
     unsigned Imm =
@@ -2585,6 +2612,17 @@ class AArch64Operand : public MCParsedAsmOperand {
     return Op;
   }
 
+  static std::unique_ptr<AArch64Operand>
+  CreateTIndexHint(unsigned Val, StringRef Str, SMLoc S, MCContext &Ctx) {
+    auto Op = std::make_unique<AArch64Operand>(k_TIndexHint, Ctx);
+    Op->TIndexHint.Val = Val;
+    Op->TIndexHint.Data = Str.data();
+    Op->TIndexHint.Length = Str.size();
+    Op->StartLoc = S;
+    Op->EndLoc = S;
+    return Op;
+  }
+
   static std::unique_ptr<AArch64Operand>
   CreateMatrixRegister(unsigned RegNum, unsigned ElementWidth, MatrixKind Kind,
                        SMLoc S, SMLoc E, MCContext &Ctx) {
@@ -2698,6 +2736,9 @@ void AArch64Operand::print(raw_ostream &OS, const MCAsmInfo &MAI) const {
   case k_CMHPriorityHint:
     OS << getCMHPriorityHintName();
     break;
+  case k_TIndexHint:
+    OS << getTIndexHintName();
+    break;
   case k_MatrixRegister:
     OS << "<matrix " << getMatrixReg() << ">";
     break;
@@ -3339,6 +3380,23 @@ ParseStatus AArch64AsmParser::tryParseCMHPriorityHint(OperandVector &Operands) {
   return ParseStatus::Success;
 }
 
+/// tryParseTIndexHint - Try to parse a TIndex operand
+ParseStatus AArch64AsmParser::tryParseTIndexHint(OperandVector &Operands) {
+  SMLoc S = getLoc();
+  const AsmToken &Tok = getTok();
+  if (Tok.isNot(AsmToken::Identifier))
+    return TokError("invalid operand for instruction");
+
+  auto TIndex = AArch64TIndexHint::lookupTIndexByName(Tok.getString());
+  if (!TIndex)
+    return TokError("invalid operand for instruction");
+
+  Operands.push_back(AArch64Operand::CreateTIndexHint(
+      TIndex->Encoding, Tok.getString(), S, getContext()));
+  Lex(); // Eat identifier token.
+  return ParseStatus::Success;
+}
+
 /// tryParseAdrpLabel - Parse and validate a source label for the ADRP
 /// instruction.
 ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
@@ -3896,6 +3954,7 @@ static const struct Extension {
     {"f16mm", {AArch64::FeatureF16MM}},
     {"f16f32dot", {AArch64::FeatureF16F32DOT}},
     {"f16f32mm", {AArch64::FeatureF16F32MM}},
+    {"poe2", {AArch64::FeatureS1POE2}},
 };
 
 static void setRequiredFeatureString(FeatureBitset FBS, std::string &Str) {
@@ -3985,6 +4044,7 @@ bool AArch64AsmParser::parseSysAlias(StringRef Name, SMLoc NameLoc,
   bool ExpectRegister = true;
   bool OptionalRegister = false;
   bool hasAll = getSTI().hasFeature(AArch64::FeatureAll);
+  bool hasTLBID = getSTI().hasFeature(AArch64::FeatureTLBID);
 
   if (Mnemonic == "ic") {
     const AArch64IC::IC *IC = AArch64IC::lookupICByName(Op);
@@ -4065,6 +4125,20 @@ bool AArch64AsmParser::parseSysAlias(StringRef Name, SMLoc NameLoc,
     }
     ExpectRegister = false;
     createSysAlias(GSB->Encoding, Operands, S);
+  } else if (Mnemonic == "plbi") {
+    const AArch64PLBI::PLBI *PLBI = AArch64PLBI::lookupPLBIByName(Op);
+    if (!PLBI)
+      return TokError("invalid operand for PLBI instruction");
+    else if (!PLBI->haveFeatures(getSTI().getFeatureBits())) {
+      std::string Str("PLBI " + std::string(PLBI->Name) + " requires: ");
+      setRequiredFeatureString(PLBI->getRequiredFeatures(), Str);
+      return TokError(Str);
+    }
+    ExpectRegister = PLBI->NeedsReg;
+    if (hasAll || hasTLBID) {
+      OptionalRegister = PLBI->OptionalReg;
+    }
+    createSysAlias(PLBI->Encoding, Operands, S);
   } else if (Mnemonic == "cfp" || Mnemonic == "dvp" || Mnemonic == "cpp" ||
              Mnemonic == "cosp") {
 
@@ -5439,11 +5513,11 @@ bool AArch64AsmParser::parseInstruction(ParseInstructionInfo &Info,
   size_t Start = 0, Next = Name.find('.');
   StringRef Head = Name.slice(Start, Next);
 
-  // IC, DC, AT, TLBI, MLBI, GIC{R}, GSB and Prediction invalidation
+  // IC, DC, AT, TLBI, MLBI, PLBI, GIC{R}, GSB and Prediction invalidation
   // instructions are aliases for the SYS instruction.
   if (Head == "ic" || Head == "dc" || Head == "at" || Head == "tlbi" ||
       Head == "cfp" || Head == "dvp" || Head == "cpp" || Head == "cosp" ||
-      Head == "mlbi" || Head == "gic" || Head == "gsb")
+      Head == "mlbi" || Head == "plbi" || Head == "gic" || Head == "gsb")
     return parseSysAlias(Head, NameLoc, Operands);
 
   // GICR instructions are aliases for the SYSL instruction.
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
index 4cd51d6701d97..bbc34ad35296c 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
@@ -1047,6 +1047,18 @@ bool AArch64InstPrinter::printSysAlias(const MCInst *MI,
       Ins = "gsb\t";
       Name = std::string(GSB->Name);
     }
+  } else if (CnVal == 10) {
+    // PLBI aliases
+    const AArch64PLBI::PLBI *PLBI = AArch64PLBI::lookupPLBIByEncoding(Encoding);
+    if (!PLBI || !PLBI->haveFeatures(STI.getFeatureBits()))
+      return false;
+
+    NeedsReg = PLBI->NeedsReg;
+    if (STI.hasFeature(AArch64::FeatureAll) ||
+        STI.hasFeature(AArch64::FeatureTLBID))
+      OptionalReg = PLBI->OptionalReg;
+    Ins = "plbi\t";
+    Name = std::string(PLBI->Name);
   } else
     return false;
 
@@ -1608,6 +1620,19 @@ void AArch64InstPrinter::printCMHPriorityHintOp(const MCInst *MI,
       AArch64CMHPriorityHint::lookupCMHPriorityHintByEncoding(priorityhint_op);
   if (PHint)
     O << PHint->Name;
+  else
+    markup(O, Markup::Immediate) << '#' << formatImm(priorityhint_op);
+}
+
+void AArch64InstPrinter::printTIndexHintOp(const MCInst *MI, unsigned OpNum,
+                                           const MCSubtargetInfo &STI,
+                                           raw_ostream &O) {
+  unsigned tindexhintop = MI->getOperand(OpNum).getImm();
+  auto TIndex = AArch64TIndexHint::lookupTIndexByEncoding(tindexhintop);
+  if (TIndex)
+    O << TIndex->Name;
+  else
+    markup(O, Markup::Immediate) << '#' << formatImm(tindexhintop);
 }
 
 void AArch64InstPrinter::printFPImmOperand(const MCInst *MI, unsigned OpNum,
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.h
index 307402d920d32..3f7a3b4b0667b 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.h
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.h
@@ -156,6 +156,9 @@ class AArch64InstPrinter : public MCInstPrinter {
   void printCMHPriorityHintOp(const MCInst *MI, unsigned OpNum,
                               const MCSubtargetInfo &STI, raw_ostream &O);
 
+  void printTIndexHintOp(const MCInst *MI, unsigned OpNum,
+                         const MCSubtargetInfo &STI, raw_ostream &O);
+
   void printFPImmOperand(const MCInst *MI, unsigned OpNum,
                          const MCSubtargetInfo &STI, raw_ostream &O);
 
diff --git a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
index 268a22968f8ab..556d2c32569b4 100644
--- a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
+++ b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
@@ -145,6 +145,13 @@ namespace AArch64CMHPriorityHint {
 } // namespace AArch64CMHPriorityHint
 } // namespace llvm
 
+namespace llvm {
+namespace AArch64TIndexHint {
+#define GET_TINDEX_IMPL
+#include "AArch64GenSystemOperands.inc"
+} // namespace AArch64TIndexHint
+} // namespace llvm
+
 namespace llvm {
   namespace AArch64SysReg {
 #define GET_SysRegsList_IMPL
@@ -186,11 +193,18 @@ std::string AArch64SysReg::genericRegisterString(uint32_t Bits) {
 }
 
 namespace llvm {
-  namespace AArch64TLBI {
+namespace AArch64TLBI {
 #define GET_TLBITable_IMPL
 #include "AArch64GenSystemOperands.inc"
-  }
-}
+} // namespace AArch64TLBI
+} // namespace llvm
+
+namespace llvm {
+namespace AArch64PLBI {
+#define GET_PLBITable_IMPL
+#include "AArch64GenSystemOperands.inc"
+} // namespace AArch64PLBI
+} // namespace llvm
 
 namespace llvm {
 namespace AArch64TLBIP {
diff --git a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h
index 27812e94a3516..83157b5513da2 100644
--- a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h
+++ b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h
@@ -695,6 +695,14 @@ struct CMHPriorityHint : SysAlias {
 #include "AArch64GenSystemOperands.inc"
 } // namespace AArch64CMHPriorityHint
 
+namespace AArch64TIndexHint {
+struct TIndex : SysAlias {
+  using SysAlias::SysAlias;
+};
+#define GET_TINDEX_DECL
+#include "AArch64GenSystemOperands.inc"
+} // namespace AArch64TIndexHint
+
 namespace AArch64SME {
 enum ToggleCondition : unsigned {
   Always,
@@ -853,6 +861,14 @@ struct GSB : SysAlias {
 #include "AArch64GenSystemOperands.inc"
 } // namespace AArch64GSB
 
+namespace AArch64PLBI {
+struct PLBI : SysAliasOptionalReg {
+  using SysAliasOptionalReg::SysAliasOptionalReg;
+};
+#define GET_PLBITable_DECL
+#include "AArch64GenSystemOperands.inc"
+} // namespace AArch64PLBI
+
 namespace AArch64II {
 /// Target Operand Flag enum.
 enum TOF {
diff --git a/llvm/test/MC/AArch64/arm-btie.s b/llvm/test/MC/AArch64/arm-btie.s
new file mode 100644
index 0000000000000..1893fe5196b32
--- /dev/null
+++ b/llvm/test/MC/AArch64/arm-btie.s
@@ -0,0 +1,27 @@
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+btie < %s | FileCheck %s
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+poe2 < %s | FileCheck %s
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+bti  < %s | FileCheck %s --check-prefix=NOBTIE
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding              < %s | FileCheck %s --check-prefix=HINT
+
+// "bti r" is the preferred encoding when +btie or +poe2 is specified.
+// Otherwise default back to plain "bti". They are aliases of each other.
+// Check that disassembly when `btie` is not specified causes plain
+// "bti" to be emitted.
+
+bti
+bti r
+
+// CHECK: bti r     // encoding: [0x1f,0x24,0x03,0xd5]
+// CHECK: bti r     // encoding: [0x1f,0x24,0x03,0xd5]
+
+// NOBTIE: bti      // encoding: [0x1f,0x24,0x03,0xd5]
+// NOBTIE: bti      // encoding: [0x1f,0x24,0x03,0xd5]
+
+// HINT: hint #32   // encoding: [0x1f,0x24,0x03,0xd5]
+// HINT: hint #32   // encoding: [0x1f,0x24,0x03,0xd5]
+
+hint #32
+
+// CHECK: bti r     // encoding: [0x1f,0x24,0x03,0xd5]
+// NOBTIE: bti      // encoding: [0x1f,0x24,0x03,0xd5]
+// HINT: hint #32   // encoding: [0x1f,0x24,0x03,0xd5]
diff --git a/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s b/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s
new file mode 100644
index 0000000000000..e105be49283ee
--- /dev/null
+++ b/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s
@@ -0,0 +1,88 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2 < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2,+tlbid < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-NO-REGISTER
+
+// Test without using +tlbid - no optional register operand allowed
+
+plbi alle3is, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle3os, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle2is, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle2os, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle1is, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle1os, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi vmalle1is, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi vmalle1os, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle3isnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle3osnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle2isnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle2osnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle1isnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi alle1osnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi vmalle1isnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+plbi vmalle1osnxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+
+
+plbi alle3, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi alle2, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi alle1, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi vmalle1, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi alle3nxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi alle2nxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi alle1nxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
+plbi vmalle1nxs, x0
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-NO-REGISTER: error: specified plbi op does not use a register
+
diff --git a/llvm/test/MC/AArch64/arm-poe2-tlbid.s b/llvm/test/MC/AArch64/arm-poe2-tlbid.s
new file mode 100644
index 0000000000000..eac4fd58d59a0
--- /dev/null
+++ b/llvm/test/MC/AArch64/arm-poe2-tlbid.s
@@ -0,0 +1,117 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tlbid,+poe2 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2 < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN:        | llvm-objdump -d --mattr=+tlbid,+poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN:        | llvm-objdump -d --mattr=-tlbid,-poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// Disassemble encoding and check the re-encoding (-show-encoding) matches.
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tlbid,+poe2 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+tlbid,+poe2 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+// FEAT_TLBID and POE2 combined
+
+plbi alle3is, x0
+// CHECK-INST: plbi alle3is, x0
+// CHECK-ENCODING: encoding: [0x00,0xa3,0x0e,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ea300 sys #6, c10, c3, #0, x0
+
+plbi alle3os, x0
+// CHECK-INST: plbi alle3os, x0
+// CHECK-ENCODING: encoding: [0x00,0xa1,0x0e,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ea100 sys #6, c10, c1, #0, x0
+
+plbi alle2is, x0
+// CHECK-INST: plbi alle2is, x0
+// CHECK-ENCODING: encoding: [0x00,0xa3,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ca300 sys #4, c10, c3, #0, x0
+
+plbi alle2os, x0
+// CHECK-INST: plbi alle2os, x0
+// CHECK-ENCODING: encoding: [0x00,0xa1,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ca100 sys #4, c10, c1, #0, x0
+
+plbi alle1is, x0
+// CHECK-INST: plbi alle1is, x0
+// CHECK-ENCODING: encoding: [0x80,0xa3,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ca380 sys #4, c10, c3, #4, x0
+
+plbi alle1os, x0
+// CHECK-INST: plbi alle1os, x0
+// CHECK-ENCODING: encoding: [0x80,0xa1,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ca180 sys #4, c10, c1, #4, x0
+
+plbi vmalle1is, x0
+// CHECK-INST: plbi vmalle1is, x0
+// CHECK-ENCODING: encoding: [0x00,0xa3,0x08,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d508a300 sys #0, c10, c3, #0, x0
+
+plbi vmalle1os, x0
+// CHECK-INST: plbi vmalle1os, x0
+// CHECK-ENCODING: encoding: [0x00,0xa1,0x08,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d508a100 sys #0, c10, c1, #0, x0
+
+plbi alle3isnxs, x0
+// CHECK-INST: plbi alle3isnxs, x0
+// CHECK-ENCODING: encoding: [0x00,0xab,0x0e,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50eab00 sys #6, c10, c11, #0, x0
+
+plbi alle3osnxs, x0
+// CHECK-INST: plbi alle3osnxs, x0
+// CHECK-ENCODING: encoding: [0x00,0xa9,0x0e,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ea900 sys #6, c10, c9, #0, x0
+
+plbi alle2isnxs, x0
+// CHECK-INST: plbi alle2isnxs, x0
+// CHECK-ENCODING: encoding: [0x00,0xab,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50cab00 sys #4, c10, c11, #0, x0
+
+plbi alle2osnxs, x0
+// CHECK-INST: plbi alle2osnxs, x0
+// CHECK-ENCODING: encoding: [0x00,0xa9,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ca900 sys #4, c10, c9, #0, x0
+
+plbi alle1isnxs, x0
+// CHECK-INST: plbi alle1isnxs, x0
+// CHECK-ENCODING: encoding: [0x80,0xab,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50cab80 sys #4, c10, c11, #4, x0
+
+plbi alle1osnxs, x0
+// CHECK-INST: plbi alle1osnxs, x0
+// CHECK-ENCODING: encoding: [0x80,0xa9,0x0c,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ca980 sys #4, c10, c9, #4, x0
+
+plbi vmalle1isnxs, x0
+// CHECK-INST: plbi vmalle1isnxs, x0
+// CHECK-ENCODING: encoding: [0x00,0xab,0x08,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d508ab00 sys #0, c10, c11, #0, x0
+
+plbi vmalle1osnxs, x0
+// CHECK-INST: plbi vmalle1osnxs, x0
+// CHECK-ENCODING: encoding: [0x00,0xa9,0x08,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d508a900 sys #0, c10, c9, #0, x0
+
+plbi alle3is, x0
+// CHECK-INST: plbi alle3is, x0
+// CHECK-ENCODING: encoding: [0x00,0xa3,0x0e,0xd5]
+// CHECK-ERROR: error: specified plbi op does not use a register
+// CHECK-UNKNOWN: d50ea300 sys #6, c10, c3, #0, x0
diff --git a/llvm/test/MC/AArch64/arm-poe2.s b/llvm/test/MC/AArch64/arm-poe2.s
new file mode 100644
index 0000000000000..cd9b8149b2209
--- /dev/null
+++ b/llvm/test/MC/AArch64/arm-poe2.s
@@ -0,0 +1,3263 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN:        | llvm-objdump -d --mattr=+poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN:        | llvm-objdump -d --mattr=-poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// Disassemble encoding and check the re-encoding (-show-encoding) matches.
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+poe2 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+//------------------------------------------------------------------------------
+// Stage 1 Permission Overlays Extension 2 (FEAT_S1POE2).
+//------------------------------------------------------------------------------
+
+
+mrs x0, TPIDR3_EL0
+// CHECK-INST: mrs x0, TPIDR3_EL0
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53bd000 mrs x0, TPIDR3_EL0
+
+mrs x0, TPIDR3_EL1
+// CHECK-INST: mrs x0, TPIDR3_EL1
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x38,0xd5]
+// CHECK-UNKNOWN:  d538d000 mrs x0, TPIDR3_EL1
+
+mrs x0, TPIDR3_EL12
+// CHECK-INST: mrs x0, TPIDR3_EL12
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53dd000 mrs x0, TPIDR3_EL12
+
+mrs x0, TPIDR3_EL2
+// CHECK-INST: mrs x0, TPIDR3_EL2
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53cd000 mrs x0, TPIDR3_EL2
+
+mrs x0, TPIDR3_EL3
+// CHECK-INST: mrs x0, TPIDR3_EL3
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53ed000 mrs x0, TPIDR3_EL3
+
+mrs x0, VNCCR_EL2
+// CHECK-INST: mrs x0, VNCCR_EL2
+// CHECK-ENCODING: encoding: [0x20,0x22,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c2220 mrs x0, VNCCR_EL2
+
+mrs x0, DPOCR_EL0
+// CHECK-INST: mrs x0, DPOCR_EL0
+// CHECK-ENCODING: encoding: [0x40,0x45,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53b4540 mrs x0, DPOCR_EL0
+
+mrs x0, HCRMASK_EL2
+// CHECK-INST: mrs x0, HCRMASK_EL2
+// CHECK-ENCODING: encoding: [0xc0,0x15,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c15c0 mrs x0, HCRMASK_EL2
+
+mrs x0, HCRXMASK_EL2
+// CHECK-INST: mrs x0, HCRXMASK_EL2
+// CHECK-ENCODING: encoding: [0xe0,0x15,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c15e0 mrs x0, HCRXMASK_EL2
+
+mrs x0, HCR_EL2
+// CHECK-INST: mrs x0, HCR_EL2
+// CHECK-ENCODING: encoding: [0x00,0x11,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c1100 mrs x0, HCR_EL2
+
+mrs x0, NVHCR_EL2
+// CHECK-INST: mrs x0, NVHCR_EL2
+// CHECK-ENCODING: encoding: [0x00,0x15,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c1500 mrs x0, NVHCR_EL2
+
+mrs x0, NVHCRX_EL2
+// CHECK-INST: mrs x0, NVHCRX_EL2
+// CHECK-ENCODING: encoding: [0x20,0x15,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c1520 mrs x0, NVHCRX_EL2
+
+mrs x0, NVHCRMASK_EL2
+// CHECK-INST: mrs x0, NVHCRMASK_EL2
+// CHECK-ENCODING: encoding: [0x80,0x15,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c1580 mrs x0, NVHCRMASK_EL2
+
+mrs x0, NVHCRXMASK_EL2
+// CHECK-INST: mrs x0, NVHCRXMASK_EL2
+// CHECK-ENCODING: encoding: [0xa0,0x15,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c15a0 mrs x0, NVHCRXMASK_EL2
+
+mrs x3, DPOTBR0_EL1
+// CHECK-INST: mrs x3, DPOTBR0_EL1
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x38,0xd5]
+// CHECK-UNKNOWN:  d53820c3 mrs x3, DPOTBR0_EL1
+
+mrs x3, DPOTBR0_EL12
+// CHECK-INST: mrs x3, DPOTBR0_EL12
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d20c3 mrs x3, DPOTBR0_EL12
+
+mrs x3, DPOTBR1_EL1
+// CHECK-INST: mrs x3, DPOTBR1_EL1
+// CHECK-ENCODING: encoding: [0xe3,0x20,0x38,0xd5]
+// CHECK-UNKNOWN:  d53820e3 mrs x3, DPOTBR1_EL1
+
+mrs x3, DPOTBR1_EL12
+// CHECK-INST: mrs x3, DPOTBR1_EL12
+// CHECK-ENCODING: encoding: [0xe3,0x20,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d20e3 mrs x3, DPOTBR1_EL12
+
+mrs x3, DPOTBR0_EL2
+// CHECK-INST: mrs x3, DPOTBR0_EL2
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c20c3 mrs x3, DPOTBR0_EL2
+
+mrs x3, DPOTBR1_EL2
+// CHECK-INST: mrs x3, DPOTBR1_EL2
+// CHECK-ENCODING: encoding: [0xe3,0x20,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c20e3 mrs x3, DPOTBR1_EL2
+
+mrs x3, DPOTBR0_EL3
+// CHECK-INST: mrs x3, DPOTBR0_EL3
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e20c3 mrs x3, DPOTBR0_EL3
+
+mrs x3, IRTBRU_EL1
+// CHECK-INST: mrs x3, IRTBRU_EL1
+// CHECK-ENCODING: encoding: [0x83,0x20,0x38,0xd5]
+// CHECK-UNKNOWN:  d5382083 mrs x3, IRTBRU_EL1
+
+mrs x3, IRTBRU_EL12
+// CHECK-INST: mrs x3, IRTBRU_EL12
+// CHECK-ENCODING: encoding: [0x83,0x20,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d2083 mrs x3, IRTBRU_EL12
+
+mrs x3, IRTBRP_EL1
+// CHECK-INST: mrs x3, IRTBRP_EL1
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x38,0xd5]
+// CHECK-UNKNOWN:  d53820a3 mrs x3, IRTBRP_EL1
+
+mrs x3, IRTBRP_EL12
+// CHECK-INST: mrs x3, IRTBRP_EL12
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d20a3 mrs x3, IRTBRP_EL12
+
+mrs x3, IRTBRU_EL2
+// CHECK-INST: mrs x3, IRTBRU_EL2
+// CHECK-ENCODING: encoding: [0x83,0x20,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c2083 mrs x3, IRTBRU_EL2
+
+mrs x3, IRTBRP_EL2
+// CHECK-INST: mrs x3, IRTBRP_EL2
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c20a3 mrs x3, IRTBRP_EL2
+
+mrs x3, IRTBRP_EL3
+// CHECK-INST: mrs x3, IRTBRP_EL3
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e20a3 mrs x3, IRTBRP_EL3
+
+mrs x3, TTTBRU_EL1
+// CHECK-INST: mrs x3, TTTBRU_EL1
+// CHECK-ENCODING: encoding: [0xc3,0xa2,0x38,0xd5]
+// CHECK-UNKNOWN:  d538a2c3 mrs x3, TTTBRU_EL1
+
+mrs x3, TTTBRU_EL12
+// CHECK-INST: mrs x3, TTTBRU_EL12
+// CHECK-ENCODING: encoding: [0xc3,0xa2,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53da2c3 mrs x3, TTTBRU_EL12
+
+mrs x3, TTTBRP_EL1
+// CHECK-INST: mrs x3, TTTBRP_EL1
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x38,0xd5]
+// CHECK-UNKNOWN:  d538a2e3 mrs x3, TTTBRP_EL1
+
+mrs x3, TTTBRP_EL12
+// CHECK-INST: mrs x3, TTTBRP_EL12
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53da2e3 mrs x3, TTTBRP_EL12
+
+mrs x3, TTTBRU_EL2
+// CHECK-INST: mrs x3, TTTBRU_EL2
+// CHECK-ENCODING: encoding: [0xc3,0xa2,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53ca2c3 mrs x3, TTTBRU_EL2
+
+mrs x3, TTTBRP_EL2
+// CHECK-INST: mrs x3, TTTBRP_EL2
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53ca2e3 mrs x3, TTTBRP_EL2
+
+mrs x3, TTTBRP_EL3
+// CHECK-INST: mrs x3, TTTBRP_EL3
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53ea2e3 mrs x3, TTTBRP_EL3
+
+mrs x3, LDSTT_EL1
+// CHECK-INST: mrs x3, LDSTT_EL1
+// CHECK-ENCODING: encoding: [0xe3,0x21,0x38,0xd5]
+// CHECK-UNKNOWN:  d53821e3 mrs x3, LDSTT_EL1
+
+mrs x3, LDSTT_EL12
+// CHECK-INST: mrs x3, LDSTT_EL12
+// CHECK-ENCODING: encoding: [0xe3,0x21,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d21e3 mrs x3, LDSTT_EL12
+
+mrs x3, LDSTT_EL2
+// CHECK-INST: mrs x3, LDSTT_EL2
+// CHECK-ENCODING: encoding: [0xe3,0x21,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c21e3 mrs x3, LDSTT_EL2
+
+mrs x3, TINDEX_EL0
+// CHECK-INST: mrs x3, TINDEX_EL0
+// CHECK-ENCODING: encoding: [0x63,0x40,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53b4063 mrs x3, TINDEX_EL0
+
+mrs x3, TINDEX_EL1
+// CHECK-INST: mrs x3, TINDEX_EL1
+// CHECK-ENCODING: encoding: [0x63,0x40,0x38,0xd5]
+// CHECK-UNKNOWN:  d5384063 mrs x3, TINDEX_EL1
+
+mrs x3, TINDEX_EL12
+// CHECK-INST: mrs x3, TINDEX_EL12
+// CHECK-ENCODING: encoding: [0x63,0x40,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d4063 mrs x3, TINDEX_EL12
+
+mrs x3, TINDEX_EL2
+// CHECK-INST: mrs x3, TINDEX_EL2
+// CHECK-ENCODING: encoding: [0x63,0x40,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c4063 mrs x3, TINDEX_EL2
+
+mrs x3, TINDEX_EL3
+// CHECK-INST: mrs x3, TINDEX_EL3
+// CHECK-ENCODING: encoding: [0x63,0x40,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e4063 mrs x3, TINDEX_EL3
+
+mrs x3, STINDEX_EL1
+// CHECK-INST: mrs x3, STINDEX_EL1
+// CHECK-ENCODING: encoding: [0x43,0x40,0x38,0xd5]
+// CHECK-UNKNOWN:  d5384043 mrs x3, STINDEX_EL1
+
+mrs x3, STINDEX_EL12
+// CHECK-INST: mrs x3, STINDEX_EL12
+// CHECK-ENCODING: encoding: [0x43,0x40,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d4043 mrs x3, STINDEX_EL12
+
+mrs x3, STINDEX_EL2
+// CHECK-INST: mrs x3, STINDEX_EL2
+// CHECK-ENCODING: encoding: [0x43,0x40,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c4043 mrs x3, STINDEX_EL2
+
+mrs x3, STINDEX_EL3
+// CHECK-INST: mrs x3, STINDEX_EL3
+// CHECK-ENCODING: encoding: [0x43,0x40,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e4043 mrs x3, STINDEX_EL3
+
+mrs x3, FGDTP0_EL1
+// CHECK-INST: mrs x3, FGDTP0_EL1
+// CHECK-ENCODING: encoding: [0x03,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383203 mrs x3, FGDTP0_EL1
+
+mrs x3, FGDTU0_EL1
+// CHECK-INST: mrs x3, FGDTU0_EL1
+// CHECK-ENCODING: encoding: [0x03,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383403 mrs x3, FGDTU0_EL1
+
+mrs x3, FGDTP0_EL2
+// CHECK-INST: mrs x3, FGDTP0_EL2
+// CHECK-ENCODING: encoding: [0x03,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3203 mrs x3, FGDTP0_EL2
+
+mrs x3, FGDTU0_EL2
+// CHECK-INST: mrs x3, FGDTU0_EL2
+// CHECK-ENCODING: encoding: [0x03,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3403 mrs x3, FGDTU0_EL2
+
+mrs x3, FGDTP0_EL12
+// CHECK-INST: mrs x3, FGDTP0_EL12
+// CHECK-ENCODING: encoding: [0x03,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3203 mrs x3, FGDTP0_EL12
+
+mrs x3, FGDTU0_EL12
+// CHECK-INST: mrs x3, FGDTU0_EL12
+// CHECK-ENCODING: encoding: [0x03,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3403 mrs x3, FGDTU0_EL12
+
+mrs x3, FGDTP0_EL3
+// CHECK-INST: mrs x3, FGDTP0_EL3
+// CHECK-ENCODING: encoding: [0x03,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3203 mrs x3, FGDTP0_EL3
+
+mrs x3, FGDTP1_EL1
+// CHECK-INST: mrs x3, FGDTP1_EL1
+// CHECK-ENCODING: encoding: [0x23,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383223 mrs x3, FGDTP1_EL1
+
+mrs x3, FGDTU1_EL1
+// CHECK-INST: mrs x3, FGDTU1_EL1
+// CHECK-ENCODING: encoding: [0x23,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383423 mrs x3, FGDTU1_EL1
+
+mrs x3, FGDTP1_EL2
+// CHECK-INST: mrs x3, FGDTP1_EL2
+// CHECK-ENCODING: encoding: [0x23,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3223 mrs x3, FGDTP1_EL2
+
+mrs x3, FGDTU1_EL2
+// CHECK-INST: mrs x3, FGDTU1_EL2
+// CHECK-ENCODING: encoding: [0x23,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3423 mrs x3, FGDTU1_EL2
+
+mrs x3, FGDTP1_EL12
+// CHECK-INST: mrs x3, FGDTP1_EL12
+// CHECK-ENCODING: encoding: [0x23,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3223 mrs x3, FGDTP1_EL12
+
+mrs x3, FGDTU1_EL12
+// CHECK-INST: mrs x3, FGDTU1_EL12
+// CHECK-ENCODING: encoding: [0x23,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3423 mrs x3, FGDTU1_EL12
+
+mrs x3, FGDTP1_EL3
+// CHECK-INST: mrs x3, FGDTP1_EL3
+// CHECK-ENCODING: encoding: [0x23,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3223 mrs x3, FGDTP1_EL3
+
+mrs x3, FGDTP2_EL1
+// CHECK-INST: mrs x3, FGDTP2_EL1
+// CHECK-ENCODING: encoding: [0x43,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383243 mrs x3, FGDTP2_EL1
+
+mrs x3, FGDTU2_EL1
+// CHECK-INST: mrs x3, FGDTU2_EL1
+// CHECK-ENCODING: encoding: [0x43,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383443 mrs x3, FGDTU2_EL1
+
+mrs x3, FGDTP2_EL2
+// CHECK-INST: mrs x3, FGDTP2_EL2
+// CHECK-ENCODING: encoding: [0x43,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3243 mrs x3, FGDTP2_EL2
+
+mrs x3, FGDTU2_EL2
+// CHECK-INST: mrs x3, FGDTU2_EL2
+// CHECK-ENCODING: encoding: [0x43,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3443 mrs x3, FGDTU2_EL2
+
+mrs x3, FGDTP2_EL12
+// CHECK-INST: mrs x3, FGDTP2_EL12
+// CHECK-ENCODING: encoding: [0x43,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3243 mrs x3, FGDTP2_EL12
+
+mrs x3, FGDTU2_EL12
+// CHECK-INST: mrs x3, FGDTU2_EL12
+// CHECK-ENCODING: encoding: [0x43,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3443 mrs x3, FGDTU2_EL12
+
+mrs x3, FGDTP2_EL3
+// CHECK-INST: mrs x3, FGDTP2_EL3
+// CHECK-ENCODING: encoding: [0x43,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3243 mrs x3, FGDTP2_EL3
+
+mrs x3, FGDTP3_EL1
+// CHECK-INST: mrs x3, FGDTP3_EL1
+// CHECK-ENCODING: encoding: [0x63,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383263 mrs x3, FGDTP3_EL1
+
+mrs x3, FGDTU3_EL1
+// CHECK-INST: mrs x3, FGDTU3_EL1
+// CHECK-ENCODING: encoding: [0x63,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383463 mrs x3, FGDTU3_EL1
+
+mrs x3, FGDTP3_EL2
+// CHECK-INST: mrs x3, FGDTP3_EL2
+// CHECK-ENCODING: encoding: [0x63,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3263 mrs x3, FGDTP3_EL2
+
+mrs x3, FGDTU3_EL2
+// CHECK-INST: mrs x3, FGDTU3_EL2
+// CHECK-ENCODING: encoding: [0x63,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3463 mrs x3, FGDTU3_EL2
+
+mrs x3, FGDTP3_EL12
+// CHECK-INST: mrs x3, FGDTP3_EL12
+// CHECK-ENCODING: encoding: [0x63,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3263 mrs x3, FGDTP3_EL12
+
+mrs x3, FGDTU3_EL12
+// CHECK-INST: mrs x3, FGDTU3_EL12
+// CHECK-ENCODING: encoding: [0x63,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3463 mrs x3, FGDTU3_EL12
+
+mrs x3, FGDTP3_EL3
+// CHECK-INST: mrs x3, FGDTP3_EL3
+// CHECK-ENCODING: encoding: [0x63,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3263 mrs x3, FGDTP3_EL3
+
+mrs x3, FGDTP4_EL1
+// CHECK-INST: mrs x3, FGDTP4_EL1
+// CHECK-ENCODING: encoding: [0x83,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383283 mrs x3, FGDTP4_EL1
+
+mrs x3, FGDTU4_EL1
+// CHECK-INST: mrs x3, FGDTU4_EL1
+// CHECK-ENCODING: encoding: [0x83,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383483 mrs x3, FGDTU4_EL1
+
+mrs x3, FGDTP4_EL2
+// CHECK-INST: mrs x3, FGDTP4_EL2
+// CHECK-ENCODING: encoding: [0x83,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3283 mrs x3, FGDTP4_EL2
+
+mrs x3, FGDTU4_EL2
+// CHECK-INST: mrs x3, FGDTU4_EL2
+// CHECK-ENCODING: encoding: [0x83,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3483 mrs x3, FGDTU4_EL2
+
+mrs x3, FGDTP4_EL12
+// CHECK-INST: mrs x3, FGDTP4_EL12
+// CHECK-ENCODING: encoding: [0x83,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3283 mrs x3, FGDTP4_EL12
+
+mrs x3, FGDTU4_EL12
+// CHECK-INST: mrs x3, FGDTU4_EL12
+// CHECK-ENCODING: encoding: [0x83,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3483 mrs x3, FGDTU4_EL12
+
+mrs x3, FGDTP4_EL3
+// CHECK-INST: mrs x3, FGDTP4_EL3
+// CHECK-ENCODING: encoding: [0x83,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3283 mrs x3, FGDTP4_EL3
+
+mrs x3, FGDTP5_EL1
+// CHECK-INST: mrs x3, FGDTP5_EL1
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d53832a3 mrs x3, FGDTP5_EL1
+
+mrs x3, FGDTU5_EL1
+// CHECK-INST: mrs x3, FGDTU5_EL1
+// CHECK-ENCODING: encoding: [0xa3,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d53834a3 mrs x3, FGDTU5_EL1
+
+mrs x3, FGDTP5_EL2
+// CHECK-INST: mrs x3, FGDTP5_EL2
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c32a3 mrs x3, FGDTP5_EL2
+
+mrs x3, FGDTU5_EL2
+// CHECK-INST: mrs x3, FGDTU5_EL2
+// CHECK-ENCODING: encoding: [0xa3,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c34a3 mrs x3, FGDTU5_EL2
+
+mrs x3, FGDTP5_EL12
+// CHECK-INST: mrs x3, FGDTP5_EL12
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d32a3 mrs x3, FGDTP5_EL12
+
+mrs x3, FGDTU5_EL12
+// CHECK-INST: mrs x3, FGDTU5_EL12
+// CHECK-ENCODING: encoding: [0xa3,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d34a3 mrs x3, FGDTU5_EL12
+
+mrs x3, FGDTP5_EL3
+// CHECK-INST: mrs x3, FGDTP5_EL3
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e32a3 mrs x3, FGDTP5_EL3
+
+mrs x3, FGDTP6_EL1
+// CHECK-INST: mrs x3, FGDTP6_EL1
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d53832c3 mrs x3, FGDTP6_EL1
+
+mrs x3, FGDTU6_EL1
+// CHECK-INST: mrs x3, FGDTU6_EL1
+// CHECK-ENCODING: encoding: [0xc3,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d53834c3 mrs x3, FGDTU6_EL1
+
+mrs x3, FGDTP6_EL2
+// CHECK-INST: mrs x3, FGDTP6_EL2
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c32c3 mrs x3, FGDTP6_EL2
+
+mrs x3, FGDTU6_EL2
+// CHECK-INST: mrs x3, FGDTU6_EL2
+// CHECK-ENCODING: encoding: [0xc3,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c34c3 mrs x3, FGDTU6_EL2
+
+mrs x3, FGDTP6_EL12
+// CHECK-INST: mrs x3, FGDTP6_EL12
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d32c3 mrs x3, FGDTP6_EL12
+
+mrs x3, FGDTU6_EL12
+// CHECK-INST: mrs x3, FGDTU6_EL12
+// CHECK-ENCODING: encoding: [0xc3,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d34c3 mrs x3, FGDTU6_EL12
+
+mrs x3, FGDTP6_EL3
+// CHECK-INST: mrs x3, FGDTP6_EL3
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e32c3 mrs x3, FGDTP6_EL3
+
+mrs x3, FGDTP7_EL1
+// CHECK-INST: mrs x3, FGDTP7_EL1
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x38,0xd5]
+// CHECK-UNKNOWN:  d53832e3 mrs x3, FGDTP7_EL1
+
+mrs x3, FGDTU7_EL1
+// CHECK-INST: mrs x3, FGDTU7_EL1
+// CHECK-ENCODING: encoding: [0xe3,0x34,0x38,0xd5]
+// CHECK-UNKNOWN:  d53834e3 mrs x3, FGDTU7_EL1
+
+mrs x3, FGDTP7_EL2
+// CHECK-INST: mrs x3, FGDTP7_EL2
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c32e3 mrs x3, FGDTP7_EL2
+
+mrs x3, FGDTU7_EL2
+// CHECK-INST: mrs x3, FGDTU7_EL2
+// CHECK-ENCODING: encoding: [0xe3,0x34,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c34e3 mrs x3, FGDTU7_EL2
+
+mrs x3, FGDTP7_EL12
+// CHECK-INST: mrs x3, FGDTP7_EL12
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d32e3 mrs x3, FGDTP7_EL12
+
+mrs x3, FGDTU7_EL12
+// CHECK-INST: mrs x3, FGDTU7_EL12
+// CHECK-ENCODING: encoding: [0xe3,0x34,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d34e3 mrs x3, FGDTU7_EL12
+
+mrs x3, FGDTP7_EL3
+// CHECK-INST: mrs x3, FGDTP7_EL3
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e32e3 mrs x3, FGDTP7_EL3
+
+mrs x3, FGDTP8_EL1
+// CHECK-INST: mrs x3, FGDTP8_EL1
+// CHECK-ENCODING: encoding: [0x03,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383303 mrs x3, FGDTP8_EL1
+
+mrs x3, FGDTU8_EL1
+// CHECK-INST: mrs x3, FGDTU8_EL1
+// CHECK-ENCODING: encoding: [0x03,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383503 mrs x3, FGDTU8_EL1
+
+mrs x3, FGDTP8_EL2
+// CHECK-INST: mrs x3, FGDTP8_EL2
+// CHECK-ENCODING: encoding: [0x03,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3303 mrs x3, FGDTP8_EL2
+
+mrs x3, FGDTU8_EL2
+// CHECK-INST: mrs x3, FGDTU8_EL2
+// CHECK-ENCODING: encoding: [0x03,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3503 mrs x3, FGDTU8_EL2
+
+mrs x3, FGDTP8_EL12
+// CHECK-INST: mrs x3, FGDTP8_EL12
+// CHECK-ENCODING: encoding: [0x03,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3303 mrs x3, FGDTP8_EL12
+
+mrs x3, FGDTU8_EL12
+// CHECK-INST: mrs x3, FGDTU8_EL12
+// CHECK-ENCODING: encoding: [0x03,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3503 mrs x3, FGDTU8_EL12
+
+mrs x3, FGDTP8_EL3
+// CHECK-INST: mrs x3, FGDTP8_EL3
+// CHECK-ENCODING: encoding: [0x03,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3303 mrs x3, FGDTP8_EL3
+
+mrs x3, FGDTP9_EL1
+// CHECK-INST: mrs x3, FGDTP9_EL1
+// CHECK-ENCODING: encoding: [0x23,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383323 mrs x3, FGDTP9_EL1
+
+mrs x3, FGDTU9_EL1
+// CHECK-INST: mrs x3, FGDTU9_EL1
+// CHECK-ENCODING: encoding: [0x23,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383523 mrs x3, FGDTU9_EL1
+
+mrs x3, FGDTP9_EL2
+// CHECK-INST: mrs x3, FGDTP9_EL2
+// CHECK-ENCODING: encoding: [0x23,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3323 mrs x3, FGDTP9_EL2
+
+mrs x3, FGDTU9_EL2
+// CHECK-INST: mrs x3, FGDTU9_EL2
+// CHECK-ENCODING: encoding: [0x23,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3523 mrs x3, FGDTU9_EL2
+
+mrs x3, FGDTP9_EL12
+// CHECK-INST: mrs x3, FGDTP9_EL12
+// CHECK-ENCODING: encoding: [0x23,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3323 mrs x3, FGDTP9_EL12
+
+mrs x3, FGDTU9_EL12
+// CHECK-INST: mrs x3, FGDTU9_EL12
+// CHECK-ENCODING: encoding: [0x23,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3523 mrs x3, FGDTU9_EL12
+
+mrs x3, FGDTP9_EL3
+// CHECK-INST: mrs x3, FGDTP9_EL3
+// CHECK-ENCODING: encoding: [0x23,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3323 mrs x3, FGDTP9_EL3
+
+mrs x3, FGDTP10_EL1
+// CHECK-INST: mrs x3, FGDTP10_EL1
+// CHECK-ENCODING: encoding: [0x43,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383343 mrs x3, FGDTP10_EL1
+
+mrs x3, FGDTU10_EL1
+// CHECK-INST: mrs x3, FGDTU10_EL1
+// CHECK-ENCODING: encoding: [0x43,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383543 mrs x3, FGDTU10_EL1
+
+mrs x3, FGDTP10_EL2
+// CHECK-INST: mrs x3, FGDTP10_EL2
+// CHECK-ENCODING: encoding: [0x43,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3343 mrs x3, FGDTP10_EL2
+
+mrs x3, FGDTU10_EL2
+// CHECK-INST: mrs x3, FGDTU10_EL2
+// CHECK-ENCODING: encoding: [0x43,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3543 mrs x3, FGDTU10_EL2
+
+mrs x3, FGDTP10_EL12
+// CHECK-INST: mrs x3, FGDTP10_EL12
+// CHECK-ENCODING: encoding: [0x43,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3343 mrs x3, FGDTP10_EL12
+
+mrs x3, FGDTU10_EL12
+// CHECK-INST: mrs x3, FGDTU10_EL12
+// CHECK-ENCODING: encoding: [0x43,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3543 mrs x3, FGDTU10_EL12
+
+mrs x3, FGDTP10_EL3
+// CHECK-INST: mrs x3, FGDTP10_EL3
+// CHECK-ENCODING: encoding: [0x43,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3343 mrs x3, FGDTP10_EL3
+
+mrs x3, FGDTP11_EL1
+// CHECK-INST: mrs x3, FGDTP11_EL1
+// CHECK-ENCODING: encoding: [0x63,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383363 mrs x3, FGDTP11_EL1
+
+mrs x3, FGDTU11_EL1
+// CHECK-INST: mrs x3, FGDTU11_EL1
+// CHECK-ENCODING: encoding: [0x63,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383563 mrs x3, FGDTU11_EL1
+
+mrs x3, FGDTP11_EL2
+// CHECK-INST: mrs x3, FGDTP11_EL2
+// CHECK-ENCODING: encoding: [0x63,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3363 mrs x3, FGDTP11_EL2
+
+mrs x3, FGDTU11_EL2
+// CHECK-INST: mrs x3, FGDTU11_EL2
+// CHECK-ENCODING: encoding: [0x63,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3563 mrs x3, FGDTU11_EL2
+
+mrs x3, FGDTP11_EL12
+// CHECK-INST: mrs x3, FGDTP11_EL12
+// CHECK-ENCODING: encoding: [0x63,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3363 mrs x3, FGDTP11_EL12
+
+mrs x3, FGDTU11_EL12
+// CHECK-INST: mrs x3, FGDTU11_EL12
+// CHECK-ENCODING: encoding: [0x63,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3563 mrs x3, FGDTU11_EL12
+
+mrs x3, FGDTP11_EL3
+// CHECK-INST: mrs x3, FGDTP11_EL3
+// CHECK-ENCODING: encoding: [0x63,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3363 mrs x3, FGDTP11_EL3
+
+mrs x3, FGDTP12_EL1
+// CHECK-INST: mrs x3, FGDTP12_EL1
+// CHECK-ENCODING: encoding: [0x83,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383383 mrs x3, FGDTP12_EL1
+
+mrs x3, FGDTU12_EL1
+// CHECK-INST: mrs x3, FGDTU12_EL1
+// CHECK-ENCODING: encoding: [0x83,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383583 mrs x3, FGDTU12_EL1
+
+mrs x3, FGDTP12_EL2
+// CHECK-INST: mrs x3, FGDTP12_EL2
+// CHECK-ENCODING: encoding: [0x83,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3383 mrs x3, FGDTP12_EL2
+
+mrs x3, FGDTU12_EL2
+// CHECK-INST: mrs x3, FGDTU12_EL2
+// CHECK-ENCODING: encoding: [0x83,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3583 mrs x3, FGDTU12_EL2
+
+mrs x3, FGDTP12_EL12
+// CHECK-INST: mrs x3, FGDTP12_EL12
+// CHECK-ENCODING: encoding: [0x83,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3383 mrs x3, FGDTP12_EL12
+
+mrs x3, FGDTU12_EL12
+// CHECK-INST: mrs x3, FGDTU12_EL12
+// CHECK-ENCODING: encoding: [0x83,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3583 mrs x3, FGDTU12_EL12
+
+mrs x3, FGDTP12_EL3
+// CHECK-INST: mrs x3, FGDTP12_EL3
+// CHECK-ENCODING: encoding: [0x83,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3383 mrs x3, FGDTP12_EL3
+
+mrs x3, FGDTP13_EL1
+// CHECK-INST: mrs x3, FGDTP13_EL1
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d53833a3 mrs x3, FGDTP13_EL1
+
+mrs x3, FGDTU13_EL1
+// CHECK-INST: mrs x3, FGDTU13_EL1
+// CHECK-ENCODING: encoding: [0xa3,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d53835a3 mrs x3, FGDTU13_EL1
+
+mrs x3, FGDTP13_EL2
+// CHECK-INST: mrs x3, FGDTP13_EL2
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c33a3 mrs x3, FGDTP13_EL2
+
+mrs x3, FGDTU13_EL2
+// CHECK-INST: mrs x3, FGDTU13_EL2
+// CHECK-ENCODING: encoding: [0xa3,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c35a3 mrs x3, FGDTU13_EL2
+
+mrs x3, FGDTP13_EL12
+// CHECK-INST: mrs x3, FGDTP13_EL12
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d33a3 mrs x3, FGDTP13_EL12
+
+mrs x3, FGDTU13_EL12
+// CHECK-INST: mrs x3, FGDTU13_EL12
+// CHECK-ENCODING: encoding: [0xa3,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d35a3 mrs x3, FGDTU13_EL12
+
+mrs x3, FGDTP13_EL3
+// CHECK-INST: mrs x3, FGDTP13_EL3
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e33a3 mrs x3, FGDTP13_EL3
+
+mrs x3, FGDTP14_EL1
+// CHECK-INST: mrs x3, FGDTP14_EL1
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d53833c3 mrs x3, FGDTP14_EL1
+
+mrs x3, FGDTU14_EL1
+// CHECK-INST: mrs x3, FGDTU14_EL1
+// CHECK-ENCODING: encoding: [0xc3,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d53835c3 mrs x3, FGDTU14_EL1
+
+mrs x3, FGDTP14_EL2
+// CHECK-INST: mrs x3, FGDTP14_EL2
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c33c3 mrs x3, FGDTP14_EL2
+
+mrs x3, FGDTU14_EL2
+// CHECK-INST: mrs x3, FGDTU14_EL2
+// CHECK-ENCODING: encoding: [0xc3,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c35c3 mrs x3, FGDTU14_EL2
+
+mrs x3, FGDTP14_EL12
+// CHECK-INST: mrs x3, FGDTP14_EL12
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d33c3 mrs x3, FGDTP14_EL12
+
+mrs x3, FGDTU14_EL12
+// CHECK-INST: mrs x3, FGDTU14_EL12
+// CHECK-ENCODING: encoding: [0xc3,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d35c3 mrs x3, FGDTU14_EL12
+
+mrs x3, FGDTP14_EL3
+// CHECK-INST: mrs x3, FGDTP14_EL3
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e33c3 mrs x3, FGDTP14_EL3
+
+mrs x3, FGDTP15_EL1
+// CHECK-INST: mrs x3, FGDTP15_EL1
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x38,0xd5]
+// CHECK-UNKNOWN:  d53833e3 mrs x3, FGDTP15_EL1
+
+mrs x3, FGDTU15_EL1
+// CHECK-INST: mrs x3, FGDTU15_EL1
+// CHECK-ENCODING: encoding: [0xe3,0x35,0x38,0xd5]
+// CHECK-UNKNOWN:  d53835e3 mrs x3, FGDTU15_EL1
+
+mrs x3, FGDTP15_EL2
+// CHECK-INST: mrs x3, FGDTP15_EL2
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c33e3 mrs x3, FGDTP15_EL2
+
+mrs x3, FGDTU15_EL2
+// CHECK-INST: mrs x3, FGDTU15_EL2
+// CHECK-ENCODING: encoding: [0xe3,0x35,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c35e3 mrs x3, FGDTU15_EL2
+
+mrs x3, FGDTP15_EL12
+// CHECK-INST: mrs x3, FGDTP15_EL12
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d33e3 mrs x3, FGDTP15_EL12
+
+mrs x3, FGDTU15_EL12
+// CHECK-INST: mrs x3, FGDTU15_EL12
+// CHECK-ENCODING: encoding: [0xe3,0x35,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d35e3 mrs x3, FGDTU15_EL12
+
+mrs x3, FGDTP15_EL3
+// CHECK-INST: mrs x3, FGDTP15_EL3
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e33e3 mrs x3, FGDTP15_EL3
+
+mrs x0, AFGDTP0_EL1
+// CHECK-INST: mrs x0, AFGDTP0_EL1
+// CHECK-ENCODING: encoding: [0x00,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383600 mrs x0, AFGDTP0_EL1
+
+mrs x0, AFGDTU0_EL1
+// CHECK-INST: mrs x0, AFGDTU0_EL1
+// CHECK-ENCODING: encoding: [0x00,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383800 mrs x0, AFGDTU0_EL1
+
+mrs x0, AFGDTP0_EL2
+// CHECK-INST: mrs x0, AFGDTP0_EL2
+// CHECK-ENCODING: encoding: [0x00,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3600 mrs x0, AFGDTP0_EL2
+
+mrs x0, AFGDTU0_EL2
+// CHECK-INST: mrs x0, AFGDTU0_EL2
+// CHECK-ENCODING: encoding: [0x00,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3800 mrs x0, AFGDTU0_EL2
+
+mrs x0, AFGDTP0_EL12
+// CHECK-INST: mrs x0, AFGDTP0_EL12
+// CHECK-ENCODING: encoding: [0x00,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3600 mrs x0, AFGDTP0_EL12
+
+mrs x0, AFGDTU0_EL12
+// CHECK-INST: mrs x0, AFGDTU0_EL12
+// CHECK-ENCODING: encoding: [0x00,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3800 mrs x0, AFGDTU0_EL12
+
+mrs x0, AFGDTP0_EL3
+// CHECK-INST: mrs x0, AFGDTP0_EL3
+// CHECK-ENCODING: encoding: [0x00,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3600 mrs x0, AFGDTP0_EL3
+
+mrs x0, AFGDTP1_EL1
+// CHECK-INST: mrs x0, AFGDTP1_EL1
+// CHECK-ENCODING: encoding: [0x20,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383620 mrs x0, AFGDTP1_EL1
+
+mrs x0, AFGDTU1_EL1
+// CHECK-INST: mrs x0, AFGDTU1_EL1
+// CHECK-ENCODING: encoding: [0x20,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383820 mrs x0, AFGDTU1_EL1
+
+mrs x0, AFGDTP1_EL2
+// CHECK-INST: mrs x0, AFGDTP1_EL2
+// CHECK-ENCODING: encoding: [0x20,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3620 mrs x0, AFGDTP1_EL2
+
+mrs x0, AFGDTU1_EL2
+// CHECK-INST: mrs x0, AFGDTU1_EL2
+// CHECK-ENCODING: encoding: [0x20,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3820 mrs x0, AFGDTU1_EL2
+
+mrs x0, AFGDTP1_EL12
+// CHECK-INST: mrs x0, AFGDTP1_EL12
+// CHECK-ENCODING: encoding: [0x20,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3620 mrs x0, AFGDTP1_EL12
+
+mrs x0, AFGDTU1_EL12
+// CHECK-INST: mrs x0, AFGDTU1_EL12
+// CHECK-ENCODING: encoding: [0x20,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3820 mrs x0, AFGDTU1_EL12
+
+mrs x0, AFGDTP1_EL3
+// CHECK-INST: mrs x0, AFGDTP1_EL3
+// CHECK-ENCODING: encoding: [0x20,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3620 mrs x0, AFGDTP1_EL3
+
+mrs x0, AFGDTP2_EL1
+// CHECK-INST: mrs x0, AFGDTP2_EL1
+// CHECK-ENCODING: encoding: [0x40,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383640 mrs x0, AFGDTP2_EL1
+
+mrs x0, AFGDTU2_EL1
+// CHECK-INST: mrs x0, AFGDTU2_EL1
+// CHECK-ENCODING: encoding: [0x40,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383840 mrs x0, AFGDTU2_EL1
+
+mrs x0, AFGDTP2_EL2
+// CHECK-INST: mrs x0, AFGDTP2_EL2
+// CHECK-ENCODING: encoding: [0x40,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3640 mrs x0, AFGDTP2_EL2
+
+mrs x0, AFGDTU2_EL2
+// CHECK-INST: mrs x0, AFGDTU2_EL2
+// CHECK-ENCODING: encoding: [0x40,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3840 mrs x0, AFGDTU2_EL2
+
+mrs x0, AFGDTP2_EL12
+// CHECK-INST: mrs x0, AFGDTP2_EL12
+// CHECK-ENCODING: encoding: [0x40,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3640 mrs x0, AFGDTP2_EL12
+
+mrs x0, AFGDTU2_EL12
+// CHECK-INST: mrs x0, AFGDTU2_EL12
+// CHECK-ENCODING: encoding: [0x40,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3840 mrs x0, AFGDTU2_EL12
+
+mrs x0, AFGDTP2_EL3
+// CHECK-INST: mrs x0, AFGDTP2_EL3
+// CHECK-ENCODING: encoding: [0x40,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3640 mrs x0, AFGDTP2_EL3
+
+mrs x0, AFGDTP3_EL1
+// CHECK-INST: mrs x0, AFGDTP3_EL1
+// CHECK-ENCODING: encoding: [0x60,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383660 mrs x0, AFGDTP3_EL1
+
+mrs x0, AFGDTU3_EL1
+// CHECK-INST: mrs x0, AFGDTU3_EL1
+// CHECK-ENCODING: encoding: [0x60,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383860 mrs x0, AFGDTU3_EL1
+
+mrs x0, AFGDTP3_EL2
+// CHECK-INST: mrs x0, AFGDTP3_EL2
+// CHECK-ENCODING: encoding: [0x60,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3660 mrs x0, AFGDTP3_EL2
+
+mrs x0, AFGDTU3_EL2
+// CHECK-INST: mrs x0, AFGDTU3_EL2
+// CHECK-ENCODING: encoding: [0x60,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3860 mrs x0, AFGDTU3_EL2
+
+mrs x0, AFGDTP3_EL12
+// CHECK-INST: mrs x0, AFGDTP3_EL12
+// CHECK-ENCODING: encoding: [0x60,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3660 mrs x0, AFGDTP3_EL12
+
+mrs x0, AFGDTU3_EL12
+// CHECK-INST: mrs x0, AFGDTU3_EL12
+// CHECK-ENCODING: encoding: [0x60,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3860 mrs x0, AFGDTU3_EL12
+
+mrs x0, AFGDTP3_EL3
+// CHECK-INST: mrs x0, AFGDTP3_EL3
+// CHECK-ENCODING: encoding: [0x60,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3660 mrs x0, AFGDTP3_EL3
+
+mrs x0, AFGDTP4_EL1
+// CHECK-INST: mrs x0, AFGDTP4_EL1
+// CHECK-ENCODING: encoding: [0x80,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383680 mrs x0, AFGDTP4_EL1
+
+mrs x0, AFGDTU4_EL1
+// CHECK-INST: mrs x0, AFGDTU4_EL1
+// CHECK-ENCODING: encoding: [0x80,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383880 mrs x0, AFGDTU4_EL1
+
+mrs x0, AFGDTP4_EL2
+// CHECK-INST: mrs x0, AFGDTP4_EL2
+// CHECK-ENCODING: encoding: [0x80,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3680 mrs x0, AFGDTP4_EL2
+
+mrs x0, AFGDTU4_EL2
+// CHECK-INST: mrs x0, AFGDTU4_EL2
+// CHECK-ENCODING: encoding: [0x80,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3880 mrs x0, AFGDTU4_EL2
+
+mrs x0, AFGDTP4_EL12
+// CHECK-INST: mrs x0, AFGDTP4_EL12
+// CHECK-ENCODING: encoding: [0x80,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3680 mrs x0, AFGDTP4_EL12
+
+mrs x0, AFGDTU4_EL12
+// CHECK-INST: mrs x0, AFGDTU4_EL12
+// CHECK-ENCODING: encoding: [0x80,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3880 mrs x0, AFGDTU4_EL12
+
+mrs x0, AFGDTP4_EL3
+// CHECK-INST: mrs x0, AFGDTP4_EL3
+// CHECK-ENCODING: encoding: [0x80,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3680 mrs x0, AFGDTP4_EL3
+
+mrs x0, AFGDTP5_EL1
+// CHECK-INST: mrs x0, AFGDTP5_EL1
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d53836a0 mrs x0, AFGDTP5_EL1
+
+mrs x0, AFGDTU5_EL1
+// CHECK-INST: mrs x0, AFGDTU5_EL1
+// CHECK-ENCODING: encoding: [0xa0,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d53838a0 mrs x0, AFGDTU5_EL1
+
+mrs x0, AFGDTP5_EL2
+// CHECK-INST: mrs x0, AFGDTP5_EL2
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c36a0 mrs x0, AFGDTP5_EL2
+
+mrs x0, AFGDTU5_EL2
+// CHECK-INST: mrs x0, AFGDTU5_EL2
+// CHECK-ENCODING: encoding: [0xa0,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c38a0 mrs x0, AFGDTU5_EL2
+
+mrs x0, AFGDTP5_EL12
+// CHECK-INST: mrs x0, AFGDTP5_EL12
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d36a0 mrs x0, AFGDTP5_EL12
+
+mrs x0, AFGDTU5_EL12
+// CHECK-INST: mrs x0, AFGDTU5_EL12
+// CHECK-ENCODING: encoding: [0xa0,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d38a0 mrs x0, AFGDTU5_EL12
+
+mrs x0, AFGDTP5_EL3
+// CHECK-INST: mrs x0, AFGDTP5_EL3
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e36a0 mrs x0, AFGDTP5_EL3
+
+mrs x0, AFGDTP6_EL1
+// CHECK-INST: mrs x0, AFGDTP6_EL1
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d53836c0 mrs x0, AFGDTP6_EL1
+
+mrs x0, AFGDTU6_EL1
+// CHECK-INST: mrs x0, AFGDTU6_EL1
+// CHECK-ENCODING: encoding: [0xc0,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d53838c0 mrs x0, AFGDTU6_EL1
+
+mrs x0, AFGDTP6_EL2
+// CHECK-INST: mrs x0, AFGDTP6_EL2
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c36c0 mrs x0, AFGDTP6_EL2
+
+mrs x0, AFGDTU6_EL2
+// CHECK-INST: mrs x0, AFGDTU6_EL2
+// CHECK-ENCODING: encoding: [0xc0,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c38c0 mrs x0, AFGDTU6_EL2
+
+mrs x0, AFGDTP6_EL12
+// CHECK-INST: mrs x0, AFGDTP6_EL12
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d36c0 mrs x0, AFGDTP6_EL12
+
+mrs x0, AFGDTU6_EL12
+// CHECK-INST: mrs x0, AFGDTU6_EL12
+// CHECK-ENCODING: encoding: [0xc0,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d38c0 mrs x0, AFGDTU6_EL12
+
+mrs x0, AFGDTP6_EL3
+// CHECK-INST: mrs x0, AFGDTP6_EL3
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e36c0 mrs x0, AFGDTP6_EL3
+
+mrs x0, AFGDTP7_EL1
+// CHECK-INST: mrs x0, AFGDTP7_EL1
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x38,0xd5]
+// CHECK-UNKNOWN:  d53836e0 mrs x0, AFGDTP7_EL1
+
+mrs x0, AFGDTU7_EL1
+// CHECK-INST: mrs x0, AFGDTU7_EL1
+// CHECK-ENCODING: encoding: [0xe0,0x38,0x38,0xd5]
+// CHECK-UNKNOWN:  d53838e0 mrs x0, AFGDTU7_EL1
+
+mrs x0, AFGDTP7_EL2
+// CHECK-INST: mrs x0, AFGDTP7_EL2
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c36e0 mrs x0, AFGDTP7_EL2
+
+mrs x0, AFGDTU7_EL2
+// CHECK-INST: mrs x0, AFGDTU7_EL2
+// CHECK-ENCODING: encoding: [0xe0,0x38,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c38e0 mrs x0, AFGDTU7_EL2
+
+mrs x0, AFGDTP7_EL12
+// CHECK-INST: mrs x0, AFGDTP7_EL12
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d36e0 mrs x0, AFGDTP7_EL12
+
+mrs x0, AFGDTU7_EL12
+// CHECK-INST: mrs x0, AFGDTU7_EL12
+// CHECK-ENCODING: encoding: [0xe0,0x38,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d38e0 mrs x0, AFGDTU7_EL12
+
+mrs x0, AFGDTP7_EL3
+// CHECK-INST: mrs x0, AFGDTP7_EL3
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e36e0 mrs x0, AFGDTP7_EL3
+
+mrs x0, AFGDTP8_EL1
+// CHECK-INST: mrs x0, AFGDTP8_EL1
+// CHECK-ENCODING: encoding: [0x00,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383700 mrs x0, AFGDTP8_EL1
+
+mrs x0, AFGDTU8_EL1
+// CHECK-INST: mrs x0, AFGDTU8_EL1
+// CHECK-ENCODING: encoding: [0x00,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383900 mrs x0, AFGDTU8_EL1
+
+mrs x0, AFGDTP8_EL2
+// CHECK-INST: mrs x0, AFGDTP8_EL2
+// CHECK-ENCODING: encoding: [0x00,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3700 mrs x0, AFGDTP8_EL2
+
+mrs x0, AFGDTU8_EL2
+// CHECK-INST: mrs x0, AFGDTU8_EL2
+// CHECK-ENCODING: encoding: [0x00,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3900 mrs x0, AFGDTU8_EL2
+
+mrs x0, AFGDTP8_EL12
+// CHECK-INST: mrs x0, AFGDTP8_EL12
+// CHECK-ENCODING: encoding: [0x00,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3700 mrs x0, AFGDTP8_EL12
+
+mrs x0, AFGDTU8_EL12
+// CHECK-INST: mrs x0, AFGDTU8_EL12
+// CHECK-ENCODING: encoding: [0x00,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3900 mrs x0, AFGDTU8_EL12
+
+mrs x0, AFGDTP8_EL3
+// CHECK-INST: mrs x0, AFGDTP8_EL3
+// CHECK-ENCODING: encoding: [0x00,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3700 mrs x0, AFGDTP8_EL3
+
+mrs x0, AFGDTP9_EL1
+// CHECK-INST: mrs x0, AFGDTP9_EL1
+// CHECK-ENCODING: encoding: [0x20,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383720 mrs x0, AFGDTP9_EL1
+
+mrs x0, AFGDTU9_EL1
+// CHECK-INST: mrs x0, AFGDTU9_EL1
+// CHECK-ENCODING: encoding: [0x20,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383920 mrs x0, AFGDTU9_EL1
+
+mrs x0, AFGDTP9_EL2
+// CHECK-INST: mrs x0, AFGDTP9_EL2
+// CHECK-ENCODING: encoding: [0x20,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3720 mrs x0, AFGDTP9_EL2
+
+mrs x0, AFGDTU9_EL2
+// CHECK-INST: mrs x0, AFGDTU9_EL2
+// CHECK-ENCODING: encoding: [0x20,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3920 mrs x0, AFGDTU9_EL2
+
+mrs x0, AFGDTP9_EL12
+// CHECK-INST: mrs x0, AFGDTP9_EL12
+// CHECK-ENCODING: encoding: [0x20,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3720 mrs x0, AFGDTP9_EL12
+
+mrs x0, AFGDTU9_EL12
+// CHECK-INST: mrs x0, AFGDTU9_EL12
+// CHECK-ENCODING: encoding: [0x20,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3920 mrs x0, AFGDTU9_EL12
+
+mrs x0, AFGDTP9_EL3
+// CHECK-INST: mrs x0, AFGDTP9_EL3
+// CHECK-ENCODING: encoding: [0x20,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3720 mrs x0, AFGDTP9_EL3
+
+mrs x0, AFGDTP10_EL1
+// CHECK-INST: mrs x0, AFGDTP10_EL1
+// CHECK-ENCODING: encoding: [0x40,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383740 mrs x0, AFGDTP10_EL1
+
+mrs x0, AFGDTU10_EL1
+// CHECK-INST: mrs x0, AFGDTU10_EL1
+// CHECK-ENCODING: encoding: [0x40,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383940 mrs x0, AFGDTU10_EL1
+
+mrs x0, AFGDTP10_EL2
+// CHECK-INST: mrs x0, AFGDTP10_EL2
+// CHECK-ENCODING: encoding: [0x40,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3740 mrs x0, AFGDTP10_EL2
+
+mrs x0, AFGDTU10_EL2
+// CHECK-INST: mrs x0, AFGDTU10_EL2
+// CHECK-ENCODING: encoding: [0x40,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3940 mrs x0, AFGDTU10_EL2
+
+mrs x0, AFGDTP10_EL12
+// CHECK-INST: mrs x0, AFGDTP10_EL12
+// CHECK-ENCODING: encoding: [0x40,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3740 mrs x0, AFGDTP10_EL12
+
+mrs x0, AFGDTU10_EL12
+// CHECK-INST: mrs x0, AFGDTU10_EL12
+// CHECK-ENCODING: encoding: [0x40,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3940 mrs x0, AFGDTU10_EL12
+
+mrs x0, AFGDTP10_EL3
+// CHECK-INST: mrs x0, AFGDTP10_EL3
+// CHECK-ENCODING: encoding: [0x40,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3740 mrs x0, AFGDTP10_EL3
+
+mrs x0, AFGDTP11_EL1
+// CHECK-INST: mrs x0, AFGDTP11_EL1
+// CHECK-ENCODING: encoding: [0x60,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383760 mrs x0, AFGDTP11_EL1
+
+mrs x0, AFGDTU11_EL1
+// CHECK-INST: mrs x0, AFGDTU11_EL1
+// CHECK-ENCODING: encoding: [0x60,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383960 mrs x0, AFGDTU11_EL1
+
+mrs x0, AFGDTP11_EL2
+// CHECK-INST: mrs x0, AFGDTP11_EL2
+// CHECK-ENCODING: encoding: [0x60,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3760 mrs x0, AFGDTP11_EL2
+
+mrs x0, AFGDTU11_EL2
+// CHECK-INST: mrs x0, AFGDTU11_EL2
+// CHECK-ENCODING: encoding: [0x60,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3960 mrs x0, AFGDTU11_EL2
+
+mrs x0, AFGDTP11_EL12
+// CHECK-INST: mrs x0, AFGDTP11_EL12
+// CHECK-ENCODING: encoding: [0x60,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3760 mrs x0, AFGDTP11_EL12
+
+mrs x0, AFGDTU11_EL12
+// CHECK-INST: mrs x0, AFGDTU11_EL12
+// CHECK-ENCODING: encoding: [0x60,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3960 mrs x0, AFGDTU11_EL12
+
+mrs x0, AFGDTP11_EL3
+// CHECK-INST: mrs x0, AFGDTP11_EL3
+// CHECK-ENCODING: encoding: [0x60,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3760 mrs x0, AFGDTP11_EL3
+
+mrs x0, AFGDTP12_EL1
+// CHECK-INST: mrs x0, AFGDTP12_EL1
+// CHECK-ENCODING: encoding: [0x80,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383780 mrs x0, AFGDTP12_EL1
+
+mrs x0, AFGDTU12_EL1
+// CHECK-INST: mrs x0, AFGDTU12_EL1
+// CHECK-ENCODING: encoding: [0x80,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d5383980 mrs x0, AFGDTU12_EL1
+
+mrs x0, AFGDTP12_EL2
+// CHECK-INST: mrs x0, AFGDTP12_EL2
+// CHECK-ENCODING: encoding: [0x80,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3780 mrs x0, AFGDTP12_EL2
+
+mrs x0, AFGDTU12_EL2
+// CHECK-INST: mrs x0, AFGDTU12_EL2
+// CHECK-ENCODING: encoding: [0x80,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c3980 mrs x0, AFGDTU12_EL2
+
+mrs x0, AFGDTP12_EL12
+// CHECK-INST: mrs x0, AFGDTP12_EL12
+// CHECK-ENCODING: encoding: [0x80,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3780 mrs x0, AFGDTP12_EL12
+
+mrs x0, AFGDTU12_EL12
+// CHECK-INST: mrs x0, AFGDTU12_EL12
+// CHECK-ENCODING: encoding: [0x80,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d3980 mrs x0, AFGDTU12_EL12
+
+mrs x0, AFGDTP12_EL3
+// CHECK-INST: mrs x0, AFGDTP12_EL3
+// CHECK-ENCODING: encoding: [0x80,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e3780 mrs x0, AFGDTP12_EL3
+
+mrs x0, AFGDTP13_EL1
+// CHECK-INST: mrs x0, AFGDTP13_EL1
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d53837a0 mrs x0, AFGDTP13_EL1
+
+mrs x0, AFGDTU13_EL1
+// CHECK-INST: mrs x0, AFGDTU13_EL1
+// CHECK-ENCODING: encoding: [0xa0,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d53839a0 mrs x0, AFGDTU13_EL1
+
+mrs x0, AFGDTP13_EL2
+// CHECK-INST: mrs x0, AFGDTP13_EL2
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c37a0 mrs x0, AFGDTP13_EL2
+
+mrs x0, AFGDTU13_EL2
+// CHECK-INST: mrs x0, AFGDTU13_EL2
+// CHECK-ENCODING: encoding: [0xa0,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c39a0 mrs x0, AFGDTU13_EL2
+
+mrs x0, AFGDTP13_EL12
+// CHECK-INST: mrs x0, AFGDTP13_EL12
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d37a0 mrs x0, AFGDTP13_EL12
+
+mrs x0, AFGDTU13_EL12
+// CHECK-INST: mrs x0, AFGDTU13_EL12
+// CHECK-ENCODING: encoding: [0xa0,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d39a0 mrs x0, AFGDTU13_EL12
+
+mrs x0, AFGDTP13_EL3
+// CHECK-INST: mrs x0, AFGDTP13_EL3
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e37a0 mrs x0, AFGDTP13_EL3
+
+mrs x0, AFGDTP14_EL1
+// CHECK-INST: mrs x0, AFGDTP14_EL1
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d53837c0 mrs x0, AFGDTP14_EL1
+
+mrs x0, AFGDTU14_EL1
+// CHECK-INST: mrs x0, AFGDTU14_EL1
+// CHECK-ENCODING: encoding: [0xc0,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d53839c0 mrs x0, AFGDTU14_EL1
+
+mrs x0, AFGDTP14_EL2
+// CHECK-INST: mrs x0, AFGDTP14_EL2
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c37c0 mrs x0, AFGDTP14_EL2
+
+mrs x0, AFGDTU14_EL2
+// CHECK-INST: mrs x0, AFGDTU14_EL2
+// CHECK-ENCODING: encoding: [0xc0,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c39c0 mrs x0, AFGDTU14_EL2
+
+mrs x0, AFGDTP14_EL12
+// CHECK-INST: mrs x0, AFGDTP14_EL12
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d37c0 mrs x0, AFGDTP14_EL12
+
+mrs x0, AFGDTU14_EL12
+// CHECK-INST: mrs x0, AFGDTU14_EL12
+// CHECK-ENCODING: encoding: [0xc0,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d39c0 mrs x0, AFGDTU14_EL12
+
+mrs x0, AFGDTP14_EL3
+// CHECK-INST: mrs x0, AFGDTP14_EL3
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e37c0 mrs x0, AFGDTP14_EL3
+
+mrs x0, AFGDTP15_EL1
+// CHECK-INST: mrs x0, AFGDTP15_EL1
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x38,0xd5]
+// CHECK-UNKNOWN:  d53837e0 mrs x0, AFGDTP15_EL1
+
+mrs x0, AFGDTU15_EL1
+// CHECK-INST: mrs x0, AFGDTU15_EL1
+// CHECK-ENCODING: encoding: [0xe0,0x39,0x38,0xd5]
+// CHECK-UNKNOWN:  d53839e0 mrs x0, AFGDTU15_EL1
+
+mrs x0, AFGDTP15_EL2
+// CHECK-INST: mrs x0, AFGDTP15_EL2
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c37e0 mrs x0, AFGDTP15_EL2
+
+mrs x0, AFGDTU15_EL2
+// CHECK-INST: mrs x0, AFGDTU15_EL2
+// CHECK-ENCODING: encoding: [0xe0,0x39,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c39e0 mrs x0, AFGDTU15_EL2
+
+mrs x0, AFGDTP15_EL12
+// CHECK-INST: mrs x0, AFGDTP15_EL12
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d37e0 mrs x0, AFGDTP15_EL12
+
+mrs x0, AFGDTU15_EL12
+// CHECK-INST: mrs x0, AFGDTU15_EL12
+// CHECK-ENCODING: encoding: [0xe0,0x39,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d39e0 mrs x0, AFGDTU15_EL12
+
+mrs x0, AFGDTP15_EL3
+// CHECK-INST: mrs x0, AFGDTP15_EL3
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x3e,0xd5]
+// CHECK-UNKNOWN:  d53e37e0 mrs x0, AFGDTP15_EL3
+
+mrs x2, TPMIN0_EL0
+// CHECK-INST: mrs x2, TPMIN0_EL0
+// CHECK-ENCODING: encoding: [0x82,0x22,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53b2282 mrs x2, TPMIN0_EL0
+
+mrs x2, TPMAX0_EL0
+// CHECK-INST: mrs x2, TPMAX0_EL0
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53b22a2 mrs x2, TPMAX0_EL0
+
+mrs x2, TPMIN1_EL0
+// CHECK-INST: mrs x2, TPMIN1_EL0
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53b22c2 mrs x2, TPMIN1_EL0
+
+mrs x2, TPMAX1_EL0
+// CHECK-INST: mrs x2, TPMAX1_EL0
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x3b,0xd5]
+// CHECK-UNKNOWN:  d53b22e2 mrs x2, TPMAX1_EL0
+
+mrs x2, TPMIN0_EL1
+// CHECK-INST: mrs x2, TPMIN0_EL1
+// CHECK-ENCODING: encoding: [0x82,0x22,0x38,0xd5]
+// CHECK-UNKNOWN:  d5382282 mrs x2, TPMIN0_EL1
+
+mrs x2, TPMAX0_EL1
+// CHECK-INST: mrs x2, TPMAX0_EL1
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x38,0xd5]
+// CHECK-UNKNOWN:  d53822a2 mrs x2, TPMAX0_EL1
+
+mrs x2, TPMIN1_EL1
+// CHECK-INST: mrs x2, TPMIN1_EL1
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x38,0xd5]
+// CHECK-UNKNOWN:  d53822c2 mrs x2, TPMIN1_EL1
+
+mrs x2, TPMAX1_EL1
+// CHECK-INST: mrs x2, TPMAX1_EL1
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x38,0xd5]
+// CHECK-UNKNOWN:  d53822e2 mrs x2, TPMAX1_EL1
+
+mrs x2, TPMIN0_EL2
+// CHECK-INST: mrs x2, TPMIN0_EL2
+// CHECK-ENCODING: encoding: [0x82,0x22,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c2282 mrs x2, TPMIN0_EL2
+
+mrs x2, TPMAX0_EL2
+// CHECK-INST: mrs x2, TPMAX0_EL2
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c22a2 mrs x2, TPMAX0_EL2
+
+mrs x2, TPMIN1_EL2
+// CHECK-INST: mrs x2, TPMIN1_EL2
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c22c2 mrs x2, TPMIN1_EL2
+
+mrs x2, TPMAX1_EL2
+// CHECK-INST: mrs x2, TPMAX1_EL2
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x3c,0xd5]
+// CHECK-UNKNOWN:  d53c22e2 mrs x2, TPMAX1_EL2
+
+mrs x2, TPMIN0_EL12
+// CHECK-INST: mrs x2, TPMIN0_EL12
+// CHECK-ENCODING: encoding: [0x82,0x22,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d2282 mrs x2, TPMIN0_EL12
+
+mrs x2, TPMAX0_EL12
+// CHECK-INST: mrs x2, TPMAX0_EL12
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d22a2 mrs x2, TPMAX0_EL12
+
+mrs x2, TPMIN1_EL12
+// CHECK-INST: mrs x2, TPMIN1_EL12
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d22c2 mrs x2, TPMIN1_EL12
+
+mrs x2, TPMAX1_EL12
+// CHECK-INST: mrs x2, TPMAX1_EL12
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x3d,0xd5]
+// CHECK-UNKNOWN:  d53d22e2 mrs x2, TPMAX1_EL12
+
+
+msr TPIDR3_EL0, x0
+// CHECK-INST: msr TPIDR3_EL0, x0
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51bd000 msr TPIDR3_EL0, x0
+
+msr TPIDR3_EL1, x0
+// CHECK-INST: msr TPIDR3_EL1, x0
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x18,0xd5]
+// CHECK-UNKNOWN:  d518d000 msr TPIDR3_EL1, x0
+
+msr TPIDR3_EL12, x0
+// CHECK-INST: msr TPIDR3_EL12, x0
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51dd000 msr TPIDR3_EL12, x0
+
+msr TPIDR3_EL2, x0
+// CHECK-INST: msr TPIDR3_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51cd000 msr TPIDR3_EL2, x0
+
+msr TPIDR3_EL3, x0
+// CHECK-INST: msr TPIDR3_EL3, x0
+// CHECK-ENCODING: encoding: [0x00,0xd0,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51ed000 msr TPIDR3_EL3, x0
+
+msr VNCCR_EL2, x0
+// CHECK-INST: msr VNCCR_EL2, x0
+// CHECK-ENCODING: encoding: [0x20,0x22,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c2220 msr VNCCR_EL2, x0
+
+msr DPOCR_EL0, x0
+// CHECK-INST: msr DPOCR_EL0, x0
+// CHECK-ENCODING: encoding: [0x40,0x45,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51b4540 msr DPOCR_EL0, x0
+
+msr HCRMASK_EL2, x0
+// CHECK-INST: msr HCRMASK_EL2, x0
+// CHECK-ENCODING: encoding: [0xc0,0x15,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c15c0 msr HCRMASK_EL2, x0
+
+msr HCRXMASK_EL2, x0
+// CHECK-INST: msr HCRXMASK_EL2, x0
+// CHECK-ENCODING: encoding: [0xe0,0x15,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c15e0 msr HCRXMASK_EL2, x0
+
+msr HCR_EL2, x0
+// CHECK-INST: msr HCR_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0x11,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c1100 msr HCR_EL2, x0
+
+msr NVHCR_EL2, x0
+// CHECK-INST: msr NVHCR_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0x15,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c1500 msr NVHCR_EL2, x0
+
+msr NVHCRX_EL2, x0
+// CHECK-INST: msr NVHCRX_EL2, x0
+// CHECK-ENCODING: encoding: [0x20,0x15,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c1520 msr NVHCRX_EL2, x0
+
+msr NVHCRMASK_EL2, x0
+// CHECK-INST: msr NVHCRMASK_EL2, x0
+// CHECK-ENCODING: encoding: [0x80,0x15,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c1580 msr NVHCRMASK_EL2, x0
+
+msr NVHCRXMASK_EL2, x0
+// CHECK-INST: msr NVHCRXMASK_EL2, x0
+// CHECK-ENCODING: encoding: [0xa0,0x15,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c15a0 msr NVHCRXMASK_EL2, x0
+
+msr DPOTBR0_EL1, x3
+// CHECK-INST: msr DPOTBR0_EL1, x3
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x18,0xd5]
+// CHECK-UNKNOWN:  d51820c3 msr DPOTBR0_EL1, x3
+
+msr DPOTBR0_EL12, x3
+// CHECK-INST: msr DPOTBR0_EL12, x3
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d20c3 msr DPOTBR0_EL12, x3
+
+msr DPOTBR1_EL1, x3
+// CHECK-INST: msr DPOTBR1_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0x20,0x18,0xd5]
+// CHECK-UNKNOWN:  d51820e3 msr DPOTBR1_EL1, x3
+
+msr DPOTBR1_EL12, x3
+// CHECK-INST: msr DPOTBR1_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0x20,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d20e3 msr DPOTBR1_EL12, x3
+
+msr DPOTBR0_EL2, x3
+// CHECK-INST: msr DPOTBR0_EL2, x3
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c20c3 msr DPOTBR0_EL2, x3
+
+msr DPOTBR1_EL2, x3
+// CHECK-INST: msr DPOTBR1_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0x20,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c20e3 msr DPOTBR1_EL2, x3
+
+msr DPOTBR0_EL3, x3
+// CHECK-INST: msr DPOTBR0_EL3, x3
+// CHECK-ENCODING: encoding: [0xc3,0x20,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e20c3 msr DPOTBR0_EL3, x3
+
+msr IRTBRU_EL1, x3
+// CHECK-INST: msr IRTBRU_EL1, x3
+// CHECK-ENCODING: encoding: [0x83,0x20,0x18,0xd5]
+// CHECK-UNKNOWN:  d5182083 msr IRTBRU_EL1, x3
+
+msr IRTBRU_EL12, x3
+// CHECK-INST: msr IRTBRU_EL12, x3
+// CHECK-ENCODING: encoding: [0x83,0x20,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d2083 msr IRTBRU_EL12, x3
+
+msr IRTBRP_EL1, x3
+// CHECK-INST: msr IRTBRP_EL1, x3
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x18,0xd5]
+// CHECK-UNKNOWN:  d51820a3 msr IRTBRP_EL1, x3
+
+msr IRTBRP_EL12, x3
+// CHECK-INST: msr IRTBRP_EL12, x3
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d20a3 msr IRTBRP_EL12, x3
+
+msr IRTBRU_EL2, x3
+// CHECK-INST: msr IRTBRU_EL2, x3
+// CHECK-ENCODING: encoding: [0x83,0x20,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c2083 msr IRTBRU_EL2, x3
+
+msr IRTBRP_EL2, x3
+// CHECK-INST: msr IRTBRP_EL2, x3
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c20a3 msr IRTBRP_EL2, x3
+
+msr IRTBRP_EL3, x3
+// CHECK-INST: msr IRTBRP_EL3, x3
+// CHECK-ENCODING: encoding: [0xa3,0x20,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e20a3 msr IRTBRP_EL3, x3
+
+msr TTTBRU_EL1, x3
+// CHECK-INST: msr TTTBRU_EL1, x3
+// CHECK-ENCODING: encoding: [0xc3,0xa2,0x18,0xd5]
+// CHECK-UNKNOWN:  d518a2c3 msr TTTBRU_EL1, x3
+
+msr TTTBRU_EL12, x3
+// CHECK-INST: msr TTTBRU_EL12, x3
+// CHECK-ENCODING: encoding: [0xc3,0xa2,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51da2c3 msr TTTBRU_EL12, x3
+
+msr TTTBRP_EL1, x3
+// CHECK-INST: msr TTTBRP_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x18,0xd5]
+// CHECK-UNKNOWN:  d518a2e3 msr TTTBRP_EL1, x3
+
+msr TTTBRP_EL12, x3
+// CHECK-INST: msr TTTBRP_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51da2e3 msr TTTBRP_EL12, x3
+
+msr TTTBRU_EL2, x3
+// CHECK-INST: msr TTTBRU_EL2, x3
+// CHECK-ENCODING: encoding: [0xc3,0xa2,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51ca2c3 msr TTTBRU_EL2, x3
+
+msr TTTBRP_EL2, x3
+// CHECK-INST: msr TTTBRP_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51ca2e3 msr TTTBRP_EL2, x3
+
+msr TTTBRP_EL3, x3
+// CHECK-INST: msr TTTBRP_EL3, x3
+// CHECK-ENCODING: encoding: [0xe3,0xa2,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51ea2e3 msr TTTBRP_EL3, x3
+
+msr LDSTT_EL1, x3
+// CHECK-INST: msr LDSTT_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0x21,0x18,0xd5]
+// CHECK-UNKNOWN:  d51821e3 msr LDSTT_EL1, x3
+
+msr LDSTT_EL12, x3
+// CHECK-INST: msr LDSTT_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0x21,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d21e3 msr LDSTT_EL12, x3
+
+msr LDSTT_EL2, x3
+// CHECK-INST: msr LDSTT_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0x21,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c21e3 msr LDSTT_EL2, x3
+
+msr TINDEX_EL0, x3
+// CHECK-INST: msr TINDEX_EL0, x3
+// CHECK-ENCODING: encoding: [0x63,0x40,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51b4063 msr TINDEX_EL0, x3
+
+msr TINDEX_EL1, x3
+// CHECK-INST: msr TINDEX_EL1, x3
+// CHECK-ENCODING: encoding: [0x63,0x40,0x18,0xd5]
+// CHECK-UNKNOWN:  d5184063 msr TINDEX_EL1, x3
+
+msr TINDEX_EL2, x3
+// CHECK-INST: msr TINDEX_EL2, x3
+// CHECK-ENCODING: encoding: [0x63,0x40,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c4063 msr TINDEX_EL2, x3
+
+msr TINDEX_EL12, x3
+// CHECK-INST: msr TINDEX_EL12, x3
+// CHECK-ENCODING: encoding: [0x63,0x40,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d4063 msr TINDEX_EL12, x3
+
+msr TINDEX_EL3, x3
+// CHECK-INST: msr TINDEX_EL3, x3
+// CHECK-ENCODING: encoding: [0x63,0x40,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e4063 msr TINDEX_EL3, x3
+
+msr STINDEX_EL1, x3
+// CHECK-INST: msr STINDEX_EL1, x3
+// CHECK-ENCODING: encoding: [0x43,0x40,0x18,0xd5]
+// CHECK-UNKNOWN:  d5184043 msr STINDEX_EL1, x3
+
+msr STINDEX_EL2, x3
+// CHECK-INST: msr STINDEX_EL2, x3
+// CHECK-ENCODING: encoding: [0x43,0x40,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c4043 msr STINDEX_EL2, x3
+
+msr STINDEX_EL12, x3
+// CHECK-INST: msr STINDEX_EL12, x3
+// CHECK-ENCODING: encoding: [0x43,0x40,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d4043 msr STINDEX_EL12, x3
+
+msr STINDEX_EL3, x3
+// CHECK-INST: msr STINDEX_EL3, x3
+// CHECK-ENCODING: encoding: [0x43,0x40,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e4043 msr STINDEX_EL3, x3
+
+msr FGDTP0_EL1, x3
+// CHECK-INST: msr FGDTP0_EL1, x3
+// CHECK-ENCODING: encoding: [0x03,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183203 msr FGDTP0_EL1, x3
+
+msr FGDTU0_EL1, x3
+// CHECK-INST: msr FGDTU0_EL1, x3
+// CHECK-ENCODING: encoding: [0x03,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183403 msr FGDTU0_EL1, x3
+
+msr FGDTP0_EL2, x3
+// CHECK-INST: msr FGDTP0_EL2, x3
+// CHECK-ENCODING: encoding: [0x03,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3203 msr FGDTP0_EL2, x3
+
+msr FGDTU0_EL2, x3
+// CHECK-INST: msr FGDTU0_EL2, x3
+// CHECK-ENCODING: encoding: [0x03,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3403 msr FGDTU0_EL2, x3
+
+msr FGDTP0_EL12, x3
+// CHECK-INST: msr FGDTP0_EL12, x3
+// CHECK-ENCODING: encoding: [0x03,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3203 msr FGDTP0_EL12, x3
+
+msr FGDTU0_EL12, x3
+// CHECK-INST: msr FGDTU0_EL12, x3
+// CHECK-ENCODING: encoding: [0x03,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3403 msr FGDTU0_EL12, x3
+
+msr FGDTP0_EL3, x3
+// CHECK-INST: msr FGDTP0_EL3, x3
+// CHECK-ENCODING: encoding: [0x03,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3203 msr FGDTP0_EL3, x3
+
+msr FGDTP1_EL1, x3
+// CHECK-INST: msr FGDTP1_EL1, x3
+// CHECK-ENCODING: encoding: [0x23,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183223 msr FGDTP1_EL1, x3
+
+msr FGDTU1_EL1, x3
+// CHECK-INST: msr FGDTU1_EL1, x3
+// CHECK-ENCODING: encoding: [0x23,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183423 msr FGDTU1_EL1, x3
+
+msr FGDTP1_EL2, x3
+// CHECK-INST: msr FGDTP1_EL2, x3
+// CHECK-ENCODING: encoding: [0x23,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3223 msr FGDTP1_EL2, x3
+
+msr FGDTU1_EL2, x3
+// CHECK-INST: msr FGDTU1_EL2, x3
+// CHECK-ENCODING: encoding: [0x23,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3423 msr FGDTU1_EL2, x3
+
+msr FGDTP1_EL12, x3
+// CHECK-INST: msr FGDTP1_EL12, x3
+// CHECK-ENCODING: encoding: [0x23,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3223 msr FGDTP1_EL12, x3
+
+msr FGDTU1_EL12, x3
+// CHECK-INST: msr FGDTU1_EL12, x3
+// CHECK-ENCODING: encoding: [0x23,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3423 msr FGDTU1_EL12, x3
+
+msr FGDTP1_EL3, x3
+// CHECK-INST: msr FGDTP1_EL3, x3
+// CHECK-ENCODING: encoding: [0x23,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3223 msr FGDTP1_EL3, x3
+
+msr FGDTP2_EL1, x3
+// CHECK-INST: msr FGDTP2_EL1, x3
+// CHECK-ENCODING: encoding: [0x43,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183243 msr FGDTP2_EL1, x3
+
+msr FGDTU2_EL1, x3
+// CHECK-INST: msr FGDTU2_EL1, x3
+// CHECK-ENCODING: encoding: [0x43,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183443 msr FGDTU2_EL1, x3
+
+msr FGDTP2_EL2, x3
+// CHECK-INST: msr FGDTP2_EL2, x3
+// CHECK-ENCODING: encoding: [0x43,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3243 msr FGDTP2_EL2, x3
+
+msr FGDTU2_EL2, x3
+// CHECK-INST: msr FGDTU2_EL2, x3
+// CHECK-ENCODING: encoding: [0x43,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3443 msr FGDTU2_EL2, x3
+
+msr FGDTP2_EL12, x3
+// CHECK-INST: msr FGDTP2_EL12, x3
+// CHECK-ENCODING: encoding: [0x43,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3243 msr FGDTP2_EL12, x3
+
+msr FGDTU2_EL12, x3
+// CHECK-INST: msr FGDTU2_EL12, x3
+// CHECK-ENCODING: encoding: [0x43,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3443 msr FGDTU2_EL12, x3
+
+msr FGDTP2_EL3, x3
+// CHECK-INST: msr FGDTP2_EL3, x3
+// CHECK-ENCODING: encoding: [0x43,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3243 msr FGDTP2_EL3, x3
+
+msr FGDTP3_EL1, x3
+// CHECK-INST: msr FGDTP3_EL1, x3
+// CHECK-ENCODING: encoding: [0x63,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183263 msr FGDTP3_EL1, x3
+
+msr FGDTU3_EL1, x3
+// CHECK-INST: msr FGDTU3_EL1, x3
+// CHECK-ENCODING: encoding: [0x63,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183463 msr FGDTU3_EL1, x3
+
+msr FGDTP3_EL2, x3
+// CHECK-INST: msr FGDTP3_EL2, x3
+// CHECK-ENCODING: encoding: [0x63,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3263 msr FGDTP3_EL2, x3
+
+msr FGDTU3_EL2, x3
+// CHECK-INST: msr FGDTU3_EL2, x3
+// CHECK-ENCODING: encoding: [0x63,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3463 msr FGDTU3_EL2, x3
+
+msr FGDTP3_EL12, x3
+// CHECK-INST: msr FGDTP3_EL12, x3
+// CHECK-ENCODING: encoding: [0x63,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3263 msr FGDTP3_EL12, x3
+
+msr FGDTU3_EL12, x3
+// CHECK-INST: msr FGDTU3_EL12, x3
+// CHECK-ENCODING: encoding: [0x63,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3463 msr FGDTU3_EL12, x3
+
+msr FGDTP3_EL3, x3
+// CHECK-INST: msr FGDTP3_EL3, x3
+// CHECK-ENCODING: encoding: [0x63,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3263 msr FGDTP3_EL3, x3
+
+msr FGDTP4_EL1, x3
+// CHECK-INST: msr FGDTP4_EL1, x3
+// CHECK-ENCODING: encoding: [0x83,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183283 msr FGDTP4_EL1, x3
+
+msr FGDTU4_EL1, x3
+// CHECK-INST: msr FGDTU4_EL1, x3
+// CHECK-ENCODING: encoding: [0x83,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183483 msr FGDTU4_EL1, x3
+
+msr FGDTP4_EL2, x3
+// CHECK-INST: msr FGDTP4_EL2, x3
+// CHECK-ENCODING: encoding: [0x83,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3283 msr FGDTP4_EL2, x3
+
+msr FGDTU4_EL2, x3
+// CHECK-INST: msr FGDTU4_EL2, x3
+// CHECK-ENCODING: encoding: [0x83,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3483 msr FGDTU4_EL2, x3
+
+msr FGDTP4_EL12, x3
+// CHECK-INST: msr FGDTP4_EL12, x3
+// CHECK-ENCODING: encoding: [0x83,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3283 msr FGDTP4_EL12, x3
+
+msr FGDTU4_EL12, x3
+// CHECK-INST: msr FGDTU4_EL12, x3
+// CHECK-ENCODING: encoding: [0x83,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3483 msr FGDTU4_EL12, x3
+
+msr FGDTP4_EL3, x3
+// CHECK-INST: msr FGDTP4_EL3, x3
+// CHECK-ENCODING: encoding: [0x83,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3283 msr FGDTP4_EL3, x3
+
+msr FGDTP5_EL1, x3
+// CHECK-INST: msr FGDTP5_EL1, x3
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d51832a3 msr FGDTP5_EL1, x3
+
+msr FGDTU5_EL1, x3
+// CHECK-INST: msr FGDTU5_EL1, x3
+// CHECK-ENCODING: encoding: [0xa3,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d51834a3 msr FGDTU5_EL1, x3
+
+msr FGDTP5_EL2, x3
+// CHECK-INST: msr FGDTP5_EL2, x3
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c32a3 msr FGDTP5_EL2, x3
+
+msr FGDTU5_EL2, x3
+// CHECK-INST: msr FGDTU5_EL2, x3
+// CHECK-ENCODING: encoding: [0xa3,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c34a3 msr FGDTU5_EL2, x3
+
+msr FGDTP5_EL12, x3
+// CHECK-INST: msr FGDTP5_EL12, x3
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d32a3 msr FGDTP5_EL12, x3
+
+msr FGDTU5_EL12, x3
+// CHECK-INST: msr FGDTU5_EL12, x3
+// CHECK-ENCODING: encoding: [0xa3,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d34a3 msr FGDTU5_EL12, x3
+
+msr FGDTP5_EL3, x3
+// CHECK-INST: msr FGDTP5_EL3, x3
+// CHECK-ENCODING: encoding: [0xa3,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e32a3 msr FGDTP5_EL3, x3
+
+msr FGDTP6_EL1, x3
+// CHECK-INST: msr FGDTP6_EL1, x3
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d51832c3 msr FGDTP6_EL1, x3
+
+msr FGDTU6_EL1, x3
+// CHECK-INST: msr FGDTU6_EL1, x3
+// CHECK-ENCODING: encoding: [0xc3,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d51834c3 msr FGDTU6_EL1, x3
+
+msr FGDTP6_EL2, x3
+// CHECK-INST: msr FGDTP6_EL2, x3
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c32c3 msr FGDTP6_EL2, x3
+
+msr FGDTU6_EL2, x3
+// CHECK-INST: msr FGDTU6_EL2, x3
+// CHECK-ENCODING: encoding: [0xc3,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c34c3 msr FGDTU6_EL2, x3
+
+msr FGDTP6_EL12, x3
+// CHECK-INST: msr FGDTP6_EL12, x3
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d32c3 msr FGDTP6_EL12, x3
+
+msr FGDTU6_EL12, x3
+// CHECK-INST: msr FGDTU6_EL12, x3
+// CHECK-ENCODING: encoding: [0xc3,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d34c3 msr FGDTU6_EL12, x3
+
+msr FGDTP6_EL3, x3
+// CHECK-INST: msr FGDTP6_EL3, x3
+// CHECK-ENCODING: encoding: [0xc3,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e32c3 msr FGDTP6_EL3, x3
+
+msr FGDTP7_EL1, x3
+// CHECK-INST: msr FGDTP7_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x18,0xd5]
+// CHECK-UNKNOWN:  d51832e3 msr FGDTP7_EL1, x3
+
+msr FGDTU7_EL1, x3
+// CHECK-INST: msr FGDTU7_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0x34,0x18,0xd5]
+// CHECK-UNKNOWN:  d51834e3 msr FGDTU7_EL1, x3
+
+msr FGDTP7_EL2, x3
+// CHECK-INST: msr FGDTP7_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c32e3 msr FGDTP7_EL2, x3
+
+msr FGDTU7_EL2, x3
+// CHECK-INST: msr FGDTU7_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0x34,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c34e3 msr FGDTU7_EL2, x3
+
+msr FGDTP7_EL12, x3
+// CHECK-INST: msr FGDTP7_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d32e3 msr FGDTP7_EL12, x3
+
+msr FGDTU7_EL12, x3
+// CHECK-INST: msr FGDTU7_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0x34,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d34e3 msr FGDTU7_EL12, x3
+
+msr FGDTP7_EL3, x3
+// CHECK-INST: msr FGDTP7_EL3, x3
+// CHECK-ENCODING: encoding: [0xe3,0x32,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e32e3 msr FGDTP7_EL3, x3
+
+msr FGDTP8_EL1, x3
+// CHECK-INST: msr FGDTP8_EL1, x3
+// CHECK-ENCODING: encoding: [0x03,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183303 msr FGDTP8_EL1, x3
+
+msr FGDTU8_EL1, x3
+// CHECK-INST: msr FGDTU8_EL1, x3
+// CHECK-ENCODING: encoding: [0x03,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183503 msr FGDTU8_EL1, x3
+
+msr FGDTP8_EL2, x3
+// CHECK-INST: msr FGDTP8_EL2, x3
+// CHECK-ENCODING: encoding: [0x03,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3303 msr FGDTP8_EL2, x3
+
+msr FGDTU8_EL2, x3
+// CHECK-INST: msr FGDTU8_EL2, x3
+// CHECK-ENCODING: encoding: [0x03,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3503 msr FGDTU8_EL2, x3
+
+msr FGDTP8_EL12, x3
+// CHECK-INST: msr FGDTP8_EL12, x3
+// CHECK-ENCODING: encoding: [0x03,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3303 msr FGDTP8_EL12, x3
+
+msr FGDTU8_EL12, x3
+// CHECK-INST: msr FGDTU8_EL12, x3
+// CHECK-ENCODING: encoding: [0x03,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3503 msr FGDTU8_EL12, x3
+
+msr FGDTP8_EL3, x3
+// CHECK-INST: msr FGDTP8_EL3, x3
+// CHECK-ENCODING: encoding: [0x03,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3303 msr FGDTP8_EL3, x3
+
+msr FGDTP9_EL1, x3
+// CHECK-INST: msr FGDTP9_EL1, x3
+// CHECK-ENCODING: encoding: [0x23,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183323 msr FGDTP9_EL1, x3
+
+msr FGDTU9_EL1, x3
+// CHECK-INST: msr FGDTU9_EL1, x3
+// CHECK-ENCODING: encoding: [0x23,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183523 msr FGDTU9_EL1, x3
+
+msr FGDTP9_EL2, x3
+// CHECK-INST: msr FGDTP9_EL2, x3
+// CHECK-ENCODING: encoding: [0x23,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3323 msr FGDTP9_EL2, x3
+
+msr FGDTU9_EL2, x3
+// CHECK-INST: msr FGDTU9_EL2, x3
+// CHECK-ENCODING: encoding: [0x23,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3523 msr FGDTU9_EL2, x3
+
+msr FGDTP9_EL12, x3
+// CHECK-INST: msr FGDTP9_EL12, x3
+// CHECK-ENCODING: encoding: [0x23,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3323 msr FGDTP9_EL12, x3
+
+msr FGDTU9_EL12, x3
+// CHECK-INST: msr FGDTU9_EL12, x3
+// CHECK-ENCODING: encoding: [0x23,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3523 msr FGDTU9_EL12, x3
+
+msr FGDTP9_EL3, x3
+// CHECK-INST: msr FGDTP9_EL3, x3
+// CHECK-ENCODING: encoding: [0x23,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3323 msr FGDTP9_EL3, x3
+
+msr FGDTP10_EL1, x3
+// CHECK-INST: msr FGDTP10_EL1, x3
+// CHECK-ENCODING: encoding: [0x43,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183343 msr FGDTP10_EL1, x3
+
+msr FGDTU10_EL1, x3
+// CHECK-INST: msr FGDTU10_EL1, x3
+// CHECK-ENCODING: encoding: [0x43,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183543 msr FGDTU10_EL1, x3
+
+msr FGDTP10_EL2, x3
+// CHECK-INST: msr FGDTP10_EL2, x3
+// CHECK-ENCODING: encoding: [0x43,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3343 msr FGDTP10_EL2, x3
+
+msr FGDTU10_EL2, x3
+// CHECK-INST: msr FGDTU10_EL2, x3
+// CHECK-ENCODING: encoding: [0x43,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3543 msr FGDTU10_EL2, x3
+
+msr FGDTP10_EL12, x3
+// CHECK-INST: msr FGDTP10_EL12, x3
+// CHECK-ENCODING: encoding: [0x43,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3343 msr FGDTP10_EL12, x3
+
+msr FGDTU10_EL12, x3
+// CHECK-INST: msr FGDTU10_EL12, x3
+// CHECK-ENCODING: encoding: [0x43,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3543 msr FGDTU10_EL12, x3
+
+msr FGDTP10_EL3, x3
+// CHECK-INST: msr FGDTP10_EL3, x3
+// CHECK-ENCODING: encoding: [0x43,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3343 msr FGDTP10_EL3, x3
+
+msr FGDTP11_EL1, x3
+// CHECK-INST: msr FGDTP11_EL1, x3
+// CHECK-ENCODING: encoding: [0x63,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183363 msr FGDTP11_EL1, x3
+
+msr FGDTU11_EL1, x3
+// CHECK-INST: msr FGDTU11_EL1, x3
+// CHECK-ENCODING: encoding: [0x63,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183563 msr FGDTU11_EL1, x3
+
+msr FGDTP11_EL2, x3
+// CHECK-INST: msr FGDTP11_EL2, x3
+// CHECK-ENCODING: encoding: [0x63,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3363 msr FGDTP11_EL2, x3
+
+msr FGDTU11_EL2, x3
+// CHECK-INST: msr FGDTU11_EL2, x3
+// CHECK-ENCODING: encoding: [0x63,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3563 msr FGDTU11_EL2, x3
+
+msr FGDTP11_EL12, x3
+// CHECK-INST: msr FGDTP11_EL12, x3
+// CHECK-ENCODING: encoding: [0x63,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3363 msr FGDTP11_EL12, x3
+
+msr FGDTU11_EL12, x3
+// CHECK-INST: msr FGDTU11_EL12, x3
+// CHECK-ENCODING: encoding: [0x63,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3563 msr FGDTU11_EL12, x3
+
+msr FGDTP11_EL3, x3
+// CHECK-INST: msr FGDTP11_EL3, x3
+// CHECK-ENCODING: encoding: [0x63,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3363 msr FGDTP11_EL3, x3
+
+msr FGDTP12_EL1, x3
+// CHECK-INST: msr FGDTP12_EL1, x3
+// CHECK-ENCODING: encoding: [0x83,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183383 msr FGDTP12_EL1, x3
+
+msr FGDTU12_EL1, x3
+// CHECK-INST: msr FGDTU12_EL1, x3
+// CHECK-ENCODING: encoding: [0x83,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183583 msr FGDTU12_EL1, x3
+
+msr FGDTP12_EL2, x3
+// CHECK-INST: msr FGDTP12_EL2, x3
+// CHECK-ENCODING: encoding: [0x83,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3383 msr FGDTP12_EL2, x3
+
+msr FGDTU12_EL2, x3
+// CHECK-INST: msr FGDTU12_EL2, x3
+// CHECK-ENCODING: encoding: [0x83,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3583 msr FGDTU12_EL2, x3
+
+msr FGDTP12_EL12, x3
+// CHECK-INST: msr FGDTP12_EL12, x3
+// CHECK-ENCODING: encoding: [0x83,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3383 msr FGDTP12_EL12, x3
+
+msr FGDTU12_EL12, x3
+// CHECK-INST: msr FGDTU12_EL12, x3
+// CHECK-ENCODING: encoding: [0x83,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3583 msr FGDTU12_EL12, x3
+
+msr FGDTP12_EL3, x3
+// CHECK-INST: msr FGDTP12_EL3, x3
+// CHECK-ENCODING: encoding: [0x83,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3383 msr FGDTP12_EL3, x3
+
+msr FGDTP13_EL1, x3
+// CHECK-INST: msr FGDTP13_EL1, x3
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d51833a3 msr FGDTP13_EL1, x3
+
+msr FGDTU13_EL1, x3
+// CHECK-INST: msr FGDTU13_EL1, x3
+// CHECK-ENCODING: encoding: [0xa3,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d51835a3 msr FGDTU13_EL1, x3
+
+msr FGDTP13_EL2, x3
+// CHECK-INST: msr FGDTP13_EL2, x3
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c33a3 msr FGDTP13_EL2, x3
+
+msr FGDTU13_EL2, x3
+// CHECK-INST: msr FGDTU13_EL2, x3
+// CHECK-ENCODING: encoding: [0xa3,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c35a3 msr FGDTU13_EL2, x3
+
+msr FGDTP13_EL12, x3
+// CHECK-INST: msr FGDTP13_EL12, x3
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d33a3 msr FGDTP13_EL12, x3
+
+msr FGDTU13_EL12, x3
+// CHECK-INST: msr FGDTU13_EL12, x3
+// CHECK-ENCODING: encoding: [0xa3,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d35a3 msr FGDTU13_EL12, x3
+
+msr FGDTP13_EL3, x3
+// CHECK-INST: msr FGDTP13_EL3, x3
+// CHECK-ENCODING: encoding: [0xa3,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e33a3 msr FGDTP13_EL3, x3
+
+msr FGDTP14_EL1, x3
+// CHECK-INST: msr FGDTP14_EL1, x3
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d51833c3 msr FGDTP14_EL1, x3
+
+msr FGDTU14_EL1, x3
+// CHECK-INST: msr FGDTU14_EL1, x3
+// CHECK-ENCODING: encoding: [0xc3,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d51835c3 msr FGDTU14_EL1, x3
+
+msr FGDTP14_EL2, x3
+// CHECK-INST: msr FGDTP14_EL2, x3
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c33c3 msr FGDTP14_EL2, x3
+
+msr FGDTU14_EL2, x3
+// CHECK-INST: msr FGDTU14_EL2, x3
+// CHECK-ENCODING: encoding: [0xc3,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c35c3 msr FGDTU14_EL2, x3
+
+msr FGDTP14_EL12, x3
+// CHECK-INST: msr FGDTP14_EL12, x3
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d33c3 msr FGDTP14_EL12, x3
+
+msr FGDTU14_EL12, x3
+// CHECK-INST: msr FGDTU14_EL12, x3
+// CHECK-ENCODING: encoding: [0xc3,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d35c3 msr FGDTU14_EL12, x3
+
+msr FGDTP14_EL3, x3
+// CHECK-INST: msr FGDTP14_EL3, x3
+// CHECK-ENCODING: encoding: [0xc3,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e33c3 msr FGDTP14_EL3, x3
+
+msr FGDTP15_EL1, x3
+// CHECK-INST: msr FGDTP15_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x18,0xd5]
+// CHECK-UNKNOWN:  d51833e3 msr FGDTP15_EL1, x3
+
+msr FGDTU15_EL1, x3
+// CHECK-INST: msr FGDTU15_EL1, x3
+// CHECK-ENCODING: encoding: [0xe3,0x35,0x18,0xd5]
+// CHECK-UNKNOWN:  d51835e3 msr FGDTU15_EL1, x3
+
+msr FGDTP15_EL2, x3
+// CHECK-INST: msr FGDTP15_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c33e3 msr FGDTP15_EL2, x3
+
+msr FGDTU15_EL2, x3
+// CHECK-INST: msr FGDTU15_EL2, x3
+// CHECK-ENCODING: encoding: [0xe3,0x35,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c35e3 msr FGDTU15_EL2, x3
+
+msr FGDTP15_EL12, x3
+// CHECK-INST: msr FGDTP15_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d33e3 msr FGDTP15_EL12, x3
+
+msr FGDTU15_EL12, x3
+// CHECK-INST: msr FGDTU15_EL12, x3
+// CHECK-ENCODING: encoding: [0xe3,0x35,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d35e3 msr FGDTU15_EL12, x3
+
+msr FGDTP15_EL3, x3
+// CHECK-INST: msr FGDTP15_EL3, x3
+// CHECK-ENCODING: encoding: [0xe3,0x33,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e33e3 msr FGDTP15_EL3, x3
+
+msr AFGDTP0_EL1, x0
+// CHECK-INST: msr AFGDTP0_EL1, x0
+// CHECK-ENCODING: encoding: [0x00,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183600 msr AFGDTP0_EL1, x0
+
+msr AFGDTU0_EL1, x0
+// CHECK-INST: msr AFGDTU0_EL1, x0
+// CHECK-ENCODING: encoding: [0x00,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183800 msr AFGDTU0_EL1, x0
+
+msr AFGDTP0_EL2, x0
+// CHECK-INST: msr AFGDTP0_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3600 msr AFGDTP0_EL2, x0
+
+msr AFGDTU0_EL2, x0
+// CHECK-INST: msr AFGDTU0_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3800 msr AFGDTU0_EL2, x0
+
+msr AFGDTP0_EL12, x0
+// CHECK-INST: msr AFGDTP0_EL12, x0
+// CHECK-ENCODING: encoding: [0x00,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3600 msr AFGDTP0_EL12, x0
+
+msr AFGDTU0_EL12, x0
+// CHECK-INST: msr AFGDTU0_EL12, x0
+// CHECK-ENCODING: encoding: [0x00,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3800 msr AFGDTU0_EL12, x0
+
+msr AFGDTP0_EL3, x0
+// CHECK-INST: msr AFGDTP0_EL3, x0
+// CHECK-ENCODING: encoding: [0x00,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3600 msr AFGDTP0_EL3, x0
+
+msr AFGDTP1_EL1, x0
+// CHECK-INST: msr AFGDTP1_EL1, x0
+// CHECK-ENCODING: encoding: [0x20,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183620 msr AFGDTP1_EL1, x0
+
+msr AFGDTU1_EL1, x0
+// CHECK-INST: msr AFGDTU1_EL1, x0
+// CHECK-ENCODING: encoding: [0x20,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183820 msr AFGDTU1_EL1, x0
+
+msr AFGDTP1_EL2, x0
+// CHECK-INST: msr AFGDTP1_EL2, x0
+// CHECK-ENCODING: encoding: [0x20,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3620 msr AFGDTP1_EL2, x0
+
+msr AFGDTU1_EL2, x0
+// CHECK-INST: msr AFGDTU1_EL2, x0
+// CHECK-ENCODING: encoding: [0x20,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3820 msr AFGDTU1_EL2, x0
+
+msr AFGDTP1_EL12, x0
+// CHECK-INST: msr AFGDTP1_EL12, x0
+// CHECK-ENCODING: encoding: [0x20,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3620 msr AFGDTP1_EL12, x0
+
+msr AFGDTU1_EL12, x0
+// CHECK-INST: msr AFGDTU1_EL12, x0
+// CHECK-ENCODING: encoding: [0x20,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3820 msr AFGDTU1_EL12, x0
+
+msr AFGDTP1_EL3, x0
+// CHECK-INST: msr AFGDTP1_EL3, x0
+// CHECK-ENCODING: encoding: [0x20,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3620 msr AFGDTP1_EL3, x0
+
+msr AFGDTP2_EL1, x0
+// CHECK-INST: msr AFGDTP2_EL1, x0
+// CHECK-ENCODING: encoding: [0x40,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183640 msr AFGDTP2_EL1, x0
+
+msr AFGDTU2_EL1, x0
+// CHECK-INST: msr AFGDTU2_EL1, x0
+// CHECK-ENCODING: encoding: [0x40,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183840 msr AFGDTU2_EL1, x0
+
+msr AFGDTP2_EL2, x0
+// CHECK-INST: msr AFGDTP2_EL2, x0
+// CHECK-ENCODING: encoding: [0x40,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3640 msr AFGDTP2_EL2, x0
+
+msr AFGDTU2_EL2, x0
+// CHECK-INST: msr AFGDTU2_EL2, x0
+// CHECK-ENCODING: encoding: [0x40,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3840 msr AFGDTU2_EL2, x0
+
+msr AFGDTP2_EL12, x0
+// CHECK-INST: msr AFGDTP2_EL12, x0
+// CHECK-ENCODING: encoding: [0x40,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3640 msr AFGDTP2_EL12, x0
+
+msr AFGDTU2_EL12, x0
+// CHECK-INST: msr AFGDTU2_EL12, x0
+// CHECK-ENCODING: encoding: [0x40,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3840 msr AFGDTU2_EL12, x0
+
+msr AFGDTP2_EL3, x0
+// CHECK-INST: msr AFGDTP2_EL3, x0
+// CHECK-ENCODING: encoding: [0x40,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3640 msr AFGDTP2_EL3, x0
+
+msr AFGDTP3_EL1, x0
+// CHECK-INST: msr AFGDTP3_EL1, x0
+// CHECK-ENCODING: encoding: [0x60,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183660 msr AFGDTP3_EL1, x0
+
+msr AFGDTU3_EL1, x0
+// CHECK-INST: msr AFGDTU3_EL1, x0
+// CHECK-ENCODING: encoding: [0x60,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183860 msr AFGDTU3_EL1, x0
+
+msr AFGDTP3_EL2, x0
+// CHECK-INST: msr AFGDTP3_EL2, x0
+// CHECK-ENCODING: encoding: [0x60,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3660 msr AFGDTP3_EL2, x0
+
+msr AFGDTU3_EL2, x0
+// CHECK-INST: msr AFGDTU3_EL2, x0
+// CHECK-ENCODING: encoding: [0x60,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3860 msr AFGDTU3_EL2, x0
+
+msr AFGDTP3_EL12, x0
+// CHECK-INST: msr AFGDTP3_EL12, x0
+// CHECK-ENCODING: encoding: [0x60,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3660 msr AFGDTP3_EL12, x0
+
+msr AFGDTU3_EL12, x0
+// CHECK-INST: msr AFGDTU3_EL12, x0
+// CHECK-ENCODING: encoding: [0x60,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3860 msr AFGDTU3_EL12, x0
+
+msr AFGDTP3_EL3, x0
+// CHECK-INST: msr AFGDTP3_EL3, x0
+// CHECK-ENCODING: encoding: [0x60,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3660 msr AFGDTP3_EL3, x0
+
+msr AFGDTP4_EL1, x0
+// CHECK-INST: msr AFGDTP4_EL1, x0
+// CHECK-ENCODING: encoding: [0x80,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183680 msr AFGDTP4_EL1, x0
+
+msr AFGDTU4_EL1, x0
+// CHECK-INST: msr AFGDTU4_EL1, x0
+// CHECK-ENCODING: encoding: [0x80,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183880 msr AFGDTU4_EL1, x0
+
+msr AFGDTP4_EL2, x0
+// CHECK-INST: msr AFGDTP4_EL2, x0
+// CHECK-ENCODING: encoding: [0x80,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3680 msr AFGDTP4_EL2, x0
+
+msr AFGDTU4_EL2, x0
+// CHECK-INST: msr AFGDTU4_EL2, x0
+// CHECK-ENCODING: encoding: [0x80,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3880 msr AFGDTU4_EL2, x0
+
+msr AFGDTP4_EL12, x0
+// CHECK-INST: msr AFGDTP4_EL12, x0
+// CHECK-ENCODING: encoding: [0x80,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3680 msr AFGDTP4_EL12, x0
+
+msr AFGDTU4_EL12, x0
+// CHECK-INST: msr AFGDTU4_EL12, x0
+// CHECK-ENCODING: encoding: [0x80,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3880 msr AFGDTU4_EL12, x0
+
+msr AFGDTP4_EL3, x0
+// CHECK-INST: msr AFGDTP4_EL3, x0
+// CHECK-ENCODING: encoding: [0x80,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3680 msr AFGDTP4_EL3, x0
+
+msr AFGDTP5_EL1, x0
+// CHECK-INST: msr AFGDTP5_EL1, x0
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d51836a0 msr AFGDTP5_EL1, x0
+
+msr AFGDTU5_EL1, x0
+// CHECK-INST: msr AFGDTU5_EL1, x0
+// CHECK-ENCODING: encoding: [0xa0,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d51838a0 msr AFGDTU5_EL1, x0
+
+msr AFGDTP5_EL2, x0
+// CHECK-INST: msr AFGDTP5_EL2, x0
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c36a0 msr AFGDTP5_EL2, x0
+
+msr AFGDTU5_EL2, x0
+// CHECK-INST: msr AFGDTU5_EL2, x0
+// CHECK-ENCODING: encoding: [0xa0,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c38a0 msr AFGDTU5_EL2, x0
+
+msr AFGDTP5_EL12, x0
+// CHECK-INST: msr AFGDTP5_EL12, x0
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d36a0 msr AFGDTP5_EL12, x0
+
+msr AFGDTU5_EL12, x0
+// CHECK-INST: msr AFGDTU5_EL12, x0
+// CHECK-ENCODING: encoding: [0xa0,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d38a0 msr AFGDTU5_EL12, x0
+
+msr AFGDTP5_EL3, x0
+// CHECK-INST: msr AFGDTP5_EL3, x0
+// CHECK-ENCODING: encoding: [0xa0,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e36a0 msr AFGDTP5_EL3, x0
+
+msr AFGDTP6_EL1, x0
+// CHECK-INST: msr AFGDTP6_EL1, x0
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d51836c0 msr AFGDTP6_EL1, x0
+
+msr AFGDTU6_EL1, x0
+// CHECK-INST: msr AFGDTU6_EL1, x0
+// CHECK-ENCODING: encoding: [0xc0,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d51838c0 msr AFGDTU6_EL1, x0
+
+msr AFGDTP6_EL2, x0
+// CHECK-INST: msr AFGDTP6_EL2, x0
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c36c0 msr AFGDTP6_EL2, x0
+
+msr AFGDTU6_EL2, x0
+// CHECK-INST: msr AFGDTU6_EL2, x0
+// CHECK-ENCODING: encoding: [0xc0,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c38c0 msr AFGDTU6_EL2, x0
+
+msr AFGDTP6_EL12, x0
+// CHECK-INST: msr AFGDTP6_EL12, x0
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d36c0 msr AFGDTP6_EL12, x0
+
+msr AFGDTU6_EL12, x0
+// CHECK-INST: msr AFGDTU6_EL12, x0
+// CHECK-ENCODING: encoding: [0xc0,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d38c0 msr AFGDTU6_EL12, x0
+
+msr AFGDTP6_EL3, x0
+// CHECK-INST: msr AFGDTP6_EL3, x0
+// CHECK-ENCODING: encoding: [0xc0,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e36c0 msr AFGDTP6_EL3, x0
+
+msr AFGDTP7_EL1, x0
+// CHECK-INST: msr AFGDTP7_EL1, x0
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x18,0xd5]
+// CHECK-UNKNOWN:  d51836e0 msr AFGDTP7_EL1, x0
+
+msr AFGDTU7_EL1, x0
+// CHECK-INST: msr AFGDTU7_EL1, x0
+// CHECK-ENCODING: encoding: [0xe0,0x38,0x18,0xd5]
+// CHECK-UNKNOWN:  d51838e0 msr AFGDTU7_EL1, x0
+
+msr AFGDTP7_EL2, x0
+// CHECK-INST: msr AFGDTP7_EL2, x0
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c36e0 msr AFGDTP7_EL2, x0
+
+msr AFGDTU7_EL2, x0
+// CHECK-INST: msr AFGDTU7_EL2, x0
+// CHECK-ENCODING: encoding: [0xe0,0x38,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c38e0 msr AFGDTU7_EL2, x0
+
+msr AFGDTP7_EL12, x0
+// CHECK-INST: msr AFGDTP7_EL12, x0
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d36e0 msr AFGDTP7_EL12, x0
+
+msr AFGDTU7_EL12, x0
+// CHECK-INST: msr AFGDTU7_EL12, x0
+// CHECK-ENCODING: encoding: [0xe0,0x38,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d38e0 msr AFGDTU7_EL12, x0
+
+msr AFGDTP7_EL3, x0
+// CHECK-INST: msr AFGDTP7_EL3, x0
+// CHECK-ENCODING: encoding: [0xe0,0x36,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e36e0 msr AFGDTP7_EL3, x0
+
+msr AFGDTP8_EL1, x0
+// CHECK-INST: msr AFGDTP8_EL1, x0
+// CHECK-ENCODING: encoding: [0x00,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183700 msr AFGDTP8_EL1, x0
+
+msr AFGDTU8_EL1, x0
+// CHECK-INST: msr AFGDTU8_EL1, x0
+// CHECK-ENCODING: encoding: [0x00,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183900 msr AFGDTU8_EL1, x0
+
+msr AFGDTP8_EL2, x0
+// CHECK-INST: msr AFGDTP8_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3700 msr AFGDTP8_EL2, x0
+
+msr AFGDTU8_EL2, x0
+// CHECK-INST: msr AFGDTU8_EL2, x0
+// CHECK-ENCODING: encoding: [0x00,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3900 msr AFGDTU8_EL2, x0
+
+msr AFGDTP8_EL12, x0
+// CHECK-INST: msr AFGDTP8_EL12, x0
+// CHECK-ENCODING: encoding: [0x00,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3700 msr AFGDTP8_EL12, x0
+
+msr AFGDTU8_EL12, x0
+// CHECK-INST: msr AFGDTU8_EL12, x0
+// CHECK-ENCODING: encoding: [0x00,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3900 msr AFGDTU8_EL12, x0
+
+msr AFGDTP8_EL3, x0
+// CHECK-INST: msr AFGDTP8_EL3, x0
+// CHECK-ENCODING: encoding: [0x00,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3700 msr AFGDTP8_EL3, x0
+
+msr AFGDTP9_EL1, x0
+// CHECK-INST: msr AFGDTP9_EL1, x0
+// CHECK-ENCODING: encoding: [0x20,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183720 msr AFGDTP9_EL1, x0
+
+msr AFGDTU9_EL1, x0
+// CHECK-INST: msr AFGDTU9_EL1, x0
+// CHECK-ENCODING: encoding: [0x20,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183920 msr AFGDTU9_EL1, x0
+
+msr AFGDTP9_EL2, x0
+// CHECK-INST: msr AFGDTP9_EL2, x0
+// CHECK-ENCODING: encoding: [0x20,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3720 msr AFGDTP9_EL2, x0
+
+msr AFGDTU9_EL2, x0
+// CHECK-INST: msr AFGDTU9_EL2, x0
+// CHECK-ENCODING: encoding: [0x20,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3920 msr AFGDTU9_EL2, x0
+
+msr AFGDTP9_EL12, x0
+// CHECK-INST: msr AFGDTP9_EL12, x0
+// CHECK-ENCODING: encoding: [0x20,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3720 msr AFGDTP9_EL12, x0
+
+msr AFGDTU9_EL12, x0
+// CHECK-INST: msr AFGDTU9_EL12, x0
+// CHECK-ENCODING: encoding: [0x20,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3920 msr AFGDTU9_EL12, x0
+
+msr AFGDTP9_EL3, x0
+// CHECK-INST: msr AFGDTP9_EL3, x0
+// CHECK-ENCODING: encoding: [0x20,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3720 msr AFGDTP9_EL3, x0
+
+msr AFGDTP10_EL1, x0
+// CHECK-INST: msr AFGDTP10_EL1, x0
+// CHECK-ENCODING: encoding: [0x40,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183740 msr AFGDTP10_EL1, x0
+
+msr AFGDTU10_EL1, x0
+// CHECK-INST: msr AFGDTU10_EL1, x0
+// CHECK-ENCODING: encoding: [0x40,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183940 msr AFGDTU10_EL1, x0
+
+msr AFGDTP10_EL2, x0
+// CHECK-INST: msr AFGDTP10_EL2, x0
+// CHECK-ENCODING: encoding: [0x40,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3740 msr AFGDTP10_EL2, x0
+
+msr AFGDTU10_EL2, x0
+// CHECK-INST: msr AFGDTU10_EL2, x0
+// CHECK-ENCODING: encoding: [0x40,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3940 msr AFGDTU10_EL2, x0
+
+msr AFGDTP10_EL12, x0
+// CHECK-INST: msr AFGDTP10_EL12, x0
+// CHECK-ENCODING: encoding: [0x40,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3740 msr AFGDTP10_EL12, x0
+
+msr AFGDTU10_EL12, x0
+// CHECK-INST: msr AFGDTU10_EL12, x0
+// CHECK-ENCODING: encoding: [0x40,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3940 msr AFGDTU10_EL12, x0
+
+msr AFGDTP10_EL3, x0
+// CHECK-INST: msr AFGDTP10_EL3, x0
+// CHECK-ENCODING: encoding: [0x40,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3740 msr AFGDTP10_EL3, x0
+
+msr AFGDTP11_EL1, x0
+// CHECK-INST: msr AFGDTP11_EL1, x0
+// CHECK-ENCODING: encoding: [0x60,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183760 msr AFGDTP11_EL1, x0
+
+msr AFGDTU11_EL1, x0
+// CHECK-INST: msr AFGDTU11_EL1, x0
+// CHECK-ENCODING: encoding: [0x60,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183960 msr AFGDTU11_EL1, x0
+
+msr AFGDTP11_EL2, x0
+// CHECK-INST: msr AFGDTP11_EL2, x0
+// CHECK-ENCODING: encoding: [0x60,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3760 msr AFGDTP11_EL2, x0
+
+msr AFGDTU11_EL2, x0
+// CHECK-INST: msr AFGDTU11_EL2, x0
+// CHECK-ENCODING: encoding: [0x60,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3960 msr AFGDTU11_EL2, x0
+
+msr AFGDTP11_EL12, x0
+// CHECK-INST: msr AFGDTP11_EL12, x0
+// CHECK-ENCODING: encoding: [0x60,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3760 msr AFGDTP11_EL12, x0
+
+msr AFGDTU11_EL12, x0
+// CHECK-INST: msr AFGDTU11_EL12, x0
+// CHECK-ENCODING: encoding: [0x60,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3960 msr AFGDTU11_EL12, x0
+
+msr AFGDTP11_EL3, x0
+// CHECK-INST: msr AFGDTP11_EL3, x0
+// CHECK-ENCODING: encoding: [0x60,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3760 msr AFGDTP11_EL3, x0
+
+msr AFGDTP12_EL1, x0
+// CHECK-INST: msr AFGDTP12_EL1, x0
+// CHECK-ENCODING: encoding: [0x80,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183780 msr AFGDTP12_EL1, x0
+
+msr AFGDTU12_EL1, x0
+// CHECK-INST: msr AFGDTU12_EL1, x0
+// CHECK-ENCODING: encoding: [0x80,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d5183980 msr AFGDTU12_EL1, x0
+
+msr AFGDTP12_EL2, x0
+// CHECK-INST: msr AFGDTP12_EL2, x0
+// CHECK-ENCODING: encoding: [0x80,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3780 msr AFGDTP12_EL2, x0
+
+msr AFGDTU12_EL2, x0
+// CHECK-INST: msr AFGDTU12_EL2, x0
+// CHECK-ENCODING: encoding: [0x80,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c3980 msr AFGDTU12_EL2, x0
+
+msr AFGDTP12_EL12, x0
+// CHECK-INST: msr AFGDTP12_EL12, x0
+// CHECK-ENCODING: encoding: [0x80,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3780 msr AFGDTP12_EL12, x0
+
+msr AFGDTU12_EL12, x0
+// CHECK-INST: msr AFGDTU12_EL12, x0
+// CHECK-ENCODING: encoding: [0x80,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d3980 msr AFGDTU12_EL12, x0
+
+msr AFGDTP12_EL3, x0
+// CHECK-INST: msr AFGDTP12_EL3, x0
+// CHECK-ENCODING: encoding: [0x80,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e3780 msr AFGDTP12_EL3, x0
+
+msr AFGDTP13_EL1, x0
+// CHECK-INST: msr AFGDTP13_EL1, x0
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d51837a0 msr AFGDTP13_EL1, x0
+
+msr AFGDTU13_EL1, x0
+// CHECK-INST: msr AFGDTU13_EL1, x0
+// CHECK-ENCODING: encoding: [0xa0,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d51839a0 msr AFGDTU13_EL1, x0
+
+msr AFGDTP13_EL2, x0
+// CHECK-INST: msr AFGDTP13_EL2, x0
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c37a0 msr AFGDTP13_EL2, x0
+
+msr AFGDTU13_EL2, x0
+// CHECK-INST: msr AFGDTU13_EL2, x0
+// CHECK-ENCODING: encoding: [0xa0,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c39a0 msr AFGDTU13_EL2, x0
+
+msr AFGDTP13_EL12, x0
+// CHECK-INST: msr AFGDTP13_EL12, x0
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d37a0 msr AFGDTP13_EL12, x0
+
+msr AFGDTU13_EL12, x0
+// CHECK-INST: msr AFGDTU13_EL12, x0
+// CHECK-ENCODING: encoding: [0xa0,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d39a0 msr AFGDTU13_EL12, x0
+
+msr AFGDTP13_EL3, x0
+// CHECK-INST: msr AFGDTP13_EL3, x0
+// CHECK-ENCODING: encoding: [0xa0,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e37a0 msr AFGDTP13_EL3, x0
+
+msr AFGDTP14_EL1, x0
+// CHECK-INST: msr AFGDTP14_EL1, x0
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d51837c0 msr AFGDTP14_EL1, x0
+
+msr AFGDTU14_EL1, x0
+// CHECK-INST: msr AFGDTU14_EL1, x0
+// CHECK-ENCODING: encoding: [0xc0,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d51839c0 msr AFGDTU14_EL1, x0
+
+msr AFGDTP14_EL2, x0
+// CHECK-INST: msr AFGDTP14_EL2, x0
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c37c0 msr AFGDTP14_EL2, x0
+
+msr AFGDTU14_EL2, x0
+// CHECK-INST: msr AFGDTU14_EL2, x0
+// CHECK-ENCODING: encoding: [0xc0,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c39c0 msr AFGDTU14_EL2, x0
+
+msr AFGDTP14_EL12, x0
+// CHECK-INST: msr AFGDTP14_EL12, x0
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d37c0 msr AFGDTP14_EL12, x0
+
+msr AFGDTU14_EL12, x0
+// CHECK-INST: msr AFGDTU14_EL12, x0
+// CHECK-ENCODING: encoding: [0xc0,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d39c0 msr AFGDTU14_EL12, x0
+
+msr AFGDTP14_EL3, x0
+// CHECK-INST: msr AFGDTP14_EL3, x0
+// CHECK-ENCODING: encoding: [0xc0,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e37c0 msr AFGDTP14_EL3, x0
+
+msr AFGDTP15_EL1, x0
+// CHECK-INST: msr AFGDTP15_EL1, x0
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x18,0xd5]
+// CHECK-UNKNOWN:  d51837e0 msr AFGDTP15_EL1, x0
+
+msr AFGDTU15_EL1, x0
+// CHECK-INST: msr AFGDTU15_EL1, x0
+// CHECK-ENCODING: encoding: [0xe0,0x39,0x18,0xd5]
+// CHECK-UNKNOWN:  d51839e0 msr AFGDTU15_EL1, x0
+
+msr AFGDTP15_EL2, x0
+// CHECK-INST: msr AFGDTP15_EL2, x0
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c37e0 msr AFGDTP15_EL2, x0
+
+msr AFGDTU15_EL2, x0
+// CHECK-INST: msr AFGDTU15_EL2, x0
+// CHECK-ENCODING: encoding: [0xe0,0x39,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c39e0 msr AFGDTU15_EL2, x0
+
+msr AFGDTP15_EL12, x0
+// CHECK-INST: msr AFGDTP15_EL12, x0
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d37e0 msr AFGDTP15_EL12, x0
+
+msr AFGDTU15_EL12, x0
+// CHECK-INST: msr AFGDTU15_EL12, x0
+// CHECK-ENCODING: encoding: [0xe0,0x39,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d39e0 msr AFGDTU15_EL12, x0
+
+msr AFGDTP15_EL3, x0
+// CHECK-INST: msr AFGDTP15_EL3, x0
+// CHECK-ENCODING: encoding: [0xe0,0x37,0x1e,0xd5]
+// CHECK-UNKNOWN:  d51e37e0 msr AFGDTP15_EL3, x0
+
+msr TPMIN0_EL0, x2
+// CHECK-INST: msr TPMIN0_EL0, x2
+// CHECK-ENCODING: encoding: [0x82,0x22,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51b2282 msr TPMIN0_EL0, x2
+
+msr TPMAX0_EL0, x2
+// CHECK-INST: msr TPMAX0_EL0, x2
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51b22a2 msr TPMAX0_EL0, x2
+
+msr TPMIN1_EL0, x2
+// CHECK-INST: msr TPMIN1_EL0, x2
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51b22c2 msr TPMIN1_EL0, x2
+
+msr TPMAX1_EL0, x2
+// CHECK-INST: msr TPMAX1_EL0, x2
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x1b,0xd5]
+// CHECK-UNKNOWN:  d51b22e2 msr TPMAX1_EL0, x2
+
+msr TPMIN0_EL1, x2
+// CHECK-INST: msr TPMIN0_EL1, x2
+// CHECK-ENCODING: encoding: [0x82,0x22,0x18,0xd5]
+// CHECK-UNKNOWN:  d5182282 msr TPMIN0_EL1, x2
+
+msr TPMAX0_EL1, x2
+// CHECK-INST: msr TPMAX0_EL1, x2
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x18,0xd5]
+// CHECK-UNKNOWN:  d51822a2 msr TPMAX0_EL1, x2
+
+msr TPMIN1_EL1, x2
+// CHECK-INST: msr TPMIN1_EL1, x2
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x18,0xd5]
+// CHECK-UNKNOWN:  d51822c2 msr TPMIN1_EL1, x2
+
+msr TPMAX1_EL1, x2
+// CHECK-INST: msr TPMAX1_EL1, x2
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x18,0xd5]
+// CHECK-UNKNOWN:  d51822e2 msr TPMAX1_EL1, x2
+
+msr TPMIN0_EL2, x2
+// CHECK-INST: msr TPMIN0_EL2, x2
+// CHECK-ENCODING: encoding: [0x82,0x22,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c2282 msr TPMIN0_EL2, x2
+
+msr TPMAX0_EL2, x2
+// CHECK-INST: msr TPMAX0_EL2, x2
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c22a2 msr TPMAX0_EL2, x2
+
+msr TPMIN1_EL2, x2
+// CHECK-INST: msr TPMIN1_EL2, x2
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c22c2 msr TPMIN1_EL2, x2
+
+msr TPMAX1_EL2, x2
+// CHECK-INST: msr TPMAX1_EL2, x2
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x1c,0xd5]
+// CHECK-UNKNOWN:  d51c22e2 msr TPMAX1_EL2, x2
+
+msr TPMIN0_EL12, x2
+// CHECK-INST: msr TPMIN0_EL12, x2
+// CHECK-ENCODING: encoding: [0x82,0x22,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d2282 msr TPMIN0_EL12, x2
+
+msr TPMAX0_EL12, x2
+// CHECK-INST: msr TPMAX0_EL12, x2
+// CHECK-ENCODING: encoding: [0xa2,0x22,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d22a2 msr TPMAX0_EL12, x2
+
+msr TPMIN1_EL12, x2
+// CHECK-INST: msr TPMIN1_EL12, x2
+// CHECK-ENCODING: encoding: [0xc2,0x22,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d22c2 msr TPMIN1_EL12, x2
+
+msr TPMAX1_EL12, x2
+// CHECK-INST: msr TPMAX1_EL12, x2
+// CHECK-ENCODING: encoding: [0xe2,0x22,0x1d,0xd5]
+// CHECK-UNKNOWN:  d51d22e2 msr TPMAX1_EL12, x2
+
+
+tchangef x0, x1
+// CHECK-INST:    tchangef x0, x1
+// CHECK-ENCODING: [0x20,0x00,0x80,0xd5]
+// CHECK-UNKNOWN: d5800020
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangef x0, x1, nB
+// CHECK-INST:    tchangef x0, x1, nb
+// CHECK-ENCODING: [0x20,0x00,0x82,0xd5]
+// CHECK-UNKNOWN: d5820020
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangef x1, #3
+// CHECK-INST:    tchangef x1, #3
+// CHECK-ENCODING: [0x61,0x00,0x90,0xd5]
+// CHECK-UNKNOWN: d5900061
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangef x1, #3, nB
+// CHECK-INST:    tchangef x1, #3, nb
+// CHECK-ENCODING: [0x61,0x00,0x92,0xd5]
+// CHECK-UNKNOWN: d5920061
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangeb x0, x1
+// CHECK-INST:    tchangeb x0, x1
+// CHECK-ENCODING: [0x20,0x00,0x84,0xd5]
+// CHECK-UNKNOWN: d5840020
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangeb x0, x1, nB
+// CHECK-INST:    tchangeb x0, x1, nb
+// CHECK-ENCODING: [0x20,0x00,0x86,0xd5]
+// CHECK-UNKNOWN: d5860020
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangeb x1, #9
+// CHECK-INST:    tchangeb x1, #9
+// CHECK-ENCODING: [0x21,0x01,0x94,0xd5]
+// CHECK-UNKNOWN: d5940121
+// CHECK-ERROR: error: instruction requires: poe2
+
+tchangeb x1, #9, nB
+// CHECK-INST:    tchangeb x1, #9, nb
+// CHECK-ENCODING: [0x21,0x01,0x96,0xd5]
+// CHECK-UNKNOWN: d5960121
+// CHECK-ERROR: error: instruction requires: poe2
+
+
+PLBI ALLE3
+// CHECK-INST:    plbi alle3
+// CHECK-ENCODING: [0x1f,0xa7,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea71f sys  #6, c10, c7, #0
+// CHECK-ERROR: error: PLBI ALLE3 requires: poe2
+
+PLBI ALLE3IS
+// CHECK-INST:    plbi alle3is
+// CHECK-ENCODING: [0x1f,0xa3,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea31f sys  #6, c10, c3, #0
+// CHECK-ERROR: error: PLBI ALLE3IS requires: poe2
+
+PLBI ALLE3OS
+// CHECK-INST:    plbi alle3os
+// CHECK-ENCODING: [0x1f,0xa1,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea11f sys  #6, c10, c1, #0
+// CHECK-ERROR: error: PLBI ALLE3OS requires: poe2
+
+PLBI ALLE2
+// CHECK-INST:    plbi alle2
+// CHECK-ENCODING: [0x1f,0xa7,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca71f sys  #4, c10, c7, #0
+// CHECK-ERROR: error: PLBI ALLE2 requires: poe2
+
+PLBI ALLE2IS
+// CHECK-INST:    plbi alle2is
+// CHECK-ENCODING: [0x1f,0xa3,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca31f sys  #4, c10, c3, #0
+// CHECK-ERROR: error: PLBI ALLE2IS requires: poe2
+
+PLBI ALLE2OS
+// CHECK-INST:    plbi alle2os
+// CHECK-ENCODING: [0x1f,0xa1,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca11f sys  #4, c10, c1, #0
+// CHECK-ERROR: error: PLBI ALLE2OS requires: poe2
+
+PLBI ALLE1
+// CHECK-INST:    plbi alle1
+// CHECK-ENCODING: [0x9f,0xa7,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca79f sys  #4, c10, c7, #4
+// CHECK-ERROR: error: PLBI ALLE1 requires: poe2
+
+PLBI ALLE1IS
+// CHECK-INST:    plbi alle1is
+// CHECK-ENCODING: [0x9f,0xa3,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca39f sys  #4, c10, c3, #4
+// CHECK-ERROR: error: PLBI ALLE1IS requires: poe2
+
+PLBI ALLE1OS
+// CHECK-INST:    plbi alle1os
+// CHECK-ENCODING: [0x9f,0xa1,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca19f sys  #4, c10, c1, #4
+// CHECK-ERROR: error: PLBI ALLE1OS requires: poe2
+
+PLBI VMALLE1
+// CHECK-INST:    plbi vmalle1
+// CHECK-ENCODING: [0x1f,0xa7,0x08,0xd5]
+// CHECK-UNKNOWN: d508a71f sys  #0, c10, c7, #0
+// CHECK-ERROR: error: PLBI VMALLE1 requires: poe2
+
+PLBI VMALLE1IS
+// CHECK-INST:    plbi vmalle1is
+// CHECK-ENCODING: [0x1f,0xa3,0x08,0xd5]
+// CHECK-UNKNOWN: d508a31f sys  #0, c10, c3, #0
+// CHECK-ERROR: error: PLBI VMALLE1IS requires: poe2
+
+PLBI VMALLE1OS
+// CHECK-INST:    plbi vmalle1os
+// CHECK-ENCODING: [0x1f,0xa1,0x08,0xd5]
+// CHECK-UNKNOWN: d508a11f sys  #0, c10, c1, #0
+// CHECK-ERROR: error: PLBI VMALLE1OS requires: poe2
+
+PLBI ASIDE1, X3
+// CHECK-INST:    plbi aside1, x3
+// CHECK-ENCODING: [0x43,0xa7,0x08,0xd5]
+// CHECK-UNKNOWN: d508a743 sys  #0, c10, c7, #2, x3
+// CHECK-ERROR: error: PLBI ASIDE1 requires: poe2
+
+PLBI ASIDE1IS, X3
+// CHECK-INST:    plbi aside1is, x3
+// CHECK-ENCODING: [0x43,0xa3,0x08,0xd5]
+// CHECK-UNKNOWN: d508a343 sys  #0, c10, c3, #2, x3
+// CHECK-ERROR: error: PLBI ASIDE1IS requires: poe2
+
+PLBI ASIDE1OS, X3
+// CHECK-INST:    plbi aside1os, x3
+// CHECK-ENCODING: [0x43,0xa1,0x08,0xd5]
+// CHECK-UNKNOWN: d508a143 sys  #0, c10, c1, #2, x3
+// CHECK-ERROR: error: PLBI ASIDE1OS requires: poe2
+
+PLBI PERME3, X3
+// CHECK-INST:    plbi perme3, x3
+// CHECK-ENCODING: [0x23,0xa7,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea723 sys  #6, c10, c7, #1, x3
+// CHECK-ERROR: error: PLBI PERME3 requires: poe2
+
+PLBI PERME3IS, X3
+// CHECK-INST:    plbi perme3is, x3
+// CHECK-ENCODING: [0x23,0xa3,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea323 sys  #6, c10, c3, #1, x3
+// CHECK-ERROR: error: PLBI PERME3IS requires: poe2
+
+PLBI PERME3OS, X3
+// CHECK-INST:    plbi perme3os, x3
+// CHECK-ENCODING: [0x23,0xa1,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea123 sys  #6, c10, c1, #1, x3
+// CHECK-ERROR: error: PLBI PERME3OS requires: poe2
+
+PLBI PERME2, X3
+// CHECK-INST:    plbi perme2, x3
+// CHECK-ENCODING: [0x23,0xa7,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca723 sys  #4, c10, c7, #1, x3
+// CHECK-ERROR: error: PLBI PERME2 requires: poe2
+
+PLBI PERME2IS, X3
+// CHECK-INST:    plbi perme2is, x3
+// CHECK-ENCODING: [0x23,0xa3,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca323 sys  #4, c10, c3, #1, x3
+// CHECK-ERROR: error: PLBI PERME2IS requires: poe2
+
+PLBI PERME2OS, X3
+// CHECK-INST:    plbi perme2os, x3
+// CHECK-ENCODING: [0x23,0xa1,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca123 sys  #4, c10, c1, #1, x3
+// CHECK-ERROR: error: PLBI PERME2OS requires: poe2
+
+PLBI PERME1, X3
+// CHECK-INST:    plbi perme1, x3
+// CHECK-ENCODING: [0x23,0xa7,0x08,0xd5]
+// CHECK-UNKNOWN: d508a723 sys  #0, c10, c7, #1, x3
+// CHECK-ERROR: error: PLBI PERME1 requires: poe2
+
+PLBI PERME1IS, X3
+// CHECK-INST:    plbi perme1is, x3
+// CHECK-ENCODING: [0x23,0xa3,0x08,0xd5]
+// CHECK-UNKNOWN: d508a323 sys  #0, c10, c3, #1, x3
+// CHECK-ERROR: error: PLBI PERME1IS requires: poe2
+
+PLBI PERME1OS, X3
+// CHECK-INST:    plbi perme1os, x3
+// CHECK-ENCODING: [0x23,0xa1,0x08,0xd5]
+// CHECK-UNKNOWN: d508a123 sys  #0, c10, c1, #1, x3
+// CHECK-ERROR: error: PLBI PERME1OS requires: poe2
+
+PLBI ALLE3NXS
+// CHECK-INST:    plbi alle3nxs
+// CHECK-ENCODING: [0x1f,0xaf,0x0e,0xd5]
+// CHECK-UNKNOWN: d50eaf1f sys  #6, c10, c15, #0
+// CHECK-ERROR: error: PLBI ALLE3NXS requires: poe2
+
+PLBI ALLE3ISNXS
+// CHECK-INST:    plbi alle3isnxs
+// CHECK-ENCODING: [0x1f,0xab,0x0e,0xd5]
+// CHECK-UNKNOWN: d50eab1f sys  #6, c10, c11, #0
+// CHECK-ERROR: error: PLBI ALLE3ISNXS requires: poe2
+
+PLBI ALLE3OSNXS
+// CHECK-INST:    plbi alle3osnxs
+// CHECK-ENCODING: [0x1f,0xa9,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea91f sys  #6, c10, c9, #0
+// CHECK-ERROR: error: PLBI ALLE3OSNXS requires: poe2
+
+PLBI ALLE2NXS
+// CHECK-INST:    plbi alle2nxs
+// CHECK-ENCODING: [0x1f,0xaf,0x0c,0xd5]
+// CHECK-UNKNOWN: d50caf1f sys  #4, c10, c15, #0
+// CHECK-ERROR: error: PLBI ALLE2NXS requires: poe2
+
+PLBI ALLE2ISNXS
+// CHECK-INST:    plbi alle2isnxs
+// CHECK-ENCODING: [0x1f,0xab,0x0c,0xd5]
+// CHECK-UNKNOWN: d50cab1f sys  #4, c10, c11, #0
+// CHECK-ERROR: error: PLBI ALLE2ISNXS requires: poe2
+
+PLBI ALLE2OSNXS
+// CHECK-INST:    plbi alle2osnxs
+// CHECK-ENCODING: [0x1f,0xa9,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca91f sys  #4, c10, c9, #0
+// CHECK-ERROR: error: PLBI ALLE2OSNXS requires: poe2
+
+PLBI ALLE1NXS
+// CHECK-INST:    plbi alle1nxs
+// CHECK-ENCODING: [0x9f,0xaf,0x0c,0xd5]
+// CHECK-UNKNOWN: d50caf9f sys  #4, c10, c15, #4
+// CHECK-ERROR: error: PLBI ALLE1NXS requires: poe2
+
+PLBI ALLE1ISNXS
+// CHECK-INST:    plbi alle1isnxs
+// CHECK-ENCODING: [0x9f,0xab,0x0c,0xd5]
+// CHECK-UNKNOWN: d50cab9f sys  #4, c10, c11, #4
+// CHECK-ERROR: error: PLBI ALLE1ISNXS requires: poe2
+
+PLBI ALLE1OSNXS
+// CHECK-INST:    plbi alle1osnxs
+// CHECK-ENCODING: [0x9f,0xa9,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca99f sys  #4, c10, c9, #4
+// CHECK-ERROR: error: PLBI ALLE1OSNXS requires: poe2
+
+PLBI VMALLE1NXS
+// CHECK-INST:    plbi vmalle1nxs
+// CHECK-ENCODING: [0x1f,0xaf,0x08,0xd5]
+// CHECK-UNKNOWN: d508af1f sys  #0, c10, c15, #0
+// CHECK-ERROR: error: PLBI VMALLE1NXS requires: poe2
+
+PLBI VMALLE1ISNXS
+// CHECK-INST:    plbi vmalle1isnxs
+// CHECK-ENCODING: [0x1f,0xab,0x08,0xd5]
+// CHECK-UNKNOWN: d508ab1f sys  #0, c10, c11, #0
+// CHECK-ERROR: error: PLBI VMALLE1ISNXS requires: poe2
+
+PLBI VMALLE1OSNXS
+// CHECK-INST:    plbi vmalle1osnxs
+// CHECK-ENCODING: [0x1f,0xa9,0x08,0xd5]
+// CHECK-UNKNOWN: d508a91f sys  #0, c10, c9, #0
+// CHECK-ERROR: error: PLBI VMALLE1OSNXS requires: poe2
+
+PLBI ASIDE1NXS, X3
+// CHECK-INST:    plbi aside1nxs, x3
+// CHECK-ENCODING: [0x43,0xaf,0x08,0xd5]
+// CHECK-UNKNOWN: d508af43 sys  #0, c10, c15, #2, x3
+// CHECK-ERROR: error: PLBI ASIDE1NXS requires: poe2
+
+PLBI ASIDE1ISNXS, X3
+// CHECK-INST:    plbi aside1isnxs, x3
+// CHECK-ENCODING: [0x43,0xab,0x08,0xd5]
+// CHECK-UNKNOWN: d508ab43 sys  #0, c10, c11, #2, x3
+// CHECK-ERROR: error: PLBI ASIDE1ISNXS requires: poe2
+
+PLBI ASIDE1OSNXS, X3
+// CHECK-INST:    plbi aside1osnxs, x3
+// CHECK-ENCODING: [0x43,0xa9,0x08,0xd5]
+// CHECK-UNKNOWN: d508a943 sys  #0, c10, c9, #2, x3
+// CHECK-ERROR: error: PLBI ASIDE1OSNXS requires: poe2
+
+PLBI PERME3NXS, X3
+// CHECK-INST:    plbi perme3nxs, x3
+// CHECK-ENCODING: [0x23,0xaf,0x0e,0xd5]
+// CHECK-UNKNOWN: d50eaf23 sys  #6, c10, c15, #1, x3
+// CHECK-ERROR: error: PLBI PERME3NXS requires: poe2
+
+PLBI PERME3ISNXS, X3
+// CHECK-INST:    plbi perme3isnxs, x3
+// CHECK-ENCODING: [0x23,0xab,0x0e,0xd5]
+// CHECK-UNKNOWN: d50eab23 sys  #6, c10, c11, #1, x3
+// CHECK-ERROR: error: PLBI PERME3ISNXS requires: poe2
+
+PLBI PERME3OSNXS, X3
+// CHECK-INST:    plbi perme3osnxs, x3
+// CHECK-ENCODING: [0x23,0xa9,0x0e,0xd5]
+// CHECK-UNKNOWN: d50ea923 sys  #6, c10, c9, #1, x3
+// CHECK-ERROR: error: PLBI PERME3OSNXS requires: poe2
+
+PLBI PERME2NXS, X3
+// CHECK-INST:    plbi perme2nxs, x3
+// CHECK-ENCODING: [0x23,0xaf,0x0c,0xd5]
+// CHECK-UNKNOWN: d50caf23 sys  #4, c10, c15, #1, x3
+// CHECK-ERROR: error: PLBI PERME2NXS requires: poe2
+
+PLBI PERME2ISNXS, X3
+// CHECK-INST:    plbi perme2isnxs, x3
+// CHECK-ENCODING: [0x23,0xab,0x0c,0xd5]
+// CHECK-UNKNOWN: d50cab23 sys  #4, c10, c11, #1, x3
+// CHECK-ERROR: error: PLBI PERME2ISNXS requires: poe2
+
+PLBI PERME2OSNXS, X3
+// CHECK-INST:    plbi perme2osnxs, x3
+// CHECK-ENCODING: [0x23,0xa9,0x0c,0xd5]
+// CHECK-UNKNOWN: d50ca923 sys  #4, c10, c9, #1, x3
+// CHECK-ERROR: error: PLBI PERME2OSNXS requires: poe2
+
+PLBI PERME1NXS, X3
+// CHECK-INST:    plbi perme1nxs, x3
+// CHECK-ENCODING: [0x23,0xaf,0x08,0xd5]
+// CHECK-UNKNOWN: d508af23 sys  #0, c10, c15, #1, x3
+// CHECK-ERROR: error: PLBI PERME1NXS requires: poe2
+
+PLBI PERME1ISNXS, X3
+// CHECK-INST:    plbi perme1isnxs, x3
+// CHECK-ENCODING: [0x23,0xab,0x08,0xd5]
+// CHECK-UNKNOWN: d508ab23 sys  #0, c10, c11, #1, x3
+// CHECK-ERROR: error: PLBI PERME1ISNXS requires: poe2
+
+PLBI PERME1OSNXS, X3
+// CHECK-INST:    plbi perme1osnxs, x3
+// CHECK-ENCODING: [0x23,0xa9,0x08,0xd5]
+// CHECK-UNKNOWN: d508a923 sys  #0, c10, c9, #1, x3
+// CHECK-ERROR: error: PLBI PERME1OSNXS requires: poe2
+
+PLBI PERMAE1, X3
+// CHECK-INST:    plbi permae1, x3
+// CHECK-ENCODING: [0x63,0xa7,0x08,0xd5]
+// CHECK-UNKNOWN: d508a763 sys  #0, c10, c7, #3, x3
+// CHECK-ERROR: error: PLBI PERMAE1 requires: poe2
+
+PLBI PERMAE1IS, X3
+// CHECK-INST:    plbi permae1is, x3
+// CHECK-ENCODING: [0x63,0xa3,0x08,0xd5]
+// CHECK-UNKNOWN: d508a363 sys  #0, c10, c3, #3, x3
+// CHECK-ERROR: error: PLBI PERMAE1IS requires: poe2
+
+PLBI PERMAE1OS, X3
+// CHECK-INST:    plbi permae1os, x3
+// CHECK-ENCODING: [0x63,0xa1,0x08,0xd5]
+// CHECK-UNKNOWN: d508a163 sys  #0, c10, c1, #3, x3
+// CHECK-ERROR: error: PLBI PERMAE1OS requires: poe2
+
+PLBI PERMAE1NXS, X3
+// CHECK-INST:    plbi permae1nxs, x3
+// CHECK-ENCODING: [0x63,0xaf,0x08,0xd5]
+// CHECK-UNKNOWN: d508af63 sys  #0, c10, c15, #3, x3
+// CHECK-ERROR: error: PLBI PERMAE1NXS requires: poe2
+
+PLBI PERMAE1ISNXS, X3
+// CHECK-INST:    plbi permae1isnxs, x3
+// CHECK-ENCODING: [0x63,0xab,0x08,0xd5]
+// CHECK-UNKNOWN: d508ab63 sys  #0, c10, c11, #3, x3
+// CHECK-ERROR: error: PLBI PERMAE1ISNXS requires: poe2
+
+PLBI PERMAE1OSNXS, X3
+// CHECK-INST:    plbi permae1osnxs, x3
+// CHECK-ENCODING: [0x63,0xa9,0x08,0xd5]
+// CHECK-UNKNOWN: d508a963 sys  #0, c10, c9, #3, x3
+// CHECK-ERROR: error: PLBI PERMAE1OSNXS requires: poe2
diff --git a/llvm/test/MC/AArch64/arm-tev.s b/llvm/test/MC/AArch64/arm-tev.s
new file mode 100644
index 0000000000000..bce4857c32816
--- /dev/null
+++ b/llvm/test/MC/AArch64/arm-tev.s
@@ -0,0 +1,41 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tev < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN:        | llvm-objdump -d --mattr=+tev --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN:        | llvm-objdump -d --mattr=-tev --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// Disassemble encoding and check the re-encoding (-show-encoding) matches.
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tev < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+tev -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+//------------------------------------------------------------------------------
+// TIndex Exception-like Vector (FEAT_TEV).
+//------------------------------------------------------------------------------
+
+TENTER #32
+// CHECK-INST:    tenter #32
+// CHECK-ENCODING: [0x00,0x04,0xe0,0xd4]
+// CHECK-UNKNOWN: d4e00400
+// CHECK-ERROR: error: instruction requires: tev
+
+TENTER #32, NB
+// CHECK-INST:    tenter #32, nb
+// CHECK-ENCODING: [0x00,0x04,0xe2,0xd4]
+// CHECK-UNKNOWN: d4e20400
+// CHECK-ERROR: error: instruction requires: tev
+
+TEXIT
+// CHECK-INST:    texit
+// CHECK-ENCODING: [0xe0,0x03,0xff,0xd6]
+// CHECK-UNKNOWN: d6ff03e0
+// CHECK-ERROR: error: instruction requires: tev
+
+TEXIT NB
+// CHECK-INST:    texit nb
+// CHECK-ENCODING: [0xe0,0x07,0xff,0xd6]
+// CHECK-UNKNOWN: d6ff07e0
+// CHECK-ERROR: error: instruction requires: tev
diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp
index 0e5d40ad3c7b1..d119b062c8e1a 100644
--- a/llvm/unittests/TargetParser/TargetParserTest.cpp
+++ b/llvm/unittests/TargetParser/TargetParserTest.cpp
@@ -1452,7 +1452,8 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) {
       AArch64::AEK_GCIE,         AArch64::AEK_SME2P3,
       AArch64::AEK_SVE2P3,       AArch64::AEK_SVE_B16MM,
       AArch64::AEK_F16MM,        AArch64::AEK_F16F32DOT,
-      AArch64::AEK_F16F32MM,
+      AArch64::AEK_F16F32MM,     AArch64::AEK_POE2,
+      AArch64::AEK_TEV,          AArch64::AEK_BTIE,
   };
 
   std::vector<StringRef> Features;
@@ -1576,6 +1577,9 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) {
   EXPECT_TRUE(llvm::is_contained(Features, "+f16mm"));
   EXPECT_TRUE(llvm::is_contained(Features, "+f16f32dot"));
   EXPECT_TRUE(llvm::is_contained(Features, "+f16f32mm"));
+  EXPECT_TRUE(llvm::is_contained(Features, "+poe2"));
+  EXPECT_TRUE(llvm::is_contained(Features, "+tev"));
+  EXPECT_TRUE(llvm::is_contained(Features, "+btie"));
 
   // Assuming we listed every extension above, this should produce the same
   // result.
@@ -1754,6 +1758,9 @@ TEST(TargetParserTest, AArch64ArchExtFeature) {
       {"f16mm", "nof16mm", "+f16mm", "-f16mm"},
       {"f16f32dot", "nof16f32dot", "+f16f32dot", "-f16f32dot"},
       {"f16f32mm", "nof16f32mm", "+f16f32mm", "-f16f32mm"},
+      {"poe2", "nopoe2", "+poe2", "-poe2"},
+      {"tev", "notev", "+tev", "-tev"},
+      {"btie", "nobtie", "+btie", "-btie"},
   };
 
   for (unsigned i = 0; i < std::size(ArchExt); i++) {
@@ -2203,6 +2210,10 @@ AArch64ExtensionDependenciesBaseArchTestParams
          {},
          {"predres", "specres2"}},
 
+        // poe2 -> btie
+        {AArch64::ARMV9_6A, {"nobtie", "poe2"}, {"btie", "poe2"}, {}},
+        {AArch64::ARMV9_6A, {"poe2", "nobtie"}, {}, {"btie", "poe2"}},
+
         // ras -> ras2
         {AArch64::ARMV8A, {"noras", "rasv2"}, {"ras", "rasv2"}, {}},
         {AArch64::ARMV8A, {"rasv2", "noras"}, {}, {"ras", "rasv2"}},

>From b3a019fdcb5717adb3224e6d044df1a8120e26b8 Mon Sep 17 00:00:00 2001
From: Jonathan Thackray <jonathan.thackray at arm.com>
Date: Mon, 3 Nov 2025 11:53:01 +0000
Subject: [PATCH 2/2] fixup! [AArch64][llvm] Add support for Permission
 Overlays Extension 2 (FEAT_S1POE2)

Address CR comments
---
 llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp | 2 ++
 llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s      | 2 +-
 llvm/test/MC/AArch64/arm-poe2-tlbid.s                  | 4 ++--
 llvm/test/MC/AArch64/arm-poe2.s                        | 4 ++--
 llvm/test/MC/AArch64/arm-tev.s                         | 4 ++--
 5 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 71cde9ddf0978..c19d33e51ccb2 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -3955,6 +3955,8 @@ static const struct Extension {
     {"f16f32dot", {AArch64::FeatureF16F32DOT}},
     {"f16f32mm", {AArch64::FeatureF16F32MM}},
     {"poe2", {AArch64::FeatureS1POE2}},
+    {"tev", {AArch64::FeatureTEV}},
+    {"btie", {AArch64::FeatureBTIE}},
 };
 
 static void setRequiredFeatureString(FeatureBitset FBS, std::string &Str) {
diff --git a/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s b/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s
index e105be49283ee..79b47b6f43193 100644
--- a/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s
+++ b/llvm/test/MC/AArch64/arm-poe2-tlbid-diagnostics.s
@@ -53,7 +53,7 @@ plbi vmalle1isnxs, x0
 plbi vmalle1osnxs, x0
 // CHECK-ERROR: error: specified plbi op does not use a register
 
-
+// Tests where no optional register operand allowed
 plbi alle3, x0
 // CHECK-ERROR: error: specified plbi op does not use a register
 // CHECK-NO-REGISTER: error: specified plbi op does not use a register
diff --git a/llvm/test/MC/AArch64/arm-poe2-tlbid.s b/llvm/test/MC/AArch64/arm-poe2-tlbid.s
index eac4fd58d59a0..4087d9dec7fa9 100644
--- a/llvm/test/MC/AArch64/arm-poe2-tlbid.s
+++ b/llvm/test/MC/AArch64/arm-poe2-tlbid.s
@@ -2,9 +2,9 @@
 // RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2 < %s 2>&1 \
 // RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+tlbid,+poe2 < %s \
 // RUN:        | llvm-objdump -d --mattr=+tlbid,+poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+tlbid,+poe2 < %s \
 // RUN:        | llvm-objdump -d --mattr=-tlbid,-poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-UNKNOWN
 // Disassemble encoding and check the re-encoding (-show-encoding) matches.
 // RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tlbid,+poe2 < %s \
diff --git a/llvm/test/MC/AArch64/arm-poe2.s b/llvm/test/MC/AArch64/arm-poe2.s
index cd9b8149b2209..b9aa734cf5b68 100644
--- a/llvm/test/MC/AArch64/arm-poe2.s
+++ b/llvm/test/MC/AArch64/arm-poe2.s
@@ -2,9 +2,9 @@
 // RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
 // RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
 // RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+poe2 < %s \
 // RUN:        | llvm-objdump -d --mattr=+poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+poe2 < %s \
 // RUN:        | llvm-objdump -d --mattr=-poe2 --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-UNKNOWN
 // Disassemble encoding and check the re-encoding (-show-encoding) matches.
 // RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+poe2 < %s \
diff --git a/llvm/test/MC/AArch64/arm-tev.s b/llvm/test/MC/AArch64/arm-tev.s
index bce4857c32816..e80210f060088 100644
--- a/llvm/test/MC/AArch64/arm-tev.s
+++ b/llvm/test/MC/AArch64/arm-tev.s
@@ -2,9 +2,9 @@
 // RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
 // RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
 // RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+tev < %s \
 // RUN:        | llvm-objdump -d --mattr=+tev --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+all < %s \
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+tev < %s \
 // RUN:        | llvm-objdump -d --mattr=-tev --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-UNKNOWN
 // Disassemble encoding and check the re-encoding (-show-encoding) matches.
 // RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tev < %s \



More information about the llvm-commits mailing list