func (c CPUInfo) AVX512CD() bool {
	return c.Features&AVX512CD != 0
}
AVX512CD indicates support of AVX-512 Conflict Detection Instructions
package cpuid
import "strings"
type Vendor int
const (
	Other Vendor = iota
	Intel
	AMD
	VIA
	Transmeta
	NSC
	KVM   
	MSVM  
	VMware
	XenHVM
)
const (
	CMOV        = 1 << iota  
	NX                       
	AMD3DNOW                 
	AMD3DNOWEXT              
	MMX                      
	MMXEXT                   
	SSE                      
	SSE2                     
	SSE3                     
	SSSE3                    
	SSE4                     
	SSE4A                    
	SSE42                    
	AVX                      
	AVX2                     
	FMA3                     
	FMA4                     
	XOP                      
	F16C                     
	BMI1                     
	BMI2                     
	TBM                      
	LZCNT                    
	POPCNT                   
	AESNI                    
	CLMUL                    
	HTT                      
	HLE                      
	RTM                      
	RDRAND                   
	RDSEED                   
	ADX                      
	SHA                      
	AVX512F                  
	AVX512DQ                 
	AVX512IFMA               
	AVX512PF                 
	AVX512ER                 
	AVX512CD                 
	AVX512BW                 
	AVX512VL                 
	AVX512VBMI               
	MPX                      
	ERMS                     
	RDTSCP                   
	CX16                     
	SGX                      
	SSE2SLOW  
	SSE3SLOW  
	ATOM      
)
var flagNames = map[Flags]string{
	CMOV:        "CMOV",         
	NX:          "NX",           
	AMD3DNOW:    "AMD3DNOW",     
	AMD3DNOWEXT: "AMD3DNOWEXT",  
	MMX:         "MMX",          
	MMXEXT:      "MMXEXT",       
	SSE:         "SSE",          
	SSE2:        "SSE2",         
	SSE3:        "SSE3",         
	SSSE3:       "SSSE3",        
	SSE4:        "SSE4.1",       
	SSE4A:       "SSE4A",        
	SSE42:       "SSE4.2",       
	AVX:         "AVX",          
	AVX2:        "AVX2",         
	FMA3:        "FMA3",         
	FMA4:        "FMA4",         
	XOP:         "XOP",          
	F16C:        "F16C",         
	BMI1:        "BMI1",         
	BMI2:        "BMI2",         
	TBM:         "TBM",          
	LZCNT:       "LZCNT",        
	POPCNT:      "POPCNT",       
	AESNI:       "AESNI",        
	CLMUL:       "CLMUL",        
	HTT:         "HTT",          
	HLE:         "HLE",          
	RTM:         "RTM",          
	RDRAND:      "RDRAND",       
	RDSEED:      "RDSEED",       
	ADX:         "ADX",          
	SHA:         "SHA",          
	AVX512F:     "AVX512F",      
	AVX512DQ:    "AVX512DQ",     
	AVX512IFMA:  "AVX512IFMA",   
	AVX512PF:    "AVX512PF",     
	AVX512ER:    "AVX512ER",     
	AVX512CD:    "AVX512CD",     
	AVX512BW:    "AVX512BW",     
	AVX512VL:    "AVX512VL",     
	AVX512VBMI:  "AVX512VBMI",   
	MPX:         "MPX",          
	ERMS:        "ERMS",         
	RDTSCP:      "RDTSCP",       
	CX16:        "CX16",         
	SGX:         "SGX",          
	SSE2SLOW: "SSE2SLOW",  
	SSE3SLOW: "SSE3SLOW",  
	ATOM:     "ATOM",      
}
type CPUInfo struct {
	BrandName      string  
	VendorID       Vendor  
	Features       Flags   
	PhysicalCores  int     
	ThreadsPerCore int     
	LogicalCores   int     
	Family         int     
	Model          int     
	CacheLine      int     
	Cache          struct {
		L1I int  
		L1D int  
		L2  int  
		L3  int  
	}
	SGX       SGXSupport
	maxFunc   uint32
	maxExFunc 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)
