summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/sys/cpu/cpu_arm64.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/sys/cpu/cpu_arm64.go')
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_arm64.go40
1 files changed, 18 insertions, 22 deletions
diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go
index 2f64d3b39..87dd5e302 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go
@@ -39,34 +39,34 @@ func initOptions() {
func archInit() {
switch runtime.GOOS {
- case "android", "darwin", "ios", "netbsd", "openbsd":
- // Android and iOS don't seem to allow reading these registers.
- //
- // NetBSD:
- // ID_AA64ISAR0_EL1 is a privileged register and cannot be read from EL0.
- // It can be read via sysctl(3). Example for future implementers:
- // https://nxr.netbsd.org/xref/src/usr.sbin/cpuctl/arch/aarch64.c
+ case "freebsd":
+ readARM64Registers()
+ case "linux", "netbsd":
+ doinit()
+ default:
+ // Most platforms don't seem to allow reading these registers.
//
// OpenBSD:
// See https://golang.org/issue/31746
- //
- // Fake the minimal features expected by
- // TestARM64minimalFeatures.
- ARM64.HasASIMD = true
- ARM64.HasFP = true
- case "linux":
- doinit()
- default:
- readARM64Registers()
+ setMinimalFeatures()
}
}
+// setMinimalFeatures fakes the minimal ARM64 features expected by
+// TestARM64minimalFeatures.
+func setMinimalFeatures() {
+ ARM64.HasASIMD = true
+ ARM64.HasFP = true
+}
+
func readARM64Registers() {
Initialized = true
- // ID_AA64ISAR0_EL1
- isar0 := getisar0()
+ parseARM64SystemRegisters(getisar0(), getisar1(), getpfr0())
+}
+func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
+ // ID_AA64ISAR0_EL1
switch extractBits(isar0, 4, 7) {
case 1:
ARM64.HasAES = true
@@ -124,8 +124,6 @@ func readARM64Registers() {
}
// ID_AA64ISAR1_EL1
- isar1 := getisar1()
-
switch extractBits(isar1, 0, 3) {
case 1:
ARM64.HasDCPOP = true
@@ -147,8 +145,6 @@ func readARM64Registers() {
}
// ID_AA64PFR0_EL1
- pfr0 := getpfr0()
-
switch extractBits(pfr0, 16, 19) {
case 0:
ARM64.HasFP = true