detect_x86.go raw

   1  // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
   2  
   3  //go:build (386 && !gccgo && !noasm && !appengine) || (amd64 && !gccgo && !noasm && !appengine)
   4  // +build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine
   5  
   6  package cpuid
   7  
   8  func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32)
   9  func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32)
  10  func asmXgetbv(index uint32) (eax, edx uint32)
  11  func asmRdtscpAsm() (eax, ebx, ecx, edx uint32)
  12  func asmDarwinHasAVX512() bool
  13  
  14  func initCPU() {
  15  	cpuid = asmCpuid
  16  	cpuidex = asmCpuidex
  17  	xgetbv = asmXgetbv
  18  	rdtscpAsm = asmRdtscpAsm
  19  	darwinHasAVX512 = asmDarwinHasAVX512
  20  }
  21  
  22  func addInfo(c *CPUInfo, safe bool) {
  23  	c.maxFunc = maxFunctionID()
  24  	c.maxExFunc = maxExtendedFunction()
  25  	c.BrandName = brandName()
  26  	c.CacheLine = cacheLine()
  27  	c.Family, c.Model, c.Stepping = familyModel()
  28  	c.featureSet = support()
  29  	c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC))
  30  	c.AMDMemEncryption = hasAMDMemEncryption(c.featureSet.inSet(SME) || c.featureSet.inSet(SEV))
  31  	c.ThreadsPerCore = threadsPerCore()
  32  	c.LogicalCores = logicalCores()
  33  	c.PhysicalCores = physicalCores()
  34  	c.VendorID, c.VendorString = vendorID()
  35  	c.HypervisorVendorID, c.HypervisorVendorString = hypervisorVendorID()
  36  	c.AVX10Level = c.supportAVX10()
  37  	c.cacheSize()
  38  	c.frequencies()
  39  	if c.maxFunc >= 0x0A {
  40  		eax, ebx, _, edx := cpuid(0x0A)
  41  		c.PMU = parseLeaf0AH(c, eax, ebx, edx)
  42  	}
  43  }
  44  
  45  func getVectorLength() (vl, pl uint64) { return 0, 0 }
  46