[llvm] [RISCV][MC] Add support for hardcode encoding of .insn directive (PR #98030)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 8 08:56:40 PDT 2024
================
@@ -3055,17 +3057,49 @@ bool isValidInsnFormat(StringRef Format, bool AllowC) {
/// parseDirectiveInsn
/// ::= .insn [ format encoding, (operands (, operands)*) ]
+/// ::= .insn [ length, value ]
+/// ::= .insn [ value ]
bool RISCVAsmParser::parseDirectiveInsn(SMLoc L) {
MCAsmParser &Parser = getParser();
+ bool AllowC = getSTI().hasFeature(RISCV::FeatureStdExtC) ||
+ getSTI().hasFeature(RISCV::FeatureStdExtZca);
+
// Expect instruction format as identifier.
StringRef Format;
SMLoc ErrorLoc = Parser.getTok().getLoc();
- if (Parser.parseIdentifier(Format))
- return Error(ErrorLoc, "expected instruction format");
+ if (Parser.parseIdentifier(Format)) {
+ // Try parsing .insn [length], value
+ int64_t Length = 0;
+ int64_t Value = 0;
+ if (Parser.parseIntToken(
+ Value, "expected instruction format or an integer constant"))
+ return true;
+ if (Parser.parseOptionalToken(AsmToken::Comma)) {
+ Length = Value;
+ if (Parser.parseIntToken(Value, "expected an integer constant"))
+ return true;
+ }
+
+ int64_t RealLength = (Value & 3) == 3 ? 4 : 2;
----------------
topperc wrote:
Can this be `unsigned`?
https://github.com/llvm/llvm-project/pull/98030
More information about the llvm-commits
mailing list