// Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package cpu implements processor feature detection // used by the Go standard library. package cpu var X86 x86 // The booleans in x86 contain the correspondingly named cpuid feature bit. // HasAVX and HasAVX2 are only set if the OS does support XMM and YMM registers // in addition to the cpuid feature bit being set. // The struct is padded to avoid false sharing. type x86 struct { _ [CacheLineSize]byte HasAES bool HasADX bool HasAVX bool HasAVX2 bool HasBMI1 bool HasBMI2 bool HasERMS bool HasFMA bool HasOSXSAVE bool HasPCLMULQDQ bool HasPOPCNT bool HasSSE2 bool HasSSE3 bool HasSSSE3 bool HasSSE41 bool HasSSE42 bool _ [CacheLineSize]byte } var PPC64 ppc64 // For ppc64x, it is safe to check only for ISA level starting on ISA v3.00, // since there are no optional categories. There are some exceptions that also // require kernel support to work (darn, scv), so there are capability bits for // those as well. The minimum processor requirement is POWER8 (ISA 2.07), so we // maintain some of the old capability checks for optional categories for // safety. // The struct is padded to avoid false sharing. type ppc64 struct { _ [CacheLineSize]byte HasVMX bool // Vector unit (Altivec) HasDFP bool // Decimal Floating Point unit HasVSX bool // Vector-scalar unit HasHTM bool // Hardware Transactional Memory HasISEL bool // Integer select HasVCRYPTO bool // Vector cryptography HasHTMNOSC bool // HTM: kernel-aborted transaction in syscalls HasDARN bool // Hardware random number generator (requires kernel enablement) HasSCV bool // Syscall vectored (requires kernel enablement) IsPOWER8 bool // ISA v2.07 (POWER8) IsPOWER9 bool // ISA v3.00 (POWER9) _ [CacheLineSize]byte } var ARM64 arm64 // The booleans in arm64 contain the correspondingly named cpu feature bit. // The struct is padded to avoid false sharing. type arm64 struct { _ [CacheLineSize]byte HasFP bool HasASIMD bool HasEVTSTRM bool HasAES bool HasPMULL bool HasSHA1 bool HasSHA2 bool HasCRC32 bool HasATOMICS bool _ [CacheLineSize]byte }