...
Source file src/pkg/cmd/compile/internal/gc/bitset.go
1
2
3
4
5 package gc
6
7 type bitset8 uint8
8
9 func (f *bitset8) set(mask uint8, b bool) {
10 if b {
11 *(*uint8)(f) |= mask
12 } else {
13 *(*uint8)(f) &^= mask
14 }
15 }
16
17 type bitset16 uint16
18
19 func (f *bitset16) set(mask uint16, b bool) {
20 if b {
21 *(*uint16)(f) |= mask
22 } else {
23 *(*uint16)(f) &^= mask
24 }
25 }
26
27 type bitset32 uint32
28
29 func (f *bitset32) set(mask uint32, b bool) {
30 if b {
31 *(*uint32)(f) |= mask
32 } else {
33 *(*uint32)(f) &^= mask
34 }
35 }
36
37 func (f bitset32) get2(shift uint8) uint8 {
38 return uint8(f>>shift) & 3
39 }
40
41
42 func (f *bitset32) set2(shift uint8, b uint8) {
43
44 *(*uint32)(f) &^= 3 << shift
45
46 *(*uint32)(f) |= uint32(b&3) << shift
47 }
48
49 func (f bitset32) get3(shift uint8) uint8 {
50 return uint8(f>>shift) & 7
51 }
52
53
54 func (f *bitset32) set3(shift uint8, b uint8) {
55
56 *(*uint32)(f) &^= 7 << shift
57
58 *(*uint32)(f) |= uint32(b&7) << shift
59 }
60
View as plain text