diff options
author | Martin Möhrmann <moehrmann@google.com> | 2020-10-20 14:21:07 +0200 |
---|---|---|
committer | Martin Möhrmann <moehrmann@google.com> | 2020-10-22 17:11:03 +0000 |
commit | f8aecbbff5b85e67fee95033b3a14f3df665ea18 (patch) | |
tree | b51f764f2021162e54cc771513d195e5f9f5659b /src/internal | |
parent | 91b7619310cc05c2ffa3fa558f041a3b3cf6e948 (diff) | |
download | go-f8aecbbff5b85e67fee95033b3a14f3df665ea18.tar.gz go-f8aecbbff5b85e67fee95033b3a14f3df665ea18.zip |
runtime: move s390x HWCap CPU feature detection to internal/cpu
Change-Id: I7d9e31c3b342731ddd7329962426fdfc80e9ed87
Reviewed-on: https://go-review.googlesource.com/c/go/+/263803
Trust: Martin Möhrmann <moehrmann@google.com>
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/cpu/cpu_s390x.go | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/internal/cpu/cpu_s390x.go b/src/internal/cpu/cpu_s390x.go index 526e074225..45d8ed27f0 100644 --- a/src/internal/cpu/cpu_s390x.go +++ b/src/internal/cpu/cpu_s390x.go @@ -6,6 +6,8 @@ package cpu const CacheLinePadSize = 256 +var HWCap uint + // bitIsSet reports whether the bit at index is set. The bit index // is in big endian order, so bit index 0 is the leftmost bit. func bitIsSet(bits []uint64, index uint) bool { @@ -95,8 +97,10 @@ const ( // vector facilities vxe facility = 135 // vector-enhancements 1 - // Note: vx and highgprs are excluded because they require - // kernel support and so must be fetched from HWCAP. + // Note: vx requires kernel support + // and so must be fetched from HWCAP. + + hwcap_VX = 1 << 11 // vector facility ) // facilityList contains the result of an STFLE call. @@ -188,7 +192,14 @@ func doinit() { S390X.HasEDDSA = kdsa.Has(eddsaVerifyEd25519, eddsaSignEd25519, eddsaVerifyEd448, eddsaSignEd448) } } + + S390X.HasVX = isSet(HWCap, hwcap_VX) + if S390X.HasVX { S390X.HasVXE = facilities.Has(vxe) } } + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} |