diff --git a/cpuid.go b/cpuid.go index 8f16890..3d543ce 100644 --- a/cpuid.go +++ b/cpuid.go @@ -95,6 +95,8 @@ const ( AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one. BMI1 // Bit Manipulation Instruction Set 1 BMI2 // Bit Manipulation Instruction Set 2 + CETIBT // Intel CET Indirect Branch Tracking + CETSS // Intel CET Shadow Stack CLDEMOTE // Cache Line Demote CLMUL // Carry-less Multiplication CLZERO // CLZERO instruction supported @@ -993,6 +995,7 @@ func support() flagSet { fs.setIf(ebx&(1<<29) != 0, SHA) // CPUID.(EAX=7, ECX=0).ECX fs.setIf(ecx&(1<<5) != 0, WAITPKG) + fs.setIf(ecx&(1<<7) != 0, CETSS) fs.setIf(ecx&(1<<25) != 0, CLDEMOTE) fs.setIf(ecx&(1<<27) != 0, MOVDIRI) fs.setIf(ecx&(1<<28) != 0, MOVDIR64B) @@ -1002,6 +1005,7 @@ func support() flagSet { fs.setIf(edx&(1<<11) != 0, RTM_ALWAYS_ABORT) fs.setIf(edx&(1<<14) != 0, SERIALIZE) fs.setIf(edx&(1<<16) != 0, TSXLDTRK) + fs.setIf(edx&(1<<20) != 0, CETIBT) fs.setIf(edx&(1<<26) != 0, IBPB) fs.setIf(edx&(1<<27) != 0, STIBP) diff --git a/featureid_string.go b/featureid_string.go index 40aa588..02fe232 100644 --- a/featureid_string.go +++ b/featureid_string.go @@ -36,112 +36,114 @@ func _() { _ = x[AVXSLOW-26] _ = x[BMI1-27] _ = x[BMI2-28] - _ = x[CLDEMOTE-29] - _ = x[CLMUL-30] - _ = x[CLZERO-31] - _ = x[CMOV-32] - _ = x[CMPXCHG8-33] - _ = x[CPBOOST-34] - _ = x[CX16-35] - _ = x[ENQCMD-36] - _ = x[ERMS-37] - _ = x[F16C-38] - _ = x[FMA3-39] - _ = x[FMA4-40] - _ = x[FXSR-41] - _ = x[FXSROPT-42] - _ = x[GFNI-43] - _ = x[HLE-44] - _ = x[HTT-45] - _ = x[HWA-46] - _ = x[HYPERVISOR-47] - _ = x[IBPB-48] - _ = x[IBS-49] - _ = x[IBSBRNTRGT-50] - _ = x[IBSFETCHSAM-51] - _ = x[IBSFFV-52] - _ = x[IBSOPCNT-53] - _ = x[IBSOPCNTEXT-54] - _ = x[IBSOPSAM-55] - _ = x[IBSRDWROPCNT-56] - _ = x[IBSRIPINVALIDCHK-57] - _ = x[INT_WBINVD-58] - _ = x[INVLPGB-59] - _ = x[LAHF-60] - _ = x[LZCNT-61] - _ = x[MCAOVERFLOW-62] - _ = x[MCOMMIT-63] - _ = x[MMX-64] - _ = x[MMXEXT-65] - _ = x[MOVBE-66] - _ = x[MOVDIR64B-67] - _ = x[MOVDIRI-68] - _ = x[MPX-69] - _ = x[MSRIRC-70] - _ = x[NX-71] - _ = x[OSXSAVE-72] - _ = x[POPCNT-73] - _ = x[RDPRU-74] - _ = x[RDRAND-75] - _ = x[RDSEED-76] - _ = x[RDTSCP-77] - _ = x[RTM-78] - _ = x[RTM_ALWAYS_ABORT-79] - _ = x[SCE-80] - _ = x[SERIALIZE-81] - _ = x[SGX-82] - _ = x[SGXLC-83] - _ = x[SHA-84] - _ = x[SSE-85] - _ = x[SSE2-86] - _ = x[SSE3-87] - _ = x[SSE4-88] - _ = x[SSE42-89] - _ = x[SSE4A-90] - _ = x[SSSE3-91] - _ = x[STIBP-92] - _ = x[SUCCOR-93] - _ = x[TBM-94] - _ = x[TSXLDTRK-95] - _ = x[VAES-96] - _ = x[VMX-97] - _ = x[VPCLMULQDQ-98] - _ = x[WAITPKG-99] - _ = x[WBNOINVD-100] - _ = x[X87-101] - _ = x[XOP-102] - _ = x[XSAVE-103] - _ = x[AESARM-104] - _ = x[ARMCPUID-105] - _ = x[ASIMD-106] - _ = x[ASIMDDP-107] - _ = x[ASIMDHP-108] - _ = x[ASIMDRDM-109] - _ = x[ATOMICS-110] - _ = x[CRC32-111] - _ = x[DCPOP-112] - _ = x[EVTSTRM-113] - _ = x[FCMA-114] - _ = x[FP-115] - _ = x[FPHP-116] - _ = x[GPA-117] - _ = x[JSCVT-118] - _ = x[LRCPC-119] - _ = x[PMULL-120] - _ = x[SHA1-121] - _ = x[SHA2-122] - _ = x[SHA3-123] - _ = x[SHA512-124] - _ = x[SM3-125] - _ = x[SM4-126] - _ = x[SVE-127] - _ = x[lastID-128] + _ = x[CETIBT-29] + _ = x[CETSS-30] + _ = x[CLDEMOTE-31] + _ = x[CLMUL-32] + _ = x[CLZERO-33] + _ = x[CMOV-34] + _ = x[CMPXCHG8-35] + _ = x[CPBOOST-36] + _ = x[CX16-37] + _ = x[ENQCMD-38] + _ = x[ERMS-39] + _ = x[F16C-40] + _ = x[FMA3-41] + _ = x[FMA4-42] + _ = x[FXSR-43] + _ = x[FXSROPT-44] + _ = x[GFNI-45] + _ = x[HLE-46] + _ = x[HTT-47] + _ = x[HWA-48] + _ = x[HYPERVISOR-49] + _ = x[IBPB-50] + _ = x[IBS-51] + _ = x[IBSBRNTRGT-52] + _ = x[IBSFETCHSAM-53] + _ = x[IBSFFV-54] + _ = x[IBSOPCNT-55] + _ = x[IBSOPCNTEXT-56] + _ = x[IBSOPSAM-57] + _ = x[IBSRDWROPCNT-58] + _ = x[IBSRIPINVALIDCHK-59] + _ = x[INT_WBINVD-60] + _ = x[INVLPGB-61] + _ = x[LAHF-62] + _ = x[LZCNT-63] + _ = x[MCAOVERFLOW-64] + _ = x[MCOMMIT-65] + _ = x[MMX-66] + _ = x[MMXEXT-67] + _ = x[MOVBE-68] + _ = x[MOVDIR64B-69] + _ = x[MOVDIRI-70] + _ = x[MPX-71] + _ = x[MSRIRC-72] + _ = x[NX-73] + _ = x[OSXSAVE-74] + _ = x[POPCNT-75] + _ = x[RDPRU-76] + _ = x[RDRAND-77] + _ = x[RDSEED-78] + _ = x[RDTSCP-79] + _ = x[RTM-80] + _ = x[RTM_ALWAYS_ABORT-81] + _ = x[SCE-82] + _ = x[SERIALIZE-83] + _ = x[SGX-84] + _ = x[SGXLC-85] + _ = x[SHA-86] + _ = x[SSE-87] + _ = x[SSE2-88] + _ = x[SSE3-89] + _ = x[SSE4-90] + _ = x[SSE42-91] + _ = x[SSE4A-92] + _ = x[SSSE3-93] + _ = x[STIBP-94] + _ = x[SUCCOR-95] + _ = x[TBM-96] + _ = x[TSXLDTRK-97] + _ = x[VAES-98] + _ = x[VMX-99] + _ = x[VPCLMULQDQ-100] + _ = x[WAITPKG-101] + _ = x[WBNOINVD-102] + _ = x[X87-103] + _ = x[XOP-104] + _ = x[XSAVE-105] + _ = x[AESARM-106] + _ = x[ARMCPUID-107] + _ = x[ASIMD-108] + _ = x[ASIMDDP-109] + _ = x[ASIMDHP-110] + _ = x[ASIMDRDM-111] + _ = x[ATOMICS-112] + _ = x[CRC32-113] + _ = x[DCPOP-114] + _ = x[EVTSTRM-115] + _ = x[FCMA-116] + _ = x[FP-117] + _ = x[FPHP-118] + _ = x[GPA-119] + _ = x[JSCVT-120] + _ = x[LRCPC-121] + _ = x[PMULL-122] + _ = x[SHA1-123] + _ = x[SHA2-124] + _ = x[SHA3-125] + _ = x[SHA512-126] + _ = x[SM3-127] + _ = x[SM4-128] + _ = x[SVE-129] + _ = x[lastID-130] _ = x[firstID-0] } -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CLDEMOTECLMULCLZEROCMOVCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLAHFLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMPXMSRIRCNXOSXSAVEPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSCESERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDX87XOPXSAVEAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLAHFLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMPXMSRIRCNXOSXSAVEPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSCESERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDX87XOPXSAVEAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" -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, 234, 238, 246, 251, 257, 261, 269, 276, 280, 286, 290, 294, 298, 302, 306, 313, 317, 320, 323, 326, 336, 340, 343, 353, 364, 370, 378, 389, 397, 409, 425, 435, 442, 446, 451, 462, 469, 472, 478, 483, 492, 499, 502, 508, 510, 517, 523, 528, 534, 540, 546, 549, 565, 568, 577, 580, 585, 588, 591, 595, 599, 603, 608, 613, 618, 623, 629, 632, 640, 644, 647, 657, 664, 672, 675, 678, 683, 689, 697, 702, 709, 716, 724, 731, 736, 741, 748, 752, 754, 758, 761, 766, 771, 776, 780, 784, 788, 794, 797, 800, 803, 809} +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, 234, 238, 244, 249, 257, 262, 268, 272, 280, 287, 291, 297, 301, 305, 309, 313, 317, 324, 328, 331, 334, 337, 347, 351, 354, 364, 375, 381, 389, 400, 408, 420, 436, 446, 453, 457, 462, 473, 480, 483, 489, 494, 503, 510, 513, 519, 521, 528, 534, 539, 545, 551, 557, 560, 576, 579, 588, 591, 596, 599, 602, 606, 610, 614, 619, 624, 629, 634, 640, 643, 651, 655, 658, 668, 675, 683, 686, 689, 694, 700, 708, 713, 720, 727, 735, 742, 747, 752, 759, 763, 765, 769, 772, 777, 782, 787, 791, 795, 799, 805, 808, 811, 814, 820} func (i FeatureID) String() string { if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {