@@ -759,7 +759,7 @@ class ARMAsmParser : public MCTargetAsmParser {
759
759
bool hasMVE () const { return getSTI ().hasFeature (ARM::HasMVEIntegerOps); }
760
760
761
761
// Return the low-subreg of a given Q register.
762
- unsigned getDRegFromQReg (unsigned QReg) const {
762
+ MCRegister getDRegFromQReg (MCRegister QReg) const {
763
763
return MRI->getSubReg (QReg, ARM::dsub_0);
764
764
}
765
765
@@ -862,12 +862,12 @@ class ARMOperand : public MCParsedAsmOperand {
862
862
};
863
863
864
864
struct RegOp {
865
- unsigned RegNum;
865
+ MCRegister RegNum;
866
866
};
867
867
868
868
// A vector register list is a sequential list of 1 to 4 registers.
869
869
struct VectorListOp {
870
- unsigned RegNum;
870
+ MCRegister RegNum;
871
871
unsigned Count;
872
872
unsigned LaneIndex;
873
873
bool isDoubleSpaced;
@@ -883,11 +883,11 @@ class ARMOperand : public MCParsedAsmOperand {
883
883
884
884
// / Combined record for all forms of ARM address expressions.
885
885
struct MemoryOp {
886
- unsigned BaseRegNum;
886
+ MCRegister BaseRegNum;
887
887
// Offset is in OffsetReg or OffsetImm. If both are zero, no offset
888
888
// was specified.
889
889
const MCExpr *OffsetImm; // Offset immediate value
890
- unsigned OffsetRegNum; // Offset register num, when OffsetImm == NULL
890
+ MCRegister OffsetRegNum; // Offset register num, when OffsetImm == NULL
891
891
ARM_AM::ShiftOpc ShiftType; // Shift type for OffsetReg
892
892
unsigned ShiftImm; // shift for OffsetReg.
893
893
unsigned Alignment; // 0 = no alignment specified
@@ -896,7 +896,7 @@ class ARMOperand : public MCParsedAsmOperand {
896
896
};
897
897
898
898
struct PostIdxRegOp {
899
- unsigned RegNum;
899
+ MCRegister RegNum;
900
900
bool isAdd;
901
901
ARM_AM::ShiftOpc ShiftTy;
902
902
unsigned ShiftImm;
@@ -909,14 +909,14 @@ class ARMOperand : public MCParsedAsmOperand {
909
909
910
910
struct RegShiftedRegOp {
911
911
ARM_AM::ShiftOpc ShiftTy;
912
- unsigned SrcReg;
913
- unsigned ShiftReg;
912
+ MCRegister SrcReg;
913
+ MCRegister ShiftReg;
914
914
unsigned ShiftImm;
915
915
};
916
916
917
917
struct RegShiftedImmOp {
918
918
ARM_AM::ShiftOpc ShiftTy;
919
- unsigned SrcReg;
919
+ MCRegister SrcReg;
920
920
unsigned ShiftImm;
921
921
};
922
922
@@ -2547,9 +2547,9 @@ class ARMOperand : public MCParsedAsmOperand {
2547
2547
void addVPTPredROperands (MCInst &Inst, unsigned N) const {
2548
2548
assert (N == 4 && " Invalid number of operands!" );
2549
2549
addVPTPredNOperands (Inst, N-1 );
2550
- unsigned RegNum;
2550
+ MCRegister RegNum;
2551
2551
if (getVPTPred () == ARMVCC::None) {
2552
- RegNum = 0 ;
2552
+ RegNum = MCRegister () ;
2553
2553
} else {
2554
2554
unsigned NextOpIndex = Inst.getNumOperands ();
2555
2555
auto &MCID = Parser->getInstrDesc (Inst.getOpcode ());
@@ -3393,7 +3393,7 @@ class ARMOperand : public MCParsedAsmOperand {
3393
3393
else if (isDReg () && !Parser->hasMVE ()) {
3394
3394
Inst.addOperand (MCOperand::createReg (Reg.RegNum ));
3395
3395
} else if (isQReg () && !Parser->hasMVE ()) {
3396
- auto DPair = Parser->getDRegFromQReg (Reg.RegNum );
3396
+ MCRegister DPair = Parser->getDRegFromQReg (Reg.RegNum );
3397
3397
DPair = Parser->getMRI ()->getMatchingSuperReg (
3398
3398
DPair, ARM::dsub_0, &ARMMCRegisterClasses[ARM::DPairRegClassID]);
3399
3399
Inst.addOperand (MCOperand::createReg (DPair));
@@ -3684,10 +3684,10 @@ class ARMOperand : public MCParsedAsmOperand {
3684
3684
return Op;
3685
3685
}
3686
3686
3687
- static std::unique_ptr<ARMOperand> CreateCCOut (unsigned RegNum , SMLoc S,
3687
+ static std::unique_ptr<ARMOperand> CreateCCOut (MCRegister Reg , SMLoc S,
3688
3688
ARMAsmParser &Parser) {
3689
3689
auto Op = std::make_unique<ARMOperand>(k_CCOut, Parser);
3690
- Op->Reg .RegNum = RegNum ;
3690
+ Op->Reg .RegNum = Reg ;
3691
3691
Op->StartLoc = S;
3692
3692
Op->EndLoc = S;
3693
3693
return Op;
@@ -3703,19 +3703,19 @@ class ARMOperand : public MCParsedAsmOperand {
3703
3703
return Op;
3704
3704
}
3705
3705
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) {
3708
3708
auto Op = std::make_unique<ARMOperand>(k_Register, Parser);
3709
- Op->Reg .RegNum = RegNum ;
3709
+ Op->Reg .RegNum = Reg ;
3710
3710
Op->StartLoc = S;
3711
3711
Op->EndLoc = E;
3712
3712
return Op;
3713
3713
}
3714
3714
3715
3715
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) {
3719
3719
auto Op = std::make_unique<ARMOperand>(k_ShiftedRegister, Parser);
3720
3720
Op->RegShiftedReg .ShiftTy = ShTy;
3721
3721
Op->RegShiftedReg .SrcReg = SrcReg;
@@ -3727,7 +3727,7 @@ class ARMOperand : public MCParsedAsmOperand {
3727
3727
}
3728
3728
3729
3729
static std::unique_ptr<ARMOperand>
3730
- CreateShiftedImmediate (ARM_AM::ShiftOpc ShTy, unsigned SrcReg,
3730
+ CreateShiftedImmediate (ARM_AM::ShiftOpc ShTy, MCRegister SrcReg,
3731
3731
unsigned ShiftImm, SMLoc S, SMLoc E,
3732
3732
ARMAsmParser &Parser) {
3733
3733
auto Op = std::make_unique<ARMOperand>(k_ShiftedImmediate, Parser);
@@ -3793,7 +3793,7 @@ class ARMOperand : public MCParsedAsmOperand {
3793
3793
}
3794
3794
3795
3795
static std::unique_ptr<ARMOperand>
3796
- CreateRegList (SmallVectorImpl<std::pair<unsigned , unsigned >> &Regs,
3796
+ CreateRegList (SmallVectorImpl<std::pair<unsigned , MCRegister >> &Regs,
3797
3797
SMLoc StartLoc, SMLoc EndLoc, ARMAsmParser &Parser) {
3798
3798
assert (Regs.size () > 0 && " RegList contains no registers?" );
3799
3799
KindTy Kind = k_RegisterList;
@@ -3827,10 +3827,10 @@ class ARMOperand : public MCParsedAsmOperand {
3827
3827
}
3828
3828
3829
3829
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) {
3832
3832
auto Op = std::make_unique<ARMOperand>(k_VectorList, Parser);
3833
- Op->VectorList .RegNum = RegNum ;
3833
+ Op->VectorList .RegNum = Reg ;
3834
3834
Op->VectorList .Count = Count;
3835
3835
Op->VectorList .isDoubleSpaced = isDoubleSpaced;
3836
3836
Op->StartLoc = S;
@@ -3839,10 +3839,10 @@ class ARMOperand : public MCParsedAsmOperand {
3839
3839
}
3840
3840
3841
3841
static std::unique_ptr<ARMOperand>
3842
- CreateVectorListAllLanes (unsigned RegNum , unsigned Count, bool isDoubleSpaced,
3842
+ CreateVectorListAllLanes (MCRegister Reg , unsigned Count, bool isDoubleSpaced,
3843
3843
SMLoc S, SMLoc E, ARMAsmParser &Parser) {
3844
3844
auto Op = std::make_unique<ARMOperand>(k_VectorListAllLanes, Parser);
3845
- Op->VectorList .RegNum = RegNum ;
3845
+ Op->VectorList .RegNum = Reg ;
3846
3846
Op->VectorList .Count = Count;
3847
3847
Op->VectorList .isDoubleSpaced = isDoubleSpaced;
3848
3848
Op->StartLoc = S;
@@ -3884,14 +3884,14 @@ class ARMOperand : public MCParsedAsmOperand {
3884
3884
}
3885
3885
3886
3886
static std::unique_ptr<ARMOperand>
3887
- CreateMem (unsigned BaseRegNum , const MCExpr *OffsetImm, unsigned OffsetRegNum ,
3887
+ CreateMem (MCRegister BaseReg , const MCExpr *OffsetImm, MCRegister OffsetReg ,
3888
3888
ARM_AM::ShiftOpc ShiftType, unsigned ShiftImm, unsigned Alignment,
3889
3889
bool isNegative, SMLoc S, SMLoc E, ARMAsmParser &Parser,
3890
3890
SMLoc AlignmentLoc = SMLoc()) {
3891
3891
auto Op = std::make_unique<ARMOperand>(k_Memory, Parser);
3892
- Op->Memory .BaseRegNum = BaseRegNum ;
3892
+ Op->Memory .BaseRegNum = BaseReg ;
3893
3893
Op->Memory .OffsetImm = OffsetImm;
3894
- Op->Memory .OffsetRegNum = OffsetRegNum ;
3894
+ Op->Memory .OffsetRegNum = OffsetReg ;
3895
3895
Op->Memory .ShiftType = ShiftType;
3896
3896
Op->Memory .ShiftImm = ShiftImm;
3897
3897
Op->Memory .Alignment = Alignment;
@@ -3903,10 +3903,10 @@ class ARMOperand : public MCParsedAsmOperand {
3903
3903
}
3904
3904
3905
3905
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,
3907
3907
unsigned ShiftImm, SMLoc S, SMLoc E, ARMAsmParser &Parser) {
3908
3908
auto Op = std::make_unique<ARMOperand>(k_PostIndexRegister, Parser);
3909
- Op->PostIdxReg .RegNum = RegNum ;
3909
+ Op->PostIdxReg .RegNum = Reg ;
3910
3910
Op->PostIdxReg .isAdd = isAdd;
3911
3911
Op->PostIdxReg .ShiftTy = ShiftTy;
3912
3912
Op->PostIdxReg .ShiftImm = ShiftImm;
@@ -4104,8 +4104,7 @@ void ARMOperand::print(raw_ostream &OS) const {
4104
4104
OS << " <register_list " ;
4105
4105
4106
4106
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;) {
4109
4108
OS << RegName (*I);
4110
4109
if (++I < E) OS << " , " ;
4111
4110
}
@@ -4311,11 +4310,11 @@ int ARMAsmParser::tryParseShiftRegister(OperandVector &Operands) {
4311
4310
(ARMOperand *)Operands.pop_back_val ().release ());
4312
4311
if (!PrevOp->isReg ())
4313
4312
return Error (PrevOp->getStartLoc (), " shift must be of a register" );
4314
- int SrcReg = PrevOp->getReg ();
4313
+ MCRegister SrcReg = PrevOp->getReg ();
4315
4314
4316
4315
SMLoc EndLoc;
4317
4316
int64_t Imm = 0 ;
4318
- int ShiftReg = 0 ;
4317
+ MCRegister ShiftReg;
4319
4318
if (ShiftTy == ARM_AM::rrx) {
4320
4319
// RRX Doesn't have an explicit shift amount. The encoder expects
4321
4320
// the shift register to be the same as the source register. Seems odd,
@@ -4591,8 +4590,8 @@ static unsigned getNextRegister(unsigned Reg) {
4591
4590
// Insert an <Encoding, Register> pair in an ordered vector. Return true on
4592
4591
// success, or false, if duplicate encoding found.
4593
4592
static 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) {
4596
4595
Regs.emplace_back (Enc, Reg);
4597
4596
for (auto I = Regs.rbegin (), J = I + 1 , E = Regs.rend (); J != E; ++I, ++J) {
4598
4597
if (J->first == Enc) {
@@ -4626,7 +4625,7 @@ bool ARMAsmParser::parseRegisterList(OperandVector &Operands, bool EnforceOrder,
4626
4625
// The reglist instructions have at most 16 registers, so reserve
4627
4626
// space for that many.
4628
4627
int EReg = 0 ;
4629
- SmallVector<std::pair<unsigned , unsigned >, 16 > Registers;
4628
+ SmallVector<std::pair<unsigned , MCRegister >, 16 > Registers;
4630
4629
4631
4630
// Allow Q regs and just interpret them as the two D sub-registers.
4632
4631
if (ARMMCRegisterClasses[ARM::QPRRegClassID].contains (Reg)) {
@@ -7409,9 +7408,9 @@ bool ARMAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
7409
7408
const MCRegisterClass &MRC = MRI->getRegClass (ARM::GPRRegClassID);
7410
7409
// Adjust only if Op1 is a GPR.
7411
7410
if (Op1.isReg () && MRC.contains (Op1.getReg ())) {
7412
- unsigned Reg1 = Op1.getReg ();
7411
+ MCRegister Reg1 = Op1.getReg ();
7413
7412
unsigned Rt = MRI->getEncodingValue (Reg1);
7414
- unsigned Reg2 = Op2.getReg ();
7413
+ MCRegister Reg2 = Op2.getReg ();
7415
7414
unsigned Rt2 = MRI->getEncodingValue (Reg2);
7416
7415
// Rt2 must be Rt + 1.
7417
7416
if (Rt + 1 != Rt2)
@@ -7426,7 +7425,7 @@ bool ARMAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
7426
7425
IsLoad ? " destination operands must start start at an even register"
7427
7426
: " source operands must start start at an even register" );
7428
7427
7429
- unsigned NewReg = MRI->getMatchingSuperReg (
7428
+ MCRegister NewReg = MRI->getMatchingSuperReg (
7430
7429
Reg1, ARM::gsub_0, &(MRI->getRegClass (ARM::GPRPairRegClassID)));
7431
7430
Operands[Idx] = ARMOperand::CreateReg (NewReg, Op1.getStartLoc (),
7432
7431
Op2.getEndLoc (), *this );
@@ -7464,7 +7463,7 @@ static bool checkLowRegisterList(const MCInst &Inst, unsigned OpNo,
7464
7463
bool &containsReg) {
7465
7464
containsReg = false ;
7466
7465
for (unsigned i = OpNo; i < Inst.getNumOperands (); ++i) {
7467
- unsigned OpReg = Inst.getOperand (i).getReg ();
7466
+ MCRegister OpReg = Inst.getOperand (i).getReg ();
7468
7467
if (OpReg == Reg)
7469
7468
containsReg = true ;
7470
7469
// Anything other than a low register isn't legal here.
@@ -7776,7 +7775,7 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
7776
7775
return true ;
7777
7776
break ;
7778
7777
case ARM::t2BXJ: {
7779
- const unsigned RmReg = Inst.getOperand (0 ).getReg ();
7778
+ const MCRegister RmReg = Inst.getOperand (0 ).getReg ();
7780
7779
// Rm = SP is no longer unpredictable in v8-A
7781
7780
if (RmReg == ARM::SP && !hasV8Ops ())
7782
7781
return Error (Operands[MnemonicOpsEndInd]->getStartLoc (),
@@ -8054,7 +8053,7 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
8054
8053
//
8055
8054
// Thumb LDM instructions are writeback iff the base register is not
8056
8055
// in the register list.
8057
- unsigned Rn = Inst.getOperand (0 ).getReg ();
8056
+ MCRegister Rn = Inst.getOperand (0 ).getReg ();
8058
8057
bool HasWritebackToken =
8059
8058
(static_cast <ARMOperand &>(*Operands[MnemonicOpsEndInd + 1 ])
8060
8059
.isToken () &&
@@ -8508,8 +8507,8 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
8508
8507
case ARM::t2SMLSLD:
8509
8508
case ARM::t2SMLSLDX:
8510
8509
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 ();
8513
8512
if (RdHi == RdLo) {
8514
8513
return Error (Loc,
8515
8514
" unpredictable instruction, RdHi and RdLo must be different" );
0 commit comments