1
2
3
4
5
6
7 package codegen
8
9 import (
10 "math/bits"
11 )
12
13
14
15 func convertNeq0B(x uint8, c bool) bool {
16
17
18 b := x&1 != 0
19 return c && b
20 }
21
22 func convertNeq0W(x uint16, c bool) bool {
23
24
25 b := x&1 != 0
26 return c && b
27 }
28
29 func convertNeq0L(x uint32, c bool) bool {
30
31
32 b := x&1 != 0
33 return c && b
34 }
35
36 func convertNeq0Q(x uint64, c bool) bool {
37
38
39 b := x&1 != 0
40 return c && b
41 }
42
43 func convertNeqBool32(x uint32) bool {
44
45 return x&1 != 0
46 }
47
48 func convertEqBool32(x uint32) bool {
49
50
51 return x&1 == 0
52 }
53
54 func convertNeqBool64(x uint64) bool {
55
56 return x&1 != 0
57 }
58
59 func convertEqBool64(x uint64) bool {
60
61
62 return x&1 == 0
63 }
64
65 func phiAnd(a, b bool) bool {
66 var x bool
67
68 if a {
69 x = b
70 } else {
71 x = a
72 }
73
74 return x
75 }
76
77 func phiOr(a, b bool) bool {
78 var x bool
79
80 if a {
81 x = a
82 } else {
83 x = b
84 }
85
86 return x
87 }
88
89 func TestSetEq64(x uint64, y uint64) bool {
90
91
92
93 b := x == y
94 return b
95 }
96 func TestSetNeq64(x uint64, y uint64) bool {
97
98
99
100 b := x != y
101 return b
102 }
103 func TestSetLt64(x uint64, y uint64) bool {
104
105
106
107 b := x < y
108 return b
109 }
110 func TestSetLe64(x uint64, y uint64) bool {
111
112
113
114 b := x <= y
115 return b
116 }
117 func TestSetGt64(x uint64, y uint64) bool {
118
119
120
121 b := x > y
122 return b
123 }
124 func TestSetGe64(x uint64, y uint64) bool {
125
126
127
128 b := x >= y
129 return b
130 }
131 func TestSetLtFp64(x float64, y float64) bool {
132
133
134
135 b := x < y
136 return b
137 }
138 func TestSetLeFp64(x float64, y float64) bool {
139
140
141
142 b := x <= y
143 return b
144 }
145 func TestSetGtFp64(x float64, y float64) bool {
146
147
148
149 b := x > y
150 return b
151 }
152 func TestSetGeFp64(x float64, y float64) bool {
153
154
155
156 b := x >= y
157 return b
158 }
159 func TestSetInvEq64(x uint64, y uint64) bool {
160
161
162
163 b := !(x == y)
164 return b
165 }
166 func TestSetInvNeq64(x uint64, y uint64) bool {
167
168
169
170 b := !(x != y)
171 return b
172 }
173 func TestSetInvLt64(x uint64, y uint64) bool {
174
175
176
177 b := !(x < y)
178 return b
179 }
180 func TestSetInvLe64(x uint64, y uint64) bool {
181
182
183
184 b := !(x <= y)
185 return b
186 }
187 func TestSetInvGt64(x uint64, y uint64) bool {
188
189
190
191 b := !(x > y)
192 return b
193 }
194 func TestSetInvGe64(x uint64, y uint64) bool {
195
196
197
198 b := !(x >= y)
199 return b
200 }
201
202 func TestSetInvEqFp64(x float64, y float64) bool {
203
204
205
206 b := !(x == y)
207 return b
208 }
209 func TestSetInvNeqFp64(x float64, y float64) bool {
210
211
212
213 b := !(x != y)
214 return b
215 }
216 func TestSetInvLtFp64(x float64, y float64) bool {
217
218
219
220 b := !(x < y)
221 return b
222 }
223 func TestSetInvLeFp64(x float64, y float64) bool {
224
225
226
227 b := !(x <= y)
228 return b
229 }
230 func TestSetInvGtFp64(x float64, y float64) bool {
231
232
233
234 b := !(x > y)
235 return b
236 }
237 func TestSetInvGeFp64(x float64, y float64) bool {
238
239
240
241 b := !(x >= y)
242 return b
243 }
244 func TestLogicalCompareZero(x *[64]uint64) {
245
246 b := x[0] & 3
247 if b != 0 {
248 x[0] = b
249 }
250
251 b = x[1] & x[2]
252 if b != 0 {
253 x[1] = b
254 }
255
256 b = x[1] &^ x[2]
257 if b != 0 {
258 x[1] = b
259 }
260
261 b = x[3] | x[4]
262 if b != 0 {
263 x[3] = b
264 }
265
266 b = x[5] - x[6]
267 if b != 0 {
268 x[5] = b
269 }
270
271 b = ^(x[5] | x[6])
272 if b != 0 {
273 x[5] = b
274 }
275
276 b = x[7] ^ x[8]
277 if b != 0 {
278 x[7] = b
279 }
280
281 b = x[9] + x[10]
282 if b != 0 {
283 x[9] = b
284 }
285
286 b = -x[11]
287 if b != 0 {
288 x[11] = b
289 }
290
291 b = uint64(bits.LeadingZeros64(x[12]))
292 if b != 0 {
293 x[12] = b
294 }
295
296
297 c := int64(x[12]) + 4
298 if c <= 0 {
299 x[12] = uint64(c)
300 }
301
302
303 hi, _ := bits.Mul64(x[13], x[14])
304 if hi != 0 {
305 x[14] = hi
306 }
307
308 }
309
310 func constantWrite(b bool, p *bool) {
311 if b {
312
313 *p = b
314 }
315 }
316
317 func boolCompare1(p, q *bool) int {
318
319 if *p == *q {
320 return 5
321 }
322 return 7
323 }
324 func boolCompare2(p, q *bool) int {
325
326 if *p != *q {
327 return 5
328 }
329 return 7
330 }
331
View as plain text