mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-09-07 04:24:23 -04:00
78 lines
2.3 KiB
Go
78 lines
2.3 KiB
Go
// 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
|
|
}
|