Source file
src/internal/cpu/cpu_arm64_freebsd.go
1
2
3
4
5
6
7 package cpu
8
9 func osInit() {
10
11 isar0 := getisar0()
12
13
14 switch extractBits(isar0, 4, 7) {
15 case 1:
16 ARM64.HasAES = true
17 case 2:
18 ARM64.HasAES = true
19 ARM64.HasPMULL = true
20 }
21
22 switch extractBits(isar0, 8, 11) {
23 case 1:
24 ARM64.HasSHA1 = true
25 }
26
27 switch extractBits(isar0, 12, 15) {
28 case 1, 2:
29 ARM64.HasSHA2 = true
30 }
31
32 switch extractBits(isar0, 16, 19) {
33 case 1:
34 ARM64.HasCRC32 = true
35 }
36
37 switch extractBits(isar0, 20, 23) {
38 case 2:
39 ARM64.HasATOMICS = true
40 }
41 }
42
43 func extractBits(data uint64, start, end uint) uint {
44 return (uint)(data>>start) & ((1 << (end - start + 1)) - 1)
45 }
46
View as plain text