File: cpu_arm64.go

package info (click to toggle)
golang-refraction-networking-utls 0.0~git20201210.2179f28-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,496 kB
  • sloc: asm: 21; makefile: 8
file content (45 lines) | stat: -rw-r--r-- 1,500 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 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
}