Skip AMD leaf 0x8000001d parsing if no TOPEXT (#118)
* Skip AMD leaf 0x8000001d parsing if no TOPEXT
Add flag for TopologyExtensions, use it when detecting.
Fixes #117
* Upgrade CI to Go 1.19
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index c831393..63d268a 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -10,7 +10,7 @@
build:
strategy:
matrix:
- go-version: [1.16.x, 1.17.x, 1.18.x]
+ go-version: [1.17.x, 1.18.x, 1.19.x]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ubuntu-latest
steps:
@@ -38,7 +38,7 @@
- name: Set up Go
uses: actions/setup-go@v2
with:
- go-version: 1.18.x
+ go-version: 1.19.x
- name: Checkout code
uses: actions/checkout@v2
diff --git a/cpuid.go b/cpuid.go
index 48db2d6..27f3325 100644
--- a/cpuid.go
+++ b/cpuid.go
@@ -192,6 +192,7 @@
SYSCALL // System-Call Extension (SCE): SYSCALL and SYSRET instructions.
SYSEE // SYSENTER and SYSEXIT instructions
TBM // AMD Trailing Bit Manipulation
+ TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX.
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.
TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104
TSXLDTRK // Intel TSX Suspend Load Address Tracking
@@ -882,7 +883,7 @@
c.Cache.L2 = int(((ecx >> 16) & 0xFFFF) * 1024)
// CPUID Fn8000_001D_EAX_x[N:0] Cache Properties
- if maxExtendedFunction() < 0x8000001D {
+ if maxExtendedFunction() < 0x8000001D || !c.Has(TOPEXT) {
return
}
@@ -1180,6 +1181,7 @@
fs.setIf((c&(1<<2)) != 0, SVM)
fs.setIf((c&(1<<6)) != 0, SSE4A)
fs.setIf((c&(1<<10)) != 0, IBS)
+ fs.setIf((c&(1<<22)) != 0, TOPEXT)
// EDX
fs.setIf(d&(1<<11) != 0, SYSCALL)
@@ -1195,8 +1197,8 @@
/* XOP and FMA4 use the AVX instruction coding scheme, so they can't be
* used unless the OS has AVX support. */
if fs.inSet(AVX) {
- fs.setIf((c&0x00000800) != 0, XOP)
- fs.setIf((c&0x00010000) != 0, FMA4)
+ fs.setIf((c&(1<<11)) != 0, XOP)
+ fs.setIf((c&(1<<16)) != 0, FMA4)
}
}
diff --git a/featureid_string.go b/featureid_string.go
index fd892dd..d12e547 100644
--- a/featureid_string.go
+++ b/featureid_string.go
@@ -132,56 +132,57 @@
_ = x[SYSCALL-122]
_ = x[SYSEE-123]
_ = x[TBM-124]
- _ = x[TME-125]
- _ = x[TSCRATEMSR-126]
- _ = x[TSXLDTRK-127]
- _ = x[VAES-128]
- _ = x[VMCBCLEAN-129]
- _ = x[VMPL-130]
- _ = x[VMSA_REGPROT-131]
- _ = x[VMX-132]
- _ = x[VPCLMULQDQ-133]
- _ = x[VTE-134]
- _ = x[WAITPKG-135]
- _ = x[WBNOINVD-136]
- _ = x[X87-137]
- _ = x[XGETBV1-138]
- _ = x[XOP-139]
- _ = x[XSAVE-140]
- _ = x[XSAVEC-141]
- _ = x[XSAVEOPT-142]
- _ = x[XSAVES-143]
- _ = x[AESARM-144]
- _ = x[ARMCPUID-145]
- _ = x[ASIMD-146]
- _ = x[ASIMDDP-147]
- _ = x[ASIMDHP-148]
- _ = x[ASIMDRDM-149]
- _ = x[ATOMICS-150]
- _ = x[CRC32-151]
- _ = x[DCPOP-152]
- _ = x[EVTSTRM-153]
- _ = x[FCMA-154]
- _ = x[FP-155]
- _ = x[FPHP-156]
- _ = x[GPA-157]
- _ = x[JSCVT-158]
- _ = x[LRCPC-159]
- _ = x[PMULL-160]
- _ = x[SHA1-161]
- _ = x[SHA2-162]
- _ = x[SHA3-163]
- _ = x[SHA512-164]
- _ = x[SM3-165]
- _ = x[SM4-166]
- _ = x[SVE-167]
- _ = x[lastID-168]
+ _ = x[TOPEXT-125]
+ _ = x[TME-126]
+ _ = x[TSCRATEMSR-127]
+ _ = x[TSXLDTRK-128]
+ _ = x[VAES-129]
+ _ = x[VMCBCLEAN-130]
+ _ = x[VMPL-131]
+ _ = x[VMSA_REGPROT-132]
+ _ = x[VMX-133]
+ _ = x[VPCLMULQDQ-134]
+ _ = x[VTE-135]
+ _ = x[WAITPKG-136]
+ _ = x[WBNOINVD-137]
+ _ = x[X87-138]
+ _ = x[XGETBV1-139]
+ _ = x[XOP-140]
+ _ = x[XSAVE-141]
+ _ = x[XSAVEC-142]
+ _ = x[XSAVEOPT-143]
+ _ = x[XSAVES-144]
+ _ = x[AESARM-145]
+ _ = x[ARMCPUID-146]
+ _ = x[ASIMD-147]
+ _ = x[ASIMDDP-148]
+ _ = x[ASIMDHP-149]
+ _ = x[ASIMDRDM-150]
+ _ = x[ATOMICS-151]
+ _ = x[CRC32-152]
+ _ = x[DCPOP-153]
+ _ = x[EVTSTRM-154]
+ _ = x[FCMA-155]
+ _ = x[FP-156]
+ _ = x[FPHP-157]
+ _ = x[GPA-158]
+ _ = x[JSCVT-159]
+ _ = x[LRCPC-160]
+ _ = x[PMULL-161]
+ _ = x[SHA1-162]
+ _ = x[SHA2-163]
+ _ = x[SHA3-164]
+ _ = x[SHA512-165]
+ _ = x[SM3-166]
+ _ = x[SM4-167]
+ _ = x[SVE-168]
+ _ = x[lastID-169]
_ = x[firstID-0]
}
-const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWAVXVNNIBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHRESETHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_PREVENTHOSTINT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTMETSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID"
+const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWAVXVNNIBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHRESETHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_PREVENTHOSTINT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTOPEXTTMETSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID"
-var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 237, 241, 245, 251, 256, 264, 269, 275, 279, 297, 305, 312, 316, 322, 326, 330, 334, 338, 342, 349, 353, 356, 362, 365, 368, 378, 382, 385, 395, 406, 412, 420, 431, 439, 451, 467, 482, 492, 499, 503, 506, 513, 518, 529, 536, 539, 545, 550, 559, 566, 574, 577, 583, 596, 601, 603, 610, 617, 623, 628, 634, 640, 646, 649, 665, 674, 677, 686, 701, 714, 720, 734, 741, 744, 749, 752, 755, 767, 770, 774, 778, 782, 787, 792, 797, 802, 813, 819, 822, 827, 836, 840, 845, 850, 856, 863, 868, 871, 874, 884, 892, 896, 905, 909, 921, 924, 934, 937, 944, 952, 955, 962, 965, 970, 976, 984, 990, 996, 1004, 1009, 1016, 1023, 1031, 1038, 1043, 1048, 1055, 1059, 1061, 1065, 1068, 1073, 1078, 1083, 1087, 1091, 1095, 1101, 1104, 1107, 1110, 1116}
+var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 237, 241, 245, 251, 256, 264, 269, 275, 279, 297, 305, 312, 316, 322, 326, 330, 334, 338, 342, 349, 353, 356, 362, 365, 368, 378, 382, 385, 395, 406, 412, 420, 431, 439, 451, 467, 482, 492, 499, 503, 506, 513, 518, 529, 536, 539, 545, 550, 559, 566, 574, 577, 583, 596, 601, 603, 610, 617, 623, 628, 634, 640, 646, 649, 665, 674, 677, 686, 701, 714, 720, 734, 741, 744, 749, 752, 755, 767, 770, 774, 778, 782, 787, 792, 797, 802, 813, 819, 822, 827, 836, 840, 845, 850, 856, 863, 868, 871, 877, 880, 890, 898, 902, 911, 915, 927, 930, 940, 943, 950, 958, 961, 968, 971, 976, 982, 990, 996, 1002, 1010, 1015, 1022, 1029, 1037, 1044, 1049, 1054, 1061, 1065, 1067, 1071, 1074, 1079, 1084, 1089, 1093, 1097, 1101, 1107, 1110, 1113, 1116, 1122}
func (i FeatureID) String() string {
if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {