| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // 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
- }
|