Source file
test/codegen/condmove.go
1
2
3
4
5
6
7 package codegen
8
9 func cmovint(c int) int {
10 x := c + 4
11 if x < 0 {
12 x = 182
13 }
14
15
16
17
18
19 return x
20 }
21
22 func cmovchan(x, y chan int) chan int {
23 if x != y {
24 x = y
25 }
26
27
28
29
30
31 return x
32 }
33
34 func cmovuintptr(x, y uintptr) uintptr {
35 if x < y {
36 x = -y
37 }
38
39
40
41
42
43 return x
44 }
45
46 func cmov32bit(x, y uint32) uint32 {
47 if x < y {
48 x = -y
49 }
50
51
52
53
54
55 return x
56 }
57
58 func cmov16bit(x, y uint16) uint16 {
59 if x < y {
60 x = -y
61 }
62
63
64
65
66
67 return x
68 }
69
70
71
72 func cmovfloateq(x, y float64) int {
73 a := 128
74 if x == y {
75 a = 256
76 }
77
78
79
80
81
82 return a
83 }
84
85 func cmovfloatne(x, y float64) int {
86 a := 128
87 if x != y {
88 a = 256
89 }
90
91
92
93
94
95 return a
96 }
97
98
99 func frexp(f float64) (frac float64, exp int) {
100 return 1.0, 4
101 }
102
103
104 func ldexp(frac float64, exp int) float64 {
105 return 1.0
106 }
107
108
109 func cmovfloatint2(x, y float64) float64 {
110 yfr, yexp := 4.0, 5
111
112 r := x
113 for r >= y {
114 rfr, rexp := frexp(r)
115 if rfr < yfr {
116 rexp = rexp - 1
117 }
118
119
120
121
122
123 r = r - ldexp(y, rexp-yexp)
124 }
125 return r
126 }
127
128 func cmovloaded(x [4]int, y int) int {
129 if x[2] != 0 {
130 y = x[2]
131 } else {
132 y = y >> 2
133 }
134
135
136
137
138
139 return y
140 }
141
142 func cmovuintptr2(x, y uintptr) uintptr {
143 a := x * 2
144 if a == 0 {
145 a = 256
146 }
147
148
149
150
151
152 return a
153 }
154
155
156 func cmovfloatmove(x, y int) float64 {
157 a := 1.0
158 if x <= y {
159 a = 2.0
160 }
161
162
163
164
165
166 return a
167 }
168
169
170
171 var gsink int64
172 var gusink uint64
173
174 func cmovinvert1(x, y int64) int64 {
175 if x < gsink {
176 y = -y
177 }
178
179 return y
180 }
181 func cmovinvert2(x, y int64) int64 {
182 if x <= gsink {
183 y = -y
184 }
185
186 return y
187 }
188 func cmovinvert3(x, y int64) int64 {
189 if x == gsink {
190 y = -y
191 }
192
193 return y
194 }
195 func cmovinvert4(x, y int64) int64 {
196 if x != gsink {
197 y = -y
198 }
199
200 return y
201 }
202 func cmovinvert5(x, y uint64) uint64 {
203 if x > gusink {
204 y = -y
205 }
206
207 return y
208 }
209 func cmovinvert6(x, y uint64) uint64 {
210 if x >= gusink {
211 y = -y
212 }
213
214 return y
215 }
216
217 func cmovload(a []int, i int, b bool) int {
218 if b {
219 i++
220 }
221
222
223 return a[i]
224 }
225
226 func cmovstore(a []int, i int, b bool) {
227 if b {
228 i++
229 }
230
231 a[i] = 7
232 }
233
234 var r0, r1, r2, r3, r4, r5 int
235
236 func cmovinc(cond bool, a, b, c int) {
237 var x0, x1 int
238
239 if cond {
240 x0 = a
241 } else {
242 x0 = b + 1
243 }
244
245 r0 = x0
246
247 if cond {
248 x1 = b + 1
249 } else {
250 x1 = a
251 }
252
253 r1 = x1
254
255 if cond {
256 c++
257 }
258
259 r2 = c
260 }
261
262 func cmovinv(cond bool, a, b int) {
263 var x0, x1 int
264
265 if cond {
266 x0 = a
267 } else {
268 x0 = ^b
269 }
270
271 r0 = x0
272
273 if cond {
274 x1 = ^b
275 } else {
276 x1 = a
277 }
278
279 r1 = x1
280 }
281
282 func cmovneg(cond bool, a, b, c int) {
283 var x0, x1 int
284
285 if cond {
286 x0 = a
287 } else {
288 x0 = -b
289 }
290
291 r0 = x0
292
293 if cond {
294 x1 = -b
295 } else {
296 x1 = a
297 }
298
299 r1 = x1
300 }
301
302 func cmovsetm(cond bool, x int) {
303 var x0, x1 int
304
305 if cond {
306 x0 = -1
307 } else {
308 x0 = 0
309 }
310
311 r0 = x0
312
313 if cond {
314 x1 = 0
315 } else {
316 x1 = -1
317 }
318
319 r1 = x1
320 }
321
322 func cmovFcmp0(s, t float64, a, b int) {
323 var x0, x1, x2, x3, x4, x5 int
324
325 if s < t {
326 x0 = a
327 } else {
328 x0 = b + 1
329 }
330
331 r0 = x0
332
333 if s <= t {
334 x1 = a
335 } else {
336 x1 = ^b
337 }
338
339 r1 = x1
340
341 if s > t {
342 x2 = a
343 } else {
344 x2 = -b
345 }
346
347 r2 = x2
348
349 if s >= t {
350 x3 = -1
351 } else {
352 x3 = 0
353 }
354
355 r3 = x3
356
357 if s == t {
358 x4 = a
359 } else {
360 x4 = b + 1
361 }
362
363 r4 = x4
364
365 if s != t {
366 x5 = a
367 } else {
368 x5 = b + 1
369 }
370
371 r5 = x5
372 }
373
374 func cmovFcmp1(s, t float64, a, b int) {
375 var x0, x1, x2, x3, x4, x5 int
376
377 if s < t {
378 x0 = b + 1
379 } else {
380 x0 = a
381 }
382
383 r0 = x0
384
385 if s <= t {
386 x1 = ^b
387 } else {
388 x1 = a
389 }
390
391 r1 = x1
392
393 if s > t {
394 x2 = -b
395 } else {
396 x2 = a
397 }
398
399 r2 = x2
400
401 if s >= t {
402 x3 = 0
403 } else {
404 x3 = -1
405 }
406
407 r3 = x3
408
409 if s == t {
410 x4 = b + 1
411 } else {
412 x4 = a
413 }
414
415 r4 = x4
416
417 if s != t {
418 x5 = b + 1
419 } else {
420 x5 = a
421 }
422
423 r5 = x5
424 }
425
426 func cmovzero1(c bool) int {
427 var x int
428 if c {
429 x = 182
430 }
431
432 return x
433 }
434
435 func cmovzero2(c bool) int {
436 var x int
437 if !c {
438 x = 182
439 }
440
441 return x
442 }
443
444
445
446
447
448 func cmovzeroreg0(a, b int) int {
449 x := 0
450 if a == b {
451 x = a
452 }
453
454
455 return x
456 }
457
458 func cmovzeroreg1(a, b int) int {
459 x := a
460 if a == b {
461 x = 0
462 }
463
464
465 return x
466 }
467
View as plain text