Michael Munday | 6c9a33b | 2019-02-18 08:34:21 -0500 | [diff] [blame] | 1 | // Copyright 2019 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
| 5 | package cpu |
| 6 | |
Michael Munday | 6c9a33b | 2019-02-18 08:34:21 -0500 | [diff] [blame] | 7 | const ( |
| 8 | // bit mask values from /usr/include/bits/hwcap.h |
| 9 | hwcap_ZARCH = 2 |
| 10 | hwcap_STFLE = 4 |
| 11 | hwcap_MSA = 8 |
| 12 | hwcap_LDISP = 16 |
| 13 | hwcap_EIMM = 32 |
| 14 | hwcap_DFP = 64 |
| 15 | hwcap_ETF3EH = 256 |
| 16 | hwcap_VX = 2048 |
| 17 | hwcap_VXE = 8192 |
| 18 | ) |
| 19 | |
Bill O'Farrell | 708e7fb | 2020-10-14 19:41:11 -0400 | [diff] [blame] | 20 | func initS390Xbase() { |
Michael Munday | 6c9a33b | 2019-02-18 08:34:21 -0500 | [diff] [blame] | 21 | // test HWCAP bit vector |
| 22 | has := func(featureMask uint) bool { |
| 23 | return hwCap&featureMask == featureMask |
| 24 | } |
| 25 | |
| 26 | // mandatory |
| 27 | S390X.HasZARCH = has(hwcap_ZARCH) |
| 28 | |
| 29 | // optional |
| 30 | S390X.HasSTFLE = has(hwcap_STFLE) |
| 31 | S390X.HasLDISP = has(hwcap_LDISP) |
| 32 | S390X.HasEIMM = has(hwcap_EIMM) |
| 33 | S390X.HasETF3EH = has(hwcap_ETF3EH) |
| 34 | S390X.HasDFP = has(hwcap_DFP) |
| 35 | S390X.HasMSA = has(hwcap_MSA) |
| 36 | S390X.HasVX = has(hwcap_VX) |
| 37 | if S390X.HasVX { |
| 38 | S390X.HasVXE = has(hwcap_VXE) |
| 39 | } |
Michael Munday | 6c9a33b | 2019-02-18 08:34:21 -0500 | [diff] [blame] | 40 | } |