...
Run Format

Source file src/internal/cpu/cpu_arm64.go

Documentation: internal/cpu

  // Copyright 2017 The Go Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  // +build arm64
  
  package cpu
  
  const CacheLineSize = 64
  
  // arm64 doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
  // These are linknamed in runtime/os_linux_arm64.go and are initialized by
  // archauxv().
  var arm64_hwcap uint
  var arm64_hwcap2 uint
  
  // HWCAP/HWCAP2 bits. These are exposed by Linux.
  const (
  	_ARM64_FEATURE_HAS_FP      = (1 << 0)
  	_ARM64_FEATURE_HAS_ASIMD   = (1 << 1)
  	_ARM64_FEATURE_HAS_EVTSTRM = (1 << 2)
  	_ARM64_FEATURE_HAS_AES     = (1 << 3)
  	_ARM64_FEATURE_HAS_PMULL   = (1 << 4)
  	_ARM64_FEATURE_HAS_SHA1    = (1 << 5)
  	_ARM64_FEATURE_HAS_SHA2    = (1 << 6)
  	_ARM64_FEATURE_HAS_CRC32   = (1 << 7)
  	_ARM64_FEATURE_HAS_ATOMICS = (1 << 8)
  )
  
  func init() {
  	// HWCAP feature bits
  	ARM64.HasFP = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_FP)
  	ARM64.HasASIMD = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_ASIMD)
  	ARM64.HasEVTSTRM = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_EVTSTRM)
  	ARM64.HasAES = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_AES)
  	ARM64.HasPMULL = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_PMULL)
  	ARM64.HasSHA1 = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_SHA1)
  	ARM64.HasSHA2 = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_SHA2)
  	ARM64.HasCRC32 = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_CRC32)
  	ARM64.HasATOMICS = isSet(arm64_hwcap, _ARM64_FEATURE_HAS_ATOMICS)
  }
  
  func isSet(hwc uint, value uint) bool {
  	return hwc&value != 0
  }
  

View as plain text