blob: 539078840a0a599f9f4c40d0c86755014f099f6e [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);
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);
}
#endif // GET_ASSEMBLER_HEADER_INFO
#ifdef GET_OPERAND_DIAGNOSTIC_TYPES
#undef GET_OPERAND_DIAGNOSTIC_TYPES
Match_InvalidImmUnsignedi4,
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_Not64BitModeBit = 4,
Feature_In64BitModeBit = 2,
Feature_In16BitModeBit = 0,
Feature_Not16BitModeBit = 3,
Feature_In32BitModeBit = 1,
};
static unsigned MatchRegisterName(StringRef Name) {
switch (Name.size()) {
default: break;
case 2: // 34 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 3 strings to match.
switch (Name[1]) {
default: break;
case 'h': // 1 string to match.
return 1; // "ah"
case 'l': // 1 string to match.
return 2; // "al"
case 'x': // 1 string to match.
return 3; // "ax"
}
break;
case 'b': // 4 strings to match.
switch (Name[1]) {
default: break;
case 'h': // 1 string to match.
return 4; // "bh"
case 'l': // 1 string to match.
return 5; // "bl"
case 'p': // 1 string to match.
return 6; // "bp"
case 'x': // 1 string to match.
return 9; // "bx"
}
break;
case 'c': // 4 strings to match.
switch (Name[1]) {
default: break;
case 'h': // 1 string to match.
return 10; // "ch"
case 'l': // 1 string to match.
return 11; // "cl"
case 's': // 1 string to match.
return 12; // "cs"
case 'x': // 1 string to match.
return 13; // "cx"
}
break;
case 'd': // 5 strings to match.
switch (Name[1]) {
default: break;
case 'h': // 1 string to match.
return 15; // "dh"
case 'i': // 1 string to match.
return 16; // "di"
case 'l': // 1 string to match.
return 19; // "dl"
case 's': // 1 string to match.
return 20; // "ds"
case 'x': // 1 string to match.
return 21; // "dx"
}
break;
case 'e': // 1 string to match.
if (Name[1] != 's')
break;
return 31; // "es"
case 'f': // 1 string to match.
if (Name[1] != 's')
break;
return 36; // "fs"
case 'g': // 1 string to match.
if (Name[1] != 's')
break;
return 38; // "gs"
case 'i': // 1 string to match.
if (Name[1] != 'p')
break;
return 49; // "ip"
case 'k': // 8 strings to match.
switch (Name[1]) {
default: break;
case '0': // 1 string to match.
return 112; // "k0"
case '1': // 1 string to match.
return 113; // "k1"
case '2': // 1 string to match.
return 114; // "k2"
case '3': // 1 string to match.
return 115; // "k3"
case '4': // 1 string to match.
return 116; // "k4"
case '5': // 1 string to match.
return 117; // "k5"
case '6': // 1 string to match.
return 118; // "k6"
case '7': // 1 string to match.
return 119; // "k7"
}
break;
case 'r': // 2 strings to match.
switch (Name[1]) {
default: break;
case '8': // 1 string to match.
return 128; // "r8"
case '9': // 1 string to match.
return 129; // "r9"
}
break;
case 's': // 4 strings to match.
switch (Name[1]) {
default: break;
case 'i': // 1 string to match.
return 62; // "si"
case 'p': // 1 string to match.
return 65; // "sp"
case 's': // 1 string to match.
return 68; // "ss"
case 't': // 1 string to match.
return 136; // "st"
}
break;
}
break;
case 3: // 73 strings to match.
switch (Name[0]) {
default: break;
case 'b': // 1 string to match.
if (memcmp(Name.data()+1, "pl", 2) != 0)
break;
return 8; // "bpl"
case 'c': // 10 strings to match.
if (Name[1] != 'r')
break;
switch (Name[2]) {
default: break;
case '0': // 1 string to match.
return 72; // "cr0"
case '1': // 1 string to match.
return 73; // "cr1"
case '2': // 1 string to match.
return 74; // "cr2"
case '3': // 1 string to match.
return 75; // "cr3"
case '4': // 1 string to match.
return 76; // "cr4"
case '5': // 1 string to match.
return 77; // "cr5"
case '6': // 1 string to match.
return 78; // "cr6"
case '7': // 1 string to match.
return 79; // "cr7"
case '8': // 1 string to match.
return 80; // "cr8"
case '9': // 1 string to match.
return 81; // "cr9"
}
break;
case 'd': // 11 strings to match.
switch (Name[1]) {
default: break;
case 'i': // 1 string to match.
if (Name[2] != 'l')
break;
return 18; // "dil"
case 'r': // 10 strings to match.
switch (Name[2]) {
default: break;
case '0': // 1 string to match.
return 88; // "dr0"
case '1': // 1 string to match.
return 89; // "dr1"
case '2': // 1 string to match.
return 90; // "dr2"
case '3': // 1 string to match.
return 91; // "dr3"
case '4': // 1 string to match.
return 92; // "dr4"
case '5': // 1 string to match.
return 93; // "dr5"
case '6': // 1 string to match.
return 94; // "dr6"
case '7': // 1 string to match.
return 95; // "dr7"
case '8': // 1 string to match.
return 96; // "dr8"
case '9': // 1 string to match.
return 97; // "dr9"
}
break;
}
break;
case 'e': // 10 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 1 string to match.
if (Name[2] != 'x')
break;
return 22; // "eax"
case 'b': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'p': // 1 string to match.
return 23; // "ebp"
case 'x': // 1 string to match.
return 24; // "ebx"
}
break;
case 'c': // 1 string to match.
if (Name[2] != 'x')
break;
return 25; // "ecx"
case 'd': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'i': // 1 string to match.
return 26; // "edi"
case 'x': // 1 string to match.
return 27; // "edx"
}
break;
case 'i': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'p': // 1 string to match.
return 29; // "eip"
case 'z': // 1 string to match.
return 30; // "eiz"
}
break;
case 's': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'i': // 1 string to match.
return 32; // "esi"
case 'p': // 1 string to match.
return 33; // "esp"
}
break;
}
break;
case 'f': // 8 strings to match.
if (Name[1] != 'p')
break;
switch (Name[2]) {
default: break;
case '0': // 1 string to match.
return 104; // "fp0"
case '1': // 1 string to match.
return 105; // "fp1"
case '2': // 1 string to match.
return 106; // "fp2"
case '3': // 1 string to match.
return 107; // "fp3"
case '4': // 1 string to match.
return 108; // "fp4"
case '5': // 1 string to match.
return 109; // "fp5"
case '6': // 1 string to match.
return 110; // "fp6"
case '7': // 1 string to match.
return 111; // "fp7"
}
break;
case 'm': // 8 strings to match.
if (Name[1] != 'm')
break;
switch (Name[2]) {
default: break;
case '0': // 1 string to match.
return 120; // "mm0"
case '1': // 1 string to match.
return 121; // "mm1"
case '2': // 1 string to match.
return 122; // "mm2"
case '3': // 1 string to match.
return 123; // "mm3"
case '4': // 1 string to match.
return 124; // "mm4"
case '5': // 1 string to match.
return 125; // "mm5"
case '6': // 1 string to match.
return 126; // "mm6"
case '7': // 1 string to match.
return 127; // "mm7"
}
break;
case 'r': // 22 strings to match.
switch (Name[1]) {
default: break;
case '1': // 6 strings to match.
switch (Name[2]) {
default: break;
case '0': // 1 string to match.
return 130; // "r10"
case '1': // 1 string to match.
return 131; // "r11"
case '2': // 1 string to match.
return 132; // "r12"
case '3': // 1 string to match.
return 133; // "r13"
case '4': // 1 string to match.
return 134; // "r14"
case '5': // 1 string to match.
return 135; // "r15"
}
break;
case '8': // 3 strings to match.
switch (Name[2]) {
default: break;
case 'b': // 1 string to match.
return 248; // "r8b"
case 'd': // 1 string to match.
return 264; // "r8d"
case 'w': // 1 string to match.
return 272; // "r8w"
}
break;
case '9': // 3 strings to match.
switch (Name[2]) {
default: break;
case 'b': // 1 string to match.
return 249; // "r9b"
case 'd': // 1 string to match.
return 265; // "r9d"
case 'w': // 1 string to match.
return 273; // "r9w"
}
break;
case 'a': // 1 string to match.
if (Name[2] != 'x')
break;
return 51; // "rax"
case 'b': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'p': // 1 string to match.
return 52; // "rbp"
case 'x': // 1 string to match.
return 53; // "rbx"
}
break;
case 'c': // 1 string to match.
if (Name[2] != 'x')
break;
return 54; // "rcx"
case 'd': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'i': // 1 string to match.
return 55; // "rdi"
case 'x': // 1 string to match.
return 56; // "rdx"
}
break;
case 'i': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'p': // 1 string to match.
return 58; // "rip"
case 'z': // 1 string to match.
return 59; // "riz"
}
break;
case 's': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'i': // 1 string to match.
return 60; // "rsi"
case 'p': // 1 string to match.
return 61; // "rsp"
}
break;
}
break;
case 's': // 3 strings to match.
switch (Name[1]) {
default: break;
case 'i': // 1 string to match.
if (Name[2] != 'l')
break;
return 64; // "sil"
case 'p': // 1 string to match.
if (Name[2] != 'l')
break;
return 67; // "spl"
case 's': // 1 string to match.
if (Name[2] != 'p')
break;
return 69; // "ssp"
}
break;
}
break;
case 4: // 70 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 6 strings to match.
if (memcmp(Name.data()+1, "r1", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '0': // 1 string to match.
return 82; // "cr10"
case '1': // 1 string to match.
return 83; // "cr11"
case '2': // 1 string to match.
return 84; // "cr12"
case '3': // 1 string to match.
return 85; // "cr13"
case '4': // 1 string to match.
return 86; // "cr14"
case '5': // 1 string to match.
return 87; // "cr15"
}
break;
case 'd': // 6 strings to match.
if (memcmp(Name.data()+1, "r1", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '0': // 1 string to match.
return 98; // "dr10"
case '1': // 1 string to match.
return 99; // "dr11"
case '2': // 1 string to match.
return 100; // "dr12"
case '3': // 1 string to match.
return 101; // "dr13"
case '4': // 1 string to match.
return 102; // "dr14"
case '5': // 1 string to match.
return 103; // "dr15"
}
break;
case 'f': // 2 strings to match.
if (Name[1] != 'p')
break;
switch (Name[2]) {
default: break;
case 'c': // 1 string to match.
if (Name[3] != 'r')
break;
return 34; // "fpcr"
case 's': // 1 string to match.
if (Name[3] != 'r')
break;
return 35; // "fpsr"
}
break;
case 'r': // 18 strings to match.
if (Name[1] != '1')
break;
switch (Name[2]) {
default: break;
case '0': // 3 strings to match.
switch (Name[3]) {
default: break;
case 'b': // 1 string to match.
return 250; // "r10b"
case 'd': // 1 string to match.
return 266; // "r10d"
case 'w': // 1 string to match.
return 274; // "r10w"
}
break;
case '1': // 3 strings to match.
switch (Name[3]) {
default: break;
case 'b': // 1 string to match.
return 251; // "r11b"
case 'd': // 1 string to match.
return 267; // "r11d"
case 'w': // 1 string to match.
return 275; // "r11w"
}
break;
case '2': // 3 strings to match.
switch (Name[3]) {
default: break;
case 'b': // 1 string to match.
return 252; // "r12b"
case 'd': // 1 string to match.
return 268; // "r12d"
case 'w': // 1 string to match.
return 276; // "r12w"
}
break;
case '3': // 3 strings to match.
switch (Name[3]) {
default: break;
case 'b': // 1 string to match.
return 253; // "r13b"
case 'd': // 1 string to match.
return 269; // "r13d"
case 'w': // 1 string to match.
return 277; // "r13w"
}
break;
case '4': // 3 strings to match.
switch (Name[3]) {
default: break;
case 'b': // 1 string to match.
return 254; // "r14b"
case 'd': // 1 string to match.
return 270; // "r14d"
case 'w': // 1 string to match.
return 278; // "r14w"
}
break;
case '5': // 3 strings to match.
switch (Name[3]) {
default: break;
case 'b': // 1 string to match.
return 255; // "r15b"
case 'd': // 1 string to match.
return 271; // "r15d"
case 'w': // 1 string to match.
return 279; // "r15w"
}
break;
}
break;
case 't': // 8 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '0': // 1 string to match.
return 144; // "tmm0"
case '1': // 1 string to match.
return 145; // "tmm1"
case '2': // 1 string to match.
return 146; // "tmm2"
case '3': // 1 string to match.
return 147; // "tmm3"
case '4': // 1 string to match.
return 148; // "tmm4"
case '5': // 1 string to match.
return 149; // "tmm5"
case '6': // 1 string to match.
return 150; // "tmm6"
case '7': // 1 string to match.
return 151; // "tmm7"
}
break;
case 'x': // 10 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '0': // 1 string to match.
return 152; // "xmm0"
case '1': // 1 string to match.
return 153; // "xmm1"
case '2': // 1 string to match.
return 154; // "xmm2"
case '3': // 1 string to match.
return 155; // "xmm3"
case '4': // 1 string to match.
return 156; // "xmm4"
case '5': // 1 string to match.
return 157; // "xmm5"
case '6': // 1 string to match.
return 158; // "xmm6"
case '7': // 1 string to match.
return 159; // "xmm7"
case '8': // 1 string to match.
return 160; // "xmm8"
case '9': // 1 string to match.
return 161; // "xmm9"
}
break;
case 'y': // 10 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '0': // 1 string to match.
return 184; // "ymm0"
case '1': // 1 string to match.
return 185; // "ymm1"
case '2': // 1 string to match.
return 186; // "ymm2"
case '3': // 1 string to match.
return 187; // "ymm3"
case '4': // 1 string to match.
return 188; // "ymm4"
case '5': // 1 string to match.
return 189; // "ymm5"
case '6': // 1 string to match.
return 190; // "ymm6"
case '7': // 1 string to match.
return 191; // "ymm7"
case '8': // 1 string to match.
return 192; // "ymm8"
case '9': // 1 string to match.
return 193; // "ymm9"
}
break;
case 'z': // 10 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '0': // 1 string to match.
return 216; // "zmm0"
case '1': // 1 string to match.
return 217; // "zmm1"
case '2': // 1 string to match.
return 218; // "zmm2"
case '3': // 1 string to match.
return 219; // "zmm3"
case '4': // 1 string to match.
return 220; // "zmm4"
case '5': // 1 string to match.
return 221; // "zmm5"
case '6': // 1 string to match.
return 222; // "zmm6"
case '7': // 1 string to match.
return 223; // "zmm7"
case '8': // 1 string to match.
return 224; // "zmm8"
case '9': // 1 string to match.
return 225; // "zmm9"
}
break;
}
break;
case 5: // 75 strings to match.
switch (Name[0]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "lags", 4) != 0)
break;
return 28; // "flags"
case 'm': // 1 string to match.
if (memcmp(Name.data()+1, "xcsr", 4) != 0)
break;
return 50; // "mxcsr"
case 's': // 7 strings to match.
if (memcmp(Name.data()+1, "t(", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '1': // 1 string to match.
if (Name[4] != ')')
break;
return 137; // "st(1)"
case '2': // 1 string to match.
if (Name[4] != ')')
break;
return 138; // "st(2)"
case '3': // 1 string to match.
if (Name[4] != ')')
break;
return 139; // "st(3)"
case '4': // 1 string to match.
if (Name[4] != ')')
break;
return 140; // "st(4)"
case '5': // 1 string to match.
if (Name[4] != ')')
break;
return 141; // "st(5)"
case '6': // 1 string to match.
if (Name[4] != ')')
break;
return 142; // "st(6)"
case '7': // 1 string to match.
if (Name[4] != ')')
break;
return 143; // "st(7)"
}
break;
case 'x': // 22 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '1': // 10 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 162; // "xmm10"
case '1': // 1 string to match.
return 163; // "xmm11"
case '2': // 1 string to match.
return 164; // "xmm12"
case '3': // 1 string to match.
return 165; // "xmm13"
case '4': // 1 string to match.
return 166; // "xmm14"
case '5': // 1 string to match.
return 167; // "xmm15"
case '6': // 1 string to match.
return 168; // "xmm16"
case '7': // 1 string to match.
return 169; // "xmm17"
case '8': // 1 string to match.
return 170; // "xmm18"
case '9': // 1 string to match.
return 171; // "xmm19"
}
break;
case '2': // 10 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 172; // "xmm20"
case '1': // 1 string to match.
return 173; // "xmm21"
case '2': // 1 string to match.
return 174; // "xmm22"
case '3': // 1 string to match.
return 175; // "xmm23"
case '4': // 1 string to match.
return 176; // "xmm24"
case '5': // 1 string to match.
return 177; // "xmm25"
case '6': // 1 string to match.
return 178; // "xmm26"
case '7': // 1 string to match.
return 179; // "xmm27"
case '8': // 1 string to match.
return 180; // "xmm28"
case '9': // 1 string to match.
return 181; // "xmm29"
}
break;
case '3': // 2 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 182; // "xmm30"
case '1': // 1 string to match.
return 183; // "xmm31"
}
break;
}
break;
case 'y': // 22 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '1': // 10 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 194; // "ymm10"
case '1': // 1 string to match.
return 195; // "ymm11"
case '2': // 1 string to match.
return 196; // "ymm12"
case '3': // 1 string to match.
return 197; // "ymm13"
case '4': // 1 string to match.
return 198; // "ymm14"
case '5': // 1 string to match.
return 199; // "ymm15"
case '6': // 1 string to match.
return 200; // "ymm16"
case '7': // 1 string to match.
return 201; // "ymm17"
case '8': // 1 string to match.
return 202; // "ymm18"
case '9': // 1 string to match.
return 203; // "ymm19"
}
break;
case '2': // 10 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 204; // "ymm20"
case '1': // 1 string to match.
return 205; // "ymm21"
case '2': // 1 string to match.
return 206; // "ymm22"
case '3': // 1 string to match.
return 207; // "ymm23"
case '4': // 1 string to match.
return 208; // "ymm24"
case '5': // 1 string to match.
return 209; // "ymm25"
case '6': // 1 string to match.
return 210; // "ymm26"
case '7': // 1 string to match.
return 211; // "ymm27"
case '8': // 1 string to match.
return 212; // "ymm28"
case '9': // 1 string to match.
return 213; // "ymm29"
}
break;
case '3': // 2 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 214; // "ymm30"
case '1': // 1 string to match.
return 215; // "ymm31"
}
break;
}
break;
case 'z': // 22 strings to match.
if (memcmp(Name.data()+1, "mm", 2) != 0)
break;
switch (Name[3]) {
default: break;
case '1': // 10 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 226; // "zmm10"
case '1': // 1 string to match.
return 227; // "zmm11"
case '2': // 1 string to match.
return 228; // "zmm12"
case '3': // 1 string to match.
return 229; // "zmm13"
case '4': // 1 string to match.
return 230; // "zmm14"
case '5': // 1 string to match.
return 231; // "zmm15"
case '6': // 1 string to match.
return 232; // "zmm16"
case '7': // 1 string to match.
return 233; // "zmm17"
case '8': // 1 string to match.
return 234; // "zmm18"
case '9': // 1 string to match.
return 235; // "zmm19"
}
break;
case '2': // 10 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 236; // "zmm20"
case '1': // 1 string to match.
return 237; // "zmm21"
case '2': // 1 string to match.
return 238; // "zmm22"
case '3': // 1 string to match.
return 239; // "zmm23"
case '4': // 1 string to match.
return 240; // "zmm24"
case '5': // 1 string to match.
return 241; // "zmm25"
case '6': // 1 string to match.
return 242; // "zmm26"
case '7': // 1 string to match.
return 243; // "zmm27"
case '8': // 1 string to match.
return 244; // "zmm28"
case '9': // 1 string to match.
return 245; // "zmm29"
}
break;
case '3': // 2 strings to match.
switch (Name[4]) {
default: break;
case '0': // 1 string to match.
return 246; // "zmm30"
case '1': // 1 string to match.
return 247; // "zmm31"
}
break;
}
break;
}
break;
case 6: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+1, "flags", 5) != 0)
break;
return 71; // "eflags"
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "flags", 5) != 0)
break;
return 57; // "rflags"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "mmcfg", 5) != 0)
break;
return 70; // "tmmcfg"
}
break;
case 7: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'd': // 1 string to match.
if (memcmp(Name.data()+1, "irflag", 6) != 0)
break;
return 14; // "dirflag"
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "s.base", 6) != 0)
break;
return 37; // "fs.base"
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "s.base", 6) != 0)
break;
return 39; // "gs.base"
}
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_Not64BitModeBit: return "Not 64-bit mode";
case Feature_In64BitModeBit: return "64-bit mode";
case Feature_In16BitModeBit: return "16-bit mode";
case Feature_Not16BitModeBit: return "Not 16-bit mode";
case Feature_In32BitModeBit: return "32-bit mode";
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 3: // 6 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 4 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'b': // 1 string to match.
if (Mnemonic[2] != 'w')
break;
Mnemonic = "cbtw"; // "cbw"
return;
case 'd': // 1 string to match.
if (Mnemonic[2] != 'q')
break;
Mnemonic = "cltd"; // "cdq"
return;
case 'q': // 1 string to match.
if (Mnemonic[2] != 'o')
break;
Mnemonic = "cqto"; // "cqo"
return;
case 'w': // 1 string to match.
if (Mnemonic[2] != 'd')
break;
Mnemonic = "cwtd"; // "cwd"
return;
}
break;
case 'p': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "op", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "pop"
Mnemonic = "popw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "popl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "popq";
return;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "et", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "ret"
Mnemonic = "retw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "retl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "retq";
return;
}
break;
case 4: // 18 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 3 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "ll", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "call"
Mnemonic = "callw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "calll";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "callq";
return;
case 'd': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "qe", 2) != 0)
break;
Mnemonic = "cltq"; // "cdqe"
return;
case 'w': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "de", 2) != 0)
break;
Mnemonic = "cwtl"; // "cwde"
return;
}
break;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "ret", 3) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "iret"
Mnemonic = "iretw";
else if (Features.test(Feature_Not16BitModeBit))
Mnemonic = "iretl";
return;
case 'l': // 3 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'g': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "lgdt"
Mnemonic = "lgdtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "lgdtl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "lgdtq";
return;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "lidt"
Mnemonic = "lidtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "lidtl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "lidtq";
return;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "et", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "lret"
Mnemonic = "lretw";
else if (Features.test(Feature_Not16BitModeBit))
Mnemonic = "lretl";
return;
}
break;
case 'p': // 3 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'o': // 2 strings to match.
if (Mnemonic[2] != 'p')
break;
switch (Mnemonic[3]) {
default: break;
case 'a': // 1 string to match.
if (Features.test(Feature_In16BitModeBit)) // "popa"
Mnemonic = "popaw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "popal";
return;
case 'f': // 1 string to match.
if (Features.test(Feature_In16BitModeBit)) // "popf"
Mnemonic = "popfw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "popfl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "popfq";
return;
}
break;
case 'u': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "sh", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "push"
Mnemonic = "pushw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "pushl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "pushq";
return;
}
break;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "etn", 3) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "retn"
Mnemonic = "retw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "retl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "retq";
return;
case 's': // 6 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'a': // 4 strings to match.
if (Mnemonic[2] != 'l')
break;
switch (Mnemonic[3]) {
default: break;
case 'b': // 1 string to match.
Mnemonic = "shlb"; // "salb"
return;
case 'l': // 1 string to match.
Mnemonic = "shll"; // "sall"
return;
case 'q': // 1 string to match.
Mnemonic = "shlq"; // "salq"
return;
case 'w': // 1 string to match.
Mnemonic = "shlw"; // "salw"
return;
}
break;
case 'g': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "sgdt"
Mnemonic = "sgdtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "sgdtl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "sgdtq";
return;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "sidt"
Mnemonic = "sidtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "sidtl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "sidtq";
return;
}
break;
case 'u': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "d2a", 3) != 0)
break;
Mnemonic = "ud2"; // "ud2a"
return;
}
break;
case 5: // 12 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "ildq", 4) != 0)
break;
Mnemonic = "fildll"; // "fildq"
return;
case 'p': // 3 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'o': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "pfd", 3) != 0)
break;
Mnemonic = "popfl"; // "popfd"
return;
case 'u': // 2 strings to match.
if (memcmp(Mnemonic.data()+2, "sh", 2) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'a': // 1 string to match.
if (Features.test(Feature_In16BitModeBit)) // "pusha"
Mnemonic = "pushaw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "pushal";
return;
case 'f': // 1 string to match.
if (Features.test(Feature_In16BitModeBit)) // "pushf"
Mnemonic = "pushfw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "pushfl";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "pushfq";
return;
}
break;
}
break;
case 's': // 4 strings to match.
if (memcmp(Mnemonic.data()+1, "mov", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'b': // 1 string to match.
Mnemonic = "movsb"; // "smovb"
return;
case 'l': // 1 string to match.
Mnemonic = "movsl"; // "smovl"
return;
case 'q': // 1 string to match.
Mnemonic = "movsq"; // "smovq"
return;
case 'w': // 1 string to match.
Mnemonic = "movsw"; // "smovw"
return;
}
break;
case 'u': // 3 strings to match.
if (memcmp(Mnemonic.data()+1, "d2b", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "ud1l"; // "ud2bl"
return;
case 'q': // 1 string to match.
Mnemonic = "ud1q"; // "ud2bq"
return;
case 'w': // 1 string to match.
Mnemonic = "ud1w"; // "ud2bw"
return;
}
break;
case 'v': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "errw", 4) != 0)
break;
Mnemonic = "verr"; // "verrw"
return;
}
break;
case 6: // 15 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 6 strings to match.
if (memcmp(Mnemonic.data()+1, "mov", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'c': // 3 strings to match.
switch (Mnemonic[5]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovbl"; // "cmovcl"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovbq"; // "cmovcq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovbw"; // "cmovcw"
return;
}
break;
case 'z': // 3 strings to match.
switch (Mnemonic[5]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovel"; // "cmovzl"
return;
case 'q': // 1 string to match.
Mnemonic = "cmoveq"; // "cmovzq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovew"; // "cmovzw"
return;
}
break;
}
break;
case 'f': // 4 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'c': // 2 strings to match.
if (memcmp(Mnemonic.data()+2, "mov", 3) != 0)
break;
switch (Mnemonic[5]) {
default: break;
case 'a': // 1 string to match.
Mnemonic = "fcmovnbe"; // "fcmova"
return;
case 'z': // 1 string to match.
Mnemonic = "fcmove"; // "fcmovz"
return;
}
break;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "stpq", 4) != 0)
break;
Mnemonic = "fistpll"; // "fistpq"
return;
case 'l': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dcww", 4) != 0)
break;
Mnemonic = "fldcw"; // "fldcww"
return;
}
break;
case 'l': // 2 strings to match.
if (memcmp(Mnemonic.data()+1, "eave", 4) != 0)
break;
switch (Mnemonic[5]) {
default: break;
case 'l': // 1 string to match.
if (Features.test(Feature_Not64BitModeBit)) // "leavel"
Mnemonic = "leave";
return;
case 'q': // 1 string to match.
if (Features.test(Feature_In64BitModeBit)) // "leaveq"
Mnemonic = "leave";
return;
}
break;
case 'p': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "ushfd", 5) != 0)
break;
Mnemonic = "pushfl"; // "pushfd"
return;
case 's': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "ysret", 5) != 0)
break;
Mnemonic = "sysretl"; // "sysret"
return;
case 'x': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "saveq", 5) != 0)
break;
Mnemonic = "xsave64"; // "xsaveq"
return;
}
break;
case 7: // 34 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 24 strings to match.
if (memcmp(Mnemonic.data()+1, "mov", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'n': // 18 strings to match.
switch (Mnemonic[5]) {
default: break;
case 'a': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovbel"; // "cmovnal"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovbeq"; // "cmovnaq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovbew"; // "cmovnaw"
return;
}
break;
case 'b': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovael"; // "cmovnbl"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovaeq"; // "cmovnbq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovaew"; // "cmovnbw"
return;
}
break;
case 'c': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovael"; // "cmovncl"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovaeq"; // "cmovncq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovaew"; // "cmovncw"
return;
}
break;
case 'g': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovlel"; // "cmovngl"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovleq"; // "cmovngq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovlew"; // "cmovngw"
return;
}
break;
case 'l': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovgel"; // "cmovnll"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovgeq"; // "cmovnlq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovgew"; // "cmovnlw"
return;
}
break;
case 'z': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovnel"; // "cmovnzl"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovneq"; // "cmovnzq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovnew"; // "cmovnzw"
return;
}
break;
}
break;
case 'p': // 6 strings to match.
switch (Mnemonic[5]) {
default: break;
case 'e': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovpl"; // "cmovpel"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovpq"; // "cmovpeq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovpw"; // "cmovpew"
return;
}
break;
case 'o': // 3 strings to match.
switch (Mnemonic[6]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovnpl"; // "cmovpol"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovnpq"; // "cmovpoq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovnpw"; // "cmovpow"
return;
}
break;
}
break;
}
break;
case 'f': // 6 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'c': // 2 strings to match.
if (memcmp(Mnemonic.data()+2, "mov", 3) != 0)
break;
switch (Mnemonic[5]) {
default: break;
case 'a': // 1 string to match.
if (Mnemonic[6] != 'e')
break;
Mnemonic = "fcmovnb"; // "fcmovae"
return;
case 'n': // 1 string to match.
if (Mnemonic[6] != 'a')
break;
Mnemonic = "fcmovbe"; // "fcmovna"
return;
}
break;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "sttpq", 5) != 0)
break;
Mnemonic = "fisttpll"; // "fisttpq"
return;
case 'n': // 2 strings to match.
if (memcmp(Mnemonic.data()+2, "st", 2) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Mnemonic.data()+5, "ww", 2) != 0)
break;
Mnemonic = "fnstcw"; // "fnstcww"
return;
case 's': // 1 string to match.
if (memcmp(Mnemonic.data()+5, "ww", 2) != 0)
break;
Mnemonic = "fnstsw"; // "fnstsww"
return;
}
break;
case 'x': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "saveq", 5) != 0)
break;
Mnemonic = "fxsave64"; // "fxsaveq"
return;
}
break;
case 's': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "ysexit", 6) != 0)
break;
Mnemonic = "sysexitl"; // "sysexit"
return;
case 'x': // 3 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "storq", 5) != 0)
break;
Mnemonic = "xrstor64"; // "xrstorq"
return;
case 's': // 2 strings to match.
if (memcmp(Mnemonic.data()+2, "ave", 3) != 0)
break;
switch (Mnemonic[5]) {
default: break;
case 'c': // 1 string to match.
if (Mnemonic[6] != 'q')
break;
Mnemonic = "xsavec64"; // "xsavecq"
return;
case 's': // 1 string to match.
if (Mnemonic[6] != 'q')
break;
Mnemonic = "xsaves64"; // "xsavesq"
return;
}
break;
}
break;
}
break;
case 8: // 15 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 12 strings to match.
if (memcmp(Mnemonic.data()+1, "movn", 4) != 0)
break;
switch (Mnemonic[5]) {
default: break;
case 'a': // 3 strings to match.
if (Mnemonic[6] != 'e')
break;
switch (Mnemonic[7]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovbl"; // "cmovnael"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovbq"; // "cmovnaeq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovbw"; // "cmovnaew"
return;
}
break;
case 'b': // 3 strings to match.
if (Mnemonic[6] != 'e')
break;
switch (Mnemonic[7]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmoval"; // "cmovnbel"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovaq"; // "cmovnbeq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovaw"; // "cmovnbew"
return;
}
break;
case 'g': // 3 strings to match.
if (Mnemonic[6] != 'e')
break;
switch (Mnemonic[7]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovll"; // "cmovngel"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovlq"; // "cmovngeq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovlw"; // "cmovngew"
return;
}
break;
case 'l': // 3 strings to match.
if (Mnemonic[6] != 'e')
break;
switch (Mnemonic[7]) {
default: break;
case 'l': // 1 string to match.
Mnemonic = "cmovgl"; // "cmovnlel"
return;
case 'q': // 1 string to match.
Mnemonic = "cmovgq"; // "cmovnleq"
return;
case 'w': // 1 string to match.
Mnemonic = "cmovgw"; // "cmovnlew"
return;
}
break;
}
break;
case 'f': // 2 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "movnae", 6) != 0)
break;
Mnemonic = "fcmovb"; // "fcmovnae"
return;
case 'x': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "rstorq", 6) != 0)
break;
Mnemonic = "fxrstor64"; // "fxrstorq"
return;
}
break;
case 'x': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "rstorsq", 7) != 0)
break;
Mnemonic = "xrstors64"; // "xrstorsq"
return;
}
break;
case 9: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "xsaveoptq", 9) != 0)
break;
Mnemonic = "xsaveopt64"; // "xsaveoptq"
return;
}
break;
case 1:
switch (Mnemonic.size()) {
default: break;
case 3: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "sal", 3) != 0)
break;
Mnemonic = "shl"; // "sal"
return;
case 4: // 7 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'l': // 2 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'g': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "lgdt"
Mnemonic = "lgdtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "lgdtd";
return;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "lidt"
Mnemonic = "lidtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "lidtd";
return;
}
break;
case 'p': // 2 strings to match.
if (memcmp(Mnemonic.data()+1, "op", 2) != 0)
break;
switch (Mnemonic[3]) {
default: break;
case 'a': // 1 string to match.
if (Features.test(Feature_In16BitModeBit)) // "popa"
Mnemonic = "popaw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "popal";
return;
case 'f': // 1 string to match.
if (Features.test(Feature_In64BitModeBit)) // "popf"
Mnemonic = "popfq";
return;
}
break;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "etn", 3) != 0)
break;
Mnemonic = "ret"; // "retn"
return;
case 's': // 2 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'g': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "sgdt"
Mnemonic = "sgdtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "sgdtd";
return;
case 'i': // 1 string to match.
if (memcmp(Mnemonic.data()+2, "dt", 2) != 0)
break;
if (Features.test(Feature_In16BitModeBit)) // "sidt"
Mnemonic = "sidtw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "sidtd";
return;
}
break;
}
break;
case 5: // 6 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 2 strings to match.
if (memcmp(Mnemonic.data()+1, "mov", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'c': // 1 string to match.
Mnemonic = "cmovb"; // "cmovc"
return;
case 'z': // 1 string to match.
Mnemonic = "cmove"; // "cmovz"
return;
}
break;
case 'p': // 4 strings to match.
switch (Mnemonic[1]) {
default: break;
case 'o': // 2 strings to match.
if (Mnemonic[2] != 'p')
break;
switch (Mnemonic[3]) {
default: break;
case 'a': // 1 string to match.
if (Mnemonic[4] != 'd')
break;
if (Features.test(Feature_Not64BitModeBit)) // "popad"
Mnemonic = "popal";
return;
case 'f': // 1 string to match.
if (Mnemonic[4] != 'w')
break;
if (Features.test(Feature_In32BitModeBit)) // "popfw"
Mnemonic = "popf";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "popf";
return;
}
break;
case 'u': // 2 strings to match.
if (memcmp(Mnemonic.data()+2, "sh", 2) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'a': // 1 string to match.
if (Features.test(Feature_In16BitModeBit)) // "pusha"
Mnemonic = "pushaw";
else if (Features.test(Feature_In32BitModeBit))
Mnemonic = "pushal";
return;
case 'f': // 1 string to match.
if (Features.test(Feature_In64BitModeBit)) // "pushf"
Mnemonic = "pushfq";
return;
}
break;
}
break;
}
break;
case 6: // 10 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'c': // 8 strings to match.
if (memcmp(Mnemonic.data()+1, "mov", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'n': // 6 strings to match.
switch (Mnemonic[5]) {
default: break;
case 'a': // 1 string to match.
Mnemonic = "cmovbe"; // "cmovna"
return;
case 'b': // 1 string to match.
Mnemonic = "cmovae"; // "cmovnb"
return;
case 'c': // 1 string to match.
Mnemonic = "cmovae"; // "cmovnc"
return;
case 'g': // 1 string to match.
Mnemonic = "cmovle"; // "cmovng"
return;
case 'l': // 1 string to match.
Mnemonic = "cmovge"; // "cmovnl"
return;
case 'z': // 1 string to match.
Mnemonic = "cmovne"; // "cmovnz"
return;
}
break;
case 'p': // 2 strings to match.
switch (Mnemonic[5]) {
default: break;
case 'e': // 1 string to match.
Mnemonic = "cmovp"; // "cmovpe"
return;
case 'o': // 1 string to match.
Mnemonic = "cmovnp"; // "cmovpo"
return;
}
break;
}
break;
case 'p': // 2 strings to match.
if (memcmp(Mnemonic.data()+1, "ush", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'a': // 1 string to match.
if (Mnemonic[5] != 'd')
break;
if (Features.test(Feature_Not64BitModeBit)) // "pushad"
Mnemonic = "pushal";
return;
case 'f': // 1 string to match.
if (Mnemonic[5] != 'w')
break;
if (Features.test(Feature_In32BitModeBit)) // "pushfw"
Mnemonic = "pushf";
else if (Features.test(Feature_In64BitModeBit))
Mnemonic = "pushf";
return;
}
break;
}
break;
case 7: // 6 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "cquire", 6) != 0)
break;
Mnemonic = "xacquire"; // "acquire"
return;
case 'c': // 4 strings to match.
if (memcmp(Mnemonic.data()+1, "movn", 4) != 0)
break;
switch (Mnemonic[5]) {
default: break;
case 'a': // 1 string to match.
if (Mnemonic[6] != 'e')
break;
Mnemonic = "cmovb"; // "cmovnae"
return;
case 'b': // 1 string to match.
if (Mnemonic[6] != 'e')
break;
Mnemonic = "cmova"; // "cmovnbe"
return;
case 'g': // 1 string to match.
if (Mnemonic[6] != 'e')
break;
Mnemonic = "cmovl"; // "cmovnge"
return;
case 'l': // 1 string to match.
if (Mnemonic[6] != 'e')
break;
Mnemonic = "cmovg"; // "cmovnle"
return;
}
break;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "elease", 6) != 0)
break;
Mnemonic = "xrelease"; // "release"
return;
}
break;
}
break;
}
switch (Mnemonic.size()) {
default: break;
case 2: // 2 strings to match.
if (Mnemonic[0] != 'j')
break;
switch (Mnemonic[1]) {
default: break;
case 'c': // 1 string to match.
Mnemonic = "jb"; // "jc"
return;
case 'z': // 1 string to match.
Mnemonic = "je"; // "jz"
return;
}
break;
case 3: // 8 strings to match.
if (Mnemonic[0] != 'j')
break;
switch (Mnemonic[1]) {
default: break;
case 'n': // 6 strings to match.
switch (Mnemonic[2]) {
default: break;
case 'a': // 1 string to match.
Mnemonic = "jbe"; // "jna"
return;
case 'b': // 1 string to match.
Mnemonic = "jae"; // "jnb"
return;
case 'c': // 1 string to match.
Mnemonic = "jae"; // "jnc"
return;
case 'g': // 1 string to match.
Mnemonic = "jle"; // "jng"
return;
case 'l': // 1 string to match.
Mnemonic = "jge"; // "jnl"
return;
case 'z': // 1 string to match.
Mnemonic = "jne"; // "jnz"
return;
}
break;
case 'p': // 2 strings to match.
switch (Mnemonic[2]) {
default: break;
case 'e': // 1 string to match.
Mnemonic = "jp"; // "jpe"
return;
case 'o': // 1 string to match.
Mnemonic = "jnp"; // "jpo"
return;
}
break;
}
break;
case 4: // 8 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'j': // 4 strings to match.
if (Mnemonic[1] != 'n')
break;
switch (Mnemonic[2]) {
default: break;
case 'a': // 1 string to match.
if (Mnemonic[3] != 'e')
break;
Mnemonic = "jb"; // "jnae"
return;
case 'b': // 1 string to match.
if (Mnemonic[3] != 'e')
break;
Mnemonic = "ja"; // "jnbe"
return;
case 'g': // 1 string to match.
if (Mnemonic[3] != 'e')
break;
Mnemonic = "jl"; // "jnge"
return;
case 'l': // 1 string to match.
if (Mnemonic[3] != 'e')
break;
Mnemonic = "jg"; // "jnle"
return;
}
break;
case 'r': // 2 strings to match.
if (memcmp(Mnemonic.data()+1, "ep", 2) != 0)
break;
switch (Mnemonic[3]) {
default: break;
case 'e': // 1 string to match.
Mnemonic = "rep"; // "repe"
return;
case 'z': // 1 string to match.
Mnemonic = "rep"; // "repz"
return;
}
break;
case 's': // 2 strings to match.
if (memcmp(Mnemonic.data()+1, "et", 2) != 0)
break;
switch (Mnemonic[3]) {
default: break;
case 'c': // 1 string to match.
Mnemonic = "setb"; // "setc"
return;
case 'z': // 1 string to match.
Mnemonic = "sete"; // "setz"
return;
}
break;
}
break;
case 5: // 11 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "wait", 4) != 0)
break;
Mnemonic = "wait"; // "fwait"
return;
case 'l': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "oopz", 4) != 0)
break;
Mnemonic = "loope"; // "loopz"
return;
case 'r': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "epnz", 4) != 0)
break;
Mnemonic = "repne"; // "repnz"
return;
case 's': // 8 strings to match.
if (memcmp(Mnemonic.data()+1, "et", 2) != 0)
break;
switch (Mnemonic[3]) {
default: break;
case 'n': // 6 strings to match.
switch (Mnemonic[4]) {
default: break;
case 'a': // 1 string to match.
Mnemonic = "setbe"; // "setna"
return;
case 'b': // 1 string to match.
Mnemonic = "setae"; // "setnb"
return;
case 'c': // 1 string to match.
Mnemonic = "setae"; // "setnc"
return;
case 'g': // 1 string to match.
Mnemonic = "setle"; // "setng"
return;
case 'l': // 1 string to match.
Mnemonic = "setge"; // "setnl"
return;
case 'z': // 1 string to match.
Mnemonic = "setne"; // "setnz"
return;
}
break;
case 'p': // 2 strings to match.
switch (Mnemonic[4]) {
default: break;
case 'e': // 1 string to match.
Mnemonic = "setp"; // "setpe"
return;
case 'o': // 1 string to match.
Mnemonic = "setnp"; // "setpo"
return;
}
break;
}
break;
}
break;
case 6: // 6 strings to match.
switch (Mnemonic[0]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "comip", 5) != 0)
break;
Mnemonic = "fcompi"; // "fcomip"
return;
case 'l': // 1 string to match.
if (memcmp(Mnemonic.data()+1, "oopnz", 5) != 0)
break;
Mnemonic = "loopne"; // "loopnz"
return;
case 's': // 4 strings to match.
if (memcmp(Mnemonic.data()+1, "etn", 3) != 0)
break;
switch (Mnemonic[4]) {
default: break;
case 'a': // 1 string to match.
if (Mnemonic[5] != 'e')
break;
Mnemonic = "setb"; // "setnae"
return;
case 'b': // 1 string to match.
if (Mnemonic[5] != 'e')
break;
Mnemonic = "seta"; // "setnbe"
return;
case 'g': // 1 string to match.
if (Mnemonic[5] != 'e')
break;
Mnemonic = "setl"; // "setnge"
return;
case 'l': // 1 string to match.
if (Mnemonic[5] != 'e')
break;
Mnemonic = "setg"; // "setnle"
return;
}
break;
}
break;
case 7: // 1 string to match.
if (memcmp(Mnemonic.data()+0, "fucomip", 7) != 0)
break;
Mnemonic = "fucompi"; // "fucomip"
return;
}
}
enum {
Tie0_1_1,
Tie0_2_2,
Tie0_3_3,
Tie0_4_4,
Tie1_1_1,
Tie1_2_2,
Tie1_3_3,
Tie1_4_4,
};
static const uint8_t TiedAsmOperandTable[][3] = {
/* Tie0_1_1 */ { 0, 1, 1 },
/* Tie0_2_2 */ { 0, 2, 2 },
/* Tie0_3_3 */ { 0, 3, 3 },
/* Tie0_4_4 */ { 0, 4, 4 },
/* Tie1_1_1 */ { 1, 1, 1 },
/* Tie1_2_2 */ { 1, 2, 2 },
/* Tie1_3_3 */ { 1, 3, 3 },
/* Tie1_4_4 */ { 1, 4, 4 },
};
namespace {
enum OperatorConversionKind {
CVT_Done,
CVT_Reg,
CVT_Tied,
CVT_imm_95_10,
CVT_95_addImmOperands,
CVT_95_addMemOperands,
CVT_95_Reg,
CVT_regAX,
CVT_regEAX,
CVT_regRAX,
CVT_95_addAbsMemOperands,
CVT_imm_95_7,
CVT_imm_95_3,
CVT_imm_95_2,
CVT_imm_95_6,
CVT_imm_95_4,
CVT_imm_95_15,
CVT_imm_95_13,
CVT_imm_95_12,
CVT_imm_95_14,
CVT_imm_95_5,
CVT_imm_95_1,
CVT_imm_95_11,
CVT_imm_95_9,
CVT_imm_95_0,
CVT_imm_95_8,
CVT_95_addDstIdxOperands,
CVT_95_addSrcIdxOperands,
CVT_95_addGR32orGR64Operands,
CVT_regST1,
CVT_regST0,
CVT_95_addGR16orGR32orGR64Operands,
CVT_95_addMemOffsOperands,
CVT_imm_95_17,
CVT_imm_95_16,
CVT_95_addAVX512RCOperands,
CVT_95_addMaskPairOperands,
CVT_NUM_CONVERTERS
};
enum InstructionConversionKind {
Convert_NoOperands,
Convert__imm_95_10,
Convert__Imm1_0,
Convert__Mem325_0__Reg1_1,
Convert__Mem645_0__Reg1_1,
Convert__Mem325_1__Reg1_0,
Convert__Mem645_1__Reg1_0,
Convert__Imm1_1,
Convert__regAX__Tie0_1_1__ImmSExti16i81_1,
Convert__regEAX__Tie0_1_1__ImmSExti32i81_1,
Convert__regRAX__Tie0_1_1__ImmSExti64i81_1,
Convert__ImmSExti64i321_1,
Convert__Reg1_0__Tie0_1_1__Reg1_1,
Convert__Reg1_0__Tie0_1_1__ImmSExti16i81_1,
Convert__Reg1_0__Tie0_1_1__Imm1_1,
Convert__Reg1_0__Tie0_1_1__Mem165_1,
Convert__Reg1_0__Tie0_1_1__ImmSExti32i81_1,
Convert__Reg1_0__Tie0_1_1__Mem325_1,
Convert__Reg1_0__Tie0_1_1__ImmSExti64i81_1,
Convert__Reg1_0__Tie0_1_1__ImmSExti64i321_1,
Convert__Reg1_0__Tie0_1_1__Mem645_1,
Convert__Reg1_0__Tie0_1_1__Mem85_1,
Convert__Mem165_0__Reg1_1,
Convert__Mem165_0__ImmSExti16i81_1,
Convert__Mem165_0__Imm1_1,
Convert__Mem325_0__ImmSExti32i81_1,
Convert__Mem325_0__Imm1_1,
Convert__Mem645_0__ImmSExti64i81_1,
Convert__Mem645_0__ImmSExti64i321_1,
Convert__Mem85_0__Reg1_1,
Convert__Mem85_0__Imm1_1,
Convert__Reg1_1__Tie0_2_2__Reg1_0,
Convert__Mem85_1__Reg1_0,
Convert__Reg1_1__Tie0_2_2__Imm1_0,
Convert__Mem85_1__Imm1_0,
Convert__Reg1_1__Tie0_2_2__Mem85_0,
Convert__regEAX__Tie0_1_1__ImmSExti32i81_0,
Convert__Reg1_1__Tie0_2_2__ImmSExti32i81_0,
Convert__Mem325_1__ImmSExti32i81_0,
Convert__Mem325_1__Imm1_0,
Convert__Reg1_1__Tie0_2_2__Mem325_0,
Convert__regRAX__Tie0_1_1__ImmSExti64i81_0,
Convert__Reg1_1__Tie0_2_2__ImmSExti64i81_0,
Convert__Mem645_1__ImmSExti64i81_0,
Convert__ImmSExti64i321_0,
Convert__Reg1_1__Tie0_2_2__ImmSExti64i321_0,
Convert__Mem645_1__ImmSExti64i321_0,
Convert__Reg1_1__Tie0_2_2__Mem645_0,
Convert__Mem165_1__Reg1_0,
Convert__regAX__Tie0_1_1__ImmSExti16i81_0,
Convert__Reg1_1__Tie0_2_2__ImmSExti16i81_0,
Convert__Mem165_1__ImmSExti16i81_0,
Convert__Mem165_1__Imm1_0,
Convert__Reg1_1__Tie0_2_2__Mem165_0,
Convert__Reg1_1__Tie0_1_1__Reg1_0,
Convert__Reg1_1__Tie0_1_1__Mem325_0,
Convert__Reg1_1__Tie0_1_1__Mem645_0,
Convert__Reg1_0__Tie0_1_1__Mem1285_1,
Convert__Reg1_1__Tie0_1_1__Mem1285_0,
Convert__Reg1_0__Tie0_1_1__Mem5_1,
Convert__Reg1_1__Tie0_2_2__Mem5_0,
Convert__Mem5_0,
Convert__Reg1_1__Reg1_0,
Convert__Reg1_0__Reg1_1,
Convert__Reg1_0__Mem1285_1,
Convert__Reg1_1__Mem1285_0,
Convert__Reg1_0__Reg1_1__ImmUnsignedi81_2,
Convert__Reg1_0__Mem1285_1__ImmUnsignedi81_2,
Convert__Reg1_2__Reg1_1__ImmUnsignedi81_0,
Convert__Reg1_2__Mem1285_1__ImmUnsignedi81_0,
Convert__Reg1_0__Reg1_1__Reg1_2,
Convert__Reg1_0__Reg1_1__Mem325_2,
Convert__Reg1_0__Reg1_1__Mem645_2,
Convert__Reg1_2__Reg1_1__Reg1_0,
Convert__Reg1_2__Reg1_1__Mem325_0,
Convert__Reg1_2__Reg1_1__Mem645_0,
Convert__Reg1_0__Reg1_1__Imm1_2,
Convert__Reg1_0__Mem325_1__Reg1_2,
Convert__Reg1_0__Mem325_1__Imm1_2,
Convert__Reg1_0__Reg1_1__ImmSExti64i321_2,
Convert__Reg1_0__Mem645_1__Reg1_2,
Convert__Reg1_0__Mem645_1__ImmSExti64i321_2,
Convert__Reg1_2__Mem325_1__Reg1_0,
Convert__Reg1_2__Reg1_1__Imm1_0,
Convert__Reg1_2__Mem325_1__Imm1_0,
Convert__Reg1_2__Mem645_1__Reg1_0,
Convert__Reg1_2__Reg1_1__ImmSExti64i321_0,
Convert__Reg1_2__Mem645_1__ImmSExti64i321_0,
Convert__Reg1_0__Mem325_1,
Convert__Reg1_0__Mem645_1,
Convert__Reg1_1__Mem325_0,
Convert__Reg1_1__Mem645_0,
Convert__Reg1_0__Tie0_1_1__Reg1_1__ImmUnsignedi81_2,
Convert__Reg1_0__Tie0_1_1__Mem1285_1__ImmUnsignedi81_2,
Convert__Reg1_2__Tie0_1_1__Reg1_1__ImmUnsignedi81_0,
Convert__Reg1_2__Tie0_1_1__Mem1285_1__ImmUnsignedi81_0,
Convert__Reg1_1__Tie0_2_2__Mem1285_0,
Convert__Reg1_2__Tie0_1_1__Reg1_1,
Convert__Reg1_2__Tie0_1_1__Mem1285_1,
Convert__Reg1_0__Mem165_1,
Convert__Reg1_1__Mem165_0,
Convert__Reg1_0__Tie0_1_1,
Convert__Reg1_0__ImmUnsignedi81_1,
Convert__Mem325_1__ImmUnsignedi81_0,
Convert__Mem165_0__ImmUnsignedi81_1,
Convert__Mem325_0__ImmUnsignedi81_1,
Convert__Mem645_0__ImmUnsignedi81_1,
Convert__Reg1_0__Tie0_1_1__ImmUnsignedi81_1,
Convert__Reg1_1__Tie0_2_2__ImmUnsignedi81_0,
Convert__Mem645_1__ImmUnsignedi81_0,
Convert__Mem165_1__ImmUnsignedi81_0,
Convert__Reg1_1__ImmUnsignedi81_0,
Convert__Reg1_0,
Convert__AbsMem1_0,
Convert__Mem165_0,
Convert__Mem325_0,
Convert__Mem645_0,
Convert__Imm1_1__Imm1_0,
Convert__Reg1_1,
Convert__Mem325_1,
Convert__Mem645_1,
Convert__Mem165_1,
Convert__Mem85_0,
Convert__Reg1_0__Tie0_1_1__Reg1_0,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_7,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_7,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_7,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_7,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_3,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_3,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_3,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_7,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_7,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_7,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_7,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_2,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_2,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_2,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_2,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_6,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_6,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_6,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_2,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_4,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_4,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_4,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_4,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_15,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_15,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_15,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_15,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_13,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_13,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_13,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_15,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_15,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_15,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_15,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_12,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_12,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_12,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_12,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_14,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_14,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_14,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_12,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_5,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_5,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_5,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_5,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_1,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_1,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_1,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_1,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_11,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_11,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_11,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_11,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_9,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_9,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_9,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_9,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_0,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_0,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_0,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_0,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_10,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_10,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_10,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_10,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_8,
Convert__Reg1_0__Tie0_1_1__Mem165_1__imm_95_8,
Convert__Reg1_0__Tie0_1_1__Mem325_1__imm_95_8,
Convert__Reg1_0__Tie0_1_1__Mem645_1__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Mem325_0__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Mem645_0__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Mem165_0__imm_95_8,
Convert__regAX__ImmSExti16i81_1,
Convert__regEAX__ImmSExti32i81_1,
Convert__regRAX__ImmSExti64i81_1,
Convert__Reg1_0__ImmSExti16i81_1,
Convert__Reg1_0__Imm1_1,
Convert__Reg1_0__ImmSExti32i81_1,
Convert__Reg1_0__ImmSExti64i81_1,
Convert__Reg1_0__ImmSExti64i321_1,
Convert__Reg1_0__Mem85_1,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_3,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_7,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_7,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_7,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_7,
Convert__Reg1_1__Imm1_0,
Convert__Reg1_1__Mem85_0,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_6,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_2,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_4,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_13,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_15,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_15,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_15,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_15,
Convert__regEAX__ImmSExti32i81_0,
Convert__Reg1_1__ImmSExti32i81_0,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_14,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_12,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_5,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_11,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_9,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_10,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_10,
Convert__regRAX__ImmSExti64i81_0,
Convert__Reg1_1__ImmSExti64i81_0,
Convert__Reg1_1__ImmSExti64i321_0,
Convert__DstIdx161_1__SrcIdx162_0,
Convert__DstIdx321_1__SrcIdx322_0,
Convert__DstIdx641_1__SrcIdx642_0,
Convert__DstIdx81_1__SrcIdx82_0,
Convert__DstIdx81_0__SrcIdx82_1,
Convert__Reg1_0__Tie0_1_1__Mem645_1__ImmUnsignedi81_2,
Convert__Reg1_2__Tie0_1_1__Mem645_1__ImmUnsignedi81_0,
Convert__DstIdx321_0__SrcIdx322_1,
Convert__DstIdx641_0__SrcIdx642_1,
Convert__Reg1_0__Tie0_1_1__Mem325_1__ImmUnsignedi81_2,
Convert__Reg1_2__Tie0_1_1__Mem325_1__ImmUnsignedi81_0,
Convert__DstIdx161_0__SrcIdx162_1,
Convert__Reg1_1__Tie0_2_2__Mem325_2__Reg1_0__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Mem645_2__Reg1_0__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Mem325_0__Reg1_2__imm_95_8,
Convert__Reg1_1__Tie0_2_2__Mem645_0__Reg1_2__imm_95_8,
Convert__regAX__ImmSExti16i81_0,
Convert__Reg1_1__ImmSExti16i81_0,
Convert__Mem1285_0,
Convert__Mem85_1,
Convert__Reg1_0__Mem5125_1,
Convert__Reg1_1__Mem5125_0,
Convert__Imm1_0__Imm1_1,
Convert__GR32orGR641_2__Reg1_1__ImmUnsignedi81_0,
Convert__Mem325_2__Reg1_1__ImmUnsignedi81_0,
Convert__GR32orGR641_0__Reg1_1__ImmUnsignedi81_2,
Convert__Mem325_0__Reg1_1__ImmUnsignedi81_2,
Convert__Reg1_0__Tie0_1_1__ImmUnsignedi81_1__ImmUnsignedi81_2,
Convert__Reg1_2__Tie0_3_3__ImmUnsignedi81_1__ImmUnsignedi81_0,
Convert__regST1,
Convert__regST0,
Convert__Mem805_0,
Convert__ImmUnsignedi81_0,
Convert__Reg1_0__Reg1_0__ImmSExti16i81_1,
Convert__Reg1_0__Reg1_0__Imm1_1,
Convert__Reg1_0__Reg1_0__ImmSExti32i81_1,
Convert__Reg1_0__Reg1_0__ImmSExti64i81_1,
Convert__Reg1_0__Reg1_0__ImmSExti64i321_1,
Convert__Reg1_0__Reg1_1__ImmSExti16i81_2,
Convert__Reg1_0__Mem165_1__ImmSExti16i81_2,
Convert__Reg1_0__Mem165_1__Imm1_2,
Convert__Reg1_0__Reg1_1__ImmSExti32i81_2,
Convert__Reg1_0__Mem325_1__ImmSExti32i81_2,
Convert__Reg1_0__Reg1_1__ImmSExti64i81_2,
Convert__Reg1_0__Mem645_1__ImmSExti64i81_2,
Convert__Reg1_1__Reg1_1__ImmSExti32i81_0,
Convert__Reg1_1__Reg1_1__Imm1_0,
Convert__Reg1_2__Reg1_1__ImmSExti32i81_0,
Convert__Reg1_2__Mem325_1__ImmSExti32i81_0,
Convert__Reg1_1__Reg1_1__ImmSExti64i81_0,
Convert__Reg1_1__Reg1_1__ImmSExti64i321_0,
Convert__Reg1_2__Reg1_1__ImmSExti64i81_0,
Convert__Reg1_2__Mem645_1__ImmSExti64i81_0,
Convert__Reg1_1__Reg1_1__ImmSExti16i81_0,
Convert__Reg1_1__Tie0_1_1__Mem165_0,
Convert__Reg1_2__Reg1_1__ImmSExti16i81_0,
Convert__Reg1_2__Mem165_1__ImmSExti16i81_0,
Convert__Reg1_2__Mem165_1__Imm1_0,
Convert__ImmUnsignedi81_1,
Convert__DstIdx161_0,
Convert__DstIdx321_0,
Convert__DstIdx81_0,
Convert__DstIdx81_1,
Convert__Reg1_0__Tie0_1_1__Reg1_1__ImmUnsignedi81_2__ImmUnsignedi81_3,
Convert__Reg1_3__Tie0_4_4__Reg1_2__ImmUnsignedi81_1__ImmUnsignedi81_0,
Convert__DstIdx321_1,
Convert__DstIdx161_1,
Convert__AbsMem1_0__imm_95_7,
Convert__AbsMem1_0__imm_95_3,
Convert__AbsMem1_0__imm_95_2,
Convert__AbsMem1_0__imm_95_6,
Convert__AbsMem1_0__imm_95_4,
Convert__AbsMem1_0__imm_95_15,
Convert__AbsMem1_0__imm_95_13,
Convert__AbsMem1_0__imm_95_12,
Convert__AbsMem1_0__imm_95_14,
Convert__AbsMem1_0__imm_95_5,
Convert__AbsMem1_0__imm_95_1,
Convert__AbsMem1_0__imm_95_11,
Convert__AbsMem1_0__imm_95_9,
Convert__AbsMem1_0__imm_95_0,
Convert__AbsMem1_0__imm_95_10,
Convert__AbsMem1_0__imm_95_8,
Convert__Reg1_0__GR16orGR32orGR641_1,
Convert__Reg1_1__GR16orGR32orGR641_0,
Convert__Mem5_1,
Convert__Reg1_0__Mem5_1,
Convert__Reg1_1__Mem5_0,
Convert__SrcIdx162_0,
Convert__SrcIdx322_0,
Convert__SrcIdx642_0,
Convert__SrcIdx82_0,
Convert__SrcIdx82_1,
Convert__SrcIdx162_1,
Convert__SrcIdx322_1,
Convert__SrcIdx642_1,
Convert__MemOffs16_82_1,
Convert__MemOffs32_82_1,
Convert__MemOffs16_162_1,
Convert__MemOffs32_162_1,
Convert__MemOffs16_322_1,
Convert__MemOffs32_322_1,
Convert__MemOffs32_642_1,
Convert__MemOffs16_162_0,
Convert__MemOffs16_322_0,
Convert__MemOffs16_82_0,
Convert__MemOffs32_162_0,
Convert__MemOffs32_322_0,
Convert__MemOffs32_642_0,
Convert__MemOffs32_82_0,
Convert__MemOffs64_82_1,
Convert__MemOffs64_162_1,
Convert__MemOffs64_322_1,
Convert__MemOffs64_642_1,
Convert__MemOffs64_162_0,
Convert__MemOffs64_322_0,
Convert__MemOffs64_642_0,
Convert__MemOffs64_82_0,
Convert__Mem1285_1__Reg1_0,
Convert__Mem1285_0__Reg1_1,
Convert__GR32orGR641_1__Reg1_0,
Convert__GR32orGR641_0__Reg1_1,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_17,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_17,
Convert__Reg1_0__Tie0_1_1__Mem1285_1__imm_95_17,
Convert__Reg1_1__Tie0_2_2__Mem1285_0__imm_95_17,
Convert__Reg1_0__Tie0_1_1__Mem1285_1__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Mem1285_0__imm_95_1,
Convert__Reg1_1__Tie0_2_2__Reg1_0__imm_95_16,
Convert__Reg1_0__Tie0_1_1__Reg1_1__imm_95_16,
Convert__Reg1_0__Tie0_1_1__Mem1285_1__imm_95_16,
Convert__Reg1_1__Tie0_2_2__Mem1285_0__imm_95_16,
Convert__Reg1_0__Tie0_1_1__Mem1285_1__imm_95_0,
Convert__Reg1_1__Tie0_2_2__Mem1285_0__imm_95_0,
Convert__Mem85_2__Reg1_1__ImmUnsignedi81_0,
Convert__Mem85_0__Reg1_1__ImmUnsignedi81_2,
Convert__Mem645_2__Reg1_1__ImmUnsignedi81_0,
Convert__Mem645_0__Reg1_1__ImmUnsignedi81_2,
Convert__Mem165_2__Reg1_1__ImmUnsignedi81_0,
Convert__Mem165_0__Reg1_1__ImmUnsignedi81_2,
Convert__Reg1_0__Tie0_1_1__GR32orGR641_1__ImmUnsignedi81_2,
Convert__Reg1_0__Tie0_1_1__Mem85_1__ImmUnsignedi81_2,
Convert__Reg1_2__Tie0_1_1__GR32orGR641_1__ImmUnsignedi81_0,
Convert__Reg1_2__Tie0_1_1__Mem85_1__ImmUnsignedi81_0,
Convert__Reg1_0__Tie0_1_1__Mem165_1__ImmUnsignedi81_2,
Convert__Reg1_2__Tie0_1_1__Mem165_1__ImmUnsignedi81_0,
Convert__Reg1_0__Mem645_1__ImmUnsignedi81_2,
Convert__Reg1_2__Mem645_1__ImmUnsignedi81_0,
Convert__Reg1_1__Tie0_1_1__ImmUnsignedi81_0,
Convert__ImmSExti64i81_0,
Convert__ImmSExti16i81_0,
Convert__ImmSExti32i81_0,
Convert__Mem85_0__ImmUnsignedi81_1,
Convert__Reg1_1__Tie0_1_1,
Convert__Mem85_1__ImmUnsignedi81_0,
Convert__Reg1_0__Mem325_1__ImmUnsignedi81_2,
Convert__Reg1_2__Mem325_1__ImmUnsignedi81_0,
Convert__DstIdx641_0,
Convert__DstIdx641_1,
Convert__Reg1_0__imm_95_7,
Convert__Mem85_0__imm_95_7,
Convert__Reg1_0__imm_95_3,
Convert__Mem85_0__imm_95_3,
Convert__Reg1_0__imm_95_2,
Convert__Mem85_0__imm_95_2,
Convert__Reg1_0__imm_95_6,
Convert__Mem85_0__imm_95_6,
Convert__Reg1_0__imm_95_4,
Convert__Mem85_0__imm_95_4,
Convert__Reg1_0__imm_95_15,
Convert__Mem85_0__imm_95_15,
Convert__Reg1_0__imm_95_13,
Convert__Mem85_0__imm_95_13,
Convert__Reg1_0__imm_95_12,
Convert__Mem85_0__imm_95_12,
Convert__Reg1_0__imm_95_14,
Convert__Mem85_0__imm_95_14,
Convert__Reg1_0__imm_95_5,
Convert__Mem85_0__imm_95_5,
Convert__Reg1_0__imm_95_1,
Convert__Mem85_0__imm_95_1,
Convert__Reg1_0__imm_95_11,
Convert__Mem85_0__imm_95_11,
Convert__Reg1_0__imm_95_9,
Convert__Mem85_0__imm_95_9,
Convert__Reg1_0__imm_95_0,