From 6661cf6dfd91dc3dd5d233e8bdb9f2d60829c68e Mon Sep 17 00:00:00 2001 From: Carlos Eduardo Seo Date: Mon, 10 Jul 2017 15:28:27 -0300 Subject: runtime, internal/cpu: CPU capabilities detection for ppc64x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change replaces the current runtime capabilities check for ppc64x with the new internal/cpu package. It also adds support for the new POWER9 ISA and capabilities. Updates #15403 Change-Id: I5b64a79e782f8da3603e5529600434f602986292 Reviewed-on: https://go-review.googlesource.com/53830 Reviewed-by: Martin Möhrmann --- src/internal/cpu/cpu.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/internal/cpu/cpu.go') diff --git a/src/internal/cpu/cpu.go b/src/internal/cpu/cpu.go index 2226b777e2..6a8e23d425 100644 --- a/src/internal/cpu/cpu.go +++ b/src/internal/cpu/cpu.go @@ -30,3 +30,28 @@ type x86 struct { 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 +} -- cgit v1.3-5-g9baa