var rdtscpAsm func() (eax, ebx, ecx, edx uint32)
var CPU CPUInfo
func init() {
	initCPU()
	Detect()
}
func Detect() {
	CPU.maxFunc = maxFunctionID()
	CPU.maxExFunc = maxExtendedFunction()
	CPU.BrandName = brandName()
	CPU.CacheLine = cacheLine()
	CPU.Family, CPU.Model = familyModel()
	CPU.Features = support()
	CPU.SGX = sgx(CPU.Features&SGX != 0)
	CPU.ThreadsPerCore = threadsPerCore()
	CPU.LogicalCores = logicalCores()
	CPU.PhysicalCores = physicalCores()
	CPU.VendorID = vendorID()
	CPU.cacheSize()
}
func (c CPUInfo) Cmov() bool {
	return c.Features&CMOV != 0
}
func (c CPUInfo) Amd3dnow() bool {
	return c.Features&AMD3DNOW != 0
}
func (c CPUInfo) Amd3dnowExt() bool {
	return c.Features&AMD3DNOWEXT != 0
}
func (c CPUInfo) MMX() bool {
	return c.Features&MMX != 0
}
func (c CPUInfo) MMXExt() bool {
	return c.Features&MMXEXT != 0
}
func (c CPUInfo) SSE() bool {
	return c.Features&SSE != 0
}
func (c CPUInfo) SSE2() bool {
	return c.Features&SSE2 != 0
}
func (c CPUInfo) SSE3() bool {
	return c.Features&SSE3 != 0
}
func (c CPUInfo) SSSE3() bool {
	return c.Features&SSSE3 != 0
}
func (c CPUInfo) SSE4() bool {
	return c.Features&SSE4 != 0
}
func (c CPUInfo) SSE42() bool {
	return c.Features&SSE42 != 0
}
func (c CPUInfo) AVX() bool {
	return c.Features&AVX != 0
}
func (c CPUInfo) AVX2() bool {
	return c.Features&AVX2 != 0
}
func (c CPUInfo) FMA3() bool {
	return c.Features&FMA3 != 0
}
func (c CPUInfo) FMA4() bool {
	return c.Features&FMA4 != 0
}
func (c CPUInfo) XOP() bool {
	return c.Features&XOP != 0
}
func (c CPUInfo) F16C() bool {
	return c.Features&F16C != 0
}
func (c CPUInfo) BMI1() bool {
	return c.Features&BMI1 != 0
}
func (c CPUInfo) BMI2() bool {
	return c.Features&BMI2 != 0
}
func (c CPUInfo) TBM() bool {
	return c.Features&TBM != 0
}
func (c CPUInfo) Lzcnt() bool {
	return c.Features&LZCNT != 0
}
func (c CPUInfo) Popcnt() bool {
	return c.Features&POPCNT != 0
}
func (c CPUInfo) HTT() bool {
	return c.Features&HTT != 0
}
func (c CPUInfo) SSE2Slow() bool {
	return c.Features&SSE2SLOW != 0
}
func (c CPUInfo) SSE3Slow() bool {
	return c.Features&SSE3SLOW != 0
}
func (c CPUInfo) AesNi() bool {
	return c.Features&AESNI != 0
}
func (c CPUInfo) Clmul() bool {
	return c.Features&CLMUL != 0
}
func (c CPUInfo) NX() bool {
	return c.Features&NX != 0
}
func (c CPUInfo) SSE4A() bool {
	return c.Features&SSE4A != 0
}
func (c CPUInfo) HLE() bool {
	return c.Features&HLE != 0
}
func (c CPUInfo) RTM() bool {
	return c.Features&RTM != 0
}
func (c CPUInfo) Rdrand() bool {
	return c.Features&RDRAND != 0
}
func (c CPUInfo) Rdseed() bool {
	return c.Features&RDSEED != 0
}
func (c CPUInfo) ADX() bool {
	return c.Features&ADX != 0
}
func (c CPUInfo) SHA() bool {
	return c.Features&SHA != 0
}
func (c CPUInfo) AVX512F() bool {
	return c.Features&AVX512F != 0
}
func (c CPUInfo) AVX512DQ() bool {
	return c.Features&AVX512DQ != 0
}
func (c CPUInfo) AVX512IFMA() bool {
	return c.Features&AVX512IFMA != 0
}
func (c CPUInfo) AVX512PF() bool {
	return c.Features&AVX512PF != 0
}
func (c CPUInfo) AVX512ER() bool {
	return c.Features&AVX512ER != 0
}