@@ -2577,7 +2577,7 @@ ParseStatus RISCVAsmParser::parseRegListCommon(OperandVector &Operands,
2577
2577
if (parseToken (AsmToken::LCurly, " register list must start with '{'" ))
2578
2578
return ParseStatus::Failure;
2579
2579
2580
- bool IsEABI = isRVE ();
2580
+ bool IsRVE = isRVE ();
2581
2581
2582
2582
if (getLexer ().isNot (AsmToken::Identifier))
2583
2583
return Error (getLoc (), " register list must start from 'ra' or 'x1'" );
@@ -2617,46 +2617,41 @@ ParseStatus RISCVAsmParser::parseRegListCommon(OperandVector &Operands,
2617
2617
// parse case like -s1
2618
2618
if (parseOptionalToken (AsmToken::Minus)) {
2619
2619
StringRef EndName = getLexer ().getTok ().getIdentifier ();
2620
- // FIXME: the register mapping and checks of EABI is wrong
2620
+ // FIXME: the register mapping and checks of RVE is wrong
2621
2621
RegEnd = matchRegisterNameHelper (EndName);
2622
2622
if (!(RegEnd == RISCV::X9 ||
2623
2623
(RegEnd >= RISCV::X18 && RegEnd <= RISCV::X27)))
2624
2624
return Error (getLoc (), " invalid register" );
2625
- if (IsEABI && RegEnd != RISCV::X9)
2626
- return Error (getLoc (), " contiguous register list of EABI can only be "
2627
- " 's0-s1' or 'x8-x9' pair" );
2628
2625
getLexer ().Lex ();
2629
2626
}
2630
2627
2631
- if (!IsEABI) {
2632
- // parse extra part like ', x18[-x20]' for XRegList
2633
- if (parseOptionalToken (AsmToken::Comma)) {
2634
- if (RegEnd != RISCV::X9)
2635
- return Error (
2636
- getLoc (),
2637
- " first contiguous registers pair of register list must be 'x8-x9'" );
2628
+ // parse extra part like ', x18[-x20]' for XRegList
2629
+ if (parseOptionalToken (AsmToken::Comma)) {
2630
+ if (RegEnd != RISCV::X9)
2631
+ return Error (
2632
+ getLoc (),
2633
+ " first contiguous registers pair of register list must be 'x8-x9'" );
2638
2634
2639
- // parse ', x18' for extra part
2640
- if (getLexer ().isNot (AsmToken::Identifier))
2635
+ // parse ', x18' for extra part
2636
+ if (getLexer ().isNot (AsmToken::Identifier) || IsRVE)
2637
+ return Error (getLoc (), " invalid register" );
2638
+ StringRef EndName = getLexer ().getTok ().getIdentifier ();
2639
+ RegEnd = MatchRegisterName (EndName);
2640
+ if (RegEnd != RISCV::X18)
2641
+ return Error (getLoc (),
2642
+ " second contiguous registers pair of register list "
2643
+ " must start from 'x18'" );
2644
+ getLexer ().Lex ();
2645
+
2646
+ // parse '-x20' for extra part
2647
+ if (parseOptionalToken (AsmToken::Minus)) {
2648
+ if (getLexer ().isNot (AsmToken::Identifier) || IsRVE)
2641
2649
return Error (getLoc (), " invalid register" );
2642
- StringRef EndName = getLexer ().getTok ().getIdentifier ();
2650
+ EndName = getLexer ().getTok ().getIdentifier ();
2643
2651
RegEnd = MatchRegisterName (EndName);
2644
- if (RegEnd != RISCV::X18)
2645
- return Error (getLoc (),
2646
- " second contiguous registers pair of register list "
2647
- " must start from 'x18'" );
2652
+ if (!(RegEnd >= RISCV::X19 && RegEnd <= RISCV::X27))
2653
+ return Error (getLoc (), " invalid register" );
2648
2654
getLexer ().Lex ();
2649
-
2650
- // parse '-x20' for extra part
2651
- if (parseOptionalToken (AsmToken::Minus)) {
2652
- if (getLexer ().isNot (AsmToken::Identifier))
2653
- return Error (getLoc (), " invalid register" );
2654
- EndName = getLexer ().getTok ().getIdentifier ();
2655
- RegEnd = MatchRegisterName (EndName);
2656
- if (!(RegEnd >= RISCV::X19 && RegEnd <= RISCV::X27))
2657
- return Error (getLoc (), " invalid register" );
2658
- getLexer ().Lex ();
2659
- }
2660
2655
}
2661
2656
}
2662
2657
@@ -2667,7 +2662,7 @@ ParseStatus RISCVAsmParser::parseRegListCommon(OperandVector &Operands,
2667
2662
if (parseToken (AsmToken::RCurly, " register list must end with '}'" ))
2668
2663
return ParseStatus::Failure;
2669
2664
2670
- auto Encode = RISCVZC::encodeRlist (RegEnd, IsEABI );
2665
+ auto Encode = RISCVZC::encodeRlist (RegEnd, IsRVE );
2671
2666
assert (Encode != RISCVZC::INVALID_RLIST);
2672
2667
if (MustIncludeS0)
2673
2668
assert (Encode != RISCVZC::RA);
0 commit comments