1
2
3
4
5
6
7 package spec
8
9 import "math"
10
11 func bool2mask[E MaskElt](b bool) E {
12 if b {
13 return ^E(0)
14 }
15 return 0
16 }
17
18
19
20
21 func Equal[E EltOrMask, W Width, zE MaskElt](x, y Vec[E, W]) (z Vec[zE, W]) {
22 return map2[E, W, zE, W](x, y, func(x, y E) zE {
23 return bool2mask[zE](x == y)
24 })
25 }
26
27
28
29
30 func NotEqual[E EltOrMask, W Width, zE MaskElt](x, y Vec[E, W]) (z Vec[zE, W]) {
31 return map2[E, W, zE, W](x, y, func(x, y E) zE {
32 return bool2mask[zE](x != y)
33 })
34 }
35
36
37
38
39
40
41 func Less[E Elt, W Width, zE MaskElt](x, y Vec[E, W]) (z Vec[zE, W]) {
42 return map2[E, W, zE, W](x, y, func(x, y E) zE {
43 return bool2mask[zE](x < y)
44 })
45 }
46
47
48
49
50
51
52
53 func LessEqual[E Elt, W Width, zE MaskElt](x, y Vec[E, W]) (z Vec[zE, W]) {
54 return map2[E, W, zE, W](x, y, func(x, y E) zE {
55 return bool2mask[zE](x <= y)
56 })
57 }
58
59
60
61
62
63
64 func Greater[E Elt, W Width, zE MaskElt](x, y Vec[E, W]) (z Vec[zE, W]) {
65 return map2[E, W, zE, W](x, y, func(x, y E) zE {
66 return bool2mask[zE](x > y)
67 })
68 }
69
70
71
72
73
74
75
76 func GreaterEqual[E Elt, W Width, zE MaskElt](x, y Vec[E, W]) (z Vec[zE, W]) {
77 return map2[E, W, zE, W](x, y, func(x, y E) zE {
78 return bool2mask[zE](x >= y)
79 })
80 }
81
82
83
84
85
86
87 func ToMask[E Elt, W Width, zE MaskElt](x Vec[E, W]) (z Vec[zE, W]) {
88 return map1[E, W, zE, W](x, func(x E) zE {
89 return bool2mask[zE](x != 0)
90 })
91 }
92
93
94
95
96
97
98 func IsNaN[E Floats, W Width, zE MaskElt](x Vec[E, W]) (z Vec[zE, W]) {
99 return map1[E, W, zE, W](x, func(x E) zE {
100 return bool2mask[zE](math.IsNaN(float64(x)))
101 })
102 }
103
View as plain text