blob: 1517ac61d31b5aef0d3e9d3d9df18ca199e4a580 [file] [log] [blame]
Michael Munday6c9a33b2019-02-18 08:34:21 -05001// 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
5package cpu
6
Michael Munday6c9a33b2019-02-18 08:34:21 -05007const (
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'Farrell708e7fb2020-10-14 19:41:11 -040020func initS390Xbase() {
Michael Munday6c9a33b2019-02-18 08:34:21 -050021 // 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 Munday6c9a33b2019-02-18 08:34:21 -050040}