diff --git a/README.md b/README.md index 04d4ae0..857a93e 100644 --- a/README.md +++ b/README.md @@ -297,8 +297,11 @@ Exit Code 1 | AVX512VNNI | AVX-512 Vector Neural Network Instructions | | AVX512VP2INTERSECT | AVX-512 Intersect for D/Q | | AVX512VPOPCNTDQ | AVX-512 Vector Population Count Doubleword and Quadword | +| AVXIFMA | AVX-IFMA instructions | +| AVXNECONVERT | AVX-NE-CONVERT instructions | | AVXSLOW | Indicates the CPU performs 2 128 bit operations instead of one | | AVXVNNI | AVX (VEX encoded) VNNI neural network instructions | +| AVXVNNIINT8 | AVX-VNNI-INT8 instructions | | BMI1 | Bit Manipulation Instruction Set 1 | | BMI2 | Bit Manipulation Instruction Set 2 | | CETIBT | Intel CET Indirect Branch Tracking | @@ -307,6 +310,7 @@ Exit Code 1 | CLMUL | Carry-less Multiplication | | CLZERO | CLZERO instruction supported | | CMOV | i686 CMOV | +| CMPCCXADD | CMPCCXADD instructions | | CMPSB_SCADBS_SHORT | Fast short CMPSB and SCASB | | CMPXCHG8 | CMPXCHG8 instruction | | CPBOOST | Core Performance Boost | diff --git a/cpuid.go b/cpuid.go index 8cad0d1..cf2ae9c 100644 --- a/cpuid.go +++ b/cpuid.go @@ -94,8 +94,11 @@ const ( AVX512VNNI // AVX-512 Vector Neural Network Instructions AVX512VP2INTERSECT // AVX-512 Intersect for D/Q AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword + AVXIFMA // AVX-IFMA instructions + AVXNECONVERT // AVX-NE-CONVERT instructions AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one AVXVNNI // AVX (VEX encoded) VNNI neural network instructions + AVXVNNIINT8 // AVX-VNNI-INT8 instructions BMI1 // Bit Manipulation Instruction Set 1 BMI2 // Bit Manipulation Instruction Set 2 CETIBT // Intel CET Indirect Branch Tracking @@ -104,6 +107,7 @@ const ( CLMUL // Carry-less Multiplication CLZERO // CLZERO instruction supported CMOV // i686 CMOV + CMPCCXADD // CMPCCXADD instructions CMPSB_SCADBS_SHORT // Fast short CMPSB and SCASB CMPXCHG8 // CMPXCHG8 instruction CPBOOST // Core Performance Boost @@ -1178,15 +1182,19 @@ func support() flagSet { fs.setIf(edx&(1<<31) != 0, SPEC_CTRL_SSBD) // CPUID.(EAX=7, ECX=1).EDX + fs.setIf(edx&(1<<4) != 0, AVXVNNIINT8) + fs.setIf(edx&(1<<5) != 0, AVXNECONVERT) fs.setIf(edx&(1<<14) != 0, PREFETCHI) - // CPUID.(EAX=7, ECX=1) + // CPUID.(EAX=7, ECX=1).EAX eax1, _, _, _ := cpuidex(7, 1) fs.setIf(fs.inSet(AVX) && eax1&(1<<4) != 0, AVXVNNI) + fs.setIf(eax1&(1<<7) != 0, CMPCCXADD) fs.setIf(eax1&(1<<10) != 0, MOVSB_ZL) fs.setIf(eax1&(1<<11) != 0, STOSB_SHORT) fs.setIf(eax1&(1<<12) != 0, CMPSB_SCADBS_SHORT) fs.setIf(eax1&(1<<22) != 0, HRESET) + fs.setIf(eax1&(1<<23) != 0, AVXIFMA) fs.setIf(eax1&(1<<26) != 0, LAM) // Only detect AVX-512 features if XGETBV is supported diff --git a/featureid_string.go b/featureid_string.go index 479162f..8b6cd2b 100644 --- a/featureid_string.go +++ b/featureid_string.go @@ -34,182 +34,186 @@ func _() { _ = x[AVX512VNNI-24] _ = x[AVX512VP2INTERSECT-25] _ = x[AVX512VPOPCNTDQ-26] - _ = x[AVXSLOW-27] - _ = x[AVXVNNI-28] - _ = x[BMI1-29] - _ = x[BMI2-30] - _ = x[CETIBT-31] - _ = x[CETSS-32] - _ = x[CLDEMOTE-33] - _ = x[CLMUL-34] - _ = x[CLZERO-35] - _ = x[CMOV-36] - _ = x[CMPSB_SCADBS_SHORT-37] - _ = x[CMPXCHG8-38] - _ = x[CPBOOST-39] - _ = x[CPPC-40] - _ = x[CX16-41] - _ = x[EFER_LMSLE_UNS-42] - _ = x[ENQCMD-43] - _ = x[ERMS-44] - _ = x[F16C-45] - _ = x[FLUSH_L1D-46] - _ = x[FMA3-47] - _ = x[FMA4-48] - _ = x[FP128-49] - _ = x[FP256-50] - _ = x[FSRM-51] - _ = x[FXSR-52] - _ = x[FXSROPT-53] - _ = x[GFNI-54] - _ = x[HLE-55] - _ = x[HRESET-56] - _ = x[HTT-57] - _ = x[HWA-58] - _ = x[HYBRID_CPU-59] - _ = x[HYPERVISOR-60] - _ = x[IA32_ARCH_CAP-61] - _ = x[IA32_CORE_CAP-62] - _ = x[IBPB-63] - _ = x[IBRS-64] - _ = x[IBRS_PREFERRED-65] - _ = x[IBRS_PROVIDES_SMP-66] - _ = x[IBS-67] - _ = x[IBSBRNTRGT-68] - _ = x[IBSFETCHSAM-69] - _ = x[IBSFFV-70] - _ = x[IBSOPCNT-71] - _ = x[IBSOPCNTEXT-72] - _ = x[IBSOPSAM-73] - _ = x[IBSRDWROPCNT-74] - _ = x[IBSRIPINVALIDCHK-75] - _ = x[IBS_FETCH_CTLX-76] - _ = x[IBS_OPDATA4-77] - _ = x[IBS_OPFUSE-78] - _ = x[IBS_PREVENTHOST-79] - _ = x[IBS_ZEN4-80] - _ = x[INT_WBINVD-81] - _ = x[INVLPGB-82] - _ = x[LAHF-83] - _ = x[LAM-84] - _ = x[LBRVIRT-85] - _ = x[LZCNT-86] - _ = x[MCAOVERFLOW-87] - _ = x[MCDT_NO-88] - _ = x[MCOMMIT-89] - _ = x[MD_CLEAR-90] - _ = x[MMX-91] - _ = x[MMXEXT-92] - _ = x[MOVBE-93] - _ = x[MOVDIR64B-94] - _ = x[MOVDIRI-95] - _ = x[MOVSB_ZL-96] - _ = x[MOVU-97] - _ = x[MPX-98] - _ = x[MSRIRC-99] - _ = x[MSR_PAGEFLUSH-100] - _ = x[NRIPS-101] - _ = x[NX-102] - _ = x[OSXSAVE-103] - _ = x[PCONFIG-104] - _ = x[POPCNT-105] - _ = x[PPIN-106] - _ = x[PREFETCHI-107] - _ = x[PSFD-108] - _ = x[RDPRU-109] - _ = x[RDRAND-110] - _ = x[RDSEED-111] - _ = x[RDTSCP-112] - _ = x[RTM-113] - _ = x[RTM_ALWAYS_ABORT-114] - _ = x[SERIALIZE-115] - _ = x[SEV-116] - _ = x[SEV_64BIT-117] - _ = x[SEV_ALTERNATIVE-118] - _ = x[SEV_DEBUGSWAP-119] - _ = x[SEV_ES-120] - _ = x[SEV_RESTRICTED-121] - _ = x[SEV_SNP-122] - _ = x[SGX-123] - _ = x[SGXLC-124] - _ = x[SHA-125] - _ = x[SME-126] - _ = x[SME_COHERENT-127] - _ = x[SPEC_CTRL_SSBD-128] - _ = x[SRBDS_CTRL-129] - _ = x[SSE-130] - _ = x[SSE2-131] - _ = x[SSE3-132] - _ = x[SSE4-133] - _ = x[SSE42-134] - _ = x[SSE4A-135] - _ = x[SSSE3-136] - _ = x[STIBP-137] - _ = x[STIBP_ALWAYSON-138] - _ = x[STOSB_SHORT-139] - _ = x[SUCCOR-140] - _ = x[SVM-141] - _ = x[SVMDA-142] - _ = x[SVMFBASID-143] - _ = x[SVML-144] - _ = x[SVMNP-145] - _ = x[SVMPF-146] - _ = x[SVMPFT-147] - _ = x[SYSCALL-148] - _ = x[SYSEE-149] - _ = x[TBM-150] - _ = x[TLB_FLUSH_NESTED-151] - _ = x[TME-152] - _ = x[TOPEXT-153] - _ = x[TSCRATEMSR-154] - _ = x[TSXLDTRK-155] - _ = x[VAES-156] - _ = x[VMCBCLEAN-157] - _ = x[VMPL-158] - _ = x[VMSA_REGPROT-159] - _ = x[VMX-160] - _ = x[VPCLMULQDQ-161] - _ = x[VTE-162] - _ = x[WAITPKG-163] - _ = x[WBNOINVD-164] - _ = x[X87-165] - _ = x[XGETBV1-166] - _ = x[XOP-167] - _ = x[XSAVE-168] - _ = x[XSAVEC-169] - _ = x[XSAVEOPT-170] - _ = x[XSAVES-171] - _ = x[AESARM-172] - _ = x[ARMCPUID-173] - _ = x[ASIMD-174] - _ = x[ASIMDDP-175] - _ = x[ASIMDHP-176] - _ = x[ASIMDRDM-177] - _ = x[ATOMICS-178] - _ = x[CRC32-179] - _ = x[DCPOP-180] - _ = x[EVTSTRM-181] - _ = x[FCMA-182] - _ = x[FP-183] - _ = x[FPHP-184] - _ = x[GPA-185] - _ = x[JSCVT-186] - _ = x[LRCPC-187] - _ = x[PMULL-188] - _ = x[SHA1-189] - _ = x[SHA2-190] - _ = x[SHA3-191] - _ = x[SHA512-192] - _ = x[SM3-193] - _ = x[SM4-194] - _ = x[SVE-195] - _ = x[lastID-196] + _ = x[AVXIFMA-27] + _ = x[AVXNECONVERT-28] + _ = x[AVXSLOW-29] + _ = x[AVXVNNI-30] + _ = x[AVXVNNIINT8-31] + _ = x[BMI1-32] + _ = x[BMI2-33] + _ = x[CETIBT-34] + _ = x[CETSS-35] + _ = x[CLDEMOTE-36] + _ = x[CLMUL-37] + _ = x[CLZERO-38] + _ = x[CMOV-39] + _ = x[CMPCCXADD-40] + _ = x[CMPSB_SCADBS_SHORT-41] + _ = x[CMPXCHG8-42] + _ = x[CPBOOST-43] + _ = x[CPPC-44] + _ = x[CX16-45] + _ = x[EFER_LMSLE_UNS-46] + _ = x[ENQCMD-47] + _ = x[ERMS-48] + _ = x[F16C-49] + _ = x[FLUSH_L1D-50] + _ = x[FMA3-51] + _ = x[FMA4-52] + _ = x[FP128-53] + _ = x[FP256-54] + _ = x[FSRM-55] + _ = x[FXSR-56] + _ = x[FXSROPT-57] + _ = x[GFNI-58] + _ = x[HLE-59] + _ = x[HRESET-60] + _ = x[HTT-61] + _ = x[HWA-62] + _ = x[HYBRID_CPU-63] + _ = x[HYPERVISOR-64] + _ = x[IA32_ARCH_CAP-65] + _ = x[IA32_CORE_CAP-66] + _ = x[IBPB-67] + _ = x[IBRS-68] + _ = x[IBRS_PREFERRED-69] + _ = x[IBRS_PROVIDES_SMP-70] + _ = x[IBS-71] + _ = x[IBSBRNTRGT-72] + _ = x[IBSFETCHSAM-73] + _ = x[IBSFFV-74] + _ = x[IBSOPCNT-75] + _ = x[IBSOPCNTEXT-76] + _ = x[IBSOPSAM-77] + _ = x[IBSRDWROPCNT-78] + _ = x[IBSRIPINVALIDCHK-79] + _ = x[IBS_FETCH_CTLX-80] + _ = x[IBS_OPDATA4-81] + _ = x[IBS_OPFUSE-82] + _ = x[IBS_PREVENTHOST-83] + _ = x[IBS_ZEN4-84] + _ = x[INT_WBINVD-85] + _ = x[INVLPGB-86] + _ = x[LAHF-87] + _ = x[LAM-88] + _ = x[LBRVIRT-89] + _ = x[LZCNT-90] + _ = x[MCAOVERFLOW-91] + _ = x[MCDT_NO-92] + _ = x[MCOMMIT-93] + _ = x[MD_CLEAR-94] + _ = x[MMX-95] + _ = x[MMXEXT-96] + _ = x[MOVBE-97] + _ = x[MOVDIR64B-98] + _ = x[MOVDIRI-99] + _ = x[MOVSB_ZL-100] + _ = x[MOVU-101] + _ = x[MPX-102] + _ = x[MSRIRC-103] + _ = x[MSR_PAGEFLUSH-104] + _ = x[NRIPS-105] + _ = x[NX-106] + _ = x[OSXSAVE-107] + _ = x[PCONFIG-108] + _ = x[POPCNT-109] + _ = x[PPIN-110] + _ = x[PREFETCHI-111] + _ = x[PSFD-112] + _ = x[RDPRU-113] + _ = x[RDRAND-114] + _ = x[RDSEED-115] + _ = x[RDTSCP-116] + _ = x[RTM-117] + _ = x[RTM_ALWAYS_ABORT-118] + _ = x[SERIALIZE-119] + _ = x[SEV-120] + _ = x[SEV_64BIT-121] + _ = x[SEV_ALTERNATIVE-122] + _ = x[SEV_DEBUGSWAP-123] + _ = x[SEV_ES-124] + _ = x[SEV_RESTRICTED-125] + _ = x[SEV_SNP-126] + _ = x[SGX-127] + _ = x[SGXLC-128] + _ = x[SHA-129] + _ = x[SME-130] + _ = x[SME_COHERENT-131] + _ = x[SPEC_CTRL_SSBD-132] + _ = x[SRBDS_CTRL-133] + _ = x[SSE-134] + _ = x[SSE2-135] + _ = x[SSE3-136] + _ = x[SSE4-137] + _ = x[SSE42-138] + _ = x[SSE4A-139] + _ = x[SSSE3-140] + _ = x[STIBP-141] + _ = x[STIBP_ALWAYSON-142] + _ = x[STOSB_SHORT-143] + _ = x[SUCCOR-144] + _ = x[SVM-145] + _ = x[SVMDA-146] + _ = x[SVMFBASID-147] + _ = x[SVML-148] + _ = x[SVMNP-149] + _ = x[SVMPF-150] + _ = x[SVMPFT-151] + _ = x[SYSCALL-152] + _ = x[SYSEE-153] + _ = x[TBM-154] + _ = x[TLB_FLUSH_NESTED-155] + _ = x[TME-156] + _ = x[TOPEXT-157] + _ = x[TSCRATEMSR-158] + _ = x[TSXLDTRK-159] + _ = x[VAES-160] + _ = x[VMCBCLEAN-161] + _ = x[VMPL-162] + _ = x[VMSA_REGPROT-163] + _ = x[VMX-164] + _ = x[VPCLMULQDQ-165] + _ = x[VTE-166] + _ = x[WAITPKG-167] + _ = x[WBNOINVD-168] + _ = x[X87-169] + _ = x[XGETBV1-170] + _ = x[XOP-171] + _ = x[XSAVE-172] + _ = x[XSAVEC-173] + _ = x[XSAVEOPT-174] + _ = x[XSAVES-175] + _ = x[AESARM-176] + _ = x[ARMCPUID-177] + _ = x[ASIMD-178] + _ = x[ASIMDDP-179] + _ = x[ASIMDHP-180] + _ = x[ASIMDRDM-181] + _ = x[ATOMICS-182] + _ = x[CRC32-183] + _ = x[DCPOP-184] + _ = x[EVTSTRM-185] + _ = x[FCMA-186] + _ = x[FP-187] + _ = x[FPHP-188] + _ = x[GPA-189] + _ = x[JSCVT-190] + _ = x[LRCPC-191] + _ = x[PMULL-192] + _ = x[SHA1-193] + _ = x[SHA2-194] + _ = x[SHA3-195] + _ = x[SHA512-196] + _ = x[SM3-197] + _ = x[SM4-198] + _ = x[SVE-199] + _ = x[lastID-200] _ = x[firstID-0] } -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWAVXVNNIBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4INT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSPEC_CTRL_SSBDSRBDS_CTRLSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8BMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4INT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSPEC_CTRL_SSBDSRBDS_CTRLSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 62, 65, 69, 79, 91, 99, 107, 115, 123, 130, 140, 150, 158, 168, 179, 187, 197, 215, 230, 237, 244, 248, 252, 258, 263, 271, 276, 282, 286, 304, 312, 319, 323, 327, 341, 347, 351, 355, 364, 368, 372, 377, 382, 386, 390, 397, 401, 404, 410, 413, 416, 426, 436, 449, 462, 466, 470, 484, 501, 504, 514, 525, 531, 539, 550, 558, 570, 586, 600, 611, 621, 636, 644, 654, 661, 665, 668, 675, 680, 691, 698, 705, 713, 716, 722, 727, 736, 743, 751, 755, 758, 764, 777, 782, 784, 791, 798, 804, 808, 817, 821, 826, 832, 838, 844, 847, 863, 872, 875, 884, 899, 912, 918, 932, 939, 942, 947, 950, 953, 965, 979, 989, 992, 996, 1000, 1004, 1009, 1014, 1019, 1024, 1038, 1049, 1055, 1058, 1063, 1072, 1076, 1081, 1086, 1092, 1099, 1104, 1107, 1123, 1126, 1132, 1142, 1150, 1154, 1163, 1167, 1179, 1182, 1192, 1195, 1202, 1210, 1213, 1220, 1223, 1228, 1234, 1242, 1248, 1254, 1262, 1267, 1274, 1281, 1289, 1296, 1301, 1306, 1313, 1317, 1319, 1323, 1326, 1331, 1336, 1341, 1345, 1349, 1353, 1359, 1362, 1365, 1368, 1374} +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 62, 65, 69, 79, 91, 99, 107, 115, 123, 130, 140, 150, 158, 168, 179, 187, 197, 215, 230, 237, 249, 256, 263, 274, 278, 282, 288, 293, 301, 306, 312, 316, 325, 343, 351, 358, 362, 366, 380, 386, 390, 394, 403, 407, 411, 416, 421, 425, 429, 436, 440, 443, 449, 452, 455, 465, 475, 488, 501, 505, 509, 523, 540, 543, 553, 564, 570, 578, 589, 597, 609, 625, 639, 650, 660, 675, 683, 693, 700, 704, 707, 714, 719, 730, 737, 744, 752, 755, 761, 766, 775, 782, 790, 794, 797, 803, 816, 821, 823, 830, 837, 843, 847, 856, 860, 865, 871, 877, 883, 886, 902, 911, 914, 923, 938, 951, 957, 971, 978, 981, 986, 989, 992, 1004, 1018, 1028, 1031, 1035, 1039, 1043, 1048, 1053, 1058, 1063, 1077, 1088, 1094, 1097, 1102, 1111, 1115, 1120, 1125, 1131, 1138, 1143, 1146, 1162, 1165, 1171, 1181, 1189, 1193, 1202, 1206, 1218, 1221, 1231, 1234, 1241, 1249, 1252, 1259, 1262, 1267, 1273, 1281, 1287, 1293, 1301, 1306, 1313, 1320, 1328, 1335, 1340, 1345, 1352, 1356, 1358, 1362, 1365, 1370, 1375, 1380, 1384, 1388, 1392, 1398, 1401, 1404, 1407, 1413} func (i FeatureID) String() string { if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {