@@ -1909,6 +1909,21 @@ def CMHPriorityHint_op : Operand<i32> {
19091909 }];
19101910}
19111911
1912+ def TIndexHintOperand : AsmOperandClass {
1913+ let Name = "TIndexHint";
1914+ let ParserMethod = "tryParseTIndexHint";
1915+ }
1916+
1917+ def TIndexhint_op : Operand<i32> {
1918+ let ParserMatchClass = TIndexHintOperand;
1919+ let PrintMethod = "printTIndexHintOp";
1920+ let MCOperandPredicate = [{
1921+ if (!MCOp.isImm())
1922+ return false;
1923+ return AArch64TIndexHint::lookupTIndexByEncoding(MCOp.getImm()) != nullptr;
1924+ }];
1925+ }
1926+
19121927class MRSI : RtSystemI<1, (outs GPR64:$Rt), (ins mrs_sysreg_op:$systemreg),
19131928 "mrs", "\t$Rt, $systemreg"> {
19141929 bits<16> systemreg;
@@ -13366,3 +13381,84 @@ class STCPHInst<string asm> : I<
1336613381 let Inst{7-5} = 0b100;
1336713382 let Inst{4-0} = 0b11111;
1336813383}
13384+
13385+ //---
13386+ // Permission Overlays Extension 2 (FEAT_S1POE2)
13387+ //---
13388+
13389+ class TCHANGERegInst<string asm, bit isB> : I<
13390+ (outs GPR64:$Xd),
13391+ (ins GPR64:$Xn, TIndexhint_op:$nb),
13392+ asm, "\t$Xd, $Xn, $nb", "", []>, Sched<[]> {
13393+ bits<5> Xd;
13394+ bits<5> Xn;
13395+ bits<1> nb;
13396+ let Inst{31-19} = 0b1101010110000;
13397+ let Inst{18} = isB;
13398+ let Inst{17} = nb;
13399+ let Inst{16-10} = 0b0000000;
13400+ let Inst{9-5} = Xn;
13401+ let Inst{4-0} = Xd;
13402+ }
13403+
13404+ class TCHANGEImmInst<string asm, bit isB> : I<
13405+ (outs GPR64:$Xd),
13406+ (ins imm0_127:$imm, TIndexhint_op:$nb),
13407+ asm, "\t$Xd, $imm, $nb", "", []>, Sched<[]> {
13408+ bits<5> Xd;
13409+ bits<7> imm;
13410+ bits<1> nb;
13411+ let Inst{31-19} = 0b1101010110010;
13412+ let Inst{18} = isB;
13413+ let Inst{17} = nb;
13414+ let Inst{16-12} = 0b00000;
13415+ let Inst{11-5} = imm;
13416+ let Inst{4-0} = Xd;
13417+ }
13418+
13419+ class TENTERInst<string asm> : I<
13420+ (outs),
13421+ (ins imm0_127:$imm, TIndexhint_op:$nb),
13422+ asm, "\t$imm, $nb", "", []>, Sched<[]> {
13423+ bits<7> imm;
13424+ bits<1> nb;
13425+ let Inst{31-18} = 0b11010100111000;
13426+ let Inst{17} = nb;
13427+ let Inst{16-12} = 0b00000;
13428+ let Inst{11-5} = imm;
13429+ let Inst{4-0} = 0b00000;
13430+ }
13431+
13432+ class TEXITInst<string asm> : I<
13433+ (outs),
13434+ (ins TIndexhint_op:$nb),
13435+ asm, "\t$nb", "", []>, Sched<[]> {
13436+ bits<1> nb;
13437+ let Inst{31-11} = 0b110101101111111100000;
13438+ let Inst{10} = nb;
13439+ let Inst{9-0} = 0b1111100000;
13440+ }
13441+
13442+
13443+ multiclass TCHANGEReg<string asm , bit isB> {
13444+ def NAME : TCHANGERegInst<asm, isB>;
13445+ def : InstAlias<asm # "\t$Xd, $Xn",
13446+ (!cast<Instruction>(NAME) GPR64:$Xd, GPR64:$Xn, 0), 1>;
13447+ }
13448+
13449+ multiclass TCHANGEImm<string asm, bit isB> {
13450+ def NAME : TCHANGEImmInst<asm, isB>;
13451+ def : InstAlias<asm # "\t$Xd, $imm",
13452+ (!cast<Instruction>(NAME) GPR64:$Xd, imm0_127:$imm, 0), 1>;
13453+ }
13454+
13455+ multiclass TENTER<string asm> {
13456+ def NAME : TENTERInst<asm>;
13457+ def : InstAlias<asm # "\t$imm",
13458+ (!cast<Instruction>(NAME) imm0_127:$imm, 0), 1>;
13459+ }
13460+
13461+ multiclass TEXIT<string asm> {
13462+ def NAME : TEXITInst<asm>;
13463+ def : InstAlias<asm, (!cast<Instruction>(NAME) 0), 1>;
13464+ }
0 commit comments