9
"golang.org/x/sys/unix"
12
func detectOS(c *CPUInfo) bool {
13
if runtime.GOOS != "ios" {
14
tryToFillCPUInfoFomSysctl(c)
21
c.featureSet.setIf(runtime.GOOS != "ios", AESARM, PMULL, SHA1, SHA2)
26
func sysctlGetBool(name string) bool {
27
value, err := unix.SysctlUint32(name)
34
func sysctlGetString(name string) string {
35
value, err := unix.Sysctl(name)
42
func sysctlGetInt(unknown int, names ...string) int {
43
for _, name := range names {
44
value, err := unix.SysctlUint32(name)
55
func sysctlGetInt64(unknown int, names ...string) int {
56
for _, name := range names {
57
value64, err := unix.SysctlUint64(name)
61
if int(value64) != unknown {
68
func setFeature(c *CPUInfo, name string, feature FeatureID) {
69
c.featureSet.setIf(sysctlGetBool(name), feature)
71
func tryToFillCPUInfoFomSysctl(c *CPUInfo) {
72
c.BrandName = sysctlGetString("machdep.cpu.brand_string")
74
if len(c.BrandName) != 0 {
75
c.VendorString = strings.Fields(c.BrandName)[0]
78
c.PhysicalCores = sysctlGetInt(runtime.NumCPU(), "hw.physicalcpu")
79
c.ThreadsPerCore = sysctlGetInt(1, "machdep.cpu.thread_count", "kern.num_threads") /
80
sysctlGetInt(1, "hw.physicalcpu")
81
c.LogicalCores = sysctlGetInt(runtime.NumCPU(), "machdep.cpu.core_count")
82
c.Family = sysctlGetInt(0, "machdep.cpu.family", "hw.cpufamily")
83
c.Model = sysctlGetInt(0, "machdep.cpu.model")
84
c.CacheLine = sysctlGetInt64(0, "hw.cachelinesize")
85
c.Cache.L1I = sysctlGetInt64(-1, "hw.l1icachesize")
86
c.Cache.L1D = sysctlGetInt64(-1, "hw.l1icachesize")
87
c.Cache.L2 = sysctlGetInt64(-1, "hw.l2cachesize")
88
c.Cache.L3 = sysctlGetInt64(-1, "hw.l3cachesize")
91
setFeature(c, "hw.optional.arm.FEAT_AES", AESARM)
92
setFeature(c, "hw.optional.AdvSIMD", ASIMD)
93
setFeature(c, "hw.optional.arm.FEAT_DotProd", ASIMDDP)
94
setFeature(c, "hw.optional.arm.FEAT_RDM", ASIMDRDM)
95
setFeature(c, "hw.optional.FEAT_CRC32", CRC32)
96
setFeature(c, "hw.optional.arm.FEAT_DPB", DCPOP)
98
setFeature(c, "hw.optional.arm.FEAT_FCMA", FCMA)
99
setFeature(c, "hw.optional.arm.FEAT_FP", FP)
100
setFeature(c, "hw.optional.arm.FEAT_FP16", FPHP)
101
setFeature(c, "hw.optional.arm.FEAT_PAuth", GPA)
102
setFeature(c, "hw.optional.arm.FEAT_JSCVT", JSCVT)
103
setFeature(c, "hw.optional.arm.FEAT_LRCPC", LRCPC)
104
setFeature(c, "hw.optional.arm.FEAT_PMULL", PMULL)
105
setFeature(c, "hw.optional.arm.FEAT_SHA1", SHA1)
106
setFeature(c, "hw.optional.arm.FEAT_SHA256", SHA2)
107
setFeature(c, "hw.optional.arm.FEAT_SHA3", SHA3)
108
setFeature(c, "hw.optional.arm.FEAT_SHA512", SHA512)
111
setFeature(c, "hw.optional.arm.FEAT_SVE", SVE)
114
setFeature(c, "hw.optional.AdvSIMD_HPFPCvt", ASIMDHP)
115
setFeature(c, "hw.optional.armv8_1_atomics", ATOMICS)
116
setFeature(c, "hw.optional.floatingpoint", FP)
117
setFeature(c, "hw.optional.armv8_2_sha3", SHA3)
118
setFeature(c, "hw.optional.armv8_2_sha512", SHA512)
119
setFeature(c, "hw.optional.armv8_3_compnum", FCMA)
120
setFeature(c, "hw.optional.armv8_crc32", CRC32)