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
5package cpu
6
7const (
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
20func initS390Xbase() {
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	}
40}
41