cpu_linux_s390x.mx raw

   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  
   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  
  20  func 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