mirror of
https://github.com/golang/sys.git
synced 2026-02-08 03:36:03 +03:00
Add basic support for IBM Z (s390x) CPU feature (known as 'facilities') detection. Note that some of these features are mandatory when using the Go compiler (for example, ldisp and eimm) but aren't mandatory when using gccgo. Cryptographic function detection is not yet implemented for gccgo. Change-Id: Ic6494d0df0bc1c1ad1713c9ff11ae23fba03d215 Reviewed-on: https://go-review.googlesource.com/c/163003 Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
// Copyright 2018 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_test
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
|
|
"golang.org/x/sys/cpu"
|
|
)
|
|
|
|
func TestAMD64minimalFeatures(t *testing.T) {
|
|
if runtime.GOARCH == "amd64" {
|
|
if !cpu.Initialized {
|
|
t.Fatal("Initialized expected true, got false")
|
|
}
|
|
if !cpu.X86.HasSSE2 {
|
|
t.Fatal("HasSSE2 expected true, got false")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAVX2hasAVX(t *testing.T) {
|
|
if runtime.GOARCH == "amd64" {
|
|
if cpu.X86.HasAVX2 && !cpu.X86.HasAVX {
|
|
t.Fatal("HasAVX expected true, got false")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestARM64minimalFeatures(t *testing.T) {
|
|
if runtime.GOARCH != "arm64" || runtime.GOOS != "linux" {
|
|
return
|
|
}
|
|
if !cpu.ARM64.HasASIMD {
|
|
t.Fatal("HasASIMD expected true, got false")
|
|
}
|
|
if !cpu.ARM64.HasFP {
|
|
t.Fatal("HasFP expected true, got false")
|
|
}
|
|
}
|
|
|
|
// On ppc64x, the ISA bit for POWER8 should always be set on POWER8 and beyond.
|
|
func TestPPC64minimalFeatures(t *testing.T) {
|
|
// Do not run this with gccgo on ppc64, as it doesn't have POWER8 as a minimum
|
|
// requirement.
|
|
if runtime.Compiler == "gccgo" && runtime.GOARCH == "ppc64" {
|
|
t.Skip("gccgo does not require POWER8 on ppc64; skipping")
|
|
}
|
|
if runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le" {
|
|
if !cpu.PPC64.IsPOWER8 {
|
|
t.Fatal("IsPOWER8 expected true, got false")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestS390X(t *testing.T) {
|
|
if runtime.GOARCH != "s390x" {
|
|
return
|
|
}
|
|
if testing.Verbose() {
|
|
t.Logf("%+v\n", cpu.S390X)
|
|
}
|
|
// z/Architecture is mandatory
|
|
if !cpu.S390X.HasZARCH {
|
|
t.Error("HasZARCH expected true, got false")
|
|
}
|
|
// vector-enhancements require vector facility to be enabled
|
|
if cpu.S390X.HasVXE && !cpu.S390X.HasVX {
|
|
t.Error("HasVX expected true, got false (VXE is true)")
|
|
}
|
|
}
|