@@ -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;
@@ -13338,3 +13353,86 @@ class STCPHInst<string asm> : I<
1333813353 let Inst{7-5} = 0b100;
1333913354 let Inst{4-0} = 0b11111;
1334013355}
13356+
13357+ //---
13358+ // Permission Overlays Extension 2 (FEAT_S1POE2)
13359+ //---
13360+
13361+ class TCHANGERegInst<string asm, bit isB> : I<
13362+ (outs GPR64:$Xd),
13363+ (ins GPR64:$Xn, TIndexhint_op:$nb),
13364+ asm, "\t$Xd, $Xn, $nb", "", []>, Sched<[]> {
13365+ bits<5> Xd;
13366+ bits<5> Xn;
13367+ bits<1> nb;
13368+ let Inst{31-19} = 0b1101010110000;
13369+ let Inst{18} = isB;
13370+ let Inst{17} = nb;
13371+ let Inst{16-10} = 0b0000000;
13372+ let Inst{9-5} = Xn;
13373+ let Inst{4-0} = Xd;
13374+ }
13375+
13376+ class TCHANGEImmInst<string asm, bit isB> : I<
13377+ (outs GPR64:$Xd),
13378+ (ins imm0_127:$imm, TIndexhint_op:$nb),
13379+ asm, "\t$Xd, $imm, $nb", "", []>, Sched<[]> {
13380+ bits<5> Xd;
13381+ bits<7> imm;
13382+ bits<1> nb;
13383+ let Inst{31-19} = 0b1101010110010;
13384+ let Inst{18} = isB;
13385+ let Inst{17} = nb;
13386+ let Inst{16-12} = 0b00000;
13387+ let Inst{11-5} = imm;
13388+ let Inst{4-0} = Xd;
13389+ }
13390+
13391+ class TENTERInst<string asm> : I<
13392+ (outs),
13393+ (ins imm0_127:$imm, TIndexhint_op:$nb),
13394+ asm, "\t$imm, $nb", "", []>, Sched<[]> {
13395+ bits<7> imm;
13396+ bits<1> nb;
13397+ let Inst{31-20} = 0b110101001110;
13398+ let Inst{19-18} = 0b00;
13399+ let Inst{17} = nb;
13400+ let Inst{16-12} = 0b00000;
13401+ let Inst{11-5} = imm;
13402+ let Inst{4-0} = 0b00000;
13403+ }
13404+
13405+ class TEXITInst<string asm> : I<
13406+ (outs),
13407+ (ins TIndexhint_op:$nb),
13408+ asm, "\t$nb", "", []>, Sched<[]> {
13409+ bits<1> nb;
13410+ let Inst{31-13} = 0b1101011011111111000;
13411+ let Inst{12-11} = 0b00;
13412+ let Inst{10} = nb;
13413+ let Inst{9-0} = 0b1111100000;
13414+ }
13415+
13416+
13417+ multiclass TCHANGEReg<string asm , bit isB> {
13418+ def NAME : TCHANGERegInst<asm, isB>;
13419+ def : InstAlias<asm # "\t$Xd, $Xn",
13420+ (!cast<Instruction>(NAME) GPR64:$Xd, GPR64:$Xn, 0), 1>;
13421+ }
13422+
13423+ multiclass TCHANGEImm<string asm, bit isB> {
13424+ def NAME : TCHANGEImmInst<asm, isB>;
13425+ def : InstAlias<asm # "\t$Xd, $Xn",
13426+ (!cast<Instruction>(NAME) GPR64:$Xd, imm0_127:$Xn, 0), 1>;
13427+ }
13428+
13429+ multiclass TENTER<string asm> {
13430+ def NAME : TENTERInst<asm>;
13431+ def : InstAlias<asm # "\t$imm",
13432+ (!cast<Instruction>(NAME) imm0_127:$imm, 0), 1>;
13433+ }
13434+
13435+ multiclass TEXIT<string asm> {
13436+ def NAME : TEXITInst<asm>;
13437+ def : InstAlias<asm, (!cast<Instruction>(NAME) 0), 1>;
13438+ }
0 commit comments