1
2
3
4
5
6
7 package spec
8
9
10
11
12
13
14 func And[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) {
15 return map2[E, W, E, W](x, y, func(x, y E) E {
16 return x & y
17 })
18 }
19
20
21
22
23 func AndNot[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) {
24 return map2[E, W, E, W](x, y, func(x, y E) E {
25 return x &^ y
26 })
27 }
28
29
30
31
32
33
34 func Or[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) {
35 return map2[E, W, E, W](x, y, func(x, y E) E {
36 return x | y
37 })
38 }
39
40
41
42
43 func OrNot[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) {
44 return map2[E, W, E, W](x, y, func(x, y E) E {
45 return x | ^y
46 })
47 }
48
49
50
51
52
53
54 func Xor[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) {
55 return map2[E, W, E, W](x, y, func(x, y E) E {
56 return x ^ y
57 })
58 }
59
60
61
62
63 func Not[E Ints | Uints | MaskElt, W Width](x Vec[E, W]) (z Vec[E, W]) {
64 return map1[E, W, E, W](x, func(x E) E {
65 return ^x
66 })
67 }
68
69
70
71
72
73
74
75
76 func BitSelect[E Ints | Uints, W Width, CondE Uints](x, y Vec[E, W], cond Vec[CondE, W]) (z Vec[E, W]) {
77 z = makeVec[E, W]()
78 for i := range z {
79 z[i] = (x[i] & E(cond[i])) | (y[i] &^ E(cond[i]))
80 }
81 return z
82 }
83
View as plain text