2021-10-16 14:11:32 -07:00
|
|
|
// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
|
|
|
|
|
2022-03-31 15:23:19 -07:00
|
|
|
//go:build (386 && !gccgo && !noasm && !appengine) || (amd64 && !gccgo && !noasm && !appengine)
|
|
|
|
// +build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine
|
2021-10-16 14:11:32 -07:00
|
|
|
|
|
|
|
package cpuid
|
|
|
|
|
|
|
|
func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32)
|
|
|
|
func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32)
|
|
|
|
func asmXgetbv(index uint32) (eax, edx uint32)
|
|
|
|
func asmRdtscpAsm() (eax, ebx, ecx, edx uint32)
|
|
|
|
func asmDarwinHasAVX512() bool
|
|
|
|
|
|
|
|
func initCPU() {
|
|
|
|
cpuid = asmCpuid
|
|
|
|
cpuidex = asmCpuidex
|
|
|
|
xgetbv = asmXgetbv
|
|
|
|
rdtscpAsm = asmRdtscpAsm
|
|
|
|
darwinHasAVX512 = asmDarwinHasAVX512
|
|
|
|
}
|
|
|
|
|
|
|
|
func addInfo(c *CPUInfo, safe bool) {
|
|
|
|
c.maxFunc = maxFunctionID()
|
|
|
|
c.maxExFunc = maxExtendedFunction()
|
|
|
|
c.BrandName = brandName()
|
|
|
|
c.CacheLine = cacheLine()
|
2023-03-09 13:48:00 -08:00
|
|
|
c.Family, c.Model, c.Stepping = familyModel()
|
2021-10-16 14:11:32 -07:00
|
|
|
c.featureSet = support()
|
|
|
|
c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC))
|
2024-05-23 14:44:31 -07:00
|
|
|
c.AMDMemEncryption = hasAMDMemEncryption(c.featureSet.inSet(SME) || c.featureSet.inSet(SEV))
|
2021-10-16 14:11:32 -07:00
|
|
|
c.ThreadsPerCore = threadsPerCore()
|
|
|
|
c.LogicalCores = logicalCores()
|
|
|
|
c.PhysicalCores = physicalCores()
|
|
|
|
c.VendorID, c.VendorString = vendorID()
|
2024-05-23 14:44:31 -07:00
|
|
|
c.AVX10Level = c.supportAVX10()
|
2021-10-16 14:11:32 -07:00
|
|
|
c.cacheSize()
|
2021-12-11 15:05:15 -08:00
|
|
|
c.frequencies()
|
2021-10-16 14:11:32 -07:00
|
|
|
}
|