@@ -759,7 +759,7 @@ class ARMAsmParser : public MCTargetAsmParser {
759759 bool hasMVE () const { return getSTI ().hasFeature (ARM::HasMVEIntegerOps); }
760760
761761 // Return the low-subreg of a given Q register.
762- unsigned getDRegFromQReg (unsigned QReg) const {
762+ MCRegister getDRegFromQReg (MCRegister QReg) const {
763763 return MRI->getSubReg (QReg, ARM::dsub_0);
764764 }
765765
@@ -862,12 +862,12 @@ class ARMOperand : public MCParsedAsmOperand {
862862 };
863863
864864 struct RegOp {
865- unsigned RegNum;
865+ MCRegister RegNum;
866866 };
867867
868868 // A vector register list is a sequential list of 1 to 4 registers.
869869 struct VectorListOp {
870- unsigned RegNum;
870+ MCRegister RegNum;
871871 unsigned Count;
872872 unsigned LaneIndex;
873873 bool isDoubleSpaced;
@@ -883,11 +883,11 @@ class ARMOperand : public MCParsedAsmOperand {
883883
884884 // / Combined record for all forms of ARM address expressions.
885885 struct MemoryOp {
886- unsigned BaseRegNum;
886+ MCRegister BaseRegNum;
887887 // Offset is in OffsetReg or OffsetImm. If both are zero, no offset
888888 // was specified.
889889 const MCExpr *OffsetImm; // Offset immediate value
890- unsigned OffsetRegNum; // Offset register num, when OffsetImm == NULL
890+ MCRegister OffsetRegNum; // Offset register num, when OffsetImm == NULL
891891 ARM_AM::ShiftOpc ShiftType; // Shift type for OffsetReg
892892 unsigned ShiftImm; // shift for OffsetReg.
893893 unsigned Alignment; // 0 = no alignment specified
@@ -896,7 +896,7 @@ class ARMOperand : public MCParsedAsmOperand {
896896 };
897897
898898 struct PostIdxRegOp {
899- unsigned RegNum;
899+ MCRegister RegNum;
900900 bool isAdd;
901901 ARM_AM::ShiftOpc ShiftTy;
902902 unsigned ShiftImm;
@@ -909,14 +909,14 @@ class ARMOperand : public MCParsedAsmOperand {
909909
910910 struct RegShiftedRegOp {
911911 ARM_AM::ShiftOpc ShiftTy;
912- unsigned SrcReg;
913- unsigned ShiftReg;
912+ MCRegister SrcReg;
913+ MCRegister ShiftReg;
914914 unsigned ShiftImm;
915915 };
916916
917917 struct RegShiftedImmOp {
918918 ARM_AM::ShiftOpc ShiftTy;
919- unsigned SrcReg;
919+ MCRegister SrcReg;
920920 unsigned ShiftImm;
921921 };
922922
@@ -2547,9 +2547,9 @@ class ARMOperand : public MCParsedAsmOperand {
25472547 void addVPTPredROperands (MCInst &Inst, unsigned N) const {
25482548 assert (N == 4 && " Invalid number of operands!" );
25492549 addVPTPredNOperands (Inst, N-1 );
2550- unsigned RegNum;
2550+ MCRegister RegNum;
25512551 if (getVPTPred () == ARMVCC::None) {
2552- RegNum = 0 ;
2552+ RegNum = MCRegister () ;
25532553 } else {
25542554 unsigned NextOpIndex = Inst.getNumOperands ();
25552555 auto &MCID = Parser->getInstrDesc (Inst.getOpcode ());
@@ -3393,7 +3393,7 @@ class ARMOperand : public MCParsedAsmOperand {
33933393 else if (isDReg () && !Parser->hasMVE ()) {
33943394 Inst.addOperand (MCOperand::createReg (Reg.RegNum ));
33953395 } else if (isQReg () && !Parser->hasMVE ()) {
3396- auto DPair = Parser->getDRegFromQReg (Reg.RegNum );
3396+ MCRegister DPair = Parser->getDRegFromQReg (Reg.RegNum );
33973397 DPair = Parser->getMRI ()->getMatchingSuperReg (
33983398 DPair, ARM::dsub_0, &ARMMCRegisterClasses[ARM::DPairRegClassID]);
33993399 Inst.addOperand (MCOperand::createReg (DPair));
@@ -3684,10 +3684,10 @@ class ARMOperand : public MCParsedAsmOperand {
36843684 return Op;
36853685 }
36863686
3687- static std::unique_ptr<ARMOperand> CreateCCOut (unsigned RegNum , SMLoc S,
3687+ static std::unique_ptr<ARMOperand> CreateCCOut (MCRegister Reg , SMLoc S,
36883688 ARMAsmParser &Parser) {
36893689 auto Op = std::make_unique<ARMOperand>(k_CCOut, Parser);
3690- Op->Reg .RegNum = RegNum ;
3690+ Op->Reg .RegNum = Reg ;
36913691 Op->StartLoc = S;
36923692 Op->EndLoc = S;
36933693 return Op;
@@ -3703,19 +3703,19 @@ class ARMOperand : public MCParsedAsmOperand {
37033703 return Op;
37043704 }
37053705
3706- static std::unique_ptr<ARMOperand> CreateReg (unsigned RegNum , SMLoc S,
3707- SMLoc E, ARMAsmParser &Parser) {
3706+ static std::unique_ptr<ARMOperand> CreateReg (MCRegister Reg , SMLoc S, SMLoc E ,
3707+ ARMAsmParser &Parser) {
37083708 auto Op = std::make_unique<ARMOperand>(k_Register, Parser);
3709- Op->Reg .RegNum = RegNum ;
3709+ Op->Reg .RegNum = Reg ;
37103710 Op->StartLoc = S;
37113711 Op->EndLoc = E;
37123712 return Op;
37133713 }
37143714
37153715 static std::unique_ptr<ARMOperand>
3716- CreateShiftedRegister (ARM_AM::ShiftOpc ShTy, unsigned SrcReg,
3717- unsigned ShiftReg, unsigned ShiftImm, SMLoc S, SMLoc E ,
3718- ARMAsmParser &Parser) {
3716+ CreateShiftedRegister (ARM_AM::ShiftOpc ShTy, MCRegister SrcReg,
3717+ MCRegister ShiftReg, unsigned ShiftImm, SMLoc S,
3718+ SMLoc E, ARMAsmParser &Parser) {
37193719 auto Op = std::make_unique<ARMOperand>(k_ShiftedRegister, Parser);
37203720 Op->RegShiftedReg .ShiftTy = ShTy;
37213721 Op->RegShiftedReg .SrcReg = SrcReg;
@@ -3727,7 +3727,7 @@ class ARMOperand : public MCParsedAsmOperand {
37273727 }
37283728
37293729 static std::unique_ptr<ARMOperand>
3730- CreateShiftedImmediate (ARM_AM::ShiftOpc ShTy, unsigned SrcReg,
3730+ CreateShiftedImmediate (ARM_AM::ShiftOpc ShTy, MCRegister SrcReg,
37313731 unsigned ShiftImm, SMLoc S, SMLoc E,
37323732 ARMAsmParser &Parser) {
37333733 auto Op = std::make_unique<ARMOperand>(k_ShiftedImmediate, Parser);
@@ -3793,7 +3793,7 @@ class ARMOperand : public MCParsedAsmOperand {
37933793 }
37943794
37953795 static std::unique_ptr<ARMOperand>
3796- CreateRegList (SmallVectorImpl<std::pair<unsigned , unsigned >> &Regs,
3796+ CreateRegList (SmallVectorImpl<std::pair<unsigned , MCRegister >> &Regs,
37973797 SMLoc StartLoc, SMLoc EndLoc, ARMAsmParser &Parser) {
37983798 assert (Regs.size () > 0 && " RegList contains no registers?" );
37993799 KindTy Kind = k_RegisterList;
@@ -3827,10 +3827,10 @@ class ARMOperand : public MCParsedAsmOperand {
38273827 }
38283828
38293829 static std::unique_ptr<ARMOperand>
3830- CreateVectorList (unsigned RegNum , unsigned Count, bool isDoubleSpaced,
3831- SMLoc S, SMLoc E, ARMAsmParser &Parser) {
3830+ CreateVectorList (MCRegister Reg , unsigned Count, bool isDoubleSpaced, SMLoc S ,
3831+ SMLoc E, ARMAsmParser &Parser) {
38323832 auto Op = std::make_unique<ARMOperand>(k_VectorList, Parser);
3833- Op->VectorList .RegNum = RegNum ;
3833+ Op->VectorList .RegNum = Reg ;
38343834 Op->VectorList .Count = Count;
38353835 Op->VectorList .isDoubleSpaced = isDoubleSpaced;
38363836 Op->StartLoc = S;
@@ -3839,10 +3839,10 @@ class ARMOperand : public MCParsedAsmOperand {
38393839 }
38403840
38413841 static std::unique_ptr<ARMOperand>
3842- CreateVectorListAllLanes (unsigned RegNum , unsigned Count, bool isDoubleSpaced,
3842+ CreateVectorListAllLanes (MCRegister Reg , unsigned Count, bool isDoubleSpaced,
38433843 SMLoc S, SMLoc E, ARMAsmParser &Parser) {
38443844 auto Op = std::make_unique<ARMOperand>(k_VectorListAllLanes, Parser);
3845- Op->VectorList .RegNum = RegNum ;
3845+ Op->VectorList .RegNum = Reg ;
38463846 Op->VectorList .Count = Count;
38473847 Op->VectorList .isDoubleSpaced = isDoubleSpaced;
38483848 Op->StartLoc = S;
@@ -3884,14 +3884,14 @@ class ARMOperand : public MCParsedAsmOperand {
38843884 }
38853885
38863886 static std::unique_ptr<ARMOperand>
3887- CreateMem (unsigned BaseRegNum , const MCExpr *OffsetImm, unsigned OffsetRegNum ,
3887+ CreateMem (MCRegister BaseReg , const MCExpr *OffsetImm, MCRegister OffsetReg ,
38883888 ARM_AM::ShiftOpc ShiftType, unsigned ShiftImm, unsigned Alignment,
38893889 bool isNegative, SMLoc S, SMLoc E, ARMAsmParser &Parser,
38903890 SMLoc AlignmentLoc = SMLoc()) {
38913891 auto Op = std::make_unique<ARMOperand>(k_Memory, Parser);
3892- Op->Memory .BaseRegNum = BaseRegNum ;
3892+ Op->Memory .BaseRegNum = BaseReg ;
38933893 Op->Memory .OffsetImm = OffsetImm;
3894- Op->Memory .OffsetRegNum = OffsetRegNum ;
3894+ Op->Memory .OffsetRegNum = OffsetReg ;
38953895 Op->Memory .ShiftType = ShiftType;
38963896 Op->Memory .ShiftImm = ShiftImm;
38973897 Op->Memory .Alignment = Alignment;
@@ -3903,10 +3903,10 @@ class ARMOperand : public MCParsedAsmOperand {
39033903 }
39043904
39053905 static std::unique_ptr<ARMOperand>
3906- CreatePostIdxReg (unsigned RegNum , bool isAdd, ARM_AM::ShiftOpc ShiftTy,
3906+ CreatePostIdxReg (MCRegister Reg , bool isAdd, ARM_AM::ShiftOpc ShiftTy,
39073907 unsigned ShiftImm, SMLoc S, SMLoc E, ARMAsmParser &Parser) {
39083908 auto Op = std::make_unique<ARMOperand>(k_PostIndexRegister, Parser);
3909- Op->PostIdxReg .RegNum = RegNum ;
3909+ Op->PostIdxReg .RegNum = Reg ;
39103910 Op->PostIdxReg .isAdd = isAdd;
39113911 Op->PostIdxReg .ShiftTy = ShiftTy;
39123912 Op->PostIdxReg .ShiftImm = ShiftImm;
@@ -4104,8 +4104,7 @@ void ARMOperand::print(raw_ostream &OS) const {
41044104 OS << " <register_list " ;
41054105
41064106 const SmallVectorImpl<unsigned > &RegList = getRegList ();
4107- for (SmallVectorImpl<unsigned >::const_iterator
4108- I = RegList.begin (), E = RegList.end (); I != E; ) {
4107+ for (auto I = RegList.begin (), E = RegList.end (); I != E;) {
41094108 OS << RegName (*I);
41104109 if (++I < E) OS << " , " ;
41114110 }
@@ -4311,11 +4310,11 @@ int ARMAsmParser::tryParseShiftRegister(OperandVector &Operands) {
43114310 (ARMOperand *)Operands.pop_back_val ().release ());
43124311 if (!PrevOp->isReg ())
43134312 return Error (PrevOp->getStartLoc (), " shift must be of a register" );
4314- int SrcReg = PrevOp->getReg ();
4313+ MCRegister SrcReg = PrevOp->getReg ();
43154314
43164315 SMLoc EndLoc;
43174316 int64_t Imm = 0 ;
4318- int ShiftReg = 0 ;
4317+ MCRegister ShiftReg;
43194318 if (ShiftTy == ARM_AM::rrx) {
43204319 // RRX Doesn't have an explicit shift amount. The encoder expects
43214320 // the shift register to be the same as the source register. Seems odd,
@@ -4591,8 +4590,8 @@ static unsigned getNextRegister(unsigned Reg) {
45914590// Insert an <Encoding, Register> pair in an ordered vector. Return true on
45924591// success, or false, if duplicate encoding found.
45934592static bool
4594- insertNoDuplicates (SmallVectorImpl<std::pair<unsigned , unsigned >> &Regs,
4595- unsigned Enc, unsigned Reg) {
4593+ insertNoDuplicates (SmallVectorImpl<std::pair<unsigned , MCRegister >> &Regs,
4594+ unsigned Enc, MCRegister Reg) {
45964595 Regs.emplace_back (Enc, Reg);
45974596 for (auto I = Regs.rbegin (), J = I + 1 , E = Regs.rend (); J != E; ++I, ++J) {
45984597 if (J->first == Enc) {
@@ -4626,7 +4625,7 @@ bool ARMAsmParser::parseRegisterList(OperandVector &Operands, bool EnforceOrder,
46264625 // The reglist instructions have at most 16 registers, so reserve
46274626 // space for that many.
46284627 int EReg = 0 ;
4629- SmallVector<std::pair<unsigned , unsigned >, 16 > Registers;
4628+ SmallVector<std::pair<unsigned , MCRegister >, 16 > Registers;
46304629
46314630 // Allow Q regs and just interpret them as the two D sub-registers.
46324631 if (ARMMCRegisterClasses[ARM::QPRRegClassID].contains (Reg)) {
@@ -7409,9 +7408,9 @@ bool ARMAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
74097408 const MCRegisterClass &MRC = MRI->getRegClass (ARM::GPRRegClassID);
74107409 // Adjust only if Op1 is a GPR.
74117410 if (Op1.isReg () && MRC.contains (Op1.getReg ())) {
7412- unsigned Reg1 = Op1.getReg ();
7411+ MCRegister Reg1 = Op1.getReg ();
74137412 unsigned Rt = MRI->getEncodingValue (Reg1);
7414- unsigned Reg2 = Op2.getReg ();
7413+ MCRegister Reg2 = Op2.getReg ();
74157414 unsigned Rt2 = MRI->getEncodingValue (Reg2);
74167415 // Rt2 must be Rt + 1.
74177416 if (Rt + 1 != Rt2)
@@ -7426,7 +7425,7 @@ bool ARMAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
74267425 IsLoad ? " destination operands must start start at an even register"
74277426 : " source operands must start start at an even register" );
74287427
7429- unsigned NewReg = MRI->getMatchingSuperReg (
7428+ MCRegister NewReg = MRI->getMatchingSuperReg (
74307429 Reg1, ARM::gsub_0, &(MRI->getRegClass (ARM::GPRPairRegClassID)));
74317430 Operands[Idx] = ARMOperand::CreateReg (NewReg, Op1.getStartLoc (),
74327431 Op2.getEndLoc (), *this );
@@ -7464,7 +7463,7 @@ static bool checkLowRegisterList(const MCInst &Inst, unsigned OpNo,
74647463 bool &containsReg) {
74657464 containsReg = false ;
74667465 for (unsigned i = OpNo; i < Inst.getNumOperands (); ++i) {
7467- unsigned OpReg = Inst.getOperand (i).getReg ();
7466+ MCRegister OpReg = Inst.getOperand (i).getReg ();
74687467 if (OpReg == Reg)
74697468 containsReg = true ;
74707469 // Anything other than a low register isn't legal here.
@@ -7776,7 +7775,7 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
77767775 return true ;
77777776 break ;
77787777 case ARM::t2BXJ: {
7779- const unsigned RmReg = Inst.getOperand (0 ).getReg ();
7778+ const MCRegister RmReg = Inst.getOperand (0 ).getReg ();
77807779 // Rm = SP is no longer unpredictable in v8-A
77817780 if (RmReg == ARM::SP && !hasV8Ops ())
77827781 return Error (Operands[MnemonicOpsEndInd]->getStartLoc (),
@@ -8054,7 +8053,7 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
80548053 //
80558054 // Thumb LDM instructions are writeback iff the base register is not
80568055 // in the register list.
8057- unsigned Rn = Inst.getOperand (0 ).getReg ();
8056+ MCRegister Rn = Inst.getOperand (0 ).getReg ();
80588057 bool HasWritebackToken =
80598058 (static_cast <ARMOperand &>(*Operands[MnemonicOpsEndInd + 1 ])
80608059 .isToken () &&
@@ -8508,8 +8507,8 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
85088507 case ARM::t2SMLSLD:
85098508 case ARM::t2SMLSLDX:
85108509 case ARM::t2SMULL: {
8511- unsigned RdHi = Inst.getOperand (0 ).getReg ();
8512- unsigned RdLo = Inst.getOperand (1 ).getReg ();
8510+ MCRegister RdHi = Inst.getOperand (0 ).getReg ();
8511+ MCRegister RdLo = Inst.getOperand (1 ).getReg ();
85138512 if (RdHi == RdLo) {
85148513 return Error (Loc,
85158514 " unpredictable instruction, RdHi and RdLo must be different" );
0 commit comments