@@ -87,6 +87,8 @@ class RISCVAsmParser : public MCTargetAsmParser {
87
87
bool generateImmOutOfRangeError (OperandVector &Operands, uint64_t ErrorInfo,
88
88
int64_t Lower, int64_t Upper,
89
89
const Twine &Msg);
90
+ bool generateImmOutOfRangeError (SMLoc ErrorLoc, int64_t Lower, int64_t Upper,
91
+ const Twine &Msg);
90
92
91
93
bool MatchAndEmitInstruction (SMLoc IDLoc, unsigned &Opcode,
92
94
OperandVector &Operands, MCStreamer &Out,
@@ -1167,11 +1169,17 @@ unsigned RISCVAsmParser::checkTargetMatchPredicate(MCInst &Inst) {
1167
1169
return Match_Success;
1168
1170
}
1169
1171
1172
+ bool RISCVAsmParser::generateImmOutOfRangeError (
1173
+ SMLoc ErrorLoc, int64_t Lower, int64_t Upper,
1174
+ const Twine &Msg = " immediate must be an integer in the range" ) {
1175
+ return Error (ErrorLoc, Msg + " [" + Twine (Lower) + " , " + Twine (Upper) + " ]" );
1176
+ }
1177
+
1170
1178
bool RISCVAsmParser::generateImmOutOfRangeError (
1171
1179
OperandVector &Operands, uint64_t ErrorInfo, int64_t Lower, int64_t Upper,
1172
1180
const Twine &Msg = " immediate must be an integer in the range" ) {
1173
1181
SMLoc ErrorLoc = ((RISCVOperand &)*Operands[ErrorInfo]).getStartLoc ();
1174
- return Error (ErrorLoc, Msg + " [ " + Twine ( Lower) + " , " + Twine ( Upper) + " ] " );
1182
+ return generateImmOutOfRangeError (ErrorLoc, Lower, Upper, Msg );
1175
1183
}
1176
1184
1177
1185
bool RISCVAsmParser::MatchAndEmitInstruction (SMLoc IDLoc, unsigned &Opcode,
@@ -1563,8 +1571,9 @@ RISCVAsmParser::parseInsnDirectiveOpcode(OperandVector &Operands) {
1563
1571
break ;
1564
1572
}
1565
1573
1566
- Error (S, " opcode must be a valid opcode name or an immediate in the range "
1567
- " [0, 127]" );
1574
+ generateImmOutOfRangeError (S, 0 , 127 ,
1575
+ " opcode must be a valid opcode name or an "
1576
+ " immediate in the range" );
1568
1577
return MatchOperand_ParseFail;
1569
1578
}
1570
1579
@@ -1624,8 +1633,9 @@ RISCVAsmParser::parseInsnCDirectiveOpcode(OperandVector &Operands) {
1624
1633
}
1625
1634
}
1626
1635
1627
- Error (S, " opcode must be a valid opcode name or an immediate in the range "
1628
- " [0, 2]" );
1636
+ generateImmOutOfRangeError (S, 0 , 2 ,
1637
+ " opcode must be a valid opcode name or an "
1638
+ " immediate in the range" );
1629
1639
return MatchOperand_ParseFail;
1630
1640
}
1631
1641
@@ -1660,8 +1670,7 @@ RISCVAsmParser::parseCSRSystemRegister(OperandVector &Operands) {
1660
1670
}
1661
1671
}
1662
1672
1663
- Twine Msg = " immediate must be an integer in the range" ;
1664
- Error (S, Msg + " [" + Twine (0 ) + " , " + Twine ((1 << 12 ) - 1 ) + " ]" );
1673
+ generateImmOutOfRangeError (S, 0 , (1 << 12 ) - 1 );
1665
1674
return MatchOperand_ParseFail;
1666
1675
}
1667
1676
case AsmToken::Identifier: {
@@ -1688,15 +1697,14 @@ RISCVAsmParser::parseCSRSystemRegister(OperandVector &Operands) {
1688
1697
return MatchOperand_Success;
1689
1698
}
1690
1699
1691
- Twine Msg = " operand must be a valid system register name "
1692
- " or an integer in the range " ;
1693
- Error (S, Msg + " [ " + Twine ( 0 ) + " , " + Twine (( 1 << 12 ) - 1 ) + " ] " );
1700
+ generateImmOutOfRangeError (S, 0 , ( 1 << 12 ) - 1 ,
1701
+ " operand must be a valid system register name "
1702
+ " or an integer in the range " );
1694
1703
return MatchOperand_ParseFail;
1695
1704
}
1696
1705
case AsmToken::Percent: {
1697
1706
// Discard operand with modifier.
1698
- Twine Msg = " immediate must be an integer in the range" ;
1699
- Error (S, Msg + " [" + Twine (0 ) + " , " + Twine ((1 << 12 ) - 1 ) + " ]" );
1707
+ generateImmOutOfRangeError (S, 0 , (1 << 12 ) - 1 );
1700
1708
return MatchOperand_ParseFail;
1701
1709
}
1702
1710
}
0 commit comments