]> Cypherpunks repositories - gostls13.git/commitdiff
internal/cpu: deduplicate arm64 ISAR parsing code
authorJoel Sing <joel@sing.id.au>
Tue, 9 Aug 2022 08:09:46 +0000 (18:09 +1000)
committerJoel Sing <joel@sing.id.au>
Mon, 26 Sep 2022 16:42:53 +0000 (16:42 +0000)
Deduplicate code for parsing system registers - this matches what is done
in golang.org/x/sys/cpu.

Change-Id: If3524eb2e361179c68678f8214230d7068fe4c60
Reviewed-on: https://go-review.googlesource.com/c/go/+/422217
Reviewed-by: Meng Zhuo <mzh@golangcn.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Run-TryBot: Joel Sing <joel@sing.id.au>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/internal/cpu/cpu_arm64.go
src/internal/cpu/cpu_arm64_freebsd.go
src/internal/cpu/cpu_arm64_openbsd.go

index 18ec636112ed7fa18cc4abc23ef873d457751caa..1d4431753d2b828dae5f06164db1e23ea3295f30 100644 (file)
@@ -30,3 +30,41 @@ func doinit() {
 func getisar0() uint64
 
 func getMIDR() uint64
+
+func extractBits(data uint64, start, end uint) uint {
+       return (uint)(data>>start) & ((1 << (end - start + 1)) - 1)
+}
+
+func parseARM64SystemRegisters(isar0 uint64) {
+       // ID_AA64ISAR0_EL1
+       switch extractBits(isar0, 4, 7) {
+       case 1:
+               ARM64.HasAES = true
+       case 2:
+               ARM64.HasAES = true
+               ARM64.HasPMULL = true
+       }
+
+       switch extractBits(isar0, 8, 11) {
+       case 1:
+               ARM64.HasSHA1 = true
+       }
+
+       switch extractBits(isar0, 12, 15) {
+       case 1:
+               ARM64.HasSHA2 = true
+       case 2:
+               ARM64.HasSHA2 = true
+               ARM64.HasSHA512 = true
+       }
+
+       switch extractBits(isar0, 16, 19) {
+       case 1:
+               ARM64.HasCRC32 = true
+       }
+
+       switch extractBits(isar0, 20, 23) {
+       case 2:
+               ARM64.HasATOMICS = true
+       }
+}
index 40ebfaf6ff4f31e76a53e3212e7de355f1530247..96ed359ca0b339e0805e3ba35370e3f7a600f4b7 100644 (file)
@@ -10,39 +10,5 @@ func osInit() {
        // Retrieve info from system register ID_AA64ISAR0_EL1.
        isar0 := getisar0()
 
-       // ID_AA64ISAR0_EL1
-       switch extractBits(isar0, 4, 7) {
-       case 1:
-               ARM64.HasAES = true
-       case 2:
-               ARM64.HasAES = true
-               ARM64.HasPMULL = true
-       }
-
-       switch extractBits(isar0, 8, 11) {
-       case 1:
-               ARM64.HasSHA1 = true
-       }
-
-       switch extractBits(isar0, 12, 15) {
-       case 1:
-               ARM64.HasSHA2 = true
-       case 2:
-               ARM64.HasSHA2 = true
-               ARM64.HasSHA512 = true
-       }
-
-       switch extractBits(isar0, 16, 19) {
-       case 1:
-               ARM64.HasCRC32 = true
-       }
-
-       switch extractBits(isar0, 20, 23) {
-       case 2:
-               ARM64.HasATOMICS = true
-       }
-}
-
-func extractBits(data uint64, start, end uint) uint {
-       return (uint)(data>>start) & ((1 << (end - start + 1)) - 1)
+       parseARM64SystemRegisters(isar0)
 }
index 54e1f4b931230d1370b28524d7ccadc5b8b201ce..12593098eb16710aa6bd3a6319a3e13bd113f8fd 100644 (file)
@@ -15,10 +15,6 @@ const (
        _CPU_ID_AA64ISAR1 = 3
 )
 
-func extractBits(data uint64, start, end uint) uint {
-       return (uint)(data>>start) & ((1 << (end - start + 1)) - 1)
-}
-
 //go:noescape
 func sysctlUint64(mib []uint32) (uint64, bool)
 
@@ -28,36 +24,5 @@ func osInit() {
        if !ok {
                return
        }
-
-       // ID_AA64ISAR0_EL1
-       switch extractBits(isar0, 4, 7) {
-       case 1:
-               ARM64.HasAES = true
-       case 2:
-               ARM64.HasAES = true
-               ARM64.HasPMULL = true
-       }
-
-       switch extractBits(isar0, 8, 11) {
-       case 1:
-               ARM64.HasSHA1 = true
-       }
-
-       switch extractBits(isar0, 12, 15) {
-       case 1:
-               ARM64.HasSHA2 = true
-       case 2:
-               ARM64.HasSHA2 = true
-               ARM64.HasSHA512 = true
-       }
-
-       switch extractBits(isar0, 16, 19) {
-       case 1:
-               ARM64.HasCRC32 = true
-       }
-
-       switch extractBits(isar0, 20, 23) {
-       case 2:
-               ARM64.HasATOMICS = true
-       }
+       parseARM64SystemRegisters(isar0)
 }