blob: 138bf79ebe492daa9c8fa1f44d40e601efe5a27a [file] [log] [blame]
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* Assembly Matcher Source Fragment *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
#ifdef GET_ASSEMBLER_HEADER
#undef GET_ASSEMBLER_HEADER
// This should be included into the middle of the declaration of
// your subclasses implementation of MCTargetAsmParser.
FeatureBitset ComputeAvailableFeatures(const FeatureBitset &FB) const;
void convertToMCInst(unsigned Kind, MCInst &Inst, unsigned Opcode,
const OperandVector &Operands,
const SmallBitVector &OptionalOperandsMask);
void convertToMapAndConstraints(unsigned Kind,
const OperandVector &Operands) override;
unsigned MatchInstructionImpl(const OperandVector &Operands,
MCInst &Inst,
uint64_t &ErrorInfo,
FeatureBitset &MissingFeatures,
bool matchingInlineAsm,
unsigned VariantID = 0);
unsigned MatchInstructionImpl(const OperandVector &Operands,
MCInst &Inst,
uint64_t &ErrorInfo,
bool matchingInlineAsm,
unsigned VariantID = 0) {
FeatureBitset MissingFeatures;
return MatchInstructionImpl(Operands, Inst, ErrorInfo, MissingFeatures,
matchingInlineAsm, VariantID);
}
OperandMatchResultTy MatchOperandParserImpl(
OperandVector &Operands,
StringRef Mnemonic,
bool ParseForAllFeatures = false);
OperandMatchResultTy tryCustomParseOperand(
OperandVector &Operands,
unsigned MCK);
#endif // GET_ASSEMBLER_HEADER_INFO
#ifdef GET_OPERAND_DIAGNOSTIC_TYPES
#undef GET_OPERAND_DIAGNOSTIC_TYPES
Match_InvalidBareSymbol,
Match_InvalidCLUIImm,
Match_InvalidCSRSystemRegister,
Match_InvalidCallSymbol,
Match_InvalidFRMArg,
Match_InvalidFenceArg,
Match_InvalidImmXLenLI,
Match_InvalidImmZero,
Match_InvalidPseudoJumpSymbol,
Match_InvalidRnumArg,
Match_InvalidSImm10Lsb0000NonZero,
Match_InvalidSImm12,
Match_InvalidSImm12Lsb0,
Match_InvalidSImm12Lsb00000,
Match_InvalidSImm13Lsb0,
Match_InvalidSImm21Lsb0JAL,
Match_InvalidSImm5,
Match_InvalidSImm5Plus1,
Match_InvalidSImm6,
Match_InvalidSImm6NonZero,
Match_InvalidSImm9Lsb0,
Match_InvalidTPRelAddSymbol,
Match_InvalidUImm10Lsb00NonZero,
Match_InvalidUImm2,
Match_InvalidUImm20AUIPC,
Match_InvalidUImm20LUI,
Match_InvalidUImm3,
Match_InvalidUImm5,
Match_InvalidUImm7,
Match_InvalidUImm7Lsb00,
Match_InvalidUImm8Lsb00,
Match_InvalidUImm8Lsb000,
Match_InvalidUImm9Lsb000,
Match_InvalidUImmLog2XLen,
Match_InvalidUImmLog2XLenHalf,
Match_InvalidUImmLog2XLenNonZero,
Match_InvalidVMaskRegister,
Match_InvalidVTypeI,
END_OPERAND_DIAGNOSTIC_TYPES
#endif // GET_OPERAND_DIAGNOSTIC_TYPES
#ifdef GET_REGISTER_MATCHER
#undef GET_REGISTER_MATCHER
// Bits for subtarget features that participate in instruction matching.
enum SubtargetFeatureBits : uint8_t {
Feature_HasStdExtMBit = 9,
Feature_HasStdExtMOrZmmulBit = 10,
Feature_HasStdExtABit = 1,
Feature_HasStdExtFBit = 7,
Feature_HasStdExtDBit = 6,
Feature_HasStdExtHBit = 8,
Feature_HasStdExtZihintpauseBit = 34,
Feature_HasStdExtZihintntlBit = 33,
Feature_HasStdExtZfhminBit = 25,
Feature_HasStdExtZfhBit = 23,
Feature_HasStdExtZfhOrZfhminBit = 24,
Feature_HasStdExtZfinxBit = 26,
Feature_HasStdExtZdinxBit = 22,
Feature_HasStdExtZhinxminBit = 29,
Feature_HasStdExtZhinxBit = 27,
Feature_HasStdExtZhinxOrZhinxminBit = 28,
Feature_HasStdExtCBit = 2,
Feature_HasStdExtZbaBit = 13,
Feature_HasStdExtZbbBit = 14,
Feature_HasStdExtZbcBit = 16,
Feature_HasStdExtZbsBit = 21,
Feature_HasStdExtZbkbBit = 18,
Feature_HasStdExtZbkxBit = 20,
Feature_HasStdExtZbbOrZbkbBit = 15,
Feature_HasStdExtZbkcBit = 19,
Feature_HasStdExtZbcOrZbkcBit = 17,
Feature_HasStdExtZkndBit = 35,
Feature_HasStdExtZkneBit = 37,
Feature_HasStdExtZkndOrZkneBit = 36,
Feature_HasStdExtZknhBit = 38,
Feature_HasStdExtZksedBit = 40,
Feature_HasStdExtZkshBit = 41,
Feature_HasStdExtZkrBit = 39,
Feature_HasStdExtCOrZcaBit = 3,
Feature_HasStdExtCOrZcdBit = 4,
Feature_HasStdExtCOrZcfBit = 5,
Feature_HasRVCHintsBit = 0,
Feature_HasVInstructionsBit = 43,
Feature_HasVInstructionsI64Bit = 45,
Feature_HasVInstructionsAnyFBit = 44,
Feature_HasStdExtZicbomBit = 30,
Feature_HasStdExtZicbozBit = 32,
Feature_HasStdExtZicbopBit = 31,
Feature_HasStdExtSvinvalBit = 11,
Feature_HasStdExtZtsoBit = 42,
Feature_HasStdExtZawrsBit = 12,
Feature_HasVendorXVentanaCondOpsBit = 47,
Feature_HasVendorXTHeadVdotBit = 46,
Feature_IsRV64Bit = 50,
Feature_IsRV32Bit = 48,
Feature_IsRV32EBit = 49,
};
static unsigned MatchRegisterName(StringRef Name) {
switch (Name.size()) {
default: break;
case 2: // 66 strings to match.
switch (Name[0]) {
default: break;
case 'f': // 30 strings to match.
switch (Name[1]) {
default: break;
case '0': // 3 strings to match.
return 72; // "f0"
case '1': // 3 strings to match.
return 73; // "f1"
case '2': // 3 strings to match.
return 74; // "f2"
case '3': // 3 strings to match.
return 75; // "f3"
case '4': // 3 strings to match.
return 76; // "f4"
case '5': // 3 strings to match.
return 77; // "f5"
case '6': // 3 strings to match.
return 78; // "f6"
case '7': // 3 strings to match.
return 79; // "f7"
case '8': // 3 strings to match.
return 80; // "f8"
case '9': // 3 strings to match.
return 81; // "f9"
}
break;
case 'v': // 21 strings to match.
switch (Name[1]) {
default: break;
case '0': // 4 strings to match.
return 8; // "v0"
case '1': // 1 string to match.
return 9; // "v1"
case '2': // 2 strings to match.
return 10; // "v2"
case '3': // 1 string to match.
return 11; // "v3"
case '4': // 3 strings to match.
return 12; // "v4"
case '5': // 1 string to match.
return 13; // "v5"
case '6': // 2 strings to match.
return 14; // "v6"
case '7': // 1 string to match.
return 15; // "v7"
case '8': // 4 strings to match.
return 16; // "v8"
case '9': // 1 string to match.
return 17; // "v9"
case 'l': // 1 string to match.
return 3; // "vl"
}
break;
case 'x': // 15 strings to match.
switch (Name[1]) {
default: break;
case '0': // 2 strings to match.
return 40; // "x0"
case '1': // 1 string to match.
return 41; // "x1"
case '2': // 2 strings to match.
return 42; // "x2"
case '3': // 1 string to match.
return 43; // "x3"
case '4': // 2 strings to match.
return 44; // "x4"
case '5': // 1 string to match.
return 45; // "x5"
case '6': // 2 strings to match.
return 46; // "x6"
case '7': // 1 string to match.
return 47; // "x7"
case '8': // 2 strings to match.
return 48; // "x8"
case '9': // 1 string to match.
return 49; // "x9"
}
break;
}
break;
case 3: // 140 strings to match.
switch (Name[0]) {
default: break;
case 'f': // 67 strings to match.
switch (Name[1]) {
default: break;
case '1': // 30 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 82; // "f10"
case '1': // 3 strings to match.
return 83; // "f11"
case '2': // 3 strings to match.
return 84; // "f12"
case '3': // 3 strings to match.
return 85; // "f13"
case '4': // 3 strings to match.
return 86; // "f14"
case '5': // 3 strings to match.
return 87; // "f15"
case '6': // 3 strings to match.
return 88; // "f16"
case '7': // 3 strings to match.
return 89; // "f17"
case '8': // 3 strings to match.
return 90; // "f18"
case '9': // 3 strings to match.
return 91; // "f19"
}
break;
case '2': // 30 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 92; // "f20"
case '1': // 3 strings to match.
return 93; // "f21"
case '2': // 3 strings to match.
return 94; // "f22"
case '3': // 3 strings to match.
return 95; // "f23"
case '4': // 3 strings to match.
return 96; // "f24"
case '5': // 3 strings to match.
return 97; // "f25"
case '6': // 3 strings to match.
return 98; // "f26"
case '7': // 3 strings to match.
return 99; // "f27"
case '8': // 3 strings to match.
return 100; // "f28"
case '9': // 3 strings to match.
return 101; // "f29"
}
break;
case '3': // 6 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 102; // "f30"
case '1': // 3 strings to match.
return 103; // "f31"
}
break;
case 'r': // 1 string to match.
if (Name[2] != 'm')
break;
return 2; // "frm"
}
break;
case 'v': // 40 strings to match.
switch (Name[1]) {
default: break;
case '1': // 18 strings to match.
switch (Name[2]) {
default: break;
case '0': // 2 strings to match.
return 18; // "v10"
case '1': // 1 string to match.
return 19; // "v11"
case '2': // 3 strings to match.
return 20; // "v12"
case '3': // 1 string to match.
return 21; // "v13"
case '4': // 2 strings to match.
return 22; // "v14"
case '5': // 1 string to match.
return 23; // "v15"
case '6': // 4 strings to match.
return 24; // "v16"
case '7': // 1 string to match.
return 25; // "v17"
case '8': // 2 strings to match.
return 26; // "v18"
case '9': // 1 string to match.
return 27; // "v19"
}
break;
case '2': // 19 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 28; // "v20"
case '1': // 1 string to match.
return 29; // "v21"
case '2': // 2 strings to match.
return 30; // "v22"
case '3': // 1 string to match.
return 31; // "v23"
case '4': // 4 strings to match.
return 32; // "v24"
case '5': // 1 string to match.
return 33; // "v25"
case '6': // 2 strings to match.
return 34; // "v26"
case '7': // 1 string to match.
return 35; // "v27"
case '8': // 3 strings to match.
return 36; // "v28"
case '9': // 1 string to match.
return 37; // "v29"
}
break;
case '3': // 3 strings to match.
switch (Name[2]) {
default: break;
case '0': // 2 strings to match.
return 38; // "v30"
case '1': // 1 string to match.
return 39; // "v31"
}
break;
}
break;
case 'x': // 33 strings to match.
switch (Name[1]) {
default: break;
case '1': // 15 strings to match.
switch (Name[2]) {
default: break;
case '0': // 2 strings to match.
return 50; // "x10"
case '1': // 1 string to match.
return 51; // "x11"
case '2': // 2 strings to match.
return 52; // "x12"
case '3': // 1 string to match.
return 53; // "x13"
case '4': // 2 strings to match.
return 54; // "x14"
case '5': // 1 string to match.
return 55; // "x15"
case '6': // 2 strings to match.
return 56; // "x16"
case '7': // 1 string to match.
return 57; // "x17"
case '8': // 2 strings to match.
return 58; // "x18"
case '9': // 1 string to match.
return 59; // "x19"
}
break;
case '2': // 15 strings to match.
switch (Name[2]) {
default: break;
case '0': // 2 strings to match.
return 60; // "x20"
case '1': // 1 string to match.
return 61; // "x21"
case '2': // 2 strings to match.
return 62; // "x22"
case '3': // 1 string to match.
return 63; // "x23"
case '4': // 2 strings to match.
return 64; // "x24"
case '5': // 1 string to match.
return 65; // "x25"
case '6': // 2 strings to match.
return 66; // "x26"
case '7': // 1 string to match.
return 67; // "x27"
case '8': // 2 strings to match.
return 68; // "x28"
case '9': // 1 string to match.
return 69; // "x29"
}
break;
case '3': // 3 strings to match.
switch (Name[2]) {
default: break;
case '0': // 2 strings to match.
return 70; // "x30"
case '1': // 1 string to match.
return 71; // "x31"
}
break;
}
break;
}
break;
case 4: // 1 string to match.
if (memcmp(Name.data()+0, "vxrm", 4) != 0)
break;
return 6; // "vxrm"
case 5: // 3 strings to match.
if (Name[0] != 'v')
break;
switch (Name[1]) {
default: break;
case 'l': // 1 string to match.
if (memcmp(Name.data()+2, "enb", 3) != 0)
break;
return 4; // "vlenb"
case 't': // 1 string to match.
if (memcmp(Name.data()+2, "ype", 3) != 0)
break;
return 5; // "vtype"
case 'x': // 1 string to match.
if (memcmp(Name.data()+2, "sat", 3) != 0)
break;
return 7; // "vxsat"
}
break;
case 6: // 1 string to match.
if (memcmp(Name.data()+0, "fflags", 6) != 0)
break;
return 1; // "fflags"
}
return 0;
}
static unsigned MatchRegisterAltName(StringRef Name) {
switch (Name.size()) {
default: break;
case 2: // 154 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 12 strings to match.
switch (Name[1]) {
default: break;
case '0': // 2 strings to match.
return 50; // "a0"
case '1': // 1 string to match.
return 51; // "a1"
case '2': // 2 strings to match.
return 52; // "a2"
case '3': // 1 string to match.
return 53; // "a3"
case '4': // 2 strings to match.
return 54; // "a4"
case '5': // 1 string to match.
return 55; // "a5"
case '6': // 2 strings to match.
return 56; // "a6"
case '7': // 1 string to match.
return 57; // "a7"
}
break;
case 'f': // 2 strings to match.
if (Name[1] != 'p')
break;
return 48; // "fp"
case 'g': // 1 string to match.
if (Name[1] != 'p')
break;
return 43; // "gp"
case 'r': // 1 string to match.
if (Name[1] != 'a')
break;
return 41; // "ra"
case 's': // 17 strings to match.
switch (Name[1]) {
default: break;
case '0': // 2 strings to match.
return 48; // "s0"
case '1': // 1 string to match.
return 49; // "s1"
case '2': // 2 strings to match.
return 58; // "s2"
case '3': // 1 string to match.
return 59; // "s3"
case '4': // 2 strings to match.
return 60; // "s4"
case '5': // 1 string to match.
return 61; // "s5"
case '6': // 2 strings to match.
return 62; // "s6"
case '7': // 1 string to match.
return 63; // "s7"
case '8': // 2 strings to match.
return 64; // "s8"
case '9': // 1 string to match.
return 65; // "s9"
case 'p': // 2 strings to match.
return 42; // "sp"
}
break;
case 't': // 12 strings to match.
switch (Name[1]) {
default: break;
case '0': // 1 string to match.
return 45; // "t0"
case '1': // 2 strings to match.
return 46; // "t1"
case '2': // 1 string to match.
return 47; // "t2"
case '3': // 2 strings to match.
return 68; // "t3"
case '4': // 1 string to match.
return 69; // "t4"
case '5': // 2 strings to match.
return 70; // "t5"
case '6': // 1 string to match.
return 71; // "t6"
case 'p': // 2 strings to match.
return 44; // "tp"
}
break;
case 'v': // 109 strings to match.
switch (Name[1]) {
default: break;
case '0': // 15 strings to match.
return 8; // "v0"
case '1': // 8 strings to match.
return 9; // "v1"
case '2': // 12 strings to match.
return 10; // "v2"
case '3': // 8 strings to match.
return 11; // "v3"
case '4': // 14 strings to match.
return 12; // "v4"
case '5': // 8 strings to match.
return 13; // "v5"
case '6': // 12 strings to match.
return 14; // "v6"
case '7': // 8 strings to match.
return 15; // "v7"
case '8': // 15 strings to match.
return 16; // "v8"
case '9': // 8 strings to match.
return 17; // "v9"
case 'l': // 1 string to match.
return 3; // "vl"
}
break;
}
break;
case 3: // 284 strings to match.
switch (Name[0]) {
default: break;
case 'f': // 84 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 24 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 82; // "fa0"
case '1': // 3 strings to match.
return 83; // "fa1"
case '2': // 3 strings to match.
return 84; // "fa2"
case '3': // 3 strings to match.
return 85; // "fa3"
case '4': // 3 strings to match.
return 86; // "fa4"
case '5': // 3 strings to match.
return 87; // "fa5"
case '6': // 3 strings to match.
return 88; // "fa6"
case '7': // 3 strings to match.
return 89; // "fa7"
}
break;
case 's': // 30 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 80; // "fs0"
case '1': // 3 strings to match.
return 81; // "fs1"
case '2': // 3 strings to match.
return 90; // "fs2"
case '3': // 3 strings to match.
return 91; // "fs3"
case '4': // 3 strings to match.
return 92; // "fs4"
case '5': // 3 strings to match.
return 93; // "fs5"
case '6': // 3 strings to match.
return 94; // "fs6"
case '7': // 3 strings to match.
return 95; // "fs7"
case '8': // 3 strings to match.
return 96; // "fs8"
case '9': // 3 strings to match.
return 97; // "fs9"
}
break;
case 't': // 30 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 72; // "ft0"
case '1': // 3 strings to match.
return 73; // "ft1"
case '2': // 3 strings to match.
return 74; // "ft2"
case '3': // 3 strings to match.
return 75; // "ft3"
case '4': // 3 strings to match.
return 76; // "ft4"
case '5': // 3 strings to match.
return 77; // "ft5"
case '6': // 3 strings to match.
return 78; // "ft6"
case '7': // 3 strings to match.
return 79; // "ft7"
case '8': // 3 strings to match.
return 100; // "ft8"
case '9': // 3 strings to match.
return 101; // "ft9"
}
break;
}
break;
case 's': // 3 strings to match.
if (Name[1] != '1')
break;
switch (Name[2]) {
default: break;
case '0': // 2 strings to match.
return 66; // "s10"
case '1': // 1 string to match.
return 67; // "s11"
}
break;
case 'v': // 197 strings to match.
switch (Name[1]) {
default: break;
case '1': // 105 strings to match.
switch (Name[2]) {
default: break;
case '0': // 12 strings to match.
return 18; // "v10"
case '1': // 8 strings to match.
return 19; // "v11"
case '2': // 14 strings to match.
return 20; // "v12"
case '3': // 8 strings to match.
return 21; // "v13"
case '4': // 12 strings to match.
return 22; // "v14"
case '5': // 8 strings to match.
return 23; // "v15"
case '6': // 15 strings to match.
return 24; // "v16"
case '7': // 8 strings to match.
return 25; // "v17"
case '8': // 12 strings to match.
return 26; // "v18"
case '9': // 8 strings to match.
return 27; // "v19"
}
break;
case '2': // 88 strings to match.
switch (Name[2]) {
default: break;
case '0': // 14 strings to match.
return 28; // "v20"
case '1': // 8 strings to match.
return 29; // "v21"
case '2': // 12 strings to match.
return 30; // "v22"
case '3': // 8 strings to match.
return 31; // "v23"
case '4': // 15 strings to match.
return 32; // "v24"
case '5': // 7 strings to match.
return 33; // "v25"
case '6': // 9 strings to match.
return 34; // "v26"
case '7': // 5 strings to match.
return 35; // "v27"
case '8': // 7 strings to match.
return 36; // "v28"
case '9': // 3 strings to match.
return 37; // "v29"
}
break;
case '3': // 4 strings to match.
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
return 38; // "v30"
case '1': // 1 string to match.
return 39; // "v31"
}
break;
}
break;
}
break;
case 4: // 15 strings to match.
switch (Name[0]) {
default: break;
case 'f': // 12 strings to match.
switch (Name[1]) {
default: break;
case 's': // 6 strings to match.
if (Name[2] != '1')
break;
switch (Name[3]) {
default: break;
case '0': // 3 strings to match.
return 98; // "fs10"
case '1': // 3 strings to match.
return 99; // "fs11"
}
break;
case 't': // 6 strings to match.
if (Name[2] != '1')
break;
switch (Name[3]) {
default: break;
case '0': // 3 strings to match.
return 102; // "ft10"
case '1': // 3 strings to match.
return 103; // "ft11"
}
break;
}
break;
case 'v': // 1 string to match.
if (memcmp(Name.data()+1, "xrm", 3) != 0)
break;
return 6; // "vxrm"
case 'z': // 2 strings to match.
if (memcmp(Name.data()+1, "ero", 3) != 0)
break;
return 40; // "zero"
}
break;
case 5: // 3 strings to match.
if (Name[0] != 'v')
break;
switch (Name[1]) {
default: break;
case 'l': // 1 string to match.
if (memcmp(Name.data()+2, "enb", 3) != 0)
break;
return 4; // "vlenb"
case 't': // 1 string to match.
if (memcmp(Name.data()+2, "ype", 3) != 0)
break;
return 5; // "vtype"
case 'x': // 1 string to match.
if (memcmp(Name.data()+2, "sat", 3) != 0)
break;
return 7; // "vxsat"
}
break;
}
return 0;
}
#endif // GET_REGISTER_MATCHER
#ifdef GET_SUBTARGET_FEATURE_NAME
#undef GET_SUBTARGET_FEATURE_NAME
// User-level names for subtarget features that participate in
// instruction matching.
static const char *getSubtargetFeatureName(uint64_t Val) {
switch(Val) {
case Feature_HasStdExtMBit: return "'M' (Integer Multiplication and Division)";
case Feature_HasStdExtMOrZmmulBit: return "'M' (Integer Multiplication and Division) or 'Zmmul' (Integer Multiplication)";
case Feature_HasStdExtABit: return "'A' (Atomic Instructions)";
case Feature_HasStdExtFBit: return "'F' (Single-Precision Floating-Point)";
case Feature_HasStdExtDBit: return "'D' (Double-Precision Floating-Point)";
case Feature_HasStdExtHBit: return "'H' (Hypervisor)";
case Feature_HasStdExtZihintpauseBit: return "'Zihintpause' (Pause Hint)";
case Feature_HasStdExtZihintntlBit: return "'Zihintntl' (Non-Temporal Locality Hints)";
case Feature_HasStdExtZfhminBit: return "'Zfhmin' (Half-Precision Floating-Point Minimal)";
case Feature_HasStdExtZfhBit: return "'Zfh' (Half-Precision Floating-Point)";
case Feature_HasStdExtZfhOrZfhminBit: return "'Zfh' (Half-Precision Floating-Point) or 'Zfhmin' (Half-Precision Floating-Point Minimal)";
case Feature_HasStdExtZfinxBit: return "'Zfinx' (Float in Integer)";
case Feature_HasStdExtZdinxBit: return "'Zdinx' (Double in Integer)";
case Feature_HasStdExtZhinxminBit: return "'Zhinxmin' (Half Float in Integer Minimal)";
case Feature_HasStdExtZhinxBit: return "'Zhinx' (Half Float in Integer)";
case Feature_HasStdExtZhinxOrZhinxminBit: return "'Zhinx' (Half Float in Integer) or 'Zhinxmin' (Half Float in Integer Minimal)";
case Feature_HasStdExtCBit: return "'C' (Compressed Instructions)";
case Feature_HasStdExtZbaBit: return "'Zba' (Address Generation Instructions)";
case Feature_HasStdExtZbbBit: return "'Zbb' (Basic Bit-Manipulation)";
case Feature_HasStdExtZbcBit: return "'Zbc' (Carry-Less Multiplication)";
case Feature_HasStdExtZbsBit: return "'Zbs' (Single-Bit Instructions)";
case Feature_HasStdExtZbkbBit: return "'Zbkb' (Bitmanip instructions for Cryptography)";
case Feature_HasStdExtZbkxBit: return "'Zbkx' (Crossbar permutation instructions)";
case Feature_HasStdExtZbbOrZbkbBit: return "'Zbb' (Basic Bit-Manipulation) or 'Zbkb' (Bitmanip instructions for Cryptography)";
case Feature_HasStdExtZbkcBit: return "'Zbkc' (Carry-less multiply instructions for Cryptography)";
case Feature_HasStdExtZbcOrZbkcBit: return "'Zbc' (Carry-Less Multiplication) or 'Zbkc' (Carry-less multiply instructions for Cryptography)";
case Feature_HasStdExtZkndBit: return "'Zknd' (NIST Suite: AES Decryption)";
case Feature_HasStdExtZkneBit: return "'Zkne' (NIST Suite: AES Encryption)";
case Feature_HasStdExtZkndOrZkneBit: return "'Zknd' (NIST Suite: AES Decryption) or 'Zkne' (NIST Suite: AES Encryption)";
case Feature_HasStdExtZknhBit: return "'Zknh' (NIST Suite: Hash Function Instructions)";
case Feature_HasStdExtZksedBit: return "'Zksed' (ShangMi Suite: SM4 Block Cipher Instructions)";
case Feature_HasStdExtZkshBit: return "'Zksh' (ShangMi Suite: SM3 Hash Function Instructions)";
case Feature_HasStdExtZkrBit: return "'Zkr' (Entropy Source Extension)";
case Feature_HasStdExtCOrZcaBit: return "'C' (Compressed Instructions) or 'Zca' (part of the C extension, excluding compressed floating point loads/stores)";
case Feature_HasStdExtCOrZcdBit: return "'C' (Compressed Instructions) or 'Zcd' (Compressed Double-Precision Floating-Point Instructions)";
case Feature_HasStdExtCOrZcfBit: return "'C' (Compressed Instructions) or 'Zcf' (Compressed Single-Precision Floating-Point Instructions)";
case Feature_HasRVCHintsBit: return "RVC Hint Instructions";
case Feature_HasVInstructionsBit: return "'V' (Vector Extension for Application Processors), 'Zve32x' or 'Zve64x' (Vector Extensions for Embedded Processors)";
case Feature_HasVInstructionsI64Bit: return "'V' (Vector Extension for Application Processors) or 'Zve64x' (Vector Extensions for Embedded Processors)";
case Feature_HasVInstructionsAnyFBit: return "'V' (Vector Extension for Application Processors), 'Zve32f', 'Zve64f' or 'Zve64d' (Vector Extensions for Embedded Processors)";
case Feature_HasStdExtZicbomBit: return "'Zicbom' (Cache-Block Management Instructions)";
case Feature_HasStdExtZicbozBit: return "'Zicboz' (Cache-Block Zero Instructions)";
case Feature_HasStdExtZicbopBit: return "'Zicbop' (Cache-Block Prefetch Instructions)";
case Feature_HasStdExtSvinvalBit: return "'Svinval' (Fine-Grained Address-Translation Cache Invalidation)";
case Feature_HasStdExtZtsoBit: return "'Ztso' (Memory Model - Total Store Order)";
case Feature_HasStdExtZawrsBit: return "'Zawrs' (Wait on Reservation Set)";
case Feature_HasVendorXVentanaCondOpsBit: return "'XVentanaCondOps' (Ventana Conditional Ops)";
case Feature_HasVendorXTHeadVdotBit: return "'xtheadvdot' (T-Head Vector Extensions for Dot)";
case Feature_IsRV64Bit: return "RV64I Base Instruction Set";
case Feature_IsRV32Bit: return "RV32I Base Instruction Set";
case Feature_IsRV32EBit: return "";
default: return "(unknown)";
}
}
#endif // GET_SUBTARGET_FEATURE_NAME
#ifdef GET_MATCHER_IMPLEMENTATION
#undef GET_MATCHER_IMPLEMENTATION
static void applyMnemonicAliases(StringRef &Mnemonic, const FeatureBitset &Features, unsigned VariantID) {
switch (VariantID) {
case 0:
switch (Mnemonic.size()) {
default: break;
case 4: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "move", 4) != 0)
break;
Mnemonic = "mv"; // "move"
return;
case 5: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "scall", 5) != 0)
break;
Mnemonic = "ecall"; // "scall"
return;
case 6: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "sbreak", 6) != 0)
break;
Mnemonic = "ebreak"; // "sbreak"
return;
case 7: // 2 strings to match.
if (memcmp(Mnemonic.data()+0, "fmv.", 4) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 's': // 1 string to match.
if (memcmp(Mnemonic.data()+5, ".x", 2) != 0)
break;
if (Features.test(Feature_HasStdExtFBit)) // "fmv.s.x"
Mnemonic = "fmv.w.x";
return;
case 'x': // 1 string to match.
if (memcmp(Mnemonic.data()+5, ".s", 2) != 0)
break;
if (Features.test(Feature_HasStdExtFBit)) // "fmv.x.s"
Mnemonic = "fmv.x.w";
return;
}
break;
}
break;
}
switch (Mnemonic.size()) {
default: break;
case 4: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "move", 4) != 0)
break;
Mnemonic = "mv"; // "move"
return;
case 5: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "scall", 5) != 0)
break;
Mnemonic = "ecall"; // "scall"
return;
case 6: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "sbreak", 6) != 0)
break;
Mnemonic = "ebreak"; // "sbreak"
return;
case 7: // 2 strings to match.
if (memcmp(Mnemonic.data()+0, "fmv.", 4) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 's': // 1 string to match.
if (memcmp(Mnemonic.data()+5, ".x", 2) != 0)
break;
if (Features.test(Feature_HasStdExtFBit)) // "fmv.s.x"
Mnemonic = "fmv.w.x";
return;
case 'x': // 1 string to match.
if (memcmp(Mnemonic.data()+5, ".s", 2) != 0)
break;
if (Features.test(Feature_HasStdExtFBit)) // "fmv.x.s"
Mnemonic = "fmv.x.w";
return;
}
break;
}
}
enum {
Tie0_1_1,
};
static const uint8_t TiedAsmOperandTable[][3] = {
/* Tie0_1_1 */ { 0, 1, 1 },
};
namespace {
enum OperatorConversionKind {
CVT_Done,
CVT_Reg,
CVT_Tied,
CVT_95_addImmOperands,
CVT_95_Reg,
CVT_95_addRegOperands,
CVT_regX0,
CVT_imm_95_0,
CVT_regX5,
CVT_regX2,
CVT_regX3,
CVT_regX4,
CVT_95_addCSRSystemRegisterOperands,
CVT_imm_95_7,
CVT_95_addFRMArgOperands,
CVT_imm_95_15,
CVT_95_addFenceArgOperands,
CVT_imm_95_3,
CVT_imm_95_1,
CVT_imm_95_2,
CVT_regX1,
CVT_imm_95__MINUS_1,
CVT_imm_95_3072,
CVT_imm_95_3200,
CVT_imm_95_3074,
CVT_imm_95_3202,
CVT_imm_95_3073,
CVT_imm_95_3201,
CVT_95_addRegOperands_95_defaultMaskRegOp,
CVT_reg0,
CVT_95_addVTypeIOperands,
CVT_imm_95_255,
CVT_NUM_CONVERTERS
};
enum InstructionConversionKind {
Convert__InsnDirectiveOpcode1_0__UImm31_1__Reg1_2__Reg1_3__SImm13Lsb01_4,
Convert__Reg1_2__InsnDirectiveOpcode1_0__UImm31_1__Reg1_3__SImm121_4,
Convert__Reg1_2__InsnDirectiveOpcode1_0__UImm31_1__Reg1_5__SImm121_3,
Convert__Reg1_1__InsnDirectiveOpcode1_0__SImm21Lsb0JAL1_2,
Convert__Reg1_3__InsnDirectiveOpcode1_0__UImm31_1__UImm71_2__Reg1_4__Reg1_5,
Convert__Reg1_3__InsnDirectiveOpcode1_0__UImm31_1__UImm21_2__Reg1_4__Reg1_5__Reg1_6,
Convert__InsnDirectiveOpcode1_0__UImm31_1__Reg1_2__Reg1_5__SImm121_3,
Convert__Reg1_1__InsnDirectiveOpcode1_0__UImm20LUI1_2,
Convert__Reg1_0__Reg1_1__Reg1_2,
Convert__Reg1_0__Reg1_1__SImm121_2,
Convert__Reg1_0__Reg1_1__Reg1_2__TPRelAddSymbol1_3,
Convert__Reg1_0__Reg1_1__Reg1_2__UImm21_3,
Convert__Reg1_0__Reg1_1,
Convert__Reg1_0__Reg1_1__RnumArg1_2,
Convert__Reg1_0__ZeroOffsetMemOpOperand1_2__Reg1_1,
Convert__Reg1_0__UImm20AUIPC1_1,
Convert__Reg1_0__Reg1_1__UImmLog2XLen1_2,
Convert__Reg1_0__Reg1_1__SImm13Lsb01_2,
Convert__Reg1_0__regX0__SImm13Lsb01_1,
Convert__Reg1_1__Reg1_0__SImm13Lsb01_2,
Convert__regX0__Reg1_0__SImm13Lsb01_1,
Convert__Reg1_0__Tie0_1_1__Reg1_1,
Convert__Reg1_0__Tie0_1_1__ImmZero1_1,
Convert__Reg1_0__Tie0_1_1__SImm6NonZero1_1,
Convert__Reg1_0__Tie0_1_1__SImm10Lsb0000NonZero1_1,
Convert__Reg1_0__Reg1_1__UImm10Lsb00NonZero1_2,
Convert__Reg1_0__Tie0_1_1__SImm61_1,
Convert__Reg1_0__SImm9Lsb01_1,
Convert_NoOperands,
Convert__Reg1_0__Reg1_2__imm_95_0,
Convert__Reg1_0__Reg1_3__UImm8Lsb0001_1,
Convert__Reg1_0__Reg1_3__UImm9Lsb0001_1,
Convert__Reg1_0__Reg1_3__UImm7Lsb001_1,
Convert__Reg1_0__Reg1_3__UImm8Lsb001_1,
Convert__SImm12Lsb01_0,
Convert__Reg1_0,
Convert__Reg1_0__SImm61_1,
Convert__Reg1_0__CLUIImm1_1,
Convert__SImm6NonZero1_0,
Convert__regX0__Tie0_1_1__regX5,
Convert__regX0__Tie0_1_1__regX2,
Convert__regX0__Tie0_1_1__regX3,
Convert__regX0__Tie0_1_1__regX4,
Convert__Reg1_0__Tie0_1_1__UImmLog2XLenNonZero1_1,
Convert__Reg1_0__Tie0_1_1,
Convert__CallSymbol1_0,
Convert__Reg1_0__CallSymbol1_1,
Convert__ZeroOffsetMemOpOperand1_0,
Convert__regX0__CSRSystemRegister1_0__Reg1_1,
Convert__regX0__CSRSystemRegister1_0__UImm51_1,
Convert__Reg1_0__CSRSystemRegister1_1__regX0,
Convert__Reg1_0__CSRSystemRegister1_1__Reg1_2,
Convert__Reg1_0__CSRSystemRegister1_1__UImm51_2,
Convert__imm_95_0__imm_95_0,
Convert__Reg1_0__Reg1_1__Reg1_1,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_1,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_1,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_1,
Convert__Reg1_0__Reg1_1__Reg1_2__imm_95_7,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__imm_95_7,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__imm_95_7,
Convert__Reg1_0__Reg1_1__Reg1_2__FRMArg1_3,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__FRMArg1_3,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__FRMArg1_3,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__imm_95_7,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__FRMArg1_3,
Convert__Reg1_0__GPRF64AsFPR1_1,
Convert__Reg1_0__GPRPF64AsFPR1_1,
Convert__Reg1_0__GPRAsFPR1_1,
Convert__GPRF64AsFPR1_0__GPRAsFPR1_1,
Convert__Reg1_0__Reg1_1__imm_95_7,
Convert__GPRF64AsFPR1_0__Reg1_1__imm_95_7,
Convert__Reg1_0__Reg1_1__FRMArg1_2,
Convert__GPRF64AsFPR1_0__Reg1_1__FRMArg1_2,
Convert__GPRPF64AsFPR1_0__GPRAsFPR1_1,
Convert__GPRF64AsFPR1_0__Reg1_1,
Convert__GPRPF64AsFPR1_0__Reg1_1,
Convert__GPRAsFPR1_0__GPRF64AsFPR1_1__imm_95_7,
Convert__GPRAsFPR1_0__GPRF64AsFPR1_1__FRMArg1_2,
Convert__GPRAsFPR1_0__Reg1_1__imm_95_7,
Convert__GPRAsFPR1_0__Reg1_1__FRMArg1_2,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__imm_95_7,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__FRMArg1_2,
Convert__Reg1_0__GPRF64AsFPR1_1__imm_95_7,
Convert__Reg1_0__GPRF64AsFPR1_1__FRMArg1_2,
Convert__Reg1_0__GPRAsFPR1_1__imm_95_7,
Convert__Reg1_0__GPRAsFPR1_1__FRMArg1_2,
Convert__GPRAsFPR1_0__GPRPF64AsFPR1_1__imm_95_7,
Convert__GPRAsFPR1_0__GPRPF64AsFPR1_1__FRMArg1_2,
Convert__GPRAsFPR1_0__GPRAsFPR1_1,
Convert__Reg1_0__GPRPF64AsFPR1_1__imm_95_7,
Convert__Reg1_0__GPRPF64AsFPR1_1__FRMArg1_2,
Convert__imm_95_15__imm_95_15,
Convert__FenceArg1_0__FenceArg1_1,
Convert__Reg1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2,
Convert__Reg1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2,
Convert__Reg1_0__GPRAsFPR1_1__GPRAsFPR1_2,
Convert__Reg1_0__Reg1_2__Reg1_1,
Convert__Reg1_0__GPRF64AsFPR1_2__GPRF64AsFPR1_1,
Convert__Reg1_0__GPRPF64AsFPR1_2__GPRPF64AsFPR1_1,
Convert__Reg1_0__GPRAsFPR1_2__GPRAsFPR1_1,
Convert__Reg1_2__Reg1_0__BareSymbol1_1,
Convert__Reg1_0__Reg1_3__SImm121_1,
Convert__Reg1_0__Reg1_1__Reg1_2__Reg1_3__imm_95_7,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__GPRF64AsFPR1_3__imm_95_7,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__GPRPF64AsFPR1_3__imm_95_7,
Convert__Reg1_0__Reg1_1__Reg1_2__Reg1_3__FRMArg1_4,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__GPRF64AsFPR1_3__FRMArg1_4,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__GPRPF64AsFPR1_3__FRMArg1_4,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__GPRAsFPR1_3__imm_95_7,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__GPRAsFPR1_3__FRMArg1_4,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2,
Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2,
Convert__Reg1_0__imm_95_3__regX0,
Convert__Reg1_0__imm_95_1__regX0,
Convert__Reg1_0__imm_95_2__regX0,
Convert__regX0__imm_95_3__Reg1_0,
Convert__Reg1_0__imm_95_3__Reg1_1,
Convert__regX0__imm_95_1__Reg1_0,
Convert__Reg1_0__imm_95_1__Reg1_1,
Convert__regX0__imm_95_1__UImm51_0,
Convert__Reg1_0__imm_95_1__UImm51_1,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__imm_95_7,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__imm_95_7,
Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__FRMArg1_2,
Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__FRMArg1_2,
Convert__regX0__imm_95_2__Reg1_0,
Convert__Reg1_0__imm_95_2__Reg1_1,
Convert__regX0__imm_95_2__UImm51_0,
Convert__Reg1_0__imm_95_2__UImm51_1,
Convert__regX0__regX0,
Convert__Reg1_0__regX0,
Convert__Reg1_0__ZeroOffsetMemOpOperand1_1,
Convert__regX0__SImm21Lsb0JAL1_0,
Convert__regX1__SImm21Lsb0JAL1_0,
Convert__Reg1_0__SImm21Lsb0JAL1_1,
Convert__regX1__Reg1_0__imm_95_0,
Convert__Reg1_0__Reg1_1__imm_95_0,
Convert__regX1__Reg1_0__SImm121_1,
Convert__regX1__Reg1_2__SImm121_0,
Convert__regX0__Reg1_0__imm_95_0,
Convert__regX0__Reg1_0__SImm121_1,
Convert__regX0__Reg1_2__SImm121_0,
Convert__Reg1_1__PseudoJumpSymbol1_0,
Convert__Reg1_0__BareSymbol1_1,
Convert__Reg1_0__regX0__SImm121_1,
Convert__Reg1_0__ImmXLenLI1_1,
Convert__Reg1_0__UImm20LUI1_1,
Convert__Reg1_0__regX0__Reg1_1,
Convert__regX0__regX0__imm_95_0,
Convert__Reg1_0__Reg1_1__imm_95__MINUS_1,
Convert__regX0__regX0__regX5,
Convert__regX0__regX0__regX2,
Convert__regX0__regX0__regX3,
Convert__regX0__regX0__regX4,
Convert__imm_95_1__imm_95_0,
Convert__Reg1_2__SImm12Lsb000001_0,
Convert__Reg1_0__imm_95_3072__regX0,
Convert__Reg1_0__imm_95_3200__regX0,
Convert__Reg1_0__imm_95_3074__regX0,
Convert__Reg1_0__imm_95_3202__regX0,
Convert__Reg1_0__imm_95_3073__regX0,
Convert__Reg1_0__imm_95_3201__regX0,
Convert__regX0__regX1__imm_95_0,
Convert__Reg1_0__Reg1_1__UImm51_2,
Convert__Reg1_0__Reg1_1__imm_95_1,
Convert__Reg1_0__Reg1_1__regX0,
Convert__Reg1_0__Reg1_1__Reg1_2__RVVMaskRegOpOperand1_3,
Convert__Reg1_0__Reg1_1__SImm51_2__imm_95_0,
Convert__Reg1_0__Reg1_1__Reg1_2__imm_95_0,
Convert__Reg1_0__Reg1_1__SImm51_2__RVVMaskRegOpOperand1_3,
Convert__Reg1_0__Reg1_1__RVVMaskRegOpOperand1_2,
Convert__Reg1_0__Reg1_1__Reg1_1__reg0,
Convert__Reg1_0__Reg1_1__Reg1_1__RVVMaskRegOpOperand1_2,
Convert__Reg1_0__RVVMaskRegOpOperand1_1,
Convert__Reg1_0__Reg1_2,
Convert__Reg1_0__Reg1_2__RVVMaskRegOpOperand1_4,
Convert__Reg1_0__Reg1_2__Reg1_4__RVVMaskRegOpOperand1_5,
Convert__Reg1_0__Reg1_1__SImm51_2,
Convert__Reg1_0__Reg1_0__Reg1_0,
Convert__Reg1_0__Reg1_2__Reg1_1__RVVMaskRegOpOperand1_3,
Convert__Reg1_0__Reg1_1__SImm5Plus11_2__RVVMaskRegOpOperand1_3,
Convert__Reg1_0__Reg1_4__Reg1_1__Reg1_2__RVVMaskRegOpOperand1_3,
Convert__Reg1_0__SImm51_1,
Convert__Reg1_0__Reg1_1__UImm51_2__RVVMaskRegOpOperand1_3,
Convert__Reg1_0__Reg1_1__regX0__reg0,
Convert__Reg1_0__Reg1_1__regX0__RVVMaskRegOpOperand1_2,
Convert__Reg1_0__Reg1_1__imm_95__MINUS_1__reg0,
Convert__Reg1_0__Reg1_1__imm_95__MINUS_1__RVVMaskRegOpOperand1_2,
Convert__Reg1_0__UImm51_1__VTypeI101_2,
Convert__Reg1_0__Reg1_1__VTypeI111_2,
Convert__Reg1_0__Reg1_1__imm_95_255,
CVT_NUM_SIGNATURES
};
} // end anonymous namespace
static const uint8_t ConversionTable[CVT_NUM_SIGNATURES][15] = {
// Convert__InsnDirectiveOpcode1_0__UImm31_1__Reg1_2__Reg1_3__SImm13Lsb01_4
{ CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 2, CVT_95_Reg, 3, CVT_95_Reg, 4, CVT_95_addImmOperands, 5, CVT_Done },
// Convert__Reg1_2__InsnDirectiveOpcode1_0__UImm31_1__Reg1_3__SImm121_4
{ CVT_95_Reg, 3, CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 2, CVT_95_Reg, 4, CVT_95_addImmOperands, 5, CVT_Done },
// Convert__Reg1_2__InsnDirectiveOpcode1_0__UImm31_1__Reg1_5__SImm121_3
{ CVT_95_Reg, 3, CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 2, CVT_95_Reg, 6, CVT_95_addImmOperands, 4, CVT_Done },
// Convert__Reg1_1__InsnDirectiveOpcode1_0__SImm21Lsb0JAL1_2
{ CVT_95_Reg, 2, CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_3__InsnDirectiveOpcode1_0__UImm31_1__UImm71_2__Reg1_4__Reg1_5
{ CVT_95_Reg, 4, CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 2, CVT_95_addImmOperands, 3, CVT_95_Reg, 5, CVT_95_Reg, 6, CVT_Done },
// Convert__Reg1_3__InsnDirectiveOpcode1_0__UImm31_1__UImm21_2__Reg1_4__Reg1_5__Reg1_6
{ CVT_95_Reg, 4, CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 2, CVT_95_addImmOperands, 3, CVT_95_Reg, 5, CVT_95_Reg, 6, CVT_95_Reg, 7, CVT_Done },
// Convert__InsnDirectiveOpcode1_0__UImm31_1__Reg1_2__Reg1_5__SImm121_3
{ CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 2, CVT_95_Reg, 3, CVT_95_Reg, 6, CVT_95_addImmOperands, 4, CVT_Done },
// Convert__Reg1_1__InsnDirectiveOpcode1_0__UImm20LUI1_2
{ CVT_95_Reg, 2, CVT_95_addImmOperands, 1, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__SImm121_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__TPRelAddSymbol1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_addImmOperands, 4, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__UImm21_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_addImmOperands, 4, CVT_Done },
// Convert__Reg1_0__Reg1_1
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__RnumArg1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__ZeroOffsetMemOpOperand1_2__Reg1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 3, CVT_95_Reg, 2, CVT_Done },
// Convert__Reg1_0__UImm20AUIPC1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__UImmLog2XLen1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__SImm13Lsb01_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__regX0__SImm13Lsb01_1
{ CVT_95_Reg, 1, CVT_regX0, 0, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_1__Reg1_0__SImm13Lsb01_2
{ CVT_95_Reg, 2, CVT_95_Reg, 1, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__regX0__Reg1_0__SImm13Lsb01_1
{ CVT_regX0, 0, CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Tie0_1_1__Reg1_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_95_Reg, 2, CVT_Done },
// Convert__Reg1_0__Tie0_1_1__ImmZero1_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Tie0_1_1__SImm6NonZero1_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Tie0_1_1__SImm10Lsb0000NonZero1_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__UImm10Lsb00NonZero1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__Tie0_1_1__SImm61_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__SImm9Lsb01_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert_NoOperands
{ CVT_Done },
// Convert__Reg1_0__Reg1_2__imm_95_0
{ CVT_95_Reg, 1, CVT_95_Reg, 3, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_3__UImm8Lsb0001_1
{ CVT_95_Reg, 1, CVT_95_Reg, 4, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_3__UImm9Lsb0001_1
{ CVT_95_Reg, 1, CVT_95_Reg, 4, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_3__UImm7Lsb001_1
{ CVT_95_Reg, 1, CVT_95_Reg, 4, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_3__UImm8Lsb001_1
{ CVT_95_Reg, 1, CVT_95_Reg, 4, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__SImm12Lsb01_0
{ CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0
{ CVT_95_Reg, 1, CVT_Done },
// Convert__Reg1_0__SImm61_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__CLUIImm1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__SImm6NonZero1_0
{ CVT_95_addImmOperands, 1, CVT_Done },
// Convert__regX0__Tie0_1_1__regX5
{ CVT_regX0, 0, CVT_Tied, Tie0_1_1, CVT_regX5, 0, CVT_Done },
// Convert__regX0__Tie0_1_1__regX2
{ CVT_regX0, 0, CVT_Tied, Tie0_1_1, CVT_regX2, 0, CVT_Done },
// Convert__regX0__Tie0_1_1__regX3
{ CVT_regX0, 0, CVT_Tied, Tie0_1_1, CVT_regX3, 0, CVT_Done },
// Convert__regX0__Tie0_1_1__regX4
{ CVT_regX0, 0, CVT_Tied, Tie0_1_1, CVT_regX4, 0, CVT_Done },
// Convert__Reg1_0__Tie0_1_1__UImmLog2XLenNonZero1_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Tie0_1_1
{ CVT_95_Reg, 1, CVT_Tied, Tie0_1_1, CVT_Done },
// Convert__CallSymbol1_0
{ CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0__CallSymbol1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__ZeroOffsetMemOpOperand1_0
{ CVT_95_addRegOperands, 1, CVT_Done },
// Convert__regX0__CSRSystemRegister1_0__Reg1_1
{ CVT_regX0, 0, CVT_95_addCSRSystemRegisterOperands, 1, CVT_95_Reg, 2, CVT_Done },
// Convert__regX0__CSRSystemRegister1_0__UImm51_1
{ CVT_regX0, 0, CVT_95_addCSRSystemRegisterOperands, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__CSRSystemRegister1_1__regX0
{ CVT_95_Reg, 1, CVT_95_addCSRSystemRegisterOperands, 2, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__CSRSystemRegister1_1__Reg1_2
{ CVT_95_Reg, 1, CVT_95_addCSRSystemRegisterOperands, 2, CVT_95_Reg, 3, CVT_Done },
// Convert__Reg1_0__CSRSystemRegister1_1__UImm51_2
{ CVT_95_Reg, 1, CVT_95_addCSRSystemRegisterOperands, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__imm_95_0__imm_95_0
{ CVT_imm_95_0, 0, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_1
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 2, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_1
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_1
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_1
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__imm_95_7
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_imm_95_7, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__FRMArg1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_addFRMArgOperands, 4, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__FRMArg1_3
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addFRMArgOperands, 4, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__FRMArg1_3
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addFRMArgOperands, 4, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__FRMArg1_3
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addFRMArgOperands, 4, CVT_Done },
// Convert__Reg1_0__GPRF64AsFPR1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__GPRPF64AsFPR1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__GPRAsFPR1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRAsFPR1_1
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95_7
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRF64AsFPR1_0__Reg1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_Reg, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__FRMArg1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRF64AsFPR1_0__Reg1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_Reg, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRAsFPR1_1
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__GPRF64AsFPR1_0__Reg1_1
{ CVT_95_addRegOperands, 1, CVT_95_Reg, 2, CVT_Done },
// Convert__GPRPF64AsFPR1_0__Reg1_1
{ CVT_95_addRegOperands, 1, CVT_95_Reg, 2, CVT_Done },
// Convert__GPRAsFPR1_0__GPRF64AsFPR1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRAsFPR1_0__GPRF64AsFPR1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRAsFPR1_0__Reg1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_Reg, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRAsFPR1_0__Reg1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_Reg, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__Reg1_0__GPRF64AsFPR1_1__imm_95_7
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__Reg1_0__GPRF64AsFPR1_1__FRMArg1_2
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__Reg1_0__GPRAsFPR1_1__imm_95_7
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__Reg1_0__GPRAsFPR1_1__FRMArg1_2
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRAsFPR1_0__GPRPF64AsFPR1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRAsFPR1_0__GPRPF64AsFPR1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__GPRPF64AsFPR1_1__imm_95_7
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__Reg1_0__GPRPF64AsFPR1_1__FRMArg1_2
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__imm_95_15__imm_95_15
{ CVT_imm_95_15, 0, CVT_imm_95_15, 0, CVT_Done },
// Convert__FenceArg1_0__FenceArg1_1
{ CVT_95_addFenceArgOperands, 1, CVT_95_addFenceArgOperands, 2, CVT_Done },
// Convert__Reg1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_Done },
// Convert__Reg1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_Done },
// Convert__Reg1_0__GPRAsFPR1_1__GPRAsFPR1_2
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_2__Reg1_1
{ CVT_95_Reg, 1, CVT_95_Reg, 3, CVT_95_Reg, 2, CVT_Done },
// Convert__Reg1_0__GPRF64AsFPR1_2__GPRF64AsFPR1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__GPRPF64AsFPR1_2__GPRPF64AsFPR1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_0__GPRAsFPR1_2__GPRAsFPR1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__Reg1_2__Reg1_0__BareSymbol1_1
{ CVT_95_Reg, 3, CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_3__SImm121_1
{ CVT_95_Reg, 1, CVT_95_Reg, 4, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__Reg1_3__imm_95_7
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_Reg, 4, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__GPRF64AsFPR1_3__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 4, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__GPRPF64AsFPR1_3__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 4, CVT_imm_95_7, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__Reg1_3__FRMArg1_4
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_Reg, 4, CVT_95_addFRMArgOperands, 5, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2__GPRF64AsFPR1_3__FRMArg1_4
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 4, CVT_95_addFRMArgOperands, 5, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2__GPRPF64AsFPR1_3__FRMArg1_4
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 4, CVT_95_addFRMArgOperands, 5, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__GPRAsFPR1_3__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 4, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2__GPRAsFPR1_3__FRMArg1_4
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_95_addRegOperands, 4, CVT_95_addFRMArgOperands, 5, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__GPRF64AsFPR1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__GPRPF64AsFPR1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_Done },
// Convert__GPRAsFPR1_0__GPRAsFPR1_1__GPRAsFPR1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addRegOperands, 3, CVT_Done },
// Convert__Reg1_0__imm_95_3__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_1__regX0
{ CVT_95_Reg, 1, CVT_imm_95_1, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_2__regX0
{ CVT_95_Reg, 1, CVT_imm_95_2, 0, CVT_regX0, 0, CVT_Done },
// Convert__regX0__imm_95_3__Reg1_0
{ CVT_regX0, 0, CVT_imm_95_3, 0, CVT_95_Reg, 1, CVT_Done },
// Convert__Reg1_0__imm_95_3__Reg1_1
{ CVT_95_Reg, 1, CVT_imm_95_3, 0, CVT_95_Reg, 2, CVT_Done },
// Convert__regX0__imm_95_1__Reg1_0
{ CVT_regX0, 0, CVT_imm_95_1, 0, CVT_95_Reg, 1, CVT_Done },
// Convert__Reg1_0__imm_95_1__Reg1_1
{ CVT_95_Reg, 1, CVT_imm_95_1, 0, CVT_95_Reg, 2, CVT_Done },
// Convert__regX0__imm_95_1__UImm51_0
{ CVT_regX0, 0, CVT_imm_95_1, 0, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0__imm_95_1__UImm51_1
{ CVT_95_Reg, 1, CVT_imm_95_1, 0, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__imm_95_7
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_imm_95_7, 0, CVT_Done },
// Convert__GPRF64AsFPR1_0__GPRF64AsFPR1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__GPRPF64AsFPR1_0__GPRPF64AsFPR1_1__FRMArg1_2
{ CVT_95_addRegOperands, 1, CVT_95_addRegOperands, 2, CVT_95_addFRMArgOperands, 3, CVT_Done },
// Convert__regX0__imm_95_2__Reg1_0
{ CVT_regX0, 0, CVT_imm_95_2, 0, CVT_95_Reg, 1, CVT_Done },
// Convert__Reg1_0__imm_95_2__Reg1_1
{ CVT_95_Reg, 1, CVT_imm_95_2, 0, CVT_95_Reg, 2, CVT_Done },
// Convert__regX0__imm_95_2__UImm51_0
{ CVT_regX0, 0, CVT_imm_95_2, 0, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0__imm_95_2__UImm51_1
{ CVT_95_Reg, 1, CVT_imm_95_2, 0, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__regX0__regX0
{ CVT_regX0, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__regX0
{ CVT_95_Reg, 1, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__ZeroOffsetMemOpOperand1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands, 2, CVT_Done },
// Convert__regX0__SImm21Lsb0JAL1_0
{ CVT_regX0, 0, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__regX1__SImm21Lsb0JAL1_0
{ CVT_regX1, 0, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0__SImm21Lsb0JAL1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__regX1__Reg1_0__imm_95_0
{ CVT_regX1, 0, CVT_95_Reg, 1, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95_0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95_0, 0, CVT_Done },
// Convert__regX1__Reg1_0__SImm121_1
{ CVT_regX1, 0, CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__regX1__Reg1_2__SImm121_0
{ CVT_regX1, 0, CVT_95_Reg, 3, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__regX0__Reg1_0__imm_95_0
{ CVT_regX0, 0, CVT_95_Reg, 1, CVT_imm_95_0, 0, CVT_Done },
// Convert__regX0__Reg1_0__SImm121_1
{ CVT_regX0, 0, CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__regX0__Reg1_2__SImm121_0
{ CVT_regX0, 0, CVT_95_Reg, 3, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_1__PseudoJumpSymbol1_0
{ CVT_95_Reg, 2, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0__BareSymbol1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__regX0__SImm121_1
{ CVT_95_Reg, 1, CVT_regX0, 0, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__ImmXLenLI1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__UImm20LUI1_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__regX0__Reg1_1
{ CVT_95_Reg, 1, CVT_regX0, 0, CVT_95_Reg, 2, CVT_Done },
// Convert__regX0__regX0__imm_95_0
{ CVT_regX0, 0, CVT_regX0, 0, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95__MINUS_1
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95__MINUS_1, 0, CVT_Done },
// Convert__regX0__regX0__regX5
{ CVT_regX0, 0, CVT_regX0, 0, CVT_regX5, 0, CVT_Done },
// Convert__regX0__regX0__regX2
{ CVT_regX0, 0, CVT_regX0, 0, CVT_regX2, 0, CVT_Done },
// Convert__regX0__regX0__regX3
{ CVT_regX0, 0, CVT_regX0, 0, CVT_regX3, 0, CVT_Done },
// Convert__regX0__regX0__regX4
{ CVT_regX0, 0, CVT_regX0, 0, CVT_regX4, 0, CVT_Done },
// Convert__imm_95_1__imm_95_0
{ CVT_imm_95_1, 0, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_2__SImm12Lsb000001_0
{ CVT_95_Reg, 3, CVT_95_addImmOperands, 1, CVT_Done },
// Convert__Reg1_0__imm_95_3072__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3072, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_3200__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3200, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_3074__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3074, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_3202__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3202, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_3073__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3073, 0, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__imm_95_3201__regX0
{ CVT_95_Reg, 1, CVT_imm_95_3201, 0, CVT_regX0, 0, CVT_Done },
// Convert__regX0__regX1__imm_95_0
{ CVT_regX0, 0, CVT_regX1, 0, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__UImm51_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95_1
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95_1, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__regX0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_regX0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__RVVMaskRegOpOperand1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_addRegOperands_95_defaultMaskRegOp, 4, CVT_Done },
// Convert__Reg1_0__Reg1_1__SImm51_2__imm_95_0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_2__imm_95_0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_imm_95_0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__SImm51_2__RVVMaskRegOpOperand1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_95_addRegOperands_95_defaultMaskRegOp, 4, CVT_Done },
// Convert__Reg1_0__Reg1_1__RVVMaskRegOpOperand1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addRegOperands_95_defaultMaskRegOp, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_1__reg0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 2, CVT_reg0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__Reg1_1__RVVMaskRegOpOperand1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_Reg, 2, CVT_95_addRegOperands_95_defaultMaskRegOp, 3, CVT_Done },
// Convert__Reg1_0__RVVMaskRegOpOperand1_1
{ CVT_95_Reg, 1, CVT_95_addRegOperands_95_defaultMaskRegOp, 2, CVT_Done },
// Convert__Reg1_0__Reg1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 3, CVT_Done },
// Convert__Reg1_0__Reg1_2__RVVMaskRegOpOperand1_4
{ CVT_95_Reg, 1, CVT_95_Reg, 3, CVT_95_addRegOperands_95_defaultMaskRegOp, 5, CVT_Done },
// Convert__Reg1_0__Reg1_2__Reg1_4__RVVMaskRegOpOperand1_5
{ CVT_95_Reg, 1, CVT_95_Reg, 3, CVT_95_Reg, 5, CVT_95_addRegOperands_95_defaultMaskRegOp, 6, CVT_Done },
// Convert__Reg1_0__Reg1_1__SImm51_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_0__Reg1_0
{ CVT_95_Reg, 1, CVT_95_Reg, 1, CVT_95_Reg, 1, CVT_Done },
// Convert__Reg1_0__Reg1_2__Reg1_1__RVVMaskRegOpOperand1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 3, CVT_95_Reg, 2, CVT_95_addRegOperands_95_defaultMaskRegOp, 4, CVT_Done },
// Convert__Reg1_0__Reg1_1__SImm5Plus11_2__RVVMaskRegOpOperand1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_95_addRegOperands_95_defaultMaskRegOp, 4, CVT_Done },
// Convert__Reg1_0__Reg1_4__Reg1_1__Reg1_2__RVVMaskRegOpOperand1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 5, CVT_95_Reg, 2, CVT_95_Reg, 3, CVT_95_addRegOperands_95_defaultMaskRegOp, 4, CVT_Done },
// Convert__Reg1_0__SImm51_1
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_Done },
// Convert__Reg1_0__Reg1_1__UImm51_2__RVVMaskRegOpOperand1_3
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addImmOperands, 3, CVT_95_addRegOperands_95_defaultMaskRegOp, 4, CVT_Done },
// Convert__Reg1_0__Reg1_1__regX0__reg0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_regX0, 0, CVT_reg0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__regX0__RVVMaskRegOpOperand1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_regX0, 0, CVT_95_addRegOperands_95_defaultMaskRegOp, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95__MINUS_1__reg0
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95__MINUS_1, 0, CVT_reg0, 0, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95__MINUS_1__RVVMaskRegOpOperand1_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95__MINUS_1, 0, CVT_95_addRegOperands_95_defaultMaskRegOp, 3, CVT_Done },
// Convert__Reg1_0__UImm51_1__VTypeI101_2
{ CVT_95_Reg, 1, CVT_95_addImmOperands, 2, CVT_95_addVTypeIOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__VTypeI111_2
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_95_addVTypeIOperands, 3, CVT_Done },
// Convert__Reg1_0__Reg1_1__imm_95_255
{ CVT_95_Reg, 1, CVT_95_Reg, 2, CVT_imm_95_255, 0, CVT_Done },
};
void RISCVAsmParser::
convertToMCInst(unsigned Kind, MCInst &Inst, unsigned Opcode,
const OperandVector &Operands,
const SmallBitVector &OptionalOperandsMask) {
assert(Kind < CVT_NUM_SIGNATURES && "Invalid signature!");
const uint8_t *Converter = ConversionTable[Kind];
unsigned DefaultsOffset[8] = { 0 };
assert(OptionalOperandsMask.size() == 7);
for (unsigned i = 0, NumDefaults = 0; i < 7; ++i) {
DefaultsOffset[i + 1] = NumDefaults;
NumDefaults += (OptionalOperandsMask[i] ? 1 : 0);
}
unsigned OpIdx;
Inst.setOpcode(Opcode);
for (const uint8_t *p = Converter; *p; p += 2) {
OpIdx = *(p + 1) - DefaultsOffset[*(p + 1)];
switch (*p) {
default: llvm_unreachable("invalid conversion entry!");
case CVT_Reg:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addRegOperands(Inst, 1);
break;
case CVT_Tied: {
assert(OpIdx < (size_t)(std::end(TiedAsmOperandTable) -
std::begin(TiedAsmOperandTable)) &&
"Tied operand not found");
unsigned TiedResOpnd = TiedAsmOperandTable[OpIdx][0];
if (TiedResOpnd != (uint8_t)-1)
Inst.addOperand(Inst.getOperand(TiedResOpnd));
break;
}
case CVT_95_addImmOperands:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addImmOperands(Inst, 1);
break;
case CVT_95_Reg:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addRegOperands(Inst, 1);
break;
case CVT_95_addRegOperands:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addRegOperands(Inst, 1);
break;
case CVT_regX0:
Inst.addOperand(MCOperand::createReg(RISCV::X0));
break;
case CVT_imm_95_0:
Inst.addOperand(MCOperand::createImm(0));
break;
case CVT_regX5:
Inst.addOperand(MCOperand::createReg(RISCV::X5));
break;
case CVT_regX2:
Inst.addOperand(MCOperand::createReg(RISCV::X2));
break;
case CVT_regX3:
Inst.addOperand(MCOperand::createReg(RISCV::X3));
break;
case CVT_regX4:
Inst.addOperand(MCOperand::createReg(RISCV::X4));
break;
case CVT_95_addCSRSystemRegisterOperands:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addCSRSystemRegisterOperands(Inst, 1);
break;
case CVT_imm_95_7:
Inst.addOperand(MCOperand::createImm(7));
break;
case CVT_95_addFRMArgOperands:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addFRMArgOperands(Inst, 1);
break;
case CVT_imm_95_15:
Inst.addOperand(MCOperand::createImm(15));
break;
case CVT_95_addFenceArgOperands:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addFenceArgOperands(Inst, 1);
break;
case CVT_imm_95_3:
Inst.addOperand(MCOperand::createImm(3));
break;
case CVT_imm_95_1:
Inst.addOperand(MCOperand::createImm(1));
break;
case CVT_imm_95_2:
Inst.addOperand(MCOperand::createImm(2));
break;
case CVT_regX1:
Inst.addOperand(MCOperand::createReg(RISCV::X1));
break;
case CVT_imm_95__MINUS_1:
Inst.addOperand(MCOperand::createImm(-1));
break;
case CVT_imm_95_3072:
Inst.addOperand(MCOperand::createImm(3072));
break;
case CVT_imm_95_3200:
Inst.addOperand(MCOperand::createImm(3200));
break;
case CVT_imm_95_3074:
Inst.addOperand(MCOperand::createImm(3074));
break;
case CVT_imm_95_3202:
Inst.addOperand(MCOperand::createImm(3202));
break;
case CVT_imm_95_3073:
Inst.addOperand(MCOperand::createImm(3073));
break;
case CVT_imm_95_3201:
Inst.addOperand(MCOperand::createImm(3201));
break;
case CVT_95_addRegOperands_95_defaultMaskRegOp:
if (OptionalOperandsMask[*(p + 1) - 1]) {
defaultMaskRegOp()->addRegOperands(Inst, 1);
} else {
static_cast<RISCVOperand &>(*Operands[OpIdx]).addRegOperands(Inst, 1);
}
break;
case CVT_reg0:
Inst.addOperand(MCOperand::createReg(0));
break;
case CVT_95_addVTypeIOperands:
static_cast<RISCVOperand &>(*Operands[OpIdx]).addVTypeIOperands(Inst, 1);
break;
case CVT_imm_95_255:
Inst.addOperand(MCOperand::createImm(255));
break;
}
}
}
void RISCVAsmParser::
convertToMapAndConstraints(unsigned Kind,
const OperandVector &Operands) {
assert(Kind < CVT_NUM_SIGNATURES && "Invalid signature!");
unsigned NumMCOperands = 0;
const uint8_t *Converter = ConversionTable[Kind];
for (const uint8_t *p = Converter; *p; p += 2) {
switch (*p) {
default: llvm_unreachable("invalid conversion entry!");
case CVT_Reg:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("r");
++NumMCOperands;
break;
case CVT_Tied:
++NumMCOperands;
break;
case CVT_95_addImmOperands:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_95_Reg:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("r");
NumMCOperands += 1;
break;
case CVT_95_addRegOperands:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_regX0:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_imm_95_0:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_regX5:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_regX2:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_regX3:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_regX4:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_95_addCSRSystemRegisterOperands:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_imm_95_7:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_95_addFRMArgOperands:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_imm_95_15:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_95_addFenceArgOperands:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_imm_95_3:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_1:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_2:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_regX1:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_imm_95__MINUS_1:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_3072:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_3200:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_3074:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_3202:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_3073:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_imm_95_3201:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
case CVT_95_addRegOperands_95_defaultMaskRegOp:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_reg0:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
++NumMCOperands;
break;
case CVT_95_addVTypeIOperands:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("m");
NumMCOperands += 1;
break;
case CVT_imm_95_255:
Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);
Operands[*(p + 1)]->setConstraint("");
++NumMCOperands;
break;
}
}
}
namespace {
/// MatchClassKind - The kinds of classes which participate in
/// instruction matching.
enum MatchClassKind {
InvalidMatchClass = 0,
OptionalMatchClass = 1,
MCK__40_, // '('
MCK__41_, // ')'
MCK_LAST_TOKEN = MCK__41_,
MCK_Reg69, // derived register class
MCK_Reg66, // derived register class
MCK_Reg63, // derived register class
MCK_Reg60, // derived register class
MCK_Reg57, // derived register class
MCK_Reg54, // derived register class
MCK_Reg51, // derived register class
MCK_Reg48, // derived register class
MCK_Reg45, // derived register class
MCK_Reg42, // derived register class
MCK_Reg39, // derived register class
MCK_Reg30, // derived register class
MCK_Reg28, // derived register class
MCK_Reg24, // derived register class
MCK_Reg21, // derived register class
MCK_Reg18, // derived register class
MCK_GPRX0, // register class 'GPRX0'
MCK_SP, // register class 'SP'
MCK_VMV0, // register class 'VMV0,V0'
MCK_Reg36, // derived register class
MCK_VCSR, // register class 'VCSR'
MCK_VRM8NoV0, // register class 'VRM8NoV0'
MCK_Reg35, // derived register class
MCK_VRM8, // register class 'VRM8'
MCK_Reg9, // derived register class
MCK_VRN2M4NoV0, // register class 'VRN2M4NoV0'
MCK_Reg34, // derived register class
MCK_VRM4NoV0, // register class 'VRM4NoV0'
MCK_VRN2M4, // register class 'VRN2M4'
MCK_FPR32C, // register class 'FPR32C'
MCK_FPR64C, // register class 'FPR64C'
MCK_GPRC, // register class 'GPRC'
MCK_VRM4, // register class 'VRM4'
MCK_VRN4M2NoV0, // register class 'VRN4M2NoV0'
MCK_Reg33, // derived register class
MCK_VRN3M2NoV0, // register class 'VRN3M2NoV0'
MCK_VRN4M2, // register class 'VRN4M2'
MCK_Reg32, // derived register class
MCK_GPRTC, // register class 'GPRTC'
MCK_VRN2M2NoV0, // register class 'VRN2M2NoV0'
MCK_VRN3M2, // register class 'VRN3M2'
MCK_Reg31, // derived register class
MCK_VRM2NoV0, // register class 'VRM2NoV0'
MCK_VRN2M2, // register class 'VRN2M2'
MCK_GPRPF64, // register class 'GPRPF64'
MCK_VRM2, // register class 'VRM2'
MCK_VRN8M1NoV0, // register class 'VRN8M1NoV0'
MCK_VRN7M1NoV0, // register class 'VRN7M1NoV0'
MCK_VRN8M1, // register class 'VRN8M1'
MCK_GPRJALR, // register class 'GPRJALR'
MCK_VRN6M1NoV0, // register class 'VRN6M1NoV0'
MCK_VRN7M1, // register class 'VRN7M1'
MCK_VRN5M1NoV0, // register class 'VRN5M1NoV0'
MCK_VRN6M1, // register class 'VRN6M1'
MCK_VRN4M1NoV0, // register class 'VRN4M1NoV0'
MCK_VRN5M1, // register class 'VRN5M1'
MCK_VRN3M1NoV0, // register class 'VRN3M1NoV0'
MCK_VRN4M1, // register class 'VRN4M1'
MCK_GPRNoX0X2, // register class 'GPRNoX0X2'
MCK_VRN2M1NoV0, // register class 'VRN2M1NoV0'
MCK_VRN3M1, // register class 'VRN3M1'
MCK_GPRNoX0, // register class 'GPRNoX0'
MCK_VRN2M1, // register class 'VRN2M1'
MCK_VRNoV0, // register class 'VRNoV0'
MCK_FPR16, // register class 'FPR16'
MCK_FPR32, // register class 'FPR32'
MCK_FPR64, // register class 'FPR64'
MCK_GPR, // register class 'GPR,GPRF16,GPRF32,GPRF64'
MCK_VM, // register class 'VM,VR'
MCK_AnyReg, // register class 'AnyReg'
MCK_LAST_REGISTER = MCK_AnyReg,
MCK_BareSymbol, // user defined class 'BareSymbol'
MCK_CLUIImm, // user defined class 'CLUIImmAsmOperand'
MCK_CSRSystemRegister, // user defined class 'CSRSystemRegister'
MCK_CallSymbol, // user defined class 'CallSymbol'
MCK_FRMArg, // user defined class 'FRMArg'
MCK_FenceArg, // user defined class 'FenceArg'
MCK_GPRAsFPR, // user defined class 'GPRAsFPR'
MCK_GPRF64AsFPR, // user defined class 'GPRF64AsFPR'
MCK_GPRPF64AsFPR, // user defined class 'GPRPF64AsFPR'
MCK_Imm, // user defined class 'ImmAsmOperand'
MCK_ImmZero, // user defined class 'ImmZeroAsmOperand'
MCK_InsnDirectiveOpcode, // user defined class 'InsnDirectiveOpcode'
MCK_PseudoJumpSymbol, // user defined class 'PseudoJumpSymbol'
MCK_RnumArg, // user defined class 'RnumArg'
MCK_SImm5Plus1, // user defined class 'SImm5Plus1AsmOperand'
MCK_SImm21Lsb0JAL, // user defined class 'Simm21Lsb0JALAsmOperand'
MCK_TPRelAddSymbol, // user defined class 'TPRelAddSymbol'
MCK_UImmLog2XLen, // user defined class 'UImmLog2XLenAsmOperand'
MCK_UImmLog2XLenHalf, // user defined class 'UImmLog2XLenHalfAsmOperand'
MCK_UImmLog2XLenNonZero, // user defined class 'UImmLog2XLenNonZeroAsmOperand'
MCK_RVVMaskRegOpOperand, // user defined class 'VMaskAsmOperand'
MCK_ZeroOffsetMemOpOperand, // user defined class 'ZeroOffsetMemOpOperand'
MCK_UImm2, // user defined class 'anonymous_4648'
MCK_UImm3, // user defined class 'anonymous_4649'
MCK_UImm5, // user defined class 'anonymous_4650'
MCK_UImm7, // user defined class 'anonymous_4651'
MCK_SImm12, // user defined class 'anonymous_4652'
MCK_SImm13Lsb0, // user defined class 'anonymous_4653'
MCK_UImm20LUI, // user defined class 'anonymous_4654'
MCK_UImm20AUIPC, // user defined class 'anonymous_4655'
MCK_ImmXLenLI, // user defined class 'anonymous_4656'
MCK_SImm12Lsb00000, // user defined class 'anonymous_49973'
MCK_SImm6, // user defined class 'anonymous_5403'
MCK_SImm6NonZero, // user defined class 'anonymous_5404'
MCK_UImm7Lsb00, // user defined class 'anonymous_5405'
MCK_UImm8Lsb00, // user defined class 'anonymous_5406'
MCK_UImm8Lsb000, // user defined class 'anonymous_5407'
MCK_SImm9Lsb0, // user defined class 'anonymous_5408'
MCK_UImm9Lsb000, // user defined class 'anonymous_5409'
MCK_UImm10Lsb00NonZero, // user defined class 'anonymous_5410'
MCK_SImm10Lsb0000NonZero, // user defined class 'anonymous_5411'
MCK_SImm12Lsb0, // user defined class 'anonymous_5412'
MCK_VTypeI10, // user defined class 'anonymous_5639'
MCK_VTypeI11, // user defined class 'anonymous_5640'
MCK_SImm5, // user defined class 'anonymous_5641'
NumMatchClassKinds
};
} // end anonymous namespace
static unsigned getDiagKindFromRegisterClass(MatchClassKind RegisterClass) {
return MCTargetAsmParser::Match_InvalidOperand;
}
static MatchClassKind matchTokenString(StringRef Name) {
switch (Name.size()) {
default: break;
case 1: // 2 strings to match.
switch (Name[0]) {
default: break;
case '(': // 1 string to match.
return MCK__40_; // "("
case ')': // 1 string to match.
return MCK__41_; // ")"
}
break;
}
return InvalidMatchClass;
}
/// isSubclass - Compute whether \p A is a subclass of \p B.
static bool isSubclass(MatchClassKind A, MatchClassKind B) {
if (A == B)
return true;
switch (A) {
default:
return false;
case MCK_Reg69:
return B == MCK_VRN8M1;
case MCK_Reg66:
return B == MCK_VRN7M1;
case MCK_Reg63:
return B == MCK_VRN6M1;
case MCK_Reg60:
return B == MCK_VRN5M1;
case MCK_Reg57:
return B == MCK_VRN4M2;
case MCK_Reg54:
return B == MCK_VRN4M1;
case MCK_Reg51:
return B == MCK_VRN3M2;
case MCK_Reg48:
return B == MCK_VRN3M1;
case MCK_Reg45:
return B == MCK_VRN2M4;
case MCK_Reg42:
return B == MCK_VRN2M2;
case MCK_Reg39:
return B == MCK_VRN2M1;
case MCK_Reg30:
switch (B) {
default: return false;
case MCK_Reg31: return true;
case MCK_GPRPF64: return true;
}
case MCK_Reg28:
return B == MCK_GPRPF64;
case MCK_Reg24:
return B == MCK_VRM8;
case MCK_Reg21:
return B == MCK_VRM4;
case MCK_Reg18:
return B == MCK_VRM2;
case MCK_GPRX0:
switch (B) {
default: return false;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_SP:
switch (B) {
default: return false;
case MCK_GPRNoX0: return true;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VMV0:
switch (B) {
default: return false;
case MCK_VM: return true;
case MCK_AnyReg: return true;
}
case MCK_Reg36:
switch (B) {
default: return false;
case MCK_Reg35: return true;
case MCK_Reg34: return true;
case MCK_Reg33: return true;
case MCK_Reg32: return true;
case MCK_Reg31: return true;
case MCK_GPRPF64: return true;
}
case MCK_VRM8NoV0:
return B == MCK_VRM8;
case MCK_Reg35:
switch (B) {
default: return false;
case MCK_Reg33: return true;
case MCK_Reg32: return true;
case MCK_Reg31: return true;
case MCK_GPRPF64: return true;
}
case MCK_Reg9:
switch (B) {
default: return false;
case MCK_GPRC: return true;
case MCK_GPRTC: return true;
case MCK_GPRJALR: return true;
case MCK_GPRNoX0X2: return true;
case MCK_GPRNoX0: return true;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VRN2M4NoV0:
return B == MCK_VRN2M4;
case MCK_Reg34:
switch (B) {
default: return false;
case MCK_Reg33: return true;
case MCK_Reg32: return true;
case MCK_Reg31: return true;
case MCK_GPRPF64: return true;
}
case MCK_VRM4NoV0:
return B == MCK_VRM4;
case MCK_FPR32C:
return B == MCK_FPR32;
case MCK_FPR64C:
switch (B) {
default: return false;
case MCK_FPR64: return true;
case MCK_AnyReg: return true;
}
case MCK_GPRC:
switch (B) {
default: return false;
case MCK_GPRJALR: return true;
case MCK_GPRNoX0X2: return true;
case MCK_GPRNoX0: return true;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VRN4M2NoV0:
return B == MCK_VRN4M2;
case MCK_Reg33:
switch (B) {
default: return false;
case MCK_Reg32: return true;
case MCK_Reg31: return true;
case MCK_GPRPF64: return true;
}
case MCK_VRN3M2NoV0:
return B == MCK_VRN3M2;
case MCK_Reg32:
switch (B) {
default: return false;
case MCK_Reg31: return true;
case MCK_GPRPF64: return true;
}
case MCK_GPRTC:
switch (B) {
default: return false;
case MCK_GPRJALR: return true;
case MCK_GPRNoX0X2: return true;
case MCK_GPRNoX0: return true;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VRN2M2NoV0:
return B == MCK_VRN2M2;
case MCK_Reg31:
return B == MCK_GPRPF64;
case MCK_VRM2NoV0:
return B == MCK_VRM2;
case MCK_VRN8M1NoV0:
return B == MCK_VRN8M1;
case MCK_VRN7M1NoV0:
return B == MCK_VRN7M1;
case MCK_GPRJALR:
switch (B) {
default: return false;
case MCK_GPRNoX0X2: return true;
case MCK_GPRNoX0: return true;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VRN6M1NoV0:
return B == MCK_VRN6M1;
case MCK_VRN5M1NoV0:
return B == MCK_VRN5M1;
case MCK_VRN4M1NoV0:
return B == MCK_VRN4M1;
case MCK_VRN3M1NoV0:
return B == MCK_VRN3M1;
case MCK_GPRNoX0X2:
switch (B) {
default: return false;
case MCK_GPRNoX0: return true;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VRN2M1NoV0:
return B == MCK_VRN2M1;
case MCK_GPRNoX0:
switch (B) {
default: return false;
case MCK_GPR: return true;
case MCK_AnyReg: return true;
}
case MCK_VRNoV0:
switch (B) {
default: return false;
case MCK_VM: return true;
case MCK_AnyReg: return true;
}
case MCK_FPR64:
return B == MCK_AnyReg;
case MCK_GPR:
return B == MCK_AnyReg;
case MCK_VM:
return B == MCK_AnyReg;
case MCK_RVVMaskRegOpOperand:
return B == OptionalMatchClass;
}
}
static unsigned validateOperandClass(MCParsedAsmOperand &GOp, MatchClassKind Kind) {
RISCVOperand &Operand = (RISCVOperand &)GOp;
if (Kind == InvalidMatchClass)
return MCTargetAsmParser::Match_InvalidOperand;
if (Operand.isToken() && Kind <= MCK_LAST_TOKEN)
return isSubclass(matchTokenString(Operand.getToken()), Kind) ?
MCTargetAsmParser::Match_Success :
MCTargetAsmParser::Match_InvalidOperand;
switch (Kind) {
default: break;
// 'BareSymbol' class
case MCK_BareSymbol: {
DiagnosticPredicate DP(Operand.isBareSymbol());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidBareSymbol;
break;
}
// 'CLUIImm' class
case MCK_CLUIImm: {
DiagnosticPredicate DP(Operand.isCLUIImm());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidCLUIImm;
break;
}
// 'CSRSystemRegister' class
case MCK_CSRSystemRegister: {
DiagnosticPredicate DP(Operand.isCSRSystemRegister());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidCSRSystemRegister;
break;
}
// 'CallSymbol' class
case MCK_CallSymbol: {
DiagnosticPredicate DP(Operand.isCallSymbol());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidCallSymbol;
break;
}
// 'FRMArg' class
case MCK_FRMArg: {
DiagnosticPredicate DP(Operand.isFRMArg());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidFRMArg;
break;
}
// 'FenceArg' class
case MCK_FenceArg: {
DiagnosticPredicate DP(Operand.isFenceArg());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidFenceArg;
break;
}
// 'GPRAsFPR' class
case MCK_GPRAsFPR: {
DiagnosticPredicate DP(Operand.isGPRAsFPR());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
break;
}
// 'GPRF64AsFPR' class
case MCK_GPRF64AsFPR: {
DiagnosticPredicate DP(Operand.isGPRF64AsFPR());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
break;
}
// 'GPRPF64AsFPR' class
case MCK_GPRPF64AsFPR: {
DiagnosticPredicate DP(Operand.isGPRPF64AsFPR());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
break;
}
// 'Imm' class
case MCK_Imm: {
DiagnosticPredicate DP(Operand.isImm());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
break;
}
// 'ImmZero' class
case MCK_ImmZero: {
DiagnosticPredicate DP(Operand.isImmZero());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidImmZero;
break;
}
// 'InsnDirectiveOpcode' class
case MCK_InsnDirectiveOpcode: {
DiagnosticPredicate DP(Operand.isImm());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
break;
}
// 'PseudoJumpSymbol' class
case MCK_PseudoJumpSymbol: {
DiagnosticPredicate DP(Operand.isPseudoJumpSymbol());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidPseudoJumpSymbol;
break;
}
// 'RnumArg' class
case MCK_RnumArg: {
DiagnosticPredicate DP(Operand.isRnumArg());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidRnumArg;
break;
}
// 'SImm5Plus1' class
case MCK_SImm5Plus1: {
DiagnosticPredicate DP(Operand.isSImm5Plus1());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm5Plus1;
break;
}
// 'SImm21Lsb0JAL' class
case MCK_SImm21Lsb0JAL: {
DiagnosticPredicate DP(Operand.isSImm21Lsb0JAL());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm21Lsb0JAL;
break;
}
// 'TPRelAddSymbol' class
case MCK_TPRelAddSymbol: {
DiagnosticPredicate DP(Operand.isTPRelAddSymbol());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidTPRelAddSymbol;
break;
}
// 'UImmLog2XLen' class
case MCK_UImmLog2XLen: {
DiagnosticPredicate DP(Operand.isUImmLog2XLen());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImmLog2XLen;
break;
}
// 'UImmLog2XLenHalf' class
case MCK_UImmLog2XLenHalf: {
DiagnosticPredicate DP(Operand.isUImmLog2XLenHalf());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImmLog2XLenHalf;
break;
}
// 'UImmLog2XLenNonZero' class
case MCK_UImmLog2XLenNonZero: {
DiagnosticPredicate DP(Operand.isUImmLog2XLenNonZero());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImmLog2XLenNonZero;
break;
}
// 'RVVMaskRegOpOperand' class
case MCK_RVVMaskRegOpOperand: {
DiagnosticPredicate DP(Operand.isV0Reg());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidVMaskRegister;
break;
}
// 'ZeroOffsetMemOpOperand' class
case MCK_ZeroOffsetMemOpOperand: {
DiagnosticPredicate DP(Operand.isGPR());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
break;
}
// 'UImm2' class
case MCK_UImm2: {
DiagnosticPredicate DP(Operand.isUImm2());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm2;
break;
}
// 'UImm3' class
case MCK_UImm3: {
DiagnosticPredicate DP(Operand.isUImm3());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm3;
break;
}
// 'UImm5' class
case MCK_UImm5: {
DiagnosticPredicate DP(Operand.isUImm5());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm5;
break;
}
// 'UImm7' class
case MCK_UImm7: {
DiagnosticPredicate DP(Operand.isUImm7());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm7;
break;
}
// 'SImm12' class
case MCK_SImm12: {
DiagnosticPredicate DP(Operand.isSImm12());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm12;
break;
}
// 'SImm13Lsb0' class
case MCK_SImm13Lsb0: {
DiagnosticPredicate DP(Operand.isSImm13Lsb0());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm13Lsb0;
break;
}
// 'UImm20LUI' class
case MCK_UImm20LUI: {
DiagnosticPredicate DP(Operand.isUImm20LUI());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm20LUI;
break;
}
// 'UImm20AUIPC' class
case MCK_UImm20AUIPC: {
DiagnosticPredicate DP(Operand.isUImm20AUIPC());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm20AUIPC;
break;
}
// 'ImmXLenLI' class
case MCK_ImmXLenLI: {
DiagnosticPredicate DP(Operand.isImmXLenLI());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidImmXLenLI;
break;
}
// 'SImm12Lsb00000' class
case MCK_SImm12Lsb00000: {
DiagnosticPredicate DP(Operand.isSImm12Lsb00000());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm12Lsb00000;
break;
}
// 'SImm6' class
case MCK_SImm6: {
DiagnosticPredicate DP(Operand.isSImm6());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm6;
break;
}
// 'SImm6NonZero' class
case MCK_SImm6NonZero: {
DiagnosticPredicate DP(Operand.isSImm6NonZero());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm6NonZero;
break;
}
// 'UImm7Lsb00' class
case MCK_UImm7Lsb00: {
DiagnosticPredicate DP(Operand.isUImm7Lsb00());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm7Lsb00;
break;
}
// 'UImm8Lsb00' class
case MCK_UImm8Lsb00: {
DiagnosticPredicate DP(Operand.isUImm8Lsb00());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm8Lsb00;
break;
}
// 'UImm8Lsb000' class
case MCK_UImm8Lsb000: {
DiagnosticPredicate DP(Operand.isUImm8Lsb000());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm8Lsb000;
break;
}
// 'SImm9Lsb0' class
case MCK_SImm9Lsb0: {
DiagnosticPredicate DP(Operand.isSImm9Lsb0());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm9Lsb0;
break;
}
// 'UImm9Lsb000' class
case MCK_UImm9Lsb000: {
DiagnosticPredicate DP(Operand.isUImm9Lsb000());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm9Lsb000;
break;
}
// 'UImm10Lsb00NonZero' class
case MCK_UImm10Lsb00NonZero: {
DiagnosticPredicate DP(Operand.isUImm10Lsb00NonZero());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidUImm10Lsb00NonZero;
break;
}
// 'SImm10Lsb0000NonZero' class
case MCK_SImm10Lsb0000NonZero: {
DiagnosticPredicate DP(Operand.isSImm10Lsb0000NonZero());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm10Lsb0000NonZero;
break;
}
// 'SImm12Lsb0' class
case MCK_SImm12Lsb0: {
DiagnosticPredicate DP(Operand.isSImm12Lsb0());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidSImm12Lsb0;
break;
}
// 'VTypeI10' class
case MCK_VTypeI10: {
DiagnosticPredicate DP(Operand.isVTypeI10());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())
return RISCVAsmParser::Match_InvalidVTypeI;
break;
}
// 'VTypeI11' class
case MCK_VTypeI11: {
DiagnosticPredicate DP(Operand.isVTypeI11());
if (DP.isMatch())
return MCTargetAsmParser::Match_Success;
if (DP.isNearMatch())