1
2
3
4
5 package cpu
6
7
8
9
10 const CacheLinePadSize = 128
11
12 func doinit() {
13 options = []option{
14 {Name: "aes", Feature: &ARM64.HasAES},
15 {Name: "pmull", Feature: &ARM64.HasPMULL},
16 {Name: "sha1", Feature: &ARM64.HasSHA1},
17 {Name: "sha2", Feature: &ARM64.HasSHA2},
18 {Name: "sha512", Feature: &ARM64.HasSHA512},
19 {Name: "sha3", Feature: &ARM64.HasSHA3},
20 {Name: "crc32", Feature: &ARM64.HasCRC32},
21 {Name: "atomics", Feature: &ARM64.HasATOMICS},
22 {Name: "cpuid", Feature: &ARM64.HasCPUID},
23 {Name: "isNeoverse", Feature: &ARM64.IsNeoverse},
24 }
25
26
27 osInit()
28 }
29
30 func getisar0() uint64
31
32 func getpfr0() uint64
33
34 func getMIDR() uint64
35
36 func extractBits(data uint64, start, end uint) uint {
37 return (uint)(data>>start) & ((1 << (end - start + 1)) - 1)
38 }
39
40 func parseARM64SystemRegisters(isar0, pfr0 uint64) {
41
42
43 switch extractBits(isar0, 4, 7) {
44 case 1:
45 ARM64.HasAES = true
46 case 2:
47 ARM64.HasAES = true
48 ARM64.HasPMULL = true
49 }
50
51 switch extractBits(isar0, 8, 11) {
52 case 1:
53 ARM64.HasSHA1 = true
54 }
55
56 switch extractBits(isar0, 12, 15) {
57 case 1:
58 ARM64.HasSHA2 = true
59 case 2:
60 ARM64.HasSHA2 = true
61 ARM64.HasSHA512 = true
62 }
63
64 switch extractBits(isar0, 16, 19) {
65 case 1:
66 ARM64.HasCRC32 = true
67 }
68
69 switch extractBits(isar0, 20, 23) {
70 case 2:
71 ARM64.HasATOMICS = true
72 }
73
74 switch extractBits(isar0, 32, 35) {
75 case 1:
76 ARM64.HasSHA3 = true
77 }
78
79 switch extractBits(pfr0, 48, 51) {
80 case 1:
81 ARM64.HasDIT = true
82 }
83 }
84
View as plain text