@@ -68,9 +68,9 @@ class AVRAsmParser : public MCTargetAsmParser {
6868 ParseStatus parseMemriOperand (OperandVector &Operands);
6969
7070 bool parseOperand (OperandVector &Operands, bool maybeReg);
71- int parseRegisterName (MCRegister (*matchFn)(StringRef));
72- int parseRegisterName ();
73- int parseRegister (bool RestoreOnFailure = false );
71+ MCRegister parseRegisterName (MCRegister (*matchFn)(StringRef));
72+ MCRegister parseRegisterName ();
73+ MCRegister parseRegister (bool RestoreOnFailure = false );
7474 bool tryParseRegisterOperand (OperandVector &Operands);
7575 bool tryParseExpression (OperandVector &Operands, int64_t offset);
7676 bool tryParseRelocExpression (OperandVector &Operands);
@@ -79,7 +79,7 @@ class AVRAsmParser : public MCTargetAsmParser {
7979 unsigned validateTargetOperandClass (MCParsedAsmOperand &Op,
8080 unsigned Kind) override ;
8181
82- unsigned toDREG (unsigned Reg, unsigned From = AVR::sub_lo) {
82+ MCRegister toDREG (MCRegister Reg, unsigned From = AVR::sub_lo) {
8383 MCRegisterClass const *Class = &AVRMCRegisterClasses[AVR::DREGSRegClassID];
8484 return MRI->getMatchingSuperReg (Reg, From, Class);
8585 }
@@ -113,15 +113,15 @@ class AVROperand : public MCParsedAsmOperand {
113113public:
114114 AVROperand (StringRef Tok, SMLoc const &S)
115115 : Kind(k_Token), Tok(Tok), Start(S), End(S) {}
116- AVROperand (unsigned Reg, SMLoc const &S, SMLoc const &E)
116+ AVROperand (MCRegister Reg, SMLoc const &S, SMLoc const &E)
117117 : Kind(k_Register), RegImm({Reg, nullptr }), Start(S), End(E) {}
118118 AVROperand (MCExpr const *Imm, SMLoc const &S, SMLoc const &E)
119119 : Kind(k_Immediate), RegImm({0 , Imm}), Start(S), End(E) {}
120- AVROperand (unsigned Reg, MCExpr const *Imm, SMLoc const &S, SMLoc const &E)
120+ AVROperand (MCRegister Reg, MCExpr const *Imm, SMLoc const &S, SMLoc const &E)
121121 : Kind(k_Memri), RegImm({Reg, Imm}), Start(S), End(E) {}
122122
123123 struct RegisterImmediate {
124- unsigned Reg;
124+ MCRegister Reg;
125125 MCExpr const *Imm;
126126 };
127127 union {
@@ -210,9 +210,9 @@ class AVROperand : public MCParsedAsmOperand {
210210 return std::make_unique<AVROperand>(Str, S);
211211 }
212212
213- static std::unique_ptr<AVROperand> CreateReg (unsigned RegNum , SMLoc S,
213+ static std::unique_ptr<AVROperand> CreateReg (MCRegister Reg , SMLoc S,
214214 SMLoc E) {
215- return std::make_unique<AVROperand>(RegNum , S, E);
215+ return std::make_unique<AVROperand>(Reg , S, E);
216216 }
217217
218218 static std::unique_ptr<AVROperand> CreateImm (const MCExpr *Val, SMLoc S,
@@ -221,28 +221,28 @@ class AVROperand : public MCParsedAsmOperand {
221221 }
222222
223223 static std::unique_ptr<AVROperand>
224- CreateMemri (unsigned RegNum , const MCExpr *Val, SMLoc S, SMLoc E) {
225- return std::make_unique<AVROperand>(RegNum , Val, S, E);
224+ CreateMemri (MCRegister Reg , const MCExpr *Val, SMLoc S, SMLoc E) {
225+ return std::make_unique<AVROperand>(Reg , Val, S, E);
226226 }
227227
228228 void makeToken (StringRef Token) {
229229 Kind = k_Token;
230230 Tok = Token;
231231 }
232232
233- void makeReg (unsigned RegNo ) {
233+ void makeReg (MCRegister Reg ) {
234234 Kind = k_Register;
235- RegImm = {RegNo , nullptr };
235+ RegImm = {Reg , nullptr };
236236 }
237237
238238 void makeImm (MCExpr const *Ex) {
239239 Kind = k_Immediate;
240240 RegImm = {0 , Ex};
241241 }
242242
243- void makeMemri (unsigned RegNo , MCExpr const *Imm) {
243+ void makeMemri (MCRegister Reg , MCExpr const *Imm) {
244244 Kind = k_Memri;
245- RegImm = {RegNo , Imm};
245+ RegImm = {Reg , Imm};
246246 }
247247
248248 SMLoc getStartLoc () const override { return Start; }
@@ -346,36 +346,36 @@ bool AVRAsmParser::MatchAndEmitInstruction(SMLoc Loc, unsigned &Opcode,
346346
347347// / Parses a register name using a given matching function.
348348// / Checks for lowercase or uppercase if necessary.
349- int AVRAsmParser::parseRegisterName (MCRegister (*matchFn)(StringRef)) {
349+ MCRegister AVRAsmParser::parseRegisterName (MCRegister (*matchFn)(StringRef)) {
350350 StringRef Name = Parser.getTok ().getString ();
351351
352- int RegNum = matchFn (Name);
352+ MCRegister Reg = matchFn (Name);
353353
354354 // GCC supports case insensitive register names. Some of the AVR registers
355355 // are all lower case, some are all upper case but non are mixed. We prefer
356356 // to use the original names in the register definitions. That is why we
357357 // have to test both upper and lower case here.
358- if (RegNum == AVR::NoRegister ) {
359- RegNum = matchFn (Name.lower ());
358+ if (!Reg ) {
359+ Reg = matchFn (Name.lower ());
360360 }
361- if (RegNum == AVR::NoRegister ) {
362- RegNum = matchFn (Name.upper ());
361+ if (!Reg ) {
362+ Reg = matchFn (Name.upper ());
363363 }
364364
365- return RegNum ;
365+ return Reg ;
366366}
367367
368- int AVRAsmParser::parseRegisterName () {
369- int RegNum = parseRegisterName (&MatchRegisterName);
368+ MCRegister AVRAsmParser::parseRegisterName () {
369+ MCRegister Reg = parseRegisterName (&MatchRegisterName);
370370
371- if (RegNum == AVR::NoRegister )
372- RegNum = parseRegisterName (&MatchRegisterAltName);
371+ if (!Reg )
372+ Reg = parseRegisterName (&MatchRegisterAltName);
373373
374- return RegNum ;
374+ return Reg ;
375375}
376376
377- int AVRAsmParser::parseRegister (bool RestoreOnFailure) {
378- int RegNum = AVR::NoRegister ;
377+ MCRegister AVRAsmParser::parseRegister (bool RestoreOnFailure) {
378+ MCRegister Reg ;
379379
380380 if (Parser.getTok ().is (AsmToken::Identifier)) {
381381 // Check for register pair syntax
@@ -387,32 +387,32 @@ int AVRAsmParser::parseRegister(bool RestoreOnFailure) {
387387
388388 if (Parser.getTok ().is (AsmToken::Identifier)) {
389389 // Convert lower (even) register to DREG
390- RegNum = toDREG (parseRegisterName ());
390+ Reg = toDREG (parseRegisterName ());
391391 }
392- if (RegNum == AVR::NoRegister && RestoreOnFailure) {
392+ if (!Reg && RestoreOnFailure) {
393393 getLexer ().UnLex (std::move (ColonTok));
394394 getLexer ().UnLex (std::move (HighTok));
395395 }
396396 } else {
397- RegNum = parseRegisterName ();
397+ Reg = parseRegisterName ();
398398 }
399399 }
400- return RegNum ;
400+ return Reg ;
401401}
402402
403403bool AVRAsmParser::tryParseRegisterOperand (OperandVector &Operands) {
404- int RegNo = parseRegister ();
404+ MCRegister Reg = parseRegister ();
405405
406- if (RegNo == AVR::NoRegister )
406+ if (!Reg )
407407 return true ;
408408
409409 // Reject R0~R15 on avrtiny.
410- if (AVR::R0 <= RegNo && RegNo <= AVR::R15 &&
410+ if (AVR::R0 <= Reg && Reg <= AVR::R15 &&
411411 STI.hasFeature (AVR::FeatureTinyEncoding))
412412 return Error (Parser.getTok ().getLoc (), " invalid register on avrtiny" );
413413
414414 AsmToken const &T = Parser.getTok ();
415- Operands.push_back (AVROperand::CreateReg (RegNo , T.getLoc (), T.getEndLoc ()));
415+ Operands.push_back (AVROperand::CreateReg (Reg , T.getLoc (), T.getEndLoc ()));
416416 Parser.Lex (); // Eat register token.
417417
418418 return false ;
@@ -569,13 +569,13 @@ ParseStatus AVRAsmParser::parseMemriOperand(OperandVector &Operands) {
569569
570570 SMLoc E, S;
571571 MCExpr const *Expression;
572- int RegNo ;
572+ MCRegister Reg ;
573573
574574 // Parse register.
575575 {
576- RegNo = parseRegister ();
576+ Reg = parseRegister ();
577577
578- if (RegNo == AVR::NoRegister )
578+ if (!Reg )
579579 return ParseStatus::Failure;
580580
581581 S = SMLoc::getFromPointer (Parser.getTok ().getLoc ().getPointer () - 1 );
@@ -590,7 +590,7 @@ ParseStatus AVRAsmParser::parseMemriOperand(OperandVector &Operands) {
590590 E = SMLoc::getFromPointer (Parser.getTok ().getLoc ().getPointer () - 1 );
591591 }
592592
593- Operands.push_back (AVROperand::CreateMemri (RegNo , Expression, S, E));
593+ Operands.push_back (AVROperand::CreateMemri (Reg , Expression, S, E));
594594
595595 return ParseStatus::Success;
596596}
@@ -761,9 +761,8 @@ unsigned AVRAsmParser::validateTargetOperandClass(MCParsedAsmOperand &AsmOp,
761761
762762 std::ostringstream RegName;
763763 RegName << " r" << RegNum;
764- RegNum = MatchRegisterName (RegName.str ());
765- if (RegNum != AVR::NoRegister) {
766- Op.makeReg (RegNum);
764+ if (MCRegister Reg = MatchRegisterName (RegName.str ())) {
765+ Op.makeReg (Reg);
767766 if (validateOperandClass (Op, Expected) == Match_Success) {
768767 return Match_Success;
769768 }
@@ -776,9 +775,9 @@ unsigned AVRAsmParser::validateTargetOperandClass(MCParsedAsmOperand &AsmOp,
776775 // If the instruction uses a register pair but we got a single, lower
777776 // register we perform a "class cast".
778777 if (isSubclass (Expected, MCK_DREGS)) {
779- unsigned correspondingDREG = toDREG (Op.getReg ());
778+ MCRegister correspondingDREG = toDREG (Op.getReg ());
780779
781- if (correspondingDREG != AVR::NoRegister ) {
780+ if (correspondingDREG) {
782781 Op.makeReg (correspondingDREG);
783782 return validateOperandClass (Op, Expected);
784783 }
0 commit comments