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 @@ jobs: 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 @@ jobs: - 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 @@ const ( 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 @@ func (c *CPUInfo) cacheSize() { 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 @@ func support() flagSet { 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 @@ func support() flagSet { /* 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 @@ func _() { _ = 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) {