summaryrefslogtreecommitdiff
path: root/vendor/github.com/klauspost/cpuid
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/klauspost/cpuid')
-rw-r--r--vendor/github.com/klauspost/cpuid/v2/README.md6
-rw-r--r--vendor/github.com/klauspost/cpuid/v2/cpuid.go104
-rw-r--r--vendor/github.com/klauspost/cpuid/v2/detect_x86.go4
-rw-r--r--vendor/github.com/klauspost/cpuid/v2/featureid_string.go178
4 files changed, 205 insertions, 87 deletions
diff --git a/vendor/github.com/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md
index 7b1d59921..88d68d528 100644
--- a/vendor/github.com/klauspost/cpuid/v2/README.md
+++ b/vendor/github.com/klauspost/cpuid/v2/README.md
@@ -281,7 +281,7 @@ Exit Code 1
| AMXBF16 | Tile computational operations on BFLOAT16 numbers |
| AMXINT8 | Tile computational operations on 8-bit integers |
| AMXFP16 | Tile computational operations on FP16 numbers |
-| AMXFP8 | Tile computational operations on FP8 numbers |
+| AMXFP8 | Tile computational operations on FP8 numbers |
| AMXCOMPLEX | Tile computational operations on complex numbers |
| AMXTILE | Tile architecture |
| AMXTF32 | Matrix Multiplication of TF32 Tiles into Packed Single Precision Tile |
@@ -418,6 +418,7 @@ Exit Code 1
| SEV_SNP | AMD SEV Secure Nested Paging supported |
| SGX | Software Guard Extensions |
| SGXLC | Software Guard Extensions Launch Control |
+| SGXPQC | Software Guard Extensions 256-bit Encryption |
| SHA | Intel SHA Extensions |
| SME | AMD Secure Memory Encryption supported |
| SME_COHERENT | AMD Hardware cache coherency across encryption domains enforced |
@@ -450,6 +451,9 @@ Exit Code 1
| TLB_FLUSH_NESTED | AMD: Flushing includes all the nested translations for guest translations |
| TME | Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE. |
| TOPEXT | TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. |
+| TSA_L1_NO | AMD only: Not vulnerable to TSA-L1 |
+| TSA_SQ_NO | AMD only: Not vulnerable to TSA-SQ |
+| TSA_VERW_CLEAR | AMD: If set, the memory form of the VERW instruction may be used to help mitigate TSA |
| TSCRATEMSR | MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104 |
| TSXLDTRK | Intel TSX Suspend Load Address Tracking |
| VAES | Vector AES. AVX(512) versions requires additional checks. |
diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go
index 248439a9a..9cf7738a9 100644
--- a/vendor/github.com/klauspost/cpuid/v2/cpuid.go
+++ b/vendor/github.com/klauspost/cpuid/v2/cpuid.go
@@ -220,6 +220,7 @@ const (
SEV_SNP // AMD SEV Secure Nested Paging supported
SGX // Software Guard Extensions
SGXLC // Software Guard Extensions Launch Control
+ SGXPQC // Software Guard Extensions 256-bit Encryption
SHA // Intel SHA Extensions
SME // AMD Secure Memory Encryption supported
SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced
@@ -255,6 +256,9 @@ const (
TLB_FLUSH_NESTED // AMD: Flushing includes all the nested translations for guest translations
TME // Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE.
TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX.
+ TSA_L1_NO // AMD only: Not vulnerable to TSA-L1
+ TSA_SQ_NO // AM onlyD: Not vulnerable to TSA-SQ
+ TSA_VERW_CLEAR // If set, the memory form of the VERW instruction may be used to help mitigate TSA
TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104
TSXLDTRK // Intel TSX Suspend Load Address Tracking
VAES // Vector AES. AVX(512) versions requires additional checks.
@@ -304,6 +308,13 @@ const (
SM3 // SM3 instructions
SM4 // SM4 instructions
SVE // Scalable Vector Extension
+
+ // PMU
+ PMU_FIXEDCOUNTER_CYCLES
+ PMU_FIXEDCOUNTER_REFCYCLES
+ PMU_FIXEDCOUNTER_INSTRUCTIONS
+ PMU_FIXEDCOUNTER_TOPDOWN_SLOTS
+
// Keep it last. It automatically defines the size of []flagSet
lastID
@@ -336,11 +347,36 @@ type CPUInfo struct {
SGX SGXSupport
AMDMemEncryption AMDMemEncryptionSupport
AVX10Level uint8
+ PMU PerformanceMonitoringInfo // holds information about the PMU
maxFunc uint32
maxExFunc uint32
}
+// PerformanceMonitoringInfo holds information about CPU performance monitoring capabilities.
+// This is primarily populated from CPUID leaf 0xAh on x86
+type PerformanceMonitoringInfo struct {
+ // VersionID (x86 only): Version ID of architectural performance monitoring.
+ // A value of 0 means architectural performance monitoring is not supported or information is unavailable.
+ VersionID uint8
+ // NumGPPMC: Number of General-Purpose Performance Monitoring Counters per logical processor.
+ // On ARM, this is derived from PMCR_EL0.N (number of event counters).
+ NumGPCounters uint8
+ // GPPMCWidth: Bit width of General-Purpose Performance Monitoring Counters.
+ // On ARM, typically 64 for PMU event counters.
+ GPPMCWidth uint8
+ // NumFixedPMC: Number of Fixed-Function Performance Counters.
+ // Valid on x86 if VersionID > 1. On ARM, this typically includes at least the cycle counter (PMCCNTR_EL0).
+ NumFixedPMC uint8
+ // FixedPMCWidth: Bit width of Fixed-Function Performance Counters.
+ // Valid on x86 if VersionID > 1. On ARM, the cycle counter (PMCCNTR_EL0) is 64-bit.
+ FixedPMCWidth uint8
+ // Raw register output from CPUID leaf 0xAh.
+ RawEBX uint32
+ RawEAX uint32
+ RawEDX uint32
+}
+
var cpuid func(op uint32) (eax, ebx, ecx, edx uint32)
var cpuidex func(op, op2 uint32) (eax, ebx, ecx, edx uint32)
var xgetbv func(index uint32) (eax, edx uint32)
@@ -1358,6 +1394,11 @@ func support() flagSet {
fs.setIf(edx&(1<<4) != 0, BHI_CTRL)
fs.setIf(edx&(1<<5) != 0, MCDT_NO)
+ if fs.inSet(SGX) {
+ eax, _, _, _ := cpuidex(0x12, 0)
+ fs.setIf(eax&(1<<12) != 0, SGXPQC)
+ }
+
// Add keylocker features.
if fs.inSet(KEYLOCKER) && mfi >= 0x19 {
_, ebx, _, _ := cpuidex(0x19, 0)
@@ -1371,6 +1412,7 @@ func support() flagSet {
fs.setIf(ebx&(1<<17) != 0, AVX10_256)
fs.setIf(ebx&(1<<18) != 0, AVX10_512)
}
+
}
// Processor Extended State Enumeration Sub-leaf (EAX = 0DH, ECX = 1)
@@ -1514,12 +1556,28 @@ func support() flagSet {
}
if maxExtendedFunction() >= 0x80000021 && vend == AMD {
- a, _, _, _ := cpuid(0x80000021)
+ a, _, c, _ := cpuid(0x80000021)
fs.setIf((a>>31)&1 == 1, SRSO_MSR_FIX)
fs.setIf((a>>30)&1 == 1, SRSO_USER_KERNEL_NO)
fs.setIf((a>>29)&1 == 1, SRSO_NO)
fs.setIf((a>>28)&1 == 1, IBPB_BRTYPE)
fs.setIf((a>>27)&1 == 1, SBPB)
+ fs.setIf((c>>1)&1 == 1, TSA_L1_NO)
+ fs.setIf((c>>2)&1 == 1, TSA_SQ_NO)
+ fs.setIf((a>>5)&1 == 1, TSA_VERW_CLEAR)
+ }
+ if vend == AMD {
+ if family < 0x19 {
+ // AMD CPUs that are older than Family 19h are not vulnerable to TSA but do not set TSA_L1_NO or TSA_SQ_NO.
+ // Source: https://www.amd.com/content/dam/amd/en/documents/resources/bulletin/technical-guidance-for-mitigating-transient-scheduler-attacks.pdf
+ fs.set(TSA_L1_NO)
+ fs.set(TSA_SQ_NO)
+ } else if family == 0x1a {
+ // AMD Family 1Ah models 00h-4Fh and 60h-7Fh are also not vulnerable to TSA but do not set TSA_L1_NO or TSA_SQ_NO.
+ // Future AMD CPUs will set these CPUID bits if appropriate. CPUs will be designed to set these CPUID bits if appropriate.
+ notVuln := model <= 0x4f || (model >= 0x60 && model <= 0x7f)
+ fs.setIf(notVuln, TSA_L1_NO, TSA_SQ_NO)
+ }
}
if mfi >= 0x20 {
@@ -1575,3 +1633,47 @@ func valAsString(values ...uint32) []byte {
}
return r
}
+
+func parseLeaf0AH(c *CPUInfo, eax, ebx, edx uint32) (info PerformanceMonitoringInfo) {
+ info.VersionID = uint8(eax & 0xFF)
+ info.NumGPCounters = uint8((eax >> 8) & 0xFF)
+ info.GPPMCWidth = uint8((eax >> 16) & 0xFF)
+
+ info.RawEBX = ebx
+ info.RawEAX = eax
+ info.RawEDX = edx
+
+ if info.VersionID > 1 { // This information is only valid if VersionID > 1
+ info.NumFixedPMC = uint8(edx & 0x1F) // Bits 4:0
+ info.FixedPMCWidth = uint8((edx >> 5) & 0xFF) // Bits 12:5
+ }
+ if info.VersionID > 0 {
+ // first 4 fixed events are always instructions retired, cycles, ref cycles and topdown slots
+ if ebx == 0x0 && info.NumFixedPMC == 3 {
+ c.featureSet.set(PMU_FIXEDCOUNTER_INSTRUCTIONS)
+ c.featureSet.set(PMU_FIXEDCOUNTER_CYCLES)
+ c.featureSet.set(PMU_FIXEDCOUNTER_REFCYCLES)
+ }
+ if ebx == 0x0 && info.NumFixedPMC == 4 {
+ c.featureSet.set(PMU_FIXEDCOUNTER_INSTRUCTIONS)
+ c.featureSet.set(PMU_FIXEDCOUNTER_CYCLES)
+ c.featureSet.set(PMU_FIXEDCOUNTER_REFCYCLES)
+ c.featureSet.set(PMU_FIXEDCOUNTER_TOPDOWN_SLOTS)
+ }
+ if ebx != 0x0 {
+ if ((ebx >> 0) & 1) == 0 {
+ c.featureSet.set(PMU_FIXEDCOUNTER_INSTRUCTIONS)
+ }
+ if ((ebx >> 1) & 1) == 0 {
+ c.featureSet.set(PMU_FIXEDCOUNTER_CYCLES)
+ }
+ if ((ebx >> 2) & 1) == 0 {
+ c.featureSet.set(PMU_FIXEDCOUNTER_REFCYCLES)
+ }
+ if ((ebx >> 3) & 1) == 0 {
+ c.featureSet.set(PMU_FIXEDCOUNTER_TOPDOWN_SLOTS)
+ }
+ }
+ }
+ return info
+}
diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go
index f924c9d83..14a56b930 100644
--- a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go
+++ b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go
@@ -36,6 +36,10 @@ func addInfo(c *CPUInfo, safe bool) {
c.AVX10Level = c.supportAVX10()
c.cacheSize()
c.frequencies()
+ if c.maxFunc >= 0x0A {
+ eax, ebx, _, edx := cpuid(0x0A)
+ c.PMU = parseLeaf0AH(c, eax, ebx, edx)
+ }
}
func getVectorLength() (vl, pl uint64) { return 0, 0 }
diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go
index 07704351f..2888bae8f 100644
--- a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go
+++ b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go
@@ -154,95 +154,103 @@ func _() {
_ = x[SEV_SNP-144]
_ = x[SGX-145]
_ = x[SGXLC-146]
- _ = x[SHA-147]
- _ = x[SME-148]
- _ = x[SME_COHERENT-149]
- _ = x[SM3_X86-150]
- _ = x[SM4_X86-151]
- _ = x[SPEC_CTRL_SSBD-152]
- _ = x[SRBDS_CTRL-153]
- _ = x[SRSO_MSR_FIX-154]
- _ = x[SRSO_NO-155]
- _ = x[SRSO_USER_KERNEL_NO-156]
- _ = x[SSE-157]
- _ = x[SSE2-158]
- _ = x[SSE3-159]
- _ = x[SSE4-160]
- _ = x[SSE42-161]
- _ = x[SSE4A-162]
- _ = x[SSSE3-163]
- _ = x[STIBP-164]
- _ = x[STIBP_ALWAYSON-165]
- _ = x[STOSB_SHORT-166]
- _ = x[SUCCOR-167]
- _ = x[SVM-168]
- _ = x[SVMDA-169]
- _ = x[SVMFBASID-170]
- _ = x[SVML-171]
- _ = x[SVMNP-172]
- _ = x[SVMPF-173]
- _ = x[SVMPFT-174]
- _ = x[SYSCALL-175]
- _ = x[SYSEE-176]
- _ = x[TBM-177]
- _ = x[TDX_GUEST-178]
- _ = x[TLB_FLUSH_NESTED-179]
- _ = x[TME-180]
- _ = x[TOPEXT-181]
- _ = x[TSCRATEMSR-182]
- _ = x[TSXLDTRK-183]
- _ = x[VAES-184]
- _ = x[VMCBCLEAN-185]
- _ = x[VMPL-186]
- _ = x[VMSA_REGPROT-187]
- _ = x[VMX-188]
- _ = x[VPCLMULQDQ-189]
- _ = x[VTE-190]
- _ = x[WAITPKG-191]
- _ = x[WBNOINVD-192]
- _ = x[WRMSRNS-193]
- _ = x[X87-194]
- _ = x[XGETBV1-195]
- _ = x[XOP-196]
- _ = x[XSAVE-197]
- _ = x[XSAVEC-198]
- _ = x[XSAVEOPT-199]
- _ = x[XSAVES-200]
- _ = x[AESARM-201]
- _ = x[ARMCPUID-202]
- _ = x[ASIMD-203]
- _ = x[ASIMDDP-204]
- _ = x[ASIMDHP-205]
- _ = x[ASIMDRDM-206]
- _ = x[ATOMICS-207]
- _ = x[CRC32-208]
- _ = x[DCPOP-209]
- _ = x[EVTSTRM-210]
- _ = x[FCMA-211]
- _ = x[FHM-212]
- _ = x[FP-213]
- _ = x[FPHP-214]
- _ = x[GPA-215]
- _ = x[JSCVT-216]
- _ = x[LRCPC-217]
- _ = x[PMULL-218]
- _ = x[RNDR-219]
- _ = x[TLB-220]
- _ = x[TS-221]
- _ = x[SHA1-222]
- _ = x[SHA2-223]
- _ = x[SHA3-224]
- _ = x[SHA512-225]
- _ = x[SM3-226]
- _ = x[SM4-227]
- _ = x[SVE-228]
- _ = x[lastID-229]
+ _ = x[SGXPQC-147]
+ _ = x[SHA-148]
+ _ = x[SME-149]
+ _ = x[SME_COHERENT-150]
+ _ = x[SM3_X86-151]
+ _ = x[SM4_X86-152]
+ _ = x[SPEC_CTRL_SSBD-153]
+ _ = x[SRBDS_CTRL-154]
+ _ = x[SRSO_MSR_FIX-155]
+ _ = x[SRSO_NO-156]
+ _ = x[SRSO_USER_KERNEL_NO-157]
+ _ = x[SSE-158]
+ _ = x[SSE2-159]
+ _ = x[SSE3-160]
+ _ = x[SSE4-161]
+ _ = x[SSE42-162]
+ _ = x[SSE4A-163]
+ _ = x[SSSE3-164]
+ _ = x[STIBP-165]
+ _ = x[STIBP_ALWAYSON-166]
+ _ = x[STOSB_SHORT-167]
+ _ = x[SUCCOR-168]
+ _ = x[SVM-169]
+ _ = x[SVMDA-170]
+ _ = x[SVMFBASID-171]
+ _ = x[SVML-172]
+ _ = x[SVMNP-173]
+ _ = x[SVMPF-174]
+ _ = x[SVMPFT-175]
+ _ = x[SYSCALL-176]
+ _ = x[SYSEE-177]
+ _ = x[TBM-178]
+ _ = x[TDX_GUEST-179]
+ _ = x[TLB_FLUSH_NESTED-180]
+ _ = x[TME-181]
+ _ = x[TOPEXT-182]
+ _ = x[TSA_L1_NO-183]
+ _ = x[TSA_SQ_NO-184]
+ _ = x[TSA_VERW_CLEAR-185]
+ _ = x[TSCRATEMSR-186]
+ _ = x[TSXLDTRK-187]
+ _ = x[VAES-188]
+ _ = x[VMCBCLEAN-189]
+ _ = x[VMPL-190]
+ _ = x[VMSA_REGPROT-191]
+ _ = x[VMX-192]
+ _ = x[VPCLMULQDQ-193]
+ _ = x[VTE-194]
+ _ = x[WAITPKG-195]
+ _ = x[WBNOINVD-196]
+ _ = x[WRMSRNS-197]
+ _ = x[X87-198]
+ _ = x[XGETBV1-199]
+ _ = x[XOP-200]
+ _ = x[XSAVE-201]
+ _ = x[XSAVEC-202]
+ _ = x[XSAVEOPT-203]
+ _ = x[XSAVES-204]
+ _ = x[AESARM-205]
+ _ = x[ARMCPUID-206]
+ _ = x[ASIMD-207]
+ _ = x[ASIMDDP-208]
+ _ = x[ASIMDHP-209]
+ _ = x[ASIMDRDM-210]
+ _ = x[ATOMICS-211]
+ _ = x[CRC32-212]
+ _ = x[DCPOP-213]
+ _ = x[EVTSTRM-214]
+ _ = x[FCMA-215]
+ _ = x[FHM-216]
+ _ = x[FP-217]
+ _ = x[FPHP-218]
+ _ = x[GPA-219]
+ _ = x[JSCVT-220]
+ _ = x[LRCPC-221]
+ _ = x[PMULL-222]
+ _ = x[RNDR-223]
+ _ = x[TLB-224]
+ _ = x[TS-225]
+ _ = x[SHA1-226]
+ _ = x[SHA2-227]
+ _ = x[SHA3-228]
+ _ = x[SHA512-229]
+ _ = x[SM3-230]
+ _ = x[SM4-231]
+ _ = x[SVE-232]
+ _ = x[PMU_FIXEDCOUNTER_CYCLES-233]
+ _ = x[PMU_FIXEDCOUNTER_REFCYCLES-234]
+ _ = x[PMU_FIXEDCOUNTER_INSTRUCTIONS-235]
+ _ = x[PMU_FIXEDCOUNTER_TOPDOWN_SLOTS-236]
+ _ = x[lastID-237]
_ = x[firstID-0]
}
-const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXFP8AMXTILEAMXTF32AMXCOMPLEXAMXTRANSPOSEAPX_FAVXAVX10AVX10_128AVX10_256AVX10_512AVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8AVXVNNIINT16BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBPB_BRTYPEIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBKEYLOCKERKEYLOCKERWLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSBPBSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSM3_X86SM4_X86SPEC_CTRL_SSBDSRBDS_CTRLSRSO_MSR_FIXSRSO_NOSRSO_USER_KERNEL_NOSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFHMFPFPHPGPAJSCVTLRCPCPMULLRNDRTLBTSSHA1SHA2SHA3SHA512SM3SM4SVElastID"
+const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXFP8AMXTILEAMXTF32AMXCOMPLEXAMXTRANSPOSEAPX_FAVXAVX10AVX10_128AVX10_256AVX10_512AVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8AVXVNNIINT16BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBPB_BRTYPEIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBKEYLOCKERKEYLOCKERWLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSBPBSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSGXPQCSHASMESME_COHERENTSM3_X86SM4_X86SPEC_CTRL_SSBDSRBDS_CTRLSRSO_MSR_FIXSRSO_NOSRSO_USER_KERNEL_NOSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSA_L1_NOTSA_SQ_NOTSA_VERW_CLEARTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFHMFPFPHPGPAJSCVTLRCPCPMULLRNDRTLBTSSHA1SHA2SHA3SHA512SM3SM4SVEPMU_FIXEDCOUNTER_CYCLESPMU_FIXEDCOUNTER_REFCYCLESPMU_FIXEDCOUNTER_INSTRUCTIONSPMU_FIXEDCOUNTER_TOPDOWN_SLOTSlastID"
-var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 61, 68, 75, 85, 97, 102, 105, 110, 119, 128, 137, 141, 151, 163, 171, 179, 187, 195, 202, 212, 222, 230, 240, 251, 259, 269, 287, 302, 309, 321, 328, 335, 346, 358, 366, 370, 374, 380, 385, 393, 398, 404, 408, 417, 435, 443, 450, 454, 458, 472, 478, 482, 486, 495, 499, 503, 508, 513, 517, 521, 528, 532, 535, 541, 544, 547, 557, 567, 580, 593, 597, 608, 612, 626, 643, 646, 656, 667, 673, 681, 692, 700, 712, 728, 742, 753, 763, 778, 786, 797, 807, 814, 823, 833, 837, 840, 847, 852, 863, 870, 877, 885, 888, 894, 899, 908, 915, 923, 927, 930, 936, 943, 956, 961, 963, 970, 977, 983, 987, 996, 1000, 1005, 1011, 1017, 1023, 1033, 1036, 1052, 1056, 1065, 1068, 1077, 1092, 1105, 1111, 1125, 1132, 1135, 1140, 1143, 1146, 1158, 1165, 1172, 1186, 1196, 1208, 1215, 1234, 1237, 1241, 1245, 1249, 1254, 1259, 1264, 1269, 1283, 1294, 1300, 1303, 1308, 1317, 1321, 1326, 1331, 1337, 1344, 1349, 1352, 1361, 1377, 1380, 1386, 1396, 1404, 1408, 1417, 1421, 1433, 1436, 1446, 1449, 1456, 1464, 1471, 1474, 1481, 1484, 1489, 1495, 1503, 1509, 1515, 1523, 1528, 1535, 1542, 1550, 1557, 1562, 1567, 1574, 1578, 1581, 1583, 1587, 1590, 1595, 1600, 1605, 1609, 1612, 1614, 1618, 1622, 1626, 1632, 1635, 1638, 1641, 1647}
+var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 61, 68, 75, 85, 97, 102, 105, 110, 119, 128, 137, 141, 151, 163, 171, 179, 187, 195, 202, 212, 222, 230, 240, 251, 259, 269, 287, 302, 309, 321, 328, 335, 346, 358, 366, 370, 374, 380, 385, 393, 398, 404, 408, 417, 435, 443, 450, 454, 458, 472, 478, 482, 486, 495, 499, 503, 508, 513, 517, 521, 528, 532, 535, 541, 544, 547, 557, 567, 580, 593, 597, 608, 612, 626, 643, 646, 656, 667, 673, 681, 692, 700, 712, 728, 742, 753, 763, 778, 786, 797, 807, 814, 823, 833, 837, 840, 847, 852, 863, 870, 877, 885, 888, 894, 899, 908, 915, 923, 927, 930, 936, 943, 956, 961, 963, 970, 977, 983, 987, 996, 1000, 1005, 1011, 1017, 1023, 1033, 1036, 1052, 1056, 1065, 1068, 1077, 1092, 1105, 1111, 1125, 1132, 1135, 1140, 1146, 1149, 1152, 1164, 1171, 1178, 1192, 1202, 1214, 1221, 1240, 1243, 1247, 1251, 1255, 1260, 1265, 1270, 1275, 1289, 1300, 1306, 1309, 1314, 1323, 1327, 1332, 1337, 1343, 1350, 1355, 1358, 1367, 1383, 1386, 1392, 1401, 1410, 1424, 1434, 1442, 1446, 1455, 1459, 1471, 1474, 1484, 1487, 1494, 1502, 1509, 1512, 1519, 1522, 1527, 1533, 1541, 1547, 1553, 1561, 1566, 1573, 1580, 1588, 1595, 1600, 1605, 1612, 1616, 1619, 1621, 1625, 1628, 1633, 1638, 1643, 1647, 1650, 1652, 1656, 1660, 1664, 1670, 1673, 1676, 1679, 1702, 1728, 1757, 1787, 1793}
func (i FeatureID) String() string {
if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {