// 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 }