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) {