blob: 50d95b042249d0df36f225e6c9da74b48bcc9794 [file] [log] [blame] [edit]
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* Subtarget Enumeration Source Fragment *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
#ifdef GET_SUBTARGETINFO_ENUM
#undef GET_SUBTARGETINFO_ENUM
namespace llvm {
namespace X86 {
enum {
Feature3DNow = 0,
Feature3DNowA = 1,
FeatureADX = 2,
FeatureAES = 3,
FeatureAMXBF16 = 4,
FeatureAMXFP16 = 5,
FeatureAMXINT8 = 6,
FeatureAMXTILE = 7,
FeatureAVX = 8,
FeatureAVX2 = 9,
FeatureAVX512 = 10,
FeatureAVXIFMA = 11,
FeatureAVXNECONVERT = 12,
FeatureAVXVNNI = 13,
FeatureAVXVNNIINT8 = 14,
FeatureBF16 = 15,
FeatureBITALG = 16,
FeatureBMI = 17,
FeatureBMI2 = 18,
FeatureBWI = 19,
FeatureCDI = 20,
FeatureCLDEMOTE = 21,
FeatureCLFLUSHOPT = 22,
FeatureCLWB = 23,
FeatureCLZERO = 24,
FeatureCMOV = 25,
FeatureCMPCCXADD = 26,
FeatureCRC32 = 27,
FeatureCX8 = 28,
FeatureCX16 = 29,
FeatureDQI = 30,
FeatureENQCMD = 31,
FeatureERI = 32,
FeatureERMSB = 33,
FeatureF16C = 34,
FeatureFMA = 35,
FeatureFMA4 = 36,
FeatureFP16 = 37,
FeatureFSGSBase = 38,
FeatureFSRM = 39,
FeatureFXSR = 40,
FeatureGFNI = 41,
FeatureHRESET = 42,
FeatureHardenSlsIJmp = 43,
FeatureHardenSlsRet = 44,
FeatureIFMA = 45,
FeatureINVPCID = 46,
FeatureKL = 47,
FeatureLAHFSAHF64 = 48,
FeatureLVIControlFlowIntegrity = 49,
FeatureLVILoadHardening = 50,
FeatureLWP = 51,
FeatureLZCNT = 52,
FeatureMMX = 53,
FeatureMOVBE = 54,
FeatureMOVDIR64B = 55,
FeatureMOVDIRI = 56,
FeatureMWAITX = 57,
FeatureNOPL = 58,
FeaturePCLMUL = 59,
FeaturePCONFIG = 60,
FeaturePFI = 61,
FeaturePKU = 62,
FeaturePOPCNT = 63,
FeaturePREFETCHI = 64,
FeaturePREFETCHWT1 = 65,
FeaturePRFCHW = 66,
FeaturePTWRITE = 67,
FeatureRAOINT = 68,
FeatureRDPID = 69,
FeatureRDPRU = 70,
FeatureRDRAND = 71,
FeatureRDSEED = 72,
FeatureRTM = 73,
FeatureRetpoline = 74,
FeatureRetpolineExternalThunk = 75,
FeatureRetpolineIndirectBranches = 76,
FeatureRetpolineIndirectCalls = 77,
FeatureSERIALIZE = 78,
FeatureSGX = 79,
FeatureSHA = 80,
FeatureSHSTK = 81,
FeatureSSE1 = 82,
FeatureSSE2 = 83,
FeatureSSE3 = 84,
FeatureSSE4A = 85,
FeatureSSE41 = 86,
FeatureSSE42 = 87,
FeatureSSEUnalignedMem = 88,
FeatureSSSE3 = 89,
FeatureSoftFloat = 90,
FeatureSpeculativeExecutionSideEffectSuppression = 91,
FeatureTBM = 92,
FeatureTSXLDTRK = 93,
FeatureTaggedGlobals = 94,
FeatureUINTR = 95,
FeatureVAES = 96,
FeatureVBMI = 97,
FeatureVBMI2 = 98,
FeatureVLX = 99,
FeatureVNNI = 100,
FeatureVP2INTERSECT = 101,
FeatureVPCLMULQDQ = 102,
FeatureVPOPCNTDQ = 103,
FeatureWAITPKG = 104,
FeatureWBNOINVD = 105,
FeatureWIDEKL = 106,
FeatureX86_64 = 107,
FeatureX87 = 108,
FeatureXOP = 109,
FeatureXSAVE = 110,
FeatureXSAVEC = 111,
FeatureXSAVEOPT = 112,
FeatureXSAVES = 113,
Is16Bit = 114,
Is32Bit = 115,
Is64Bit = 116,
ProcIntelAtom = 117,
TuningAllowLight256Bit = 118,
TuningBranchFusion = 119,
TuningFast7ByteNOP = 120,
TuningFast11ByteNOP = 121,
TuningFast15ByteNOP = 122,
TuningFastBEXTR = 123,
TuningFastGather = 124,
TuningFastHorizontalOps = 125,
TuningFastLZCNT = 126,
TuningFastMOVBE = 127,
TuningFastSHLDRotate = 128,
TuningFastScalarFSQRT = 129,
TuningFastScalarShiftMasks = 130,
TuningFastVariableCrossLaneShuffle = 131,
TuningFastVariablePerLaneShuffle = 132,
TuningFastVectorFSQRT = 133,
TuningFastVectorShiftMasks = 134,
TuningGETMANTFalseDeps = 135,
TuningInsertVZEROUPPER = 136,
TuningLEAForSP = 137,
TuningLEAUsesAG = 138,
TuningLZCNTFalseDeps = 139,
TuningMULCFalseDeps = 140,
TuningMULLQFalseDeps = 141,
TuningMacroFusion = 142,
TuningPERMFalseDeps = 143,
TuningPOPCNTFalseDeps = 144,
TuningPadShortFunctions = 145,
TuningPrefer128Bit = 146,
TuningPrefer256Bit = 147,
TuningPreferMaskRegisters = 148,
TuningRANGEFalseDeps = 149,
TuningSBBDepBreaking = 150,
TuningSlow3OpsLEA = 151,
TuningSlowDivide32 = 152,
TuningSlowDivide64 = 153,
TuningSlowIncDec = 154,
TuningSlowLEA = 155,
TuningSlowPMADDWD = 156,
TuningSlowPMULLD = 157,
TuningSlowSHLD = 158,
TuningSlowTwoMemOps = 159,
TuningSlowUAMem16 = 160,
TuningSlowUAMem32 = 161,
TuningUseGLMDivSqrtCosts = 162,
TuningUseSLMArithCosts = 163,
NumSubtargetFeatures = 164
};
} // end namespace X86
} // end namespace llvm
#endif // GET_SUBTARGETINFO_ENUM
#ifdef GET_SUBTARGETINFO_MACRO
GET_SUBTARGETINFO_MACRO(IsAtom, false, isAtom)
GET_SUBTARGETINFO_MACRO(Is16Bit, false, is16Bit)
GET_SUBTARGETINFO_MACRO(Is32Bit, false, is32Bit)
GET_SUBTARGETINFO_MACRO(HasX86_64, false, hasX86_64)
GET_SUBTARGETINFO_MACRO(Is64Bit, false, is64Bit)
GET_SUBTARGETINFO_MACRO(HasADX, false, hasADX)
GET_SUBTARGETINFO_MACRO(HasAES, false, hasAES)
GET_SUBTARGETINFO_MACRO(AllowLight256Bit, false, allowLight256Bit)
GET_SUBTARGETINFO_MACRO(HasAMXBF16, false, hasAMXBF16)
GET_SUBTARGETINFO_MACRO(HasAMXFP16, false, hasAMXFP16)
GET_SUBTARGETINFO_MACRO(HasAMXINT8, false, hasAMXINT8)
GET_SUBTARGETINFO_MACRO(HasAMXTILE, false, hasAMXTILE)
GET_SUBTARGETINFO_MACRO(HasBF16, false, hasBF16)
GET_SUBTARGETINFO_MACRO(HasBITALG, false, hasBITALG)
GET_SUBTARGETINFO_MACRO(HasBWI, false, hasBWI)
GET_SUBTARGETINFO_MACRO(HasCDI, false, hasCDI)
GET_SUBTARGETINFO_MACRO(HasDQI, false, hasDQI)
GET_SUBTARGETINFO_MACRO(HasERI, false, hasERI)
GET_SUBTARGETINFO_MACRO(HasFP16, false, hasFP16)
GET_SUBTARGETINFO_MACRO(HasIFMA, false, hasIFMA)
GET_SUBTARGETINFO_MACRO(HasPFI, false, hasPFI)
GET_SUBTARGETINFO_MACRO(HasVBMI, false, hasVBMI)
GET_SUBTARGETINFO_MACRO(HasVBMI2, false, hasVBMI2)
GET_SUBTARGETINFO_MACRO(HasVLX, false, hasVLX)
GET_SUBTARGETINFO_MACRO(HasVNNI, false, hasVNNI)
GET_SUBTARGETINFO_MACRO(HasVP2INTERSECT, false, hasVP2INTERSECT)
GET_SUBTARGETINFO_MACRO(HasVPOPCNTDQ, false, hasVPOPCNTDQ)
GET_SUBTARGETINFO_MACRO(HasAVXIFMA, false, hasAVXIFMA)
GET_SUBTARGETINFO_MACRO(HasAVXNECONVERT, false, hasAVXNECONVERT)
GET_SUBTARGETINFO_MACRO(HasAVXVNNI, false, hasAVXVNNI)
GET_SUBTARGETINFO_MACRO(HasAVXVNNIINT8, false, hasAVXVNNIINT8)
GET_SUBTARGETINFO_MACRO(HasBMI, false, hasBMI)
GET_SUBTARGETINFO_MACRO(HasBMI2, false, hasBMI2)
GET_SUBTARGETINFO_MACRO(HasBranchFusion, false, hasBranchFusion)
GET_SUBTARGETINFO_MACRO(HasCLDEMOTE, false, hasCLDEMOTE)
GET_SUBTARGETINFO_MACRO(HasCLFLUSHOPT, false, hasCLFLUSHOPT)
GET_SUBTARGETINFO_MACRO(HasCLWB, false, hasCLWB)
GET_SUBTARGETINFO_MACRO(HasCLZERO, false, hasCLZERO)
GET_SUBTARGETINFO_MACRO(HasCMOV, false, hasCMOV)
GET_SUBTARGETINFO_MACRO(HasCMPCCXADD, false, hasCMPCCXADD)
GET_SUBTARGETINFO_MACRO(HasCRC32, false, hasCRC32)
GET_SUBTARGETINFO_MACRO(HasCX16, false, hasCX16)
GET_SUBTARGETINFO_MACRO(HasCX8, false, hasCX8)
GET_SUBTARGETINFO_MACRO(HasENQCMD, false, hasENQCMD)
GET_SUBTARGETINFO_MACRO(HasERMSB, false, hasERMSB)
GET_SUBTARGETINFO_MACRO(HasF16C, false, hasF16C)
GET_SUBTARGETINFO_MACRO(HasGETMANTFalseDeps, false, hasGETMANTFalseDeps)
GET_SUBTARGETINFO_MACRO(HasLZCNTFalseDeps, false, hasLZCNTFalseDeps)
GET_SUBTARGETINFO_MACRO(HasMULCFalseDeps, false, hasMULCFalseDeps)
GET_SUBTARGETINFO_MACRO(HasMULLQFalseDeps, false, hasMULLQFalseDeps)
GET_SUBTARGETINFO_MACRO(HasPERMFalseDeps, false, hasPERMFalseDeps)
GET_SUBTARGETINFO_MACRO(HasPOPCNTFalseDeps, false, hasPOPCNTFalseDeps)
GET_SUBTARGETINFO_MACRO(HasRANGEFalseDeps, false, hasRANGEFalseDeps)
GET_SUBTARGETINFO_MACRO(HasFast11ByteNOP, false, hasFast11ByteNOP)
GET_SUBTARGETINFO_MACRO(HasFast15ByteNOP, false, hasFast15ByteNOP)
GET_SUBTARGETINFO_MACRO(HasFast7ByteNOP, false, hasFast7ByteNOP)
GET_SUBTARGETINFO_MACRO(HasFastBEXTR, false, hasFastBEXTR)
GET_SUBTARGETINFO_MACRO(HasFastGather, false, hasFastGather)
GET_SUBTARGETINFO_MACRO(HasFastHorizontalOps, false, hasFastHorizontalOps)
GET_SUBTARGETINFO_MACRO(HasFastLZCNT, false, hasFastLZCNT)
GET_SUBTARGETINFO_MACRO(HasFastMOVBE, false, hasFastMOVBE)
GET_SUBTARGETINFO_MACRO(HasFastScalarFSQRT, false, hasFastScalarFSQRT)
GET_SUBTARGETINFO_MACRO(HasFastScalarShiftMasks, false, hasFastScalarShiftMasks)
GET_SUBTARGETINFO_MACRO(HasFastSHLDRotate, false, hasFastSHLDRotate)
GET_SUBTARGETINFO_MACRO(HasFastVariableCrossLaneShuffle, false, hasFastVariableCrossLaneShuffle)
GET_SUBTARGETINFO_MACRO(HasFastVariablePerLaneShuffle, false, hasFastVariablePerLaneShuffle)
GET_SUBTARGETINFO_MACRO(HasFastVectorFSQRT, false, hasFastVectorFSQRT)
GET_SUBTARGETINFO_MACRO(HasFastVectorShiftMasks, false, hasFastVectorShiftMasks)
GET_SUBTARGETINFO_MACRO(HasFMA, false, hasFMA)
GET_SUBTARGETINFO_MACRO(HasFMA4, false, hasFMA4)
GET_SUBTARGETINFO_MACRO(HasFSGSBase, false, hasFSGSBase)
GET_SUBTARGETINFO_MACRO(HasFSRM, false, hasFSRM)
GET_SUBTARGETINFO_MACRO(HasFXSR, false, hasFXSR)
GET_SUBTARGETINFO_MACRO(HasGFNI, false, hasGFNI)
GET_SUBTARGETINFO_MACRO(HardenSlsIJmp, false, hardenSlsIJmp)
GET_SUBTARGETINFO_MACRO(HardenSlsRet, false, hardenSlsRet)
GET_SUBTARGETINFO_MACRO(HasHRESET, false, hasHRESET)
GET_SUBTARGETINFO_MACRO(HasSlowDivide32, false, hasSlowDivide32)
GET_SUBTARGETINFO_MACRO(HasSlowDivide64, false, hasSlowDivide64)
GET_SUBTARGETINFO_MACRO(HasINVPCID, false, hasINVPCID)
GET_SUBTARGETINFO_MACRO(HasKL, false, hasKL)
GET_SUBTARGETINFO_MACRO(UseLeaForSP, false, useLeaForSP)
GET_SUBTARGETINFO_MACRO(LeaUsesAG, false, leaUsesAG)
GET_SUBTARGETINFO_MACRO(UseLVIControlFlowIntegrity, false, useLVIControlFlowIntegrity)
GET_SUBTARGETINFO_MACRO(UseLVILoadHardening, false, useLVILoadHardening)
GET_SUBTARGETINFO_MACRO(HasLWP, false, hasLWP)
GET_SUBTARGETINFO_MACRO(HasLZCNT, false, hasLZCNT)
GET_SUBTARGETINFO_MACRO(HasMacroFusion, false, hasMacroFusion)
GET_SUBTARGETINFO_MACRO(HasMOVBE, false, hasMOVBE)
GET_SUBTARGETINFO_MACRO(HasMOVDIR64B, false, hasMOVDIR64B)
GET_SUBTARGETINFO_MACRO(HasMOVDIRI, false, hasMOVDIRI)
GET_SUBTARGETINFO_MACRO(HasMWAITX, false, hasMWAITX)
GET_SUBTARGETINFO_MACRO(HasNOPL, false, hasNOPL)
GET_SUBTARGETINFO_MACRO(PadShortFunctions, false, padShortFunctions)
GET_SUBTARGETINFO_MACRO(HasPCLMUL, false, hasPCLMUL)
GET_SUBTARGETINFO_MACRO(HasPCONFIG, false, hasPCONFIG)
GET_SUBTARGETINFO_MACRO(HasPKU, false, hasPKU)
GET_SUBTARGETINFO_MACRO(HasPOPCNT, false, hasPOPCNT)
GET_SUBTARGETINFO_MACRO(Prefer128Bit, false, prefer128Bit)
GET_SUBTARGETINFO_MACRO(Prefer256Bit, false, prefer256Bit)
GET_SUBTARGETINFO_MACRO(PreferMaskRegisters, false, preferMaskRegisters)
GET_SUBTARGETINFO_MACRO(HasPREFETCHI, false, hasPREFETCHI)
GET_SUBTARGETINFO_MACRO(HasPREFETCHWT1, false, hasPREFETCHWT1)
GET_SUBTARGETINFO_MACRO(HasPRFCHW, false, hasPRFCHW)
GET_SUBTARGETINFO_MACRO(HasPTWRITE, false, hasPTWRITE)
GET_SUBTARGETINFO_MACRO(HasRAOINT, false, hasRAOINT)
GET_SUBTARGETINFO_MACRO(HasRDPID, false, hasRDPID)
GET_SUBTARGETINFO_MACRO(HasRDPRU, false, hasRDPRU)
GET_SUBTARGETINFO_MACRO(HasRDRAND, false, hasRDRAND)
GET_SUBTARGETINFO_MACRO(HasRDSEED, false, hasRDSEED)
GET_SUBTARGETINFO_MACRO(DeprecatedUseRetpoline, false, deprecatedUseRetpoline)
GET_SUBTARGETINFO_MACRO(UseRetpolineExternalThunk, false, useRetpolineExternalThunk)
GET_SUBTARGETINFO_MACRO(UseRetpolineIndirectBranches, false, useRetpolineIndirectBranches)
GET_SUBTARGETINFO_MACRO(UseRetpolineIndirectCalls, false, useRetpolineIndirectCalls)
GET_SUBTARGETINFO_MACRO(HasRTM, false, hasRTM)
GET_SUBTARGETINFO_MACRO(HasLAHFSAHF64, false, hasLAHFSAHF64)
GET_SUBTARGETINFO_MACRO(HasSBBDepBreaking, false, hasSBBDepBreaking)
GET_SUBTARGETINFO_MACRO(HasSERIALIZE, false, hasSERIALIZE)
GET_SUBTARGETINFO_MACRO(UseSpeculativeExecutionSideEffectSuppression, false, useSpeculativeExecutionSideEffectSuppression)
GET_SUBTARGETINFO_MACRO(HasSGX, false, hasSGX)
GET_SUBTARGETINFO_MACRO(HasSHA, false, hasSHA)
GET_SUBTARGETINFO_MACRO(HasSHSTK, false, hasSHSTK)
GET_SUBTARGETINFO_MACRO(Slow3OpsLEA, false, slow3OpsLEA)
GET_SUBTARGETINFO_MACRO(SlowIncDec, false, slowIncDec)
GET_SUBTARGETINFO_MACRO(SlowLEA, false, slowLEA)
GET_SUBTARGETINFO_MACRO(IsPMADDWDSlow, false, isPMADDWDSlow)
GET_SUBTARGETINFO_MACRO(IsPMULLDSlow, false, isPMULLDSlow)
GET_SUBTARGETINFO_MACRO(IsSHLDSlow, false, isSHLDSlow)
GET_SUBTARGETINFO_MACRO(SlowTwoMemOps, false, slowTwoMemOps)
GET_SUBTARGETINFO_MACRO(IsUnalignedMem16Slow, false, isUnalignedMem16Slow)
GET_SUBTARGETINFO_MACRO(IsUnalignedMem32Slow, false, isUnalignedMem32Slow)
GET_SUBTARGETINFO_MACRO(UseSoftFloat, false, useSoftFloat)
GET_SUBTARGETINFO_MACRO(HasSSEUnalignedMem, false, hasSSEUnalignedMem)
GET_SUBTARGETINFO_MACRO(HasSSE4A, false, hasSSE4A)
GET_SUBTARGETINFO_MACRO(AllowTaggedGlobals, false, allowTaggedGlobals)
GET_SUBTARGETINFO_MACRO(HasTBM, false, hasTBM)
GET_SUBTARGETINFO_MACRO(HasTSXLDTRK, false, hasTSXLDTRK)
GET_SUBTARGETINFO_MACRO(HasUINTR, false, hasUINTR)
GET_SUBTARGETINFO_MACRO(UseGLMDivSqrtCosts, false, useGLMDivSqrtCosts)
GET_SUBTARGETINFO_MACRO(UseSLMArithCosts, false, useSLMArithCosts)
GET_SUBTARGETINFO_MACRO(HasVAES, false, hasVAES)
GET_SUBTARGETINFO_MACRO(HasVPCLMULQDQ, false, hasVPCLMULQDQ)
GET_SUBTARGETINFO_MACRO(InsertVZEROUPPER, false, insertVZEROUPPER)
GET_SUBTARGETINFO_MACRO(HasWAITPKG, false, hasWAITPKG)
GET_SUBTARGETINFO_MACRO(HasWBNOINVD, false, hasWBNOINVD)
GET_SUBTARGETINFO_MACRO(HasWIDEKL, false, hasWIDEKL)
GET_SUBTARGETINFO_MACRO(HasX87, false, hasX87)
GET_SUBTARGETINFO_MACRO(HasXOP, false, hasXOP)
GET_SUBTARGETINFO_MACRO(HasXSAVE, false, hasXSAVE)
GET_SUBTARGETINFO_MACRO(HasXSAVEC, false, hasXSAVEC)
GET_SUBTARGETINFO_MACRO(HasXSAVEOPT, false, hasXSAVEOPT)
GET_SUBTARGETINFO_MACRO(HasXSAVES, false, hasXSAVES)
#undef GET_SUBTARGETINFO_MACRO
#endif // GET_SUBTARGETINFO_MACRO
#ifdef GET_SUBTARGETINFO_MC_DESC
#undef GET_SUBTARGETINFO_MC_DESC
namespace llvm {
// Sorted (by key) array of values for CPU features.
extern const llvm::SubtargetFeatureKV X86FeatureKV[] = {
{ "16bit-mode", "16-bit mode (i8086)", X86::Is16Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "32bit-mode", "32-bit mode (80386)", X86::Is32Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "3dnow", "Enable 3DNow! instructions", X86::Feature3DNow, { { { 0x20000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "3dnowa", "Enable 3DNow! Athlon instructions", X86::Feature3DNowA, { { { 0x1ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "64bit", "Support 64-bit instructions", X86::FeatureX86_64, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "64bit-mode", "64-bit mode (x86_64)", X86::Is64Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "adx", "Support ADX instructions", X86::FeatureADX, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "aes", "Enable AES instructions", X86::FeatureAES, { { { 0x0ULL, 0x80000ULL, 0x0ULL, 0x0ULL, } } } },
{ "allow-light-256-bit", "Enable generation of 256-bit load/stores even if we prefer 128-bit", X86::TuningAllowLight256Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "amx-bf16", "Support AMX-BF16 instructions", X86::FeatureAMXBF16, { { { 0x80ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "amx-fp16", "Support AMX amx-fp16 instructions", X86::FeatureAMXFP16, { { { 0x80ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "amx-int8", "Support AMX-INT8 instructions", X86::FeatureAMXINT8, { { { 0x80ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "amx-tile", "Support AMX-TILE instructions", X86::FeatureAMXTILE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx", "Enable AVX instructions", X86::FeatureAVX, { { { 0x0ULL, 0x800000ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx2", "Enable AVX2 instructions", X86::FeatureAVX2, { { { 0x100ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512bf16", "Support bfloat16 floating point", X86::FeatureBF16, { { { 0x80000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512bitalg", "Enable AVX-512 Bit Algorithms", X86::FeatureBITALG, { { { 0x80000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512bw", "Enable AVX-512 Byte and Word Instructions", X86::FeatureBWI, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512cd", "Enable AVX-512 Conflict Detection Instructions", X86::FeatureCDI, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512dq", "Enable AVX-512 Doubleword and Quadword Instructions", X86::FeatureDQI, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512er", "Enable AVX-512 Exponential and Reciprocal Instructions", X86::FeatureERI, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512f", "Enable AVX-512 instructions", X86::FeatureAVX512, { { { 0xc00000200ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512fp16", "Support 16-bit floating point", X86::FeatureFP16, { { { 0x40080000ULL, 0x800000000ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512ifma", "Enable AVX-512 Integer Fused Multiple-Add", X86::FeatureIFMA, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512pf", "Enable AVX-512 PreFetch Instructions", X86::FeaturePFI, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512vbmi", "Enable AVX-512 Vector Byte Manipulation Instructions", X86::FeatureVBMI, { { { 0x80000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512vbmi2", "Enable AVX-512 further Vector Byte Manipulation Instructions", X86::FeatureVBMI2, { { { 0x80000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512vl", "Enable AVX-512 Vector Length eXtensions", X86::FeatureVLX, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512vnni", "Enable AVX-512 Vector Neural Network Instructions", X86::FeatureVNNI, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512vp2intersect", "Enable AVX-512 vp2intersect", X86::FeatureVP2INTERSECT, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avx512vpopcntdq", "Enable AVX-512 Population Count Instructions", X86::FeatureVPOPCNTDQ, { { { 0x400ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avxifma", "Enable AVX-IFMA", X86::FeatureAVXIFMA, { { { 0x200ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avxneconvert", "Support AVX-NE-CONVERT instructions", X86::FeatureAVXNECONVERT, { { { 0x200ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avxvnni", "Support AVX_VNNI encoding", X86::FeatureAVXVNNI, { { { 0x200ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "avxvnniint8", "Enable AVX-VNNI-INT8", X86::FeatureAVXVNNIINT8, { { { 0x200ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "bmi", "Support BMI instructions", X86::FeatureBMI, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "bmi2", "Support BMI2 instructions", X86::FeatureBMI2, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "branchfusion", "CMP/TEST can be fused with conditional branches", X86::TuningBranchFusion, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "cldemote", "Enable Cache Line Demote", X86::FeatureCLDEMOTE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "clflushopt", "Flush A Cache Line Optimized", X86::FeatureCLFLUSHOPT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "clwb", "Cache Line Write Back", X86::FeatureCLWB, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "clzero", "Enable Cache Line Zero", X86::FeatureCLZERO, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "cmov", "Enable conditional move instructions", X86::FeatureCMOV, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "cmpccxadd", "Support CMPCCXADD instructions", X86::FeatureCMPCCXADD, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "crc32", "Enable SSE 4.2 CRC32 instruction (used when SSE4.2 is supported but function is GPR only)", X86::FeatureCRC32, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "cx16", "64-bit with cmpxchg16b (this is true for most x86-64 chips, but not the first AMD chips)", X86::FeatureCX16, { { { 0x10000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "cx8", "Support CMPXCHG8B instructions", X86::FeatureCX8, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "enqcmd", "Has ENQCMD instructions", X86::FeatureENQCMD, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "ermsb", "REP MOVS/STOS are fast", X86::FeatureERMSB, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "f16c", "Support 16-bit floating point conversion instructions", X86::FeatureF16C, { { { 0x100ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-getmant", "VGETMANTSS/SD/SH and VGETMANDPS/PD(memory version) has a false dependency on dest register", X86::TuningGETMANTFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-lzcnt-tzcnt", "LZCNT/TZCNT have a false dependency on dest register", X86::TuningLZCNTFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-mulc", "VF[C]MULCPH/SH has a false dependency on dest register", X86::TuningMULCFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-mullq", "VPMULLQ has a false dependency on dest register", X86::TuningMULLQFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-perm", "VPERMD/Q/PS/PD has a false dependency on dest register", X86::TuningPERMFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-popcnt", "POPCNT has a false dependency on dest register", X86::TuningPOPCNTFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "false-deps-range", "VRANGEPD/PS/SD/SS has a false dependency on dest register", X86::TuningRANGEFalseDeps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-11bytenop", "Target can quickly decode up to 11 byte NOPs", X86::TuningFast11ByteNOP, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-15bytenop", "Target can quickly decode up to 15 byte NOPs", X86::TuningFast15ByteNOP, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-7bytenop", "Target can quickly decode up to 7 byte NOPs", X86::TuningFast7ByteNOP, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-bextr", "Indicates that the BEXTR instruction is implemented as a single uop with good throughput", X86::TuningFastBEXTR, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-gather", "Indicates if gather is reasonably fast (this is true for Skylake client and all AVX-512 CPUs)", X86::TuningFastGather, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-hops", "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles", X86::TuningFastHorizontalOps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-lzcnt", "LZCNT instructions are as fast as most simple integer ops", X86::TuningFastLZCNT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-movbe", "Prefer a movbe over a single-use load + bswap / single-use bswap + store", X86::TuningFastMOVBE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-scalar-fsqrt", "Scalar SQRT is fast (disable Newton-Raphson)", X86::TuningFastScalarFSQRT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-scalar-shift-masks", "Prefer a left/right scalar logical shift pair over a shift+and pair", X86::TuningFastScalarShiftMasks, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-shld-rotate", "SHLD can be used as a faster rotate", X86::TuningFastSHLDRotate, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-variable-crosslane-shuffle", "Cross-lane shuffles with variable masks are fast", X86::TuningFastVariableCrossLaneShuffle, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-variable-perlane-shuffle", "Per-lane shuffles with variable masks are fast", X86::TuningFastVariablePerLaneShuffle, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-vector-fsqrt", "Vector SQRT is fast (disable Newton-Raphson)", X86::TuningFastVectorFSQRT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fast-vector-shift-masks", "Prefer a left/right vector logical shift pair over a shift+and pair", X86::TuningFastVectorShiftMasks, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fma", "Enable three-operand fused multiple-add", X86::FeatureFMA, { { { 0x100ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fma4", "Enable four-operand fused multiple-add", X86::FeatureFMA4, { { { 0x100ULL, 0x200000ULL, 0x0ULL, 0x0ULL, } } } },
{ "fsgsbase", "Support FS/GS Base instructions", X86::FeatureFSGSBase, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fsrm", "REP MOVSB of short lengths is faster", X86::FeatureFSRM, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "fxsr", "Support fxsave/fxrestore instructions", X86::FeatureFXSR, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "gfni", "Enable Galois Field Arithmetic Instructions", X86::FeatureGFNI, { { { 0x0ULL, 0x80000ULL, 0x0ULL, 0x0ULL, } } } },
{ "harden-sls-ijmp", "Harden against straight line speculation across indirect JMP instructions.", X86::FeatureHardenSlsIJmp, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "harden-sls-ret", "Harden against straight line speculation across RET instructions.", X86::FeatureHardenSlsRet, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "hreset", "Has hreset instruction", X86::FeatureHRESET, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "idivl-to-divb", "Use 8-bit divide for positive values less than 256", X86::TuningSlowDivide32, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "idivq-to-divl", "Use 32-bit divide for positive values less than 2^32", X86::TuningSlowDivide64, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "invpcid", "Invalidate Process-Context Identifier", X86::FeatureINVPCID, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "kl", "Support Key Locker kl Instructions", X86::FeatureKL, { { { 0x0ULL, 0x80000ULL, 0x0ULL, 0x0ULL, } } } },
{ "lea-sp", "Use LEA for adjusting the stack pointer (this is an optimization for Intel Atom processors)", X86::TuningLEAForSP, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "lea-uses-ag", "LEA instruction needs inputs at AG stage", X86::TuningLEAUsesAG, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "lvi-cfi", "Prevent indirect calls/branches from using a memory operand, and precede all indirect calls/branches from a register with an LFENCE instruction to serialize control flow. Also decompose RET instructions into a POP+LFENCE+JMP sequence.", X86::FeatureLVIControlFlowIntegrity, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "lvi-load-hardening", "Insert LFENCE instructions to prevent data speculatively injected into loads from being used maliciously.", X86::FeatureLVILoadHardening, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "lwp", "Enable LWP instructions", X86::FeatureLWP, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "lzcnt", "Support LZCNT instruction", X86::FeatureLZCNT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "macrofusion", "Various instructions can be fused with conditional branches", X86::TuningMacroFusion, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "mmx", "Enable MMX instructions", X86::FeatureMMX, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "movbe", "Support MOVBE instruction", X86::FeatureMOVBE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "movdir64b", "Support movdir64b instruction (direct store 64 bytes)", X86::FeatureMOVDIR64B, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "movdiri", "Support movdiri instruction (direct store integer)", X86::FeatureMOVDIRI, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "mwaitx", "Enable MONITORX/MWAITX timer functionality", X86::FeatureMWAITX, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "nopl", "Enable NOPL instruction (generally pentium pro+)", X86::FeatureNOPL, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "pad-short-functions", "Pad short functions (to prevent a stall when returning too early)", X86::TuningPadShortFunctions, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "pclmul", "Enable packed carry-less multiplication instructions", X86::FeaturePCLMUL, { { { 0x0ULL, 0x80000ULL, 0x0ULL, 0x0ULL, } } } },
{ "pconfig", "platform configuration instruction", X86::FeaturePCONFIG, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "pku", "Enable protection keys", X86::FeaturePKU, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "popcnt", "Support POPCNT instruction", X86::FeaturePOPCNT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "prefer-128-bit", "Prefer 128-bit AVX instructions", X86::TuningPrefer128Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "prefer-256-bit", "Prefer 256-bit AVX instructions", X86::TuningPrefer256Bit, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "prefer-mask-registers", "Prefer AVX512 mask registers over PTEST/MOVMSK", X86::TuningPreferMaskRegisters, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "prefetchi", "Prefetch instruction with T0 or T1 Hint", X86::FeaturePREFETCHI, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "prefetchwt1", "Prefetch with Intent to Write and T1 Hint", X86::FeaturePREFETCHWT1, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "prfchw", "Support PRFCHW instructions", X86::FeaturePRFCHW, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "ptwrite", "Support ptwrite instruction", X86::FeaturePTWRITE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "raoint", "Support RAO-INT instructions", X86::FeatureRAOINT, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "rdpid", "Support RDPID instructions", X86::FeatureRDPID, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "rdpru", "Support RDPRU instructions", X86::FeatureRDPRU, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "rdrnd", "Support RDRAND instruction", X86::FeatureRDRAND, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "rdseed", "Support RDSEED instruction", X86::FeatureRDSEED, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "retpoline", "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct", X86::FeatureRetpoline, { { { 0x0ULL, 0x3000ULL, 0x0ULL, 0x0ULL, } } } },
{ "retpoline-external-thunk", "When lowering an indirect call or branch using a `retpoline`, rely on the specified user provided thunk rather than emitting one ourselves. Only has effect when combined with some other retpoline feature", X86::FeatureRetpolineExternalThunk, { { { 0x0ULL, 0x2000ULL, 0x0ULL, 0x0ULL, } } } },
{ "retpoline-indirect-branches", "Remove speculation of indirect branches from the generated code", X86::FeatureRetpolineIndirectBranches, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "retpoline-indirect-calls", "Remove speculation of indirect calls from the generated code", X86::FeatureRetpolineIndirectCalls, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "rtm", "Support RTM instructions", X86::FeatureRTM, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sahf", "Support LAHF and SAHF instructions in 64-bit mode", X86::FeatureLAHFSAHF64, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sbb-dep-breaking", "SBB with same register has no source dependency", X86::TuningSBBDepBreaking, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "serialize", "Has serialize instruction", X86::FeatureSERIALIZE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "seses", "Prevent speculative execution side channel timing attacks by inserting a speculation barrier before memory reads, memory writes, and conditional branches. Implies LVI Control Flow integrity.", X86::FeatureSpeculativeExecutionSideEffectSuppression, { { { 0x2000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sgx", "Enable Software Guard Extensions", X86::FeatureSGX, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sha", "Enable SHA instructions", X86::FeatureSHA, { { { 0x0ULL, 0x80000ULL, 0x0ULL, 0x0ULL, } } } },
{ "shstk", "Support CET Shadow-Stack instructions", X86::FeatureSHSTK, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-3ops-lea", "LEA instruction with 3 ops or certain registers is slow", X86::TuningSlow3OpsLEA, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-incdec", "INC and DEC instructions are slower than ADD and SUB", X86::TuningSlowIncDec, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-lea", "LEA instruction with certain arguments is slow", X86::TuningSlowLEA, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-pmaddwd", "PMADDWD is slower than PMULLD", X86::TuningSlowPMADDWD, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-pmulld", "PMULLD instruction is slow (compared to PMULLW/PMULHW and PMULUDQ)", X86::TuningSlowPMULLD, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-shld", "SHLD instruction is slow", X86::TuningSlowSHLD, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-two-mem-ops", "Two memory operand instructions are slow", X86::TuningSlowTwoMemOps, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-unaligned-mem-16", "Slow unaligned 16-byte memory access", X86::TuningSlowUAMem16, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "slow-unaligned-mem-32", "Slow unaligned 32-byte memory access", X86::TuningSlowUAMem32, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "soft-float", "Use software floating point features", X86::FeatureSoftFloat, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse", "Enable SSE instructions", X86::FeatureSSE1, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse-unaligned-mem", "Allow unaligned memory operands with SSE instructions (this may require setting a configuration bit in the processor)", X86::FeatureSSEUnalignedMem, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse2", "Enable SSE2 instructions", X86::FeatureSSE2, { { { 0x0ULL, 0x40000ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse3", "Enable SSE3 instructions", X86::FeatureSSE3, { { { 0x0ULL, 0x80000ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse4.1", "Enable SSE 4.1 instructions", X86::FeatureSSE41, { { { 0x0ULL, 0x2000000ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse4.2", "Enable SSE 4.2 instructions", X86::FeatureSSE42, { { { 0x0ULL, 0x400000ULL, 0x0ULL, 0x0ULL, } } } },
{ "sse4a", "Support SSE 4a instructions", X86::FeatureSSE4A, { { { 0x0ULL, 0x100000ULL, 0x0ULL, 0x0ULL, } } } },
{ "ssse3", "Enable SSSE3 instructions", X86::FeatureSSSE3, { { { 0x0ULL, 0x100000ULL, 0x0ULL, 0x0ULL, } } } },
{ "tagged-globals", "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits.", X86::FeatureTaggedGlobals, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "tbm", "Enable TBM instructions", X86::FeatureTBM, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "tsxldtrk", "Support TSXLDTRK instructions", X86::FeatureTSXLDTRK, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "uintr", "Has UINTR Instructions", X86::FeatureUINTR, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "use-glm-div-sqrt-costs", "Use Goldmont specific floating point div/sqrt costs", X86::TuningUseGLMDivSqrtCosts, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "use-slm-arith-costs", "Use Silvermont specific arithmetic costs", X86::TuningUseSLMArithCosts, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "vaes", "Promote selected AES instructions to AVX512/AVX registers", X86::FeatureVAES, { { { 0x108ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "vpclmulqdq", "Enable vpclmulqdq instructions", X86::FeatureVPCLMULQDQ, { { { 0x800000000000100ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "vzeroupper", "Should insert vzeroupper instructions", X86::TuningInsertVZEROUPPER, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "waitpkg", "Wait and pause enhancements", X86::FeatureWAITPKG, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "wbnoinvd", "Write Back No Invalidate", X86::FeatureWBNOINVD, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "widekl", "Support Key Locker wide Instructions", X86::FeatureWIDEKL, { { { 0x800000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "x87", "Enable X87 float instructions", X86::FeatureX87, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "xop", "Enable XOP instructions", X86::FeatureXOP, { { { 0x1000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "xsave", "Support xsave instructions", X86::FeatureXSAVE, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
{ "xsavec", "Support xsavec instructions", X86::FeatureXSAVEC, { { { 0x0ULL, 0x400000000000ULL, 0x0ULL, 0x0ULL, } } } },
{ "xsaveopt", "Support xsaveopt instructions", X86::FeatureXSAVEOPT, { { { 0x0ULL, 0x400000000000ULL, 0x0ULL, 0x0ULL, } } } },
{ "xsaves", "Support xsaves instructions", X86::FeatureXSAVES, { { { 0x0ULL, 0x400000000000ULL, 0x0ULL, 0x0ULL, } } } },
};
#ifdef DBGFIELD
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
#endif
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
#define DBGFIELD(x) x,
#else
#define DBGFIELD(x)
#endif
// ===============================================================
// Data tables for the new per-operand machine model.
// {ProcResourceIdx, Cycles}
extern const llvm::MCWriteProcResEntry X86WriteProcResTable[] = {
{ 0, 0}, // Invalid
{ 5, 1}, // #1
{ 1, 1}, // #2
{ 2, 1}, // #3
{ 3, 1}, // #4
{ 4, 1}, // #5
{ 5, 1}, // #6
{ 6, 1}, // #7
{ 7, 1}, // #8
{ 8, 1}, // #9
{ 4, 1}, // #10
{ 5, 1}, // #11
{ 7, 1}, // #12
{ 8, 1}, // #13
{ 4, 2}, // #14
{ 5, 3}, // #15
{ 7, 2}, // #16
{ 8, 2}, // #17
{15, 2}, // #18
{16, 1}, // #19
{19, 1}, // #20
{23, 1}, // #21
{ 4, 1}, // #22
{ 5, 1}, // #23
{ 7, 1}, // #24
{ 8, 1}, // #25
{13, 1}, // #26
{14, 1}, // #27
{15, 1}, // #28
{16, 1}, // #29
{ 2, 1}, // #30
{ 3, 1}, // #31
{ 4, 1}, // #32
{ 5, 1}, // #33
{ 9, 1}, // #34
{10, 1}, // #35
{11, 1}, // #36
{15, 1}, // #37
{19, 1}, // #38
{23, 1}, // #39
{ 5, 1}, // #40
{15, 2}, // #41
{16, 1}, // #42
{19, 1}, // #43
{23, 1}, // #44
{ 4, 1}, // #45
{ 5, 2}, // #46
{ 7, 1}, // #47
{ 8, 1}, // #48
{15, 2}, // #49
{16, 1}, // #50
{19, 1}, // #51
{23, 1}, // #52
{ 3, 1}, // #53
{ 4, 1}, // #54
{ 5, 1}, // #55
{10, 1}, // #56
{11, 1}, // #57
{15, 1}, // #58
{16, 1}, // #59
{ 3, 1}, // #60
{ 4, 1}, // #61
{ 5, 1}, // #62
{ 6, 1}, // #63
{ 7, 1}, // #64
{10, 1}, // #65
{11, 1}, // #66
{20, 1}, // #67
{ 2, 1}, // #68
{ 3, 1}, // #69
{ 4, 1}, // #70
{ 5, 1}, // #71
{15, 1}, // #72
{16, 1}, // #73
{ 2, 2}, // #74
{ 3, 2}, // #75
{ 4, 2}, // #76
{ 5, 2}, // #77
{15, 1}, // #78
{16, 1}, // #79
{ 1, 4}, // #80
{ 2, 5}, // #81
{ 3, 11}, // #82
{ 4, 13}, // #83
{ 5, 13}, // #84
{ 6, 7}, // #85
{ 7, 9}, // #86
{ 8, 6}, // #87
{10, 6}, // #88
{11, 6}, // #89
{15, 1}, // #90
{16, 1}, // #91
{20, 3}, // #92
{ 1, 4}, // #93
{ 2, 5}, // #94
{ 3, 12}, // #95
{ 4, 14}, // #96
{ 5, 14}, // #97
{ 6, 7}, // #98
{ 7, 9}, // #99
{ 8, 6}, // #100
{10, 6}, // #101
{11, 6}, // #102
{20, 3}, // #103
{ 2, 1}, // #104
{ 3, 1}, // #105
{ 4, 2}, // #106
{ 5, 2}, // #107
{ 7, 1}, // #108
{ 8, 1}, // #109
{ 9, 1}, // #110
{10, 1}, // #111
{11, 1}, // #112
{15, 1}, // #113
{16, 1}, // #114
{ 5, 1}, // #115
{11, 1}, // #116
{15, 1}, // #117
{16, 1}, // #118
{ 2, 1}, // #119
{ 3, 1}, // #120
{ 4, 1}, // #121
{ 5, 1}, // #122
{ 9, 1}, // #123
{10, 1}, // #124
{11, 1}, // #125
{15, 1}, // #126
{16, 1}, // #127
{ 2, 1}, // #128
{ 3, 1}, // #129
{ 4, 3}, // #130
{ 5, 9}, // #131
{ 7, 2}, // #132
{ 8, 2}, // #133
{ 9, 1}, // #134
{10, 1}, // #135
{11, 3}, // #136
{15, 1}, // #137
{16, 1}, // #138
{ 2, 1}, // #139
{ 3, 1}, // #140
{ 4, 1}, // #141
{ 5, 1}, // #142
{ 9, 1}, // #143
{10, 1}, // #144
{11, 1}, // #145
{15, 2}, // #146
{16, 1}, // #147
{19, 1}, // #148
{23, 1}, // #149
{ 2, 1}, // #150
{ 3, 1}, // #151
{ 4, 3}, // #152
{ 5, 8}, // #153
{ 7, 2}, // #154
{ 8, 2}, // #155
{ 9, 1}, // #156
{10, 1}, // #157
{11, 3}, // #158
{15, 2}, // #159
{16, 1}, // #160
{19, 1}, // #161
{23, 1}, // #162
{ 4, 1}, // #163
{ 5, 1}, // #164
{ 7, 1}, // #165
{ 8, 1}, // #166
{15, 1}, // #167
{16, 1}, // #168
{ 4, 2}, // #169
{ 5, 5}, // #170
{ 7, 2}, // #171
{ 8, 2}, // #172
{ 1, 1}, // #173
{ 2, 1}, // #174
{ 3, 1}, // #175
{ 4, 1}, // #176
{ 5, 1}, // #177
{ 6, 1}, // #178
{ 7, 1}, // #179
{ 8, 1}, // #180
{15, 1}, // #181
{16, 1}, // #182
{ 2, 1}, // #183
{ 3, 2}, // #184
{ 4, 2}, // #185
{ 5, 2}, // #186
{ 6, 1}, // #187
{ 7, 1}, // #188
{10, 1}, // #189
{11, 1}, // #190
{20, 1}, // #191
{ 2, 1}, // #192
{ 3, 2}, // #193
{ 4, 2}, // #194
{ 5, 2}, // #195
{ 6, 1}, // #196
{ 7, 1}, // #197
{10, 1}, // #198
{11, 1}, // #199
{15, 1}, // #200
{16, 1}, // #201
{20, 1}, // #202
{ 1, 1}, // #203
{ 2, 2}, // #204
{ 3, 2}, // #205
{ 4, 2}, // #206
{ 5, 2}, // #207
{ 6, 1}, // #208
{ 7, 1}, // #209
{ 8, 1}, // #210
{15, 1}, // #211
{16, 1}, // #212
{ 2, 3}, // #213
{ 3, 3}, // #214
{ 4, 3}, // #215
{ 5, 4}, // #216
{ 9, 3}, // #217
{10, 3}, // #218
{11, 3}, // #219
{15, 1}, // #220
{16, 1}, // #221
{ 2, 3}, // #222
{ 3, 3}, // #223
{ 4, 3}, // #224
{ 5, 3}, // #225
{ 9, 3}, // #226
{10, 3}, // #227
{11, 3}, // #228
{15, 1}, // #229
{16, 1}, // #230
{ 2, 2}, // #231
{ 3, 3}, // #232
{ 4, 3}, // #233
{ 5, 3}, // #234
{10, 1}, // #235
{11, 1}, // #236
{15, 1}, // #237
{16, 1}, // #238
{ 2, 2}, // #239
{ 3, 5}, // #240
{ 4, 6}, // #241
{ 5, 6}, // #242
{ 6, 1}, // #243
{ 7, 2}, // #244
{ 8, 1}, // #245
{10, 3}, // #246
{11, 3}, // #247
{15, 1}, // #248
{16, 1}, // #249
{20, 1}, // #250
{ 2, 2}, // #251
{ 3, 5}, // #252
{ 4, 6}, // #253
{ 5, 6}, // #254
{ 6, 1}, // #255
{ 7, 2}, // #256
{ 8, 1}, // #257
{10, 3}, // #258
{11, 3}, // #259
{20, 1}, // #260
{ 3, 1}, // #261
{ 4, 1}, // #262
{ 5, 1}, // #263
{10, 1}, // #264
{11, 1}, // #265
{15, 1}, // #266
{19, 1}, // #267
{23, 1}, // #268
{ 1, 1}, // #269
{ 2, 1}, // #270
{ 3, 2}, // #271
{ 4, 2}, // #272
{ 5, 2}, // #273
{ 6, 1}, // #274
{ 7, 1}, // #275
{ 8, 1}, // #276
{10, 1}, // #277
{11, 1}, // #278
{ 3, 1}, // #279
{ 4, 1}, // #280
{ 5, 1}, // #281
{ 6, 1}, // #282
{ 7, 1}, // #283
{10, 1}, // #284
{11, 1}, // #285
{13, 1}, // #286
{14, 1}, // #287
{15, 1}, // #288
{16, 1}, // #289
{20, 1}, // #290
{ 1, 1}, // #291
{ 2, 1}, // #292
{ 3, 9}, // #293
{ 4, 10}, // #294
{ 5, 10}, // #295
{ 6, 9}, // #296
{ 7, 10}, // #297
{ 8, 2}, // #298
{ 3, 2}, // #299
{ 4, 2}, // #300
{ 5, 2}, // #301
{ 6, 2}, // #302
{ 7, 2}, // #303
{ 3, 3}, // #304
{ 4, 3}, // #305
{ 5, 3}, // #306
{ 6, 2}, // #307
{ 7, 2}, // #308
{10, 3}, // #309
{11, 3}, // #310
{15, 1}, // #311
{16, 1}, // #312
{20, 2}, // #313
{ 3, 3}, // #314
{ 4, 3}, // #315
{ 5, 3}, // #316
{ 6, 2}, // #317
{ 7, 2}, // #318
{10, 3}, // #319
{11, 3}, // #320
{20, 2}, // #321
{ 2, 1}, // #322
{ 3, 1}, // #323
{ 4, 2}, // #324
{ 5, 4}, // #325
{ 7, 1}, // #326
{ 8, 1}, // #327
{ 9, 1}, // #328
{10, 1}, // #329
{11, 1}, // #330
{15, 1}, // #331
{16, 1}, // #332
{ 2, 1}, // #333
{ 3, 1}, // #334
{ 4, 1}, // #335
{ 5, 2}, // #336
{ 9, 1}, // #337
{10, 1}, // #338
{11, 1}, // #339
{15, 1}, // #340
{16, 1}, // #341
{ 2, 1}, // #342
{ 3, 1}, // #343
{ 4, 2}, // #344
{ 5, 3}, // #345
{ 7, 1}, // #346
{ 8, 1}, // #347
{ 9, 1}, // #348
{10, 1}, // #349
{11, 1}, // #350
{15, 1}, // #351
{16, 1}, // #352
{ 2, 1}, // #353
{ 3, 2}, // #354
{ 4, 2}, // #355
{ 5, 2}, // #356
{ 6, 1}, // #357
{ 7, 1}, // #358
{ 9, 1}, // #359
{10, 2}, // #360
{11, 2}, // #361
{15, 1}, // #362
{16, 1}, // #363
{20, 1}, // #364
{ 2, 1}, // #365
{ 3, 2}, // #366
{ 4, 2}, // #367
{ 5, 2}, // #368
{ 6, 1}, // #369
{ 7, 1}, // #370
{ 9, 1}, // #371
{10, 2}, // #372
{11, 2}, // #373
{20, 1}, // #374
{ 3, 1}, // #375
{ 4, 1}, // #376
{ 5, 1}, // #377
{ 6, 1}, // #378
{ 7, 1}, // #379
{10, 1}, // #380
{11, 1}, // #381
{15, 1}, // #382
{16, 1}, // #383
{20, 1}, // #384
{ 1, 1}, // #385
{ 2, 1}, // #386
{ 3, 2}, // #387
{ 4, 3}, // #388
{ 5, 3}, // #389
{ 6, 1}, // #390
{ 7, 2}, // #391
{ 8, 2}, // #392
{15, 1}, // #393
{16, 1}, // #394
{ 3, 1}, // #395
{ 4, 1}, // #396
{ 5, 1}, // #397
{ 6, 1}, // #398
{ 7, 1}, // #399
{15, 1}, // #400
{16, 1}, // #401
{ 3, 3}, // #402
{ 4, 3}, // #403
{ 5, 3}, // #404
{ 6, 3}, // #405
{ 7, 3}, // #406
{10, 2}, // #407
{11, 2}, // #408
{15, 1}, // #409
{16, 1}, // #410
{20, 2}, // #411
{ 3, 3}, // #412
{ 4, 3}, // #413
{ 5, 3}, // #414
{ 6, 3}, // #415
{ 7, 3}, // #416
{10, 2}, // #417
{11, 2}, // #418
{20, 2}, // #419
{ 3, 2}, // #420
{ 4, 2}, // #421
{ 5, 2}, // #422
{ 6, 1}, // #423
{ 7, 1}, // #424
{10, 2}, // #425
{11, 2}, // #426
{20, 1}, // #427
{ 1, 1}, // #428
{ 2, 1}, // #429
{ 3, 2}, // #430
{ 4, 2}, // #431
{ 5, 2}, // #432
{ 6, 2}, // #433
{ 7, 2}, // #434
{ 8, 1}, // #435
{10, 1}, // #436
{11, 1}, // #437
{15, 1}, // #438
{16, 1}, // #439
{20, 1}, // #440
{ 1, 1}, // #441
{ 2, 1}, // #442
{ 3, 2}, // #443
{ 4, 2}, // #444
{ 5, 2}, // #445
{ 6, 2}, // #446
{ 7, 2}, // #447
{ 8, 1}, // #448
{10, 1}, // #449
{11, 1}, // #450
{20, 1}, // #451
{ 3, 2}, // #452
{ 4, 2}, // #453
{ 5, 2}, // #454
{ 6, 1}, // #455
{ 7, 1}, // #456
{10, 2}, // #457
{11, 2}, // #458
{15, 1}, // #459
{16, 1}, // #460
{20, 1}, // #461
{ 1, 3}, // #462
{ 2, 4}, // #463
{ 3, 6}, // #464
{ 4, 7}, // #465
{ 5, 7}, // #466
{ 6, 4}, // #467
{ 7, 5}, // #468
{ 8, 4}, // #469
{ 9, 1}, // #470
{10, 2}, // #471
{11, 2}, // #472
{15, 1}, // #473
{16, 1}, // #474
{20, 1}, // #475
{ 1, 3}, // #476
{ 2, 4}, // #477
{ 3, 7}, // #478
{ 4, 8}, // #479
{ 5, 8}, // #480
{ 6, 4}, // #481
{ 7, 5}, // #482
{ 8, 4}, // #483
{ 9, 1}, // #484
{10, 2}, // #485
{11, 2}, // #486
{20, 1}, // #487
{ 1, 3}, // #488
{ 2, 4}, // #489
{ 3, 7}, // #490
{ 4, 8}, // #491
{ 5, 8}, // #492
{ 6, 4}, // #493
{ 7, 5}, // #494
{ 8, 4}, // #495
{ 9, 1}, // #496
{10, 2}, // #497
{11, 2}, // #498
{15, 1}, // #499
{16, 1}, // #500
{20, 1}, // #501
{ 1, 3}, // #502
{ 2, 4}, // #503
{ 3, 8}, // #504
{ 4, 9}, // #505
{ 5, 9}, // #506
{ 6, 4}, // #507
{ 7, 5}, // #508
{ 8, 4}, // #509
{ 9, 1}, // #510
{10, 2}, // #511
{11, 2}, // #512
{20, 1}, // #513
{ 1, 3}, // #514
{ 2, 3}, // #515
{ 3, 3}, // #516
{ 4, 3}, // #517
{ 5, 3}, // #518
{ 6, 3}, // #519
{ 7, 3}, // #520
{ 8, 3}, // #521
{15, 1}, // #522
{16, 1}, // #523
{ 3, 3}, // #524
{ 4, 3}, // #525
{ 5, 3}, // #526
{10, 2}, // #527
{11, 2}, // #528
{15, 1}, // #529
{16, 1}, // #530
{ 2, 1}, // #531
{ 3, 2}, // #532
{ 4, 2}, // #533
{ 5, 2}, // #534
{10, 1}, // #535
{11, 1}, // #536
{ 2, 2}, // #537
{ 3, 2}, // #538
{ 4, 5}, // #539
{ 5, 7}, // #540
{ 7, 3}, // #541
{ 8, 3}, // #542
{ 9, 2}, // #543
{10, 2}, // #544
{11, 2}, // #545
{15, 2}, // #546
{16, 1}, // #547
{19, 1}, // #548
{23, 1}, // #549
{ 4, 2}, // #550
{ 5, 2}, // #551
{ 7, 2}, // #552
{ 8, 2}, // #553
{ 4, 1}, // #554
{ 5, 1}, // #555
{ 7, 1}, // #556
{ 8, 1}, // #557
{15, 2}, // #558
{16, 1}, // #559
{19, 1}, // #560
{23, 1}, // #561
{ 4, 2}, // #562
{ 5, 2}, // #563
{ 7, 2}, // #564
{ 8, 2}, // #565
{15, 2}, // #566
{16, 1}, // #567
{19, 1}, // #568
{23, 1}, // #569
{ 4, 2}, // #570
{ 5, 2}, // #571
{ 7, 2}, // #572
{ 8, 2}, // #573
{15, 1}, // #574
{19, 1}, // #575
{23, 1}, // #576
{ 2, 1}, // #577
{ 3, 1}, // #578
{ 4, 2}, // #579
{ 5, 3}, // #580
{ 7, 1}, // #581
{ 8, 1}, // #582
{ 9, 1}, // #583
{10, 1}, // #584
{11, 1}, // #585
{15, 2}, // #586
{16, 1}, // #587
{19, 1}, // #588
{23, 1}, // #589
{ 2, 1}, // #590
{ 3, 1}, // #591
{ 4, 1}, // #592
{ 5, 2}, // #593
{ 9, 1}, // #594
{10, 1}, // #595
{11, 1}, // #596
{15, 2}, // #597
{16, 1}, // #598
{19, 1}, // #599
{23, 1}, // #600
{ 1, 1}, // #601
{ 2, 1}, // #602
{ 3, 1}, // #603
{ 4, 1}, // #604
{ 5, 1}, // #605
{ 6, 1}, // #606
{ 7, 1}, // #607
{ 8, 1}, // #608
{28, 7}, // #609
{ 1, 1}, // #610
{ 2, 1}, // #611
{ 3, 1}, // #612
{ 4, 2}, // #613
{ 5, 2}, // #614
{ 6, 1}, // #615
{ 7, 2}, // #616
{ 8, 2}, // #617
{15, 1}, // #618
{19, 1}, // #619
{23, 1}, // #620
{ 3, 3}, // #621
{ 4, 3}, // #622
{ 5, 3}, // #623
{15, 1}, // #624
{16, 1}, // #625
{ 2, 1}, // #626
{ 3, 1}, // #627
{ 4, 1}, // #628
{ 5, 1}, // #629
{15, 1}, // #630
{19, 1}, // #631
{23, 1}, // #632
{ 1, 1}, // #633
{ 2, 1}, // #634
{ 3, 1}, // #635
{ 4, 1}, // #636
{ 5, 1}, // #637
{ 6, 1}, // #638
{ 7, 1}, // #639
{ 8, 1}, // #640
{15, 1}, // #641
{19, 1}, // #642
{23, 1}, // #643
{ 1, 2}, // #644
{ 2, 3}, // #645
{ 3, 7}, // #646
{ 4, 15}, // #647
{ 5, 15}, // #648
{ 6, 6}, // #649
{ 7, 10}, // #650
{ 8, 6}, // #651
{ 9, 1}, // #652
{10, 3}, // #653
{11, 3}, // #654
{20, 2}, // #655
{21, 4}, // #656
{ 2, 1}, // #657
{ 3, 3}, // #658
{ 4, 3}, // #659
{ 5, 3}, // #660
{ 6, 2}, // #661
{ 7, 2}, // #662
{10, 2}, // #663
{11, 2}, // #664
{20, 2}, // #665
{ 1, 1}, // #666
{ 2, 2}, // #667
{ 3, 3}, // #668
{ 4, 3}, // #669
{ 5, 3}, // #670
{ 6, 2}, // #671
{ 7, 2}, // #672
{ 8, 1}, // #673
{10, 1}, // #674
{11, 1}, // #675
{20, 1}, // #676
{14, 1}, // #677
{15, 1}, // #678
{18, 1}, // #679
{19, 1}, // #680
{ 5, 4}, // #681
{15, 2}, // #682
{16, 1}, // #683
{19, 1}, // #684
{23, 1}, // #685
{ 4, 1}, // #686
{ 5, 6}, // #687
{ 7, 1}, // #688
{ 8, 1}, // #689
{15, 2}, // #690
{16, 1}, // #691
{19, 1}, // #692
{23, 1}, // #693
{ 1, 1}, // #694
{ 2, 1}, // #695
{ 3, 2}, // #696
{ 4, 2}, // #697
{ 5, 2}, // #698
{ 6, 2}, // #699
{ 7, 2}, // #700
{ 8, 1}, // #701
{13, 1}, // #702
{14, 1}, // #703
{15, 1}, // #704
{16, 1}, // #705
{ 3, 1}, // #706
{ 4, 1}, // #707
{ 5, 1}, // #708
{ 6, 1}, // #709
{ 7, 1}, // #710
{10, 1}, // #711
{11, 1}, // #712
{14, 1}, // #713
{15, 1}, // #714
{18, 1}, // #715
{19, 1}, // #716
{20, 1}, // #717
{ 2, 1}, // #718
{ 3, 1}, // #719
{ 4, 7}, // #720
{ 5, 11}, // #721
{ 7, 6}, // #722
{ 8, 6}, // #723
{ 9, 1}, // #724
{10, 1}, // #725
{11, 1}, // #726
{ 4, 1}, // #727
{ 5, 1}, // #728
{ 7, 1}, // #729
{ 8, 1}, // #730
{14, 1}, // #731
{15, 1}, // #732
{18, 1}, // #733
{19, 1}, // #734
{21, 1}, // #735
{ 3, 1}, // #736
{ 4, 2}, // #737
{ 5, 2}, // #738
{ 6, 1}, // #739
{ 7, 2}, // #740
{ 8, 1}, // #741
{10, 1}, // #742
{11, 1}, // #743
{20, 1}, // #744
{ 2, 2}, // #745
{ 3, 2}, // #746
{ 4, 9}, // #747
{ 5, 13}, // #748
{ 7, 7}, // #749
{ 8, 7}, // #750
{ 9, 2}, // #751
{10, 2}, // #752
{11, 2}, // #753
{15, 2}, // #754
{16, 1}, // #755
{19, 1}, // #756
{23, 1}, // #757
{ 2, 1}, // #758
{ 3, 1}, // #759
{ 4, 5}, // #760
{ 5, 7}, // #761
{ 7, 4}, // #762
{ 8, 4}, // #763
{ 9, 1}, // #764
{10, 1}, // #765
{11, 1}, // #766
{ 1, 2}, // #767
{ 2, 2}, // #768
{ 3, 6}, // #769
{ 4, 12}, // #770
{ 5, 19}, // #771
{ 6, 4}, // #772
{ 7, 10}, // #773
{ 8, 8}, // #774
{10, 4}, // #775
{11, 4}, // #776
{15, 2}, // #777
{16, 1}, // #778
{19, 1}, // #779
{20, 2}, // #780
{23, 1}, // #781
{ 4, 4}, // #782
{ 5, 4}, // #783
{ 1, 2}, // #784
{ 2, 8}, // #785
{ 3, 12}, // #786
{ 4, 21}, // #787
{ 5, 21}, // #788
{ 6, 5}, // #789
{ 7, 14}, // #790
{ 8, 9}, // #791
{ 9, 4}, // #792
{10, 7}, // #793
{11, 7}, // #794
{20, 3}, // #795
{ 1, 2}, // #796
{ 2, 4}, // #797
{ 3, 13}, // #798
{ 4, 34}, // #799
{ 5, 34}, // #800
{ 6, 11}, // #801
{ 7, 32}, // #802
{ 8, 23}, // #803
{ 9, 2}, // #804
{10, 11}, // #805
{11, 11}, // #806
{15, 19}, // #807
{16, 14}, // #808
{19, 4}, // #809
{20, 9}, // #810
{23, 5}, // #811
{ 2, 1}, // #812
{ 3, 1}, // #813
{ 4, 3}, // #814
{ 5, 9}, // #815
{ 7, 2}, // #816
{ 8, 2}, // #817
{ 9, 1}, // #818
{10, 1}, // #819
{11, 1}, // #820
{15, 1}, // #821
{16, 1}, // #822
{ 3, 1}, // #823
{ 4, 10}, // #824
{ 5, 10}, // #825
{ 6, 1}, // #826
{ 7, 3}, // #827
{ 8, 2}, // #828
{10, 1}, // #829
{11, 1}, // #830
{20, 1}, // #831
{21, 2}, // #832
{ 1, 7}, // #833
{ 2, 24}, // #834
{ 3, 44}, // #835
{ 4, 70}, // #836
{ 5, 75}, // #837
{ 6, 26}, // #838
{ 7, 52}, // #839
{ 8, 32}, // #840
{ 9, 17}, // #841
{10, 36}, // #842
{11, 37}, // #843
{15, 10}, // #844
{16, 9}, // #845
{19, 1}, // #846
{20, 19}, // #847
{23, 1}, // #848
{ 3, 9}, // #849
{ 4, 15}, // #850
{ 5, 15}, // #851
{ 6, 9}, // #852
{ 7, 9}, // #853
{10, 6}, // #854
{11, 6}, // #855
{20, 6}, // #856
{ 1, 5}, // #857
{ 2, 20}, // #858
{ 3, 35}, // #859
{ 4, 61}, // #860
{ 5, 66}, // #861
{ 6, 20}, // #862
{ 7, 46}, // #863
{ 8, 31}, // #864
{ 9, 15}, // #865
{10, 30}, // #866
{11, 30}, // #867
{15, 6}, // #868
{16, 5}, // #869
{19, 1}, // #870
{20, 15}, // #871
{23, 1}, // #872
{ 1, 5}, // #873
{ 2, 20}, // #874
{ 3, 36}, // #875
{ 4, 61}, // #876
{ 5, 66}, // #877
{ 6, 21}, // #878
{ 7, 46}, // #879
{ 8, 30}, // #880
{ 9, 15}, // #881
{10, 30}, // #882
{11, 30}, // #883
{15, 6}, // #884
{16, 5}, // #885
{19, 1}, // #886
{20, 15}, // #887
{23, 1}, // #888
{ 1, 6}, // #889
{ 2, 23}, // #890
{ 3, 41}, // #891
{ 4, 68}, // #892
{ 5, 73}, // #893
{ 6, 24}, // #894
{ 7, 51}, // #895
{ 8, 33}, // #896
{ 9, 16}, // #897
{10, 34}, // #898
{11, 34}, // #899
{15, 9}, // #900
{16, 8}, // #901
{19, 1}, // #902
{20, 18}, // #903
{23, 1}, // #904
{ 2, 9}, // #905
{ 3, 23}, // #906
{ 4, 53}, // #907
{ 5, 54}, // #908
{ 6, 3}, // #909
{ 7, 33}, // #910
{ 8, 20}, // #911
{ 9, 8}, // #912
{10, 15}, // #913
{11, 16}, // #914
{20, 2}, // #915
{ 1, 7}, // #916
{ 2, 26}, // #917
{ 3, 46}, // #918
{ 4, 71}, // #919
{ 5, 79}, // #920
{ 6, 27}, // #921
{ 7, 52}, // #922
{ 8, 32}, // #923
{ 9, 19}, // #924
{10, 39}, // #925
{11, 41}, // #926
{15, 8}, // #927
{16, 8}, // #928
{20, 20}, // #929
{ 1, 7}, // #930
{ 2, 26}, // #931
{ 3, 46}, // #932
{ 4, 71}, // #933
{ 5, 79}, // #934
{ 6, 27}, // #935
{ 7, 52}, // #936
{ 8, 32}, // #937
{ 9, 19}, // #938
{10, 39}, // #939
{11, 41}, // #940
{15, 7}, // #941
{16, 7}, // #942
{20, 20}, // #943
{ 1, 2}, // #944
{ 2, 9}, // #945
{ 3, 14}, // #946
{ 4, 24}, // #947
{ 5, 24}, // #948
{ 6, 7}, // #949
{ 7, 17}, // #950
{ 8, 12}, // #951
{ 9, 6}, // #952
{10, 11}, // #953
{11, 11}, // #954
{15, 1}, // #955
{19, 1}, // #956
{20, 5}, // #957
{23, 1}, // #958
{ 1, 2}, // #959
{ 2, 12}, // #960
{ 3, 17}, // #961
{ 4, 27}, // #962
{ 5, 32}, // #963
{ 6, 7}, // #964
{ 7, 17}, // #965
{ 8, 12}, // #966
{ 9, 10}, // #967
{10, 15}, // #968
{11, 15}, // #969
{15, 40}, // #970
{16, 2}, // #971
{19, 38}, // #972
{20, 5}, // #973
{23, 38}, // #974
{ 1, 4}, // #975
{ 2, 4}, // #976
{ 3, 6}, // #977
{ 4, 57}, // #978
{ 5, 57}, // #979
{ 6, 5}, // #980
{ 7, 9}, // #981
{ 8, 8}, // #982
{10, 1}, // #983
{11, 1}, // #984
{13, 33}, // #985
{14, 33}, // #986
{15, 33}, // #987
{16, 33}, // #988
{21, 2}, // #989
{ 1, 8}, // #990
{ 2, 35}, // #991
{ 3, 79}, // #992
{ 4, 142}, // #993
{ 5, 142}, // #994
{ 6, 37}, // #995
{ 7, 100}, // #996
{ 8, 71}, // #997
{ 9, 21}, // #998
{10, 46}, // #999
{11, 46}, // #1000
{15, 1}, // #1001
{19, 1}, // #1002
{20, 10}, // #1003
{23, 1}, // #1004
{ 1, 1}, // #1005
{ 2, 1}, // #1006
{ 3, 1}, // #1007
{ 4, 2}, // #1008
{ 5, 2}, // #1009
{ 6, 1}, // #1010
{ 7, 1}, // #1011
{ 8, 1}, // #1012
{ 2, 3}, // #1013
{ 3, 3}, // #1014
{ 4, 7}, // #1015
{ 5, 10}, // #1016
{ 7, 4}, // #1017
{ 8, 4}, // #1018
{ 9, 3}, // #1019
{10, 3}, // #1020
{11, 3}, // #1021
{ 2, 1}, // #1022
{ 3, 1}, // #1023
{ 4, 3}, // #1024
{ 5, 3}, // #1025
{ 7, 2}, // #1026
{ 8, 2}, // #1027
{ 9, 1}, // #1028
{10, 1}, // #1029
{11, 1}, // #1030
{ 3, 1}, // #1031
{ 4, 1}, // #1032
{ 5, 1}, // #1033
{ 6, 1}, // #1034
{ 7, 1}, // #1035
{10, 1}, // #1036
{11, 1}, // #1037
{15, 1}, // #1038
{19, 1}, // #1039
{20, 1}, // #1040
{23, 1}, // #1041
{ 5, 2}, // #1042
{15, 1}, // #1043
{19, 1}, // #1044
{23, 1}, // #1045
{ 2, 1}, // #1046
{ 3, 1}, // #1047
{ 4, 2}, // #1048
{ 5, 2}, // #1049
{ 7, 1}, // #1050
{ 8, 1}, // #1051
{ 9, 1}, // #1052
{10, 1}, // #1053
{11, 1}, // #1054
{15, 1}, // #1055
{19, 1}, // #1056
{23, 1}, // #1057
{ 1, 5}, // #1058
{ 2, 13}, // #1059
{ 3, 13}, // #1060
{ 4, 13}, // #1061
{ 5, 13}, // #1062
{ 6, 5}, // #1063
{ 7, 5}, // #1064
{ 8, 5}, // #1065
{ 9, 8}, // #1066
{10, 8}, // #1067
{11, 8}, // #1068
{15, 21}, // #1069
{16, 21}, // #1070
{ 4, 1}, // #1071
{ 5, 1}, // #1072
{ 7, 1}, // #1073
{ 8, 1}, // #1074
{13, 1}, // #1075
{14, 1}, // #1076
{15, 1}, // #1077
{16, 1}, // #1078
{21, 1}, // #1079
{ 1, 1}, // #1080
{ 2, 1}, // #1081
{ 3, 1}, // #1082
{ 4, 1}, // #1083
{ 5, 1}, // #1084
{ 6, 1}, // #1085
{ 7, 1}, // #1086
{ 8, 1}, // #1087
{14, 1}, // #1088
{15, 1}, // #1089
{18, 1}, // #1090
{19, 1}, // #1091
{ 5, 5}, // #1092
{15, 2}, // #1093
{16, 2}, // #1094
{ 5, 2}, // #1095
{15, 2}, // #1096
{16, 1}, // #1097
{19, 1}, // #1098
{23, 1}, // #1099
{ 4, 2}, // #1100
{ 5, 2}, // #1101
{ 7, 1}, // #1102
{ 8, 1}, // #1103
{13, 1}, // #1104
{14, 2}, // #1105
{15, 2}, // #1106
{16, 1}, // #1107
{18, 1}, // #1108
{19, 1}, // #1109
{21, 1}, // #1110
{ 4, 1}, // #1111
{ 5, 3}, // #1112
{ 7, 1}, // #1113
{ 8, 1}, // #1114
{15, 2}, // #1115
{16, 1}, // #1116
{19, 1}, // #1117
{23, 1}, // #1118
{ 3, 2}, // #1119
{ 4, 2}, // #1120
{ 5, 2}, // #1121
{ 6, 2}, // #1122
{ 7, 2}, // #1123
{10, 2}, // #1124
{11, 2}, // #1125
{13, 1}, // #1126
{14, 1}, // #1127
{15, 1}, // #1128
{16, 1}, // #1129
{20, 2}, // #1130
{ 1, 1}, // #1131
{ 2, 1}, // #1132
{ 3, 1}, // #1133
{ 4, 1}, // #1134
{ 5, 1}, // #1135
{ 6, 1}, // #1136
{ 7, 1}, // #1137
{ 8, 1}, // #1138
{13, 1}, // #1139
{14, 1}, // #1140
{15, 1}, // #1141
{16, 1}, // #1142
{ 1, 1}, // #1143
{ 2, 1}, // #1144
{ 3, 2}, // #1145
{ 4, 2}, // #1146
{ 5, 2}, // #1147
{ 6, 2}, // #1148
{ 7, 2}, // #1149
{ 8, 1}, // #1150
{10, 1}, // #1151
{11, 1}, // #1152
{13, 1}, // #1153
{14, 1}, // #1154
{15, 1}, // #1155
{16, 1}, // #1156
{20, 1}, // #1157
{ 2, 3}, // #1158
{ 3, 4}, // #1159
{ 4, 7}, // #1160
{ 5, 10}, // #1161
{ 7, 3}, // #1162
{ 8, 3}, // #1163
{ 9, 3}, // #1164
{10, 3}, // #1165
{11, 4}, // #1166
{ 4, 2}, // #1167
{ 5, 2}, // #1168
{ 7, 2}, // #1169
{ 8, 2}, // #1170
{15, 1}, // #1171
{16, 1}, // #1172
{ 2, 2}, // #1173
{ 3, 3}, // #1174
{ 4, 9}, // #1175
{ 5, 18}, // #1176
{ 6, 1}, // #1177
{ 7, 7}, // #1178
{ 8, 6}, // #1179
{ 9, 2}, // #1180
{10, 3}, // #1181
{11, 3}, // #1182
{20, 1}, // #1183
{ 1, 2}, // #1184
{ 2, 9}, // #1185
{ 3, 14}, // #1186
{ 4, 21}, // #1187
{ 5, 24}, // #1188
{ 6, 4}, // #1189
{ 7, 11}, // #1190
{ 8, 7}, // #1191
{ 9, 7}, // #1192
{10, 12}, // #1193
{11, 12}, // #1194
{15, 1}, // #1195
{16, 1}, // #1196
{20, 2}, // #1197
{ 2, 2}, // #1198
{ 3, 2}, // #1199
{ 4, 2}, // #1200
{ 5, 3}, // #1201
{ 9, 2}, // #1202
{10, 2}, // #1203
{11, 2}, // #1204
{15, 2}, // #1205
{19, 2}, // #1206
{23, 2}, // #1207
{ 4, 1}, // #1208
{ 5, 1}, // #1209
{ 7, 1}, // #1210
{ 8, 1}, // #1211
{15, 1}, // #1212
{19, 1}, // #1213
{23, 1}, // #1214
{ 2, 5}, // #1215
{ 3, 5}, // #1216
{ 4, 16}, // #1217
{ 5, 23}, // #1218
{ 7, 11}, // #1219
{ 8, 8}, // #1220
{ 9, 5}, // #1221
{10, 5}, // #1222
{11, 5}, // #1223
{ 3, 2}, // #1224
{ 4, 2}, // #1225
{ 5, 2}, // #1226
{ 6, 2}, // #1227
{ 7, 2}, // #1228
{10, 2}, // #1229
{11, 2}, // #1230
{15, 1}, // #1231
{16, 1}, // #1232
{20, 2}, // #1233
{ 3, 2}, // #1234
{ 4, 2}, // #1235
{ 5, 2}, // #1236
{ 6, 2}, // #1237
{ 7, 2}, // #1238
{10, 2}, // #1239
{11, 2}, // #1240
{20, 2}, // #1241
{ 1, 1}, // #1242
{ 2, 6}, // #1243
{ 3, 8}, // #1244
{ 4, 17}, // #1245
{ 5, 20}, // #1246
{ 6, 2}, // #1247
{ 7, 11}, // #1248
{ 8, 9}, // #1249
{ 9, 5}, // #1250
{10, 7}, // #1251
{11, 7}, // #1252
{15, 2}, // #1253
{16, 2}, // #1254
{20, 1}, // #1255
{ 1, 1}, // #1256
{ 2, 4}, // #1257
{ 3, 5}, // #1258
{ 4, 10}, // #1259
{ 5, 10}, // #1260
{ 6, 2}, // #1261
{ 7, 7}, // #1262
{ 8, 6}, // #1263
{ 9, 3}, // #1264
{10, 4}, // #1265
{11, 4}, // #1266
{15, 3}, // #1267
{16, 3}, // #1268
{20, 1}, // #1269
{ 2, 8}, // #1270
{ 3, 14}, // #1271
{ 4, 30}, // #1272
{ 5, 54}, // #1273
{ 6, 2}, // #1274
{ 7, 18}, // #1275
{ 8, 14}, // #1276
{ 9, 8}, // #1277
{10, 10}, // #1278
{11, 11}, // #1279
{20, 2}, // #1280
{ 2, 2}, // #1281
{ 3, 2}, // #1282
{ 4, 7}, // #1283
{ 5, 9}, // #1284
{ 7, 5}, // #1285
{ 8, 5}, // #1286
{ 9, 2}, // #1287
{10, 2}, // #1288
{11, 2}, // #1289
{ 2, 3}, // #1290
{ 3, 4}, // #1291
{ 4, 10}, // #1292
{ 5, 15}, // #1293
{ 6, 1}, // #1294
{ 7, 7}, // #1295
{ 8, 6}, // #1296
{ 9, 3}, // #1297
{10, 4}, // #1298
{11, 4}, // #1299
{20, 1}, // #1300
{ 2, 1}, // #1301
{ 3, 1}, // #1302
{ 4, 30}, // #1303
{ 5, 30}, // #1304
{ 7, 8}, // #1305
{ 8, 8}, // #1306
{ 9, 1}, // #1307
{10, 1}, // #1308
{11, 1}, // #1309
{13, 1}, // #1310
{14, 1}, // #1311
{15, 1}, // #1312
{16, 1}, // #1313
{21, 8}, // #1314
{ 2, 35}, // #1315
{ 3, 90}, // #1316
{ 4, 134}, // #1317
{ 5, 134}, // #1318
{ 6, 34}, // #1319
{ 7, 78}, // #1320
{ 8, 44}, // #1321
{ 9, 21}, // #1322
{10, 51}, // #1323
{11, 51}, // #1324
{15, 5}, // #1325
{16, 4}, // #1326
{19, 1}, // #1327
{20, 9}, // #1328
{23, 1}, // #1329
{ 2, 52}, // #1330
{ 3, 97}, // #1331
{ 4, 150}, // #1332
{ 5, 150}, // #1333
{ 6, 45}, // #1334
{ 7, 98}, // #1335
{ 8, 53}, // #1336
{ 9, 27}, // #1337
{10, 37}, // #1338
{11, 37}, // #1339
{15, 5}, // #1340
{16, 4}, // #1341
{19, 1}, // #1342
{20, 10}, // #1343
{23, 1}, // #1344
{ 2, 1}, // #1345
{ 3, 4}, // #1346
{ 4, 15}, // #1347
{ 5, 15}, // #1348
{ 6, 2}, // #1349
{ 7, 5}, // #1350
{ 8, 3}, // #1351
{ 9, 1}, // #1352
{10, 4}, // #1353
{11, 4}, // #1354
{13, 1}, // #1355
{14, 2}, // #1356
{15, 2}, // #1357
{16, 1}, // #1358
{18, 1}, // #1359
{19, 1}, // #1360
{20, 2}, // #1361
{21, 3}, // #1362
{ 1, 2}, // #1363
{ 2, 2}, // #1364
{ 3, 7}, // #1365
{ 4, 56}, // #1366
{ 5, 56}, // #1367
{ 6, 7}, // #1368
{ 7, 17}, // #1369
{ 8, 12}, // #1370
{13, 8}, // #1371
{14, 8}, // #1372
{15, 8}, // #1373
{16, 8}, // #1374
{ 1, 4}, // #1375
{ 2, 4}, // #1376
{ 3, 6}, // #1377
{ 4, 57}, // #1378
{ 5, 57}, // #1379
{ 6, 5}, // #1380
{ 7, 11}, // #1381
{ 8, 10}, // #1382
{10, 1}, // #1383
{11, 1}, // #1384
{13, 31}, // #1385
{14, 31}, // #1386
{15, 31}, // #1387
{16, 31}, // #1388
{21, 4}, // #1389
{ 1, 9}, // #1390
{ 2, 10}, // #1391
{ 3, 26}, // #1392
{ 4, 78}, // #1393
{ 5, 78}, // #1394
{ 6, 25}, // #1395
{ 7, 47}, // #1396
{ 8, 31}, // #1397
{ 9, 1}, // #1398
{10, 17}, // #1399
{11, 17}, // #1400
{14, 11}, // #1401
{15, 11}, // #1402
{18, 11}, // #1403
{19, 11}, // #1404
{20, 16}, // #1405
{21, 1}, // #1406
{ 1, 1}, // #1407
{ 2, 1}, // #1408
{ 3, 3}, // #1409
{ 4, 3}, // #1410
{ 5, 3}, // #1411
{ 6, 1}, // #1412
{ 7, 1}, // #1413
{ 8, 1}, // #1414
{10, 1}, // #1415
{11, 1}, // #1416
{15, 2}, // #1417
{16, 2}, // #1418
{ 1, 1}, // #1419
{ 2, 1}, // #1420
{ 3, 4}, // #1421
{ 4, 4}, // #1422
{ 5, 4}, // #1423
{ 6, 1}, // #1424
{ 7, 1}, // #1425
{ 8, 1}, // #1426
{10, 2}, // #1427
{11, 2}, // #1428
{15, 4}, // #1429
{16, 4}, // #1430
{ 1, 1}, // #1431
{ 2, 1}, // #1432
{ 3, 4}, // #1433
{ 4, 4}, // #1434
{ 5, 4}, // #1435
{ 6, 1}, // #1436
{ 7, 1}, // #1437
{ 8, 1}, // #1438
{10, 2}, // #1439
{11, 2}, // #1440
{15, 8}, // #1441
{16, 8}, // #1442
{ 4, 2}, // #1443
{ 5, 2}, // #1444
{ 7, 1}, // #1445
{ 8, 1}, // #1446
{13, 1}, // #1447
{14, 1}, // #1448
{15, 1}, // #1449
{16, 1}, // #1450
{21, 1}, // #1451
{ 2, 1}, // #1452
{ 3, 1}, // #1453
{ 4, 3}, // #1454
{ 5, 3}, // #1455
{ 7, 2}, // #1456
{ 8, 2}, // #1457
{ 9, 1}, // #1458
{10, 1}, // #1459
{11, 1}, // #1460
{15, 1}, // #1461
{16, 1}, // #1462
{ 1, 2}, // #1463
{ 2, 2}, // #1464
{ 3, 2}, // #1465
{ 4, 2}, // #1466
{ 5, 2}, // #1467
{ 6, 2}, // #1468
{ 7, 2}, // #1469
{ 8, 2}, // #1470
{15, 1}, // #1471
{19, 1}, // #1472
{23, 1}, // #1473
{ 2, 3}, // #1474
{ 3, 6}, // #1475
{ 4, 7}, // #1476
{ 5, 7}, // #1477
{ 6, 1}, // #1478
{ 7, 2}, // #1479
{ 8, 1}, // #1480
{10, 1}, // #1481
{11, 1}, // #1482
{20, 1}, // #1483
{ 2, 3}, // #1484
{ 3, 6}, // #1485
{ 4, 7}, // #1486
{ 5, 7}, // #1487
{ 6, 1}, // #1488
{ 7, 2}, // #1489
{ 8, 1}, // #1490
{10, 1}, // #1491
{11, 1}, // #1492
{15, 1}, // #1493
{16, 1}, // #1494
{20, 1}, // #1495
{ 2, 2}, // #1496
{ 3, 6}, // #1497
{ 4, 7}, // #1498
{ 5, 7}, // #1499
{ 7, 1}, // #1500
{ 8, 1}, // #1501
{10, 2}, // #1502
{11, 2}, // #1503
{ 2, 2}, // #1504
{ 3, 6}, // #1505
{ 4, 7}, // #1506
{ 5, 7}, // #1507
{ 7, 1}, // #1508
{ 8, 1}, // #1509
{10, 2}, // #1510
{11, 2}, // #1511
{15, 1}, // #1512
{16, 1}, // #1513
{ 2, 1}, // #1514
{ 3, 3}, // #1515
{ 4, 3}, // #1516
{ 5, 3}, // #1517
{10, 1}, // #1518
{11, 1}, // #1519
{ 2, 1}, // #1520
{ 3, 3}, // #1521
{ 4, 3}, // #1522
{ 5, 3}, // #1523
{10, 1}, // #1524
{11, 1}, // #1525
{15, 1}, // #1526
{16, 1}, // #1527
{ 4, 1}, // #1528
{ 5, 2}, // #1529
{ 7, 1}, // #1530
{ 8, 1}, // #1531
{15, 1}, // #1532
{16, 1},