1
2
3
4
5
6
7 package main
8
9 import (
10 "fmt"
11 "testing"
12 )
13
14
15
16
17
18 func manysub_ssa(a, b, c, d float64) (aa, ab, ac, ad, ba, bb, bc, bd, ca, cb, cc, cd, da, db, dc, dd float64) {
19 aa = a + 11.0 - a
20 ab = a - b
21 ac = a - c
22 ad = a - d
23 ba = b - a
24 bb = b + 22.0 - b
25 bc = b - c
26 bd = b - d
27 ca = c - a
28 cb = c - b
29 cc = c + 33.0 - c
30 cd = c - d
31 da = d - a
32 db = d - b
33 dc = d - c
34 dd = d + 44.0 - d
35 return
36 }
37
38
39
40
41 func fpspill_ssa(a int) float64 {
42
43 ret := -1.0
44 switch a {
45 case 0:
46 ret = 1.0
47 case 1:
48 ret = 1.1
49 case 2:
50 ret = 1.2
51 case 3:
52 ret = 1.3
53 case 4:
54 ret = 1.4
55 case 5:
56 ret = 1.5
57 case 6:
58 ret = 1.6
59 case 7:
60 ret = 1.7
61 case 8:
62 ret = 1.8
63 case 9:
64 ret = 1.9
65 case 10:
66 ret = 1.10
67 case 11:
68 ret = 1.11
69 case 12:
70 ret = 1.12
71 case 13:
72 ret = 1.13
73 case 14:
74 ret = 1.14
75 case 15:
76 ret = 1.15
77 case 16:
78 ret = 1.16
79 }
80 return ret
81 }
82
83
84 func add64_ssa(a, b float64) float64 {
85 return a + b
86 }
87
88
89 func mul64_ssa(a, b float64) float64 {
90 return a * b
91 }
92
93
94 func sub64_ssa(a, b float64) float64 {
95 return a - b
96 }
97
98
99 func div64_ssa(a, b float64) float64 {
100 return a / b
101 }
102
103
104 func neg64_ssa(a, b float64) float64 {
105 return -a + -1*b
106 }
107
108
109 func add32_ssa(a, b float32) float32 {
110 return a + b
111 }
112
113
114 func mul32_ssa(a, b float32) float32 {
115 return a * b
116 }
117
118
119 func sub32_ssa(a, b float32) float32 {
120 return a - b
121 }
122
123
124 func div32_ssa(a, b float32) float32 {
125 return a / b
126 }
127
128
129 func neg32_ssa(a, b float32) float32 {
130 return -a + -1*b
131 }
132
133
134 func conv2Float64_ssa(a int8, b uint8, c int16, d uint16,
135 e int32, f uint32, g int64, h uint64, i float32) (aa, bb, cc, dd, ee, ff, gg, hh, ii float64) {
136 aa = float64(a)
137 bb = float64(b)
138 cc = float64(c)
139 hh = float64(h)
140 dd = float64(d)
141 ee = float64(e)
142 ff = float64(f)
143 gg = float64(g)
144 ii = float64(i)
145 return
146 }
147
148
149 func conv2Float32_ssa(a int8, b uint8, c int16, d uint16,
150 e int32, f uint32, g int64, h uint64, i float64) (aa, bb, cc, dd, ee, ff, gg, hh, ii float32) {
151 aa = float32(a)
152 bb = float32(b)
153 cc = float32(c)
154 dd = float32(d)
155 ee = float32(e)
156 ff = float32(f)
157 gg = float32(g)
158 hh = float32(h)
159 ii = float32(i)
160 return
161 }
162
163 func integer2floatConversions(t *testing.T) {
164 {
165 a, b, c, d, e, f, g, h, i := conv2Float64_ssa(0, 0, 0, 0, 0, 0, 0, 0, 0)
166 expectAll64(t, "zero64", 0, a, b, c, d, e, f, g, h, i)
167 }
168 {
169 a, b, c, d, e, f, g, h, i := conv2Float64_ssa(1, 1, 1, 1, 1, 1, 1, 1, 1)
170 expectAll64(t, "one64", 1, a, b, c, d, e, f, g, h, i)
171 }
172 {
173 a, b, c, d, e, f, g, h, i := conv2Float32_ssa(0, 0, 0, 0, 0, 0, 0, 0, 0)
174 expectAll32(t, "zero32", 0, a, b, c, d, e, f, g, h, i)
175 }
176 {
177 a, b, c, d, e, f, g, h, i := conv2Float32_ssa(1, 1, 1, 1, 1, 1, 1, 1, 1)
178 expectAll32(t, "one32", 1, a, b, c, d, e, f, g, h, i)
179 }
180 {
181
182 a, b, c, d, e, f, g, h, i := conv2Float64_ssa(127, 255, 32767, 65535, 0x7fffffff, 0xffffffff, 0x7fffFFFFffffFFFF, 0xffffFFFFffffFFFF, 3.402823e38)
183 expect64(t, "a", a, 127)
184 expect64(t, "b", b, 255)
185 expect64(t, "c", c, 32767)
186 expect64(t, "d", d, 65535)
187 expect64(t, "e", e, float64(int32(0x7fffffff)))
188 expect64(t, "f", f, float64(uint32(0xffffffff)))
189 expect64(t, "g", g, float64(int64(0x7fffffffffffffff)))
190 expect64(t, "h", h, float64(uint64(0xffffffffffffffff)))
191 expect64(t, "i", i, float64(float32(3.402823e38)))
192 }
193 {
194
195 a, b, c, d, e, f, g, h, i := conv2Float64_ssa(-128, 254, -32768, 65534, ^0x7fffffff, 0xfffffffe, ^0x7fffFFFFffffFFFF, 0xffffFFFFffffF401, 1.5e-45)
196 expect64(t, "a", a, -128)
197 expect64(t, "b", b, 254)
198 expect64(t, "c", c, -32768)
199 expect64(t, "d", d, 65534)
200 expect64(t, "e", e, float64(^int32(0x7fffffff)))
201 expect64(t, "f", f, float64(uint32(0xfffffffe)))
202 expect64(t, "g", g, float64(^int64(0x7fffffffffffffff)))
203 expect64(t, "h", h, float64(uint64(0xfffffffffffff401)))
204 expect64(t, "i", i, float64(float32(1.5e-45)))
205 }
206 {
207
208 a, b, c, d, e, f, g, h, i := conv2Float32_ssa(127, 255, 32767, 65535, 0x7fffffff, 0xffffffff, 0x7fffFFFFffffFFFF, 0xffffFFFFffffFFFF, 3.402823e38)
209 expect32(t, "a", a, 127)
210 expect32(t, "b", b, 255)
211 expect32(t, "c", c, 32767)
212 expect32(t, "d", d, 65535)
213 expect32(t, "e", e, float32(int32(0x7fffffff)))
214 expect32(t, "f", f, float32(uint32(0xffffffff)))
215 expect32(t, "g", g, float32(int64(0x7fffffffffffffff)))
216 expect32(t, "h", h, float32(uint64(0xffffffffffffffff)))
217 expect32(t, "i", i, float32(float64(3.402823e38)))
218 }
219 {
220
221 a, b, c, d, e, f, g, h, i := conv2Float32_ssa(-128, 254, -32768, 65534, ^0x7fffffff, 0xfffffffe, ^0x7fffFFFFffffFFFF, 0xffffFFFFffffF401, 1.5e-45)
222 expect32(t, "a", a, -128)
223 expect32(t, "b", b, 254)
224 expect32(t, "c", c, -32768)
225 expect32(t, "d", d, 65534)
226 expect32(t, "e", e, float32(^int32(0x7fffffff)))
227 expect32(t, "f", f, float32(uint32(0xfffffffe)))
228 expect32(t, "g", g, float32(^int64(0x7fffffffffffffff)))
229 expect32(t, "h", h, float32(uint64(0xfffffffffffff401)))
230 expect32(t, "i", i, float32(float64(1.5e-45)))
231 }
232 }
233
234 func multiplyAdd(t *testing.T) {
235 {
236
237
238
239
240
241 var tests = [...]struct{ x, y, z, res float32 }{
242 {0.6046603, 0.9405091, 0.6645601, 1.2332485},
243 {0.67908466, 0.21855305, 0.20318687, 0.3516029},
244 {0.29311424, 0.29708257, 0.752573, 0.8396522},
245 {0.5305857, 0.2535405, 0.282081, 0.41660595},
246 {0.29711226, 0.89436173, 0.097454615, 0.36318043},
247 {0.6810783, 0.24151509, 0.31152245, 0.47601312},
248 {0.73023146, 0.18292491, 0.4283571, 0.5619346},
249 {0.89634174, 0.32208398, 0.7211478, 1.009845},
250 {0.6280982, 0.12675293, 0.2813303, 0.36094356},
251 {0.29400632, 0.75316125, 0.15096405, 0.3723982},
252 }
253 check := func(s string, got, expected float32) {
254 if got != expected {
255 fmt.Printf("multiplyAdd: %s, expected %g, got %g\n", s, expected, got)
256 }
257 }
258 for _, t := range tests {
259 check(
260 fmt.Sprintf("float32(%v * %v) + %v", t.x, t.y, t.z),
261 func(x, y, z float32) float32 {
262 return float32(x*y) + z
263 }(t.x, t.y, t.z),
264 t.res)
265
266 check(
267 fmt.Sprintf("%v += float32(%v * %v)", t.z, t.x, t.y),
268 func(x, y, z float32) float32 {
269 z += float32(x * y)
270 return z
271 }(t.x, t.y, t.z),
272 t.res)
273 }
274 }
275 {
276
277
278
279
280
281 var tests = [...]struct{ x, y, z, res float64 }{
282 {0.4688898449024232, 0.28303415118044517, 0.29310185733681576, 0.42581369658590373},
283 {0.7886049150193449, 0.3618054804803169, 0.8805431227416171, 1.1658647029293308},
284 {0.7302314772948083, 0.18292491645390843, 0.4283570818068078, 0.5619346137829748},
285 {0.6908388315056789, 0.7109071952999951, 0.5637795958152644, 1.0549018919252924},
286 {0.4584424785756506, 0.6001655953233308, 0.02626515060968944, 0.3014065536855481},
287 {0.539210105890946, 0.9756748149873165, 0.7507630564795985, 1.2768567767840384},
288 {0.7830349733960021, 0.3932509992288867, 0.1304138461737918, 0.4383431318929343},
289 {0.6841751300974551, 0.6530402051353608, 0.524499759549865, 0.9712936268572192},
290 {0.3691117091643448, 0.826454125634742, 0.34768170859156955, 0.6527356034505334},
291 {0.16867966833433606, 0.33136826030698385, 0.8279280961505588, 0.8838231843956668},
292 }
293 check := func(s string, got, expected float64) {
294 if got != expected {
295 fmt.Printf("multiplyAdd: %s, expected %g, got %g\n", s, expected, got)
296 }
297 }
298 for _, t := range tests {
299 check(
300 fmt.Sprintf("float64(%v * %v) + %v", t.x, t.y, t.z),
301 func(x, y, z float64) float64 {
302 return float64(x*y) + z
303 }(t.x, t.y, t.z),
304 t.res)
305
306 check(
307 fmt.Sprintf("%v += float64(%v * %v)", t.z, t.x, t.y),
308 func(x, y, z float64) float64 {
309 z += float64(x * y)
310 return z
311 }(t.x, t.y, t.z),
312 t.res)
313 }
314 }
315 {
316
317
318
319
320
321 var tests = [...]struct {
322 x, y float64
323 res complex128
324 }{
325 {0.6046602879796196, 0.9405090880450124, (2.754489951983871 + 3i)},
326 {0.09696951891448456, 0.30091186058528707, (0.5918204173287407 + 3i)},
327 {0.544155573000885, 0.27850762181610883, (1.910974340818764 + 3i)},
328 {0.9769168685862624, 0.07429099894984302, (3.0050416047086297 + 3i)},
329 {0.9269868035744142, 0.9549454404167818, (3.735905851140024 + 3i)},
330 {0.7109071952999951, 0.5637795958152644, (2.69650118171525 + 3i)},
331 {0.7558235074915978, 0.40380328579570035, (2.671273808270494 + 3i)},
332 {0.13065111702897217, 0.9859647293402467, (1.3779180804271633 + 3i)},
333 {0.8963417453962161, 0.3220839705208817, (3.0111092067095298 + 3i)},
334 {0.39998376285699544, 0.497868113342702, (1.697819401913688 + 3i)},
335 }
336 check := func(s string, got, expected complex128) {
337 if got != expected {
338 fmt.Printf("multiplyAdd: %s, expected %v, got %v\n", s, expected, got)
339 }
340 }
341 for _, t := range tests {
342 check(
343 fmt.Sprintf("complex128(complex(%v, 1)*3) + complex(%v, 0)", t.x, t.y),
344 func(x, y float64) complex128 {
345 return complex128(complex(x, 1)*3) + complex(y, 0)
346 }(t.x, t.y),
347 t.res)
348
349 check(
350 fmt.Sprintf("z := complex(%v, 1); z += complex128(complex(%v, 1) * 3)", t.y, t.x),
351 func(x, y float64) complex128 {
352 z := complex(y, 0)
353 z += complex128(complex(x, 1) * 3)
354 return z
355 }(t.x, t.y),
356 t.res)
357 }
358 }
359 }
360
361 const (
362 aa = 0x1000000000000000
363 ab = 0x100000000000000
364 ac = 0x10000000000000
365 ad = 0x1000000000000
366 ba = 0x100000000000
367 bb = 0x10000000000
368 bc = 0x1000000000
369 bd = 0x100000000
370 ca = 0x10000000
371 cb = 0x1000000
372 cc = 0x100000
373 cd = 0x10000
374 da = 0x1000
375 db = 0x100
376 dc = 0x10
377 dd = 0x1
378 )
379
380
381 func compares64_ssa(a, b, c, d float64) (lt, le, eq, ne, ge, gt uint64) {
382 if a < a {
383 lt += aa
384 }
385 if a < b {
386 lt += ab
387 }
388 if a < c {
389 lt += ac
390 }
391 if a < d {
392 lt += ad
393 }
394
395 if b < a {
396 lt += ba
397 }
398 if b < b {
399 lt += bb
400 }
401 if b < c {
402 lt += bc
403 }
404 if b < d {
405 lt += bd
406 }
407
408 if c < a {
409 lt += ca
410 }
411 if c < b {
412 lt += cb
413 }
414 if c < c {
415 lt += cc
416 }
417 if c < d {
418 lt += cd
419 }
420
421 if d < a {
422 lt += da
423 }
424 if d < b {
425 lt += db
426 }
427 if d < c {
428 lt += dc
429 }
430 if d < d {
431 lt += dd
432 }
433
434 if a <= a {
435 le += aa
436 }
437 if a <= b {
438 le += ab
439 }
440 if a <= c {
441 le += ac
442 }
443 if a <= d {
444 le += ad
445 }
446
447 if b <= a {
448 le += ba
449 }
450 if b <= b {
451 le += bb
452 }
453 if b <= c {
454 le += bc
455 }
456 if b <= d {
457 le += bd
458 }
459
460 if c <= a {
461 le += ca
462 }
463 if c <= b {
464 le += cb
465 }
466 if c <= c {
467 le += cc
468 }
469 if c <= d {
470 le += cd
471 }
472
473 if d <= a {
474 le += da
475 }
476 if d <= b {
477 le += db
478 }
479 if d <= c {
480 le += dc
481 }
482 if d <= d {
483 le += dd
484 }
485
486 if a == a {
487 eq += aa
488 }
489 if a == b {
490 eq += ab
491 }
492 if a == c {
493 eq += ac
494 }
495 if a == d {
496 eq += ad
497 }
498
499 if b == a {
500 eq += ba
501 }
502 if b == b {
503 eq += bb
504 }
505 if b == c {
506 eq += bc
507 }
508 if b == d {
509 eq += bd
510 }
511
512 if c == a {
513 eq += ca
514 }
515 if c == b {
516 eq += cb
517 }
518 if c == c {
519 eq += cc
520 }
521 if c == d {
522 eq += cd
523 }
524
525 if d == a {
526 eq += da
527 }
528 if d == b {
529 eq += db
530 }
531 if d == c {
532 eq += dc
533 }
534 if d == d {
535 eq += dd
536 }
537
538 if a != a {
539 ne += aa
540 }
541 if a != b {
542 ne += ab
543 }
544 if a != c {
545 ne += ac
546 }
547 if a != d {
548 ne += ad
549 }
550
551 if b != a {
552 ne += ba
553 }
554 if b != b {
555 ne += bb
556 }
557 if b != c {
558 ne += bc
559 }
560 if b != d {
561 ne += bd
562 }
563
564 if c != a {
565 ne += ca
566 }
567 if c != b {
568 ne += cb
569 }
570 if c != c {
571 ne += cc
572 }
573 if c != d {
574 ne += cd
575 }
576
577 if d != a {
578 ne += da
579 }
580 if d != b {
581 ne += db
582 }
583 if d != c {
584 ne += dc
585 }
586 if d != d {
587 ne += dd
588 }
589
590 if a >= a {
591 ge += aa
592 }
593 if a >= b {
594 ge += ab
595 }
596 if a >= c {
597 ge += ac
598 }
599 if a >= d {
600 ge += ad
601 }
602
603 if b >= a {
604 ge += ba
605 }
606 if b >= b {
607 ge += bb
608 }
609 if b >= c {
610 ge += bc
611 }
612 if b >= d {
613 ge += bd
614 }
615
616 if c >= a {
617 ge += ca
618 }
619 if c >= b {
620 ge += cb
621 }
622 if c >= c {
623 ge += cc
624 }
625 if c >= d {
626 ge += cd
627 }
628
629 if d >= a {
630 ge += da
631 }
632 if d >= b {
633 ge += db
634 }
635 if d >= c {
636 ge += dc
637 }
638 if d >= d {
639 ge += dd
640 }
641
642 if a > a {
643 gt += aa
644 }
645 if a > b {
646 gt += ab
647 }
648 if a > c {
649 gt += ac
650 }
651 if a > d {
652 gt += ad
653 }
654
655 if b > a {
656 gt += ba
657 }
658 if b > b {
659 gt += bb
660 }
661 if b > c {
662 gt += bc
663 }
664 if b > d {
665 gt += bd
666 }
667
668 if c > a {
669 gt += ca
670 }
671 if c > b {
672 gt += cb
673 }
674 if c > c {
675 gt += cc
676 }
677 if c > d {
678 gt += cd
679 }
680
681 if d > a {
682 gt += da
683 }
684 if d > b {
685 gt += db
686 }
687 if d > c {
688 gt += dc
689 }
690 if d > d {
691 gt += dd
692 }
693
694 return
695 }
696
697
698 func compares32_ssa(a, b, c, d float32) (lt, le, eq, ne, ge, gt uint64) {
699 if a < a {
700 lt += aa
701 }
702 if a < b {
703 lt += ab
704 }
705 if a < c {
706 lt += ac
707 }
708 if a < d {
709 lt += ad
710 }
711
712 if b < a {
713 lt += ba
714 }
715 if b < b {
716 lt += bb
717 }
718 if b < c {
719 lt += bc
720 }
721 if b < d {
722 lt += bd
723 }
724
725 if c < a {
726 lt += ca
727 }
728 if c < b {
729 lt += cb
730 }
731 if c < c {
732 lt += cc
733 }
734 if c < d {
735 lt += cd
736 }
737
738 if d < a {
739 lt += da
740 }
741 if d < b {
742 lt += db
743 }
744 if d < c {
745 lt += dc
746 }
747 if d < d {
748 lt += dd
749 }
750
751 if a <= a {
752 le += aa
753 }
754 if a <= b {
755 le += ab
756 }
757 if a <= c {
758 le += ac
759 }
760 if a <= d {
761 le += ad
762 }
763
764 if b <= a {
765 le += ba
766 }
767 if b <= b {
768 le += bb
769 }
770 if b <= c {
771 le += bc
772 }
773 if b <= d {
774 le += bd
775 }
776
777 if c <= a {
778 le += ca
779 }
780 if c <= b {
781 le += cb
782 }
783 if c <= c {
784 le += cc
785 }
786 if c <= d {
787 le += cd
788 }
789
790 if d <= a {
791 le += da
792 }
793 if d <= b {
794 le += db
795 }
796 if d <= c {
797 le += dc
798 }
799 if d <= d {
800 le += dd
801 }
802
803 if a == a {
804 eq += aa
805 }
806 if a == b {
807 eq += ab
808 }
809 if a == c {
810 eq += ac
811 }
812 if a == d {
813 eq += ad
814 }
815
816 if b == a {
817 eq += ba
818 }
819 if b == b {
820 eq += bb
821 }
822 if b == c {
823 eq += bc
824 }
825 if b == d {
826 eq += bd
827 }
828
829 if c == a {
830 eq += ca
831 }
832 if c == b {
833 eq += cb
834 }
835 if c == c {
836 eq += cc
837 }
838 if c == d {
839 eq += cd
840 }
841
842 if d == a {
843 eq += da
844 }
845 if d == b {
846 eq += db
847 }
848 if d == c {
849 eq += dc
850 }
851 if d == d {
852 eq += dd
853 }
854
855 if a != a {
856 ne += aa
857 }
858 if a != b {
859 ne += ab
860 }
861 if a != c {
862 ne += ac
863 }
864 if a != d {
865 ne += ad
866 }
867
868 if b != a {
869 ne += ba
870 }
871 if b != b {
872 ne += bb
873 }
874 if b != c {
875 ne += bc
876 }
877 if b != d {
878 ne += bd
879 }
880
881 if c != a {
882 ne += ca
883 }
884 if c != b {
885 ne += cb
886 }
887 if c != c {
888 ne += cc
889 }
890 if c != d {
891 ne += cd
892 }
893
894 if d != a {
895 ne += da
896 }
897 if d != b {
898 ne += db
899 }
900 if d != c {
901 ne += dc
902 }
903 if d != d {
904 ne += dd
905 }
906
907 if a >= a {
908 ge += aa
909 }
910 if a >= b {
911 ge += ab
912 }
913 if a >= c {
914 ge += ac
915 }
916 if a >= d {
917 ge += ad
918 }
919
920 if b >= a {
921 ge += ba
922 }
923 if b >= b {
924 ge += bb
925 }
926 if b >= c {
927 ge += bc
928 }
929 if b >= d {
930 ge += bd
931 }
932
933 if c >= a {
934 ge += ca
935 }
936 if c >= b {
937 ge += cb
938 }
939 if c >= c {
940 ge += cc
941 }
942 if c >= d {
943 ge += cd
944 }
945
946 if d >= a {
947 ge += da
948 }
949 if d >= b {
950 ge += db
951 }
952 if d >= c {
953 ge += dc
954 }
955 if d >= d {
956 ge += dd
957 }
958
959 if a > a {
960 gt += aa
961 }
962 if a > b {
963 gt += ab
964 }
965 if a > c {
966 gt += ac
967 }
968 if a > d {
969 gt += ad
970 }
971
972 if b > a {
973 gt += ba
974 }
975 if b > b {
976 gt += bb
977 }
978 if b > c {
979 gt += bc
980 }
981 if b > d {
982 gt += bd
983 }
984
985 if c > a {
986 gt += ca
987 }
988 if c > b {
989 gt += cb
990 }
991 if c > c {
992 gt += cc
993 }
994 if c > d {
995 gt += cd
996 }
997
998 if d > a {
999 gt += da
1000 }
1001 if d > b {
1002 gt += db
1003 }
1004 if d > c {
1005 gt += dc
1006 }
1007 if d > d {
1008 gt += dd
1009 }
1010
1011 return
1012 }
1013
1014
1015 func le64_ssa(x, y float64) bool {
1016 return x <= y
1017 }
1018
1019
1020 func ge64_ssa(x, y float64) bool {
1021 return x >= y
1022 }
1023
1024
1025 func lt64_ssa(x, y float64) bool {
1026 return x < y
1027 }
1028
1029
1030 func gt64_ssa(x, y float64) bool {
1031 return x > y
1032 }
1033
1034
1035 func eq64_ssa(x, y float64) bool {
1036 return x == y
1037 }
1038
1039
1040 func ne64_ssa(x, y float64) bool {
1041 return x != y
1042 }
1043
1044
1045 func eqbr64_ssa(x, y float64) float64 {
1046 if x == y {
1047 return 17
1048 }
1049 return 42
1050 }
1051
1052
1053 func nebr64_ssa(x, y float64) float64 {
1054 if x != y {
1055 return 17
1056 }
1057 return 42
1058 }
1059
1060
1061 func gebr64_ssa(x, y float64) float64 {
1062 if x >= y {
1063 return 17
1064 }
1065 return 42
1066 }
1067
1068
1069 func lebr64_ssa(x, y float64) float64 {
1070 if x <= y {
1071 return 17
1072 }
1073 return 42
1074 }
1075
1076
1077 func ltbr64_ssa(x, y float64) float64 {
1078 if x < y {
1079 return 17
1080 }
1081 return 42
1082 }
1083
1084
1085 func gtbr64_ssa(x, y float64) float64 {
1086 if x > y {
1087 return 17
1088 }
1089 return 42
1090 }
1091
1092
1093 func le32_ssa(x, y float32) bool {
1094 return x <= y
1095 }
1096
1097
1098 func ge32_ssa(x, y float32) bool {
1099 return x >= y
1100 }
1101
1102
1103 func lt32_ssa(x, y float32) bool {
1104 return x < y
1105 }
1106
1107
1108 func gt32_ssa(x, y float32) bool {
1109 return x > y
1110 }
1111
1112
1113 func eq32_ssa(x, y float32) bool {
1114 return x == y
1115 }
1116
1117
1118 func ne32_ssa(x, y float32) bool {
1119 return x != y
1120 }
1121
1122
1123 func eqbr32_ssa(x, y float32) float32 {
1124 if x == y {
1125 return 17
1126 }
1127 return 42
1128 }
1129
1130
1131 func nebr32_ssa(x, y float32) float32 {
1132 if x != y {
1133 return 17
1134 }
1135 return 42
1136 }
1137
1138
1139 func gebr32_ssa(x, y float32) float32 {
1140 if x >= y {
1141 return 17
1142 }
1143 return 42
1144 }
1145
1146
1147 func lebr32_ssa(x, y float32) float32 {
1148 if x <= y {
1149 return 17
1150 }
1151 return 42
1152 }
1153
1154
1155 func ltbr32_ssa(x, y float32) float32 {
1156 if x < y {
1157 return 17
1158 }
1159 return 42
1160 }
1161
1162
1163 func gtbr32_ssa(x, y float32) float32 {
1164 if x > y {
1165 return 17
1166 }
1167 return 42
1168 }
1169
1170
1171 func F32toU8_ssa(x float32) uint8 {
1172 return uint8(x)
1173 }
1174
1175
1176 func F32toI8_ssa(x float32) int8 {
1177 return int8(x)
1178 }
1179
1180
1181 func F32toU16_ssa(x float32) uint16 {
1182 return uint16(x)
1183 }
1184
1185
1186 func F32toI16_ssa(x float32) int16 {
1187 return int16(x)
1188 }
1189
1190
1191 func F32toU32_ssa(x float32) uint32 {
1192 return uint32(x)
1193 }
1194
1195
1196 func F32toI32_ssa(x float32) int32 {
1197 return int32(x)
1198 }
1199
1200
1201 func F32toU64_ssa(x float32) uint64 {
1202 return uint64(x)
1203 }
1204
1205
1206 func F32toI64_ssa(x float32) int64 {
1207 return int64(x)
1208 }
1209
1210
1211 func F64toU8_ssa(x float64) uint8 {
1212 return uint8(x)
1213 }
1214
1215
1216 func F64toI8_ssa(x float64) int8 {
1217 return int8(x)
1218 }
1219
1220
1221 func F64toU16_ssa(x float64) uint16 {
1222 return uint16(x)
1223 }
1224
1225
1226 func F64toI16_ssa(x float64) int16 {
1227 return int16(x)
1228 }
1229
1230
1231 func F64toU32_ssa(x float64) uint32 {
1232 return uint32(x)
1233 }
1234
1235
1236 func F64toI32_ssa(x float64) int32 {
1237 return int32(x)
1238 }
1239
1240
1241 func F64toU64_ssa(x float64) uint64 {
1242 return uint64(x)
1243 }
1244
1245
1246 func F64toI64_ssa(x float64) int64 {
1247 return int64(x)
1248 }
1249
1250 func floatsToInts(t *testing.T, x float64, expected int64) {
1251 y := float32(x)
1252 expectInt64(t, "F64toI8", int64(F64toI8_ssa(x)), expected)
1253 expectInt64(t, "F64toI16", int64(F64toI16_ssa(x)), expected)
1254 expectInt64(t, "F64toI32", int64(F64toI32_ssa(x)), expected)
1255 expectInt64(t, "F64toI64", int64(F64toI64_ssa(x)), expected)
1256 expectInt64(t, "F32toI8", int64(F32toI8_ssa(y)), expected)
1257 expectInt64(t, "F32toI16", int64(F32toI16_ssa(y)), expected)
1258 expectInt64(t, "F32toI32", int64(F32toI32_ssa(y)), expected)
1259 expectInt64(t, "F32toI64", int64(F32toI64_ssa(y)), expected)
1260 }
1261
1262 func floatsToUints(t *testing.T, x float64, expected uint64) {
1263 y := float32(x)
1264 expectUint64(t, "F64toU8", uint64(F64toU8_ssa(x)), expected)
1265 expectUint64(t, "F64toU16", uint64(F64toU16_ssa(x)), expected)
1266 expectUint64(t, "F64toU32", uint64(F64toU32_ssa(x)), expected)
1267 expectUint64(t, "F64toU64", uint64(F64toU64_ssa(x)), expected)
1268 expectUint64(t, "F32toU8", uint64(F32toU8_ssa(y)), expected)
1269 expectUint64(t, "F32toU16", uint64(F32toU16_ssa(y)), expected)
1270 expectUint64(t, "F32toU32", uint64(F32toU32_ssa(y)), expected)
1271 expectUint64(t, "F32toU64", uint64(F32toU64_ssa(y)), expected)
1272 }
1273
1274 func floatingToIntegerConversionsTest(t *testing.T) {
1275 floatsToInts(t, 0.0, 0)
1276 floatsToInts(t, 0.5, 0)
1277 floatsToInts(t, 0.9, 0)
1278 floatsToInts(t, 1.0, 1)
1279 floatsToInts(t, 1.5, 1)
1280 floatsToInts(t, 127.0, 127)
1281 floatsToInts(t, -1.0, -1)
1282 floatsToInts(t, -128.0, -128)
1283
1284 floatsToUints(t, 0.0, 0)
1285 floatsToUints(t, 1.0, 1)
1286 floatsToUints(t, 255.0, 255)
1287
1288 for j := uint(0); j < 24; j++ {
1289
1290
1291 v := int64(1<<62) | int64(1<<(62-j))
1292 w := uint64(v)
1293 f := float32(v)
1294 d := float64(v)
1295 expectUint64(t, "2**62...", F32toU64_ssa(f), w)
1296 expectUint64(t, "2**62...", F64toU64_ssa(d), w)
1297 expectInt64(t, "2**62...", F32toI64_ssa(f), v)
1298 expectInt64(t, "2**62...", F64toI64_ssa(d), v)
1299 expectInt64(t, "2**62...", F32toI64_ssa(-f), -v)
1300 expectInt64(t, "2**62...", F64toI64_ssa(-d), -v)
1301 w += w
1302 f += f
1303 d += d
1304 expectUint64(t, "2**63...", F32toU64_ssa(f), w)
1305 expectUint64(t, "2**63...", F64toU64_ssa(d), w)
1306 }
1307
1308 for j := uint(0); j < 16; j++ {
1309
1310
1311 v := int32(1<<30) | int32(1<<(30-j))
1312 w := uint32(v)
1313 f := float32(v)
1314 d := float64(v)
1315 expectUint32(t, "2**30...", F32toU32_ssa(f), w)
1316 expectUint32(t, "2**30...", F64toU32_ssa(d), w)
1317 expectInt32(t, "2**30...", F32toI32_ssa(f), v)
1318 expectInt32(t, "2**30...", F64toI32_ssa(d), v)
1319 expectInt32(t, "2**30...", F32toI32_ssa(-f), -v)
1320 expectInt32(t, "2**30...", F64toI32_ssa(-d), -v)
1321 w += w
1322 f += f
1323 d += d
1324 expectUint32(t, "2**31...", F32toU32_ssa(f), w)
1325 expectUint32(t, "2**31...", F64toU32_ssa(d), w)
1326 }
1327
1328 for j := uint(0); j < 15; j++ {
1329
1330
1331 v := int16(1<<14) | int16(1<<(14-j))
1332 w := uint16(v)
1333 f := float32(v)
1334 d := float64(v)
1335 expectUint16(t, "2**14...", F32toU16_ssa(f), w)
1336 expectUint16(t, "2**14...", F64toU16_ssa(d), w)
1337 expectInt16(t, "2**14...", F32toI16_ssa(f), v)
1338 expectInt16(t, "2**14...", F64toI16_ssa(d), v)
1339 expectInt16(t, "2**14...", F32toI16_ssa(-f), -v)
1340 expectInt16(t, "2**14...", F64toI16_ssa(-d), -v)
1341 w += w
1342 f += f
1343 d += d
1344 expectUint16(t, "2**15...", F32toU16_ssa(f), w)
1345 expectUint16(t, "2**15...", F64toU16_ssa(d), w)
1346 }
1347
1348 expectInt32(t, "-2147483648", F32toI32_ssa(-2147483648), -2147483648)
1349
1350 expectInt32(t, "-2147483648", F64toI32_ssa(-2147483648), -2147483648)
1351 expectInt32(t, "-2147483647", F64toI32_ssa(-2147483647), -2147483647)
1352 expectUint32(t, "4294967295", F64toU32_ssa(4294967295), 4294967295)
1353
1354 expectInt16(t, "-32768", F64toI16_ssa(-32768), -32768)
1355 expectInt16(t, "-32768", F32toI16_ssa(-32768), -32768)
1356
1357
1358 expectInt16(t, "32767", F64toI16_ssa(32767), 32767)
1359 expectInt16(t, "32767", F32toI16_ssa(32767), 32767)
1360 expectUint16(t, "32767", F64toU16_ssa(32767), 32767)
1361 expectUint16(t, "32767", F32toU16_ssa(32767), 32767)
1362 expectUint16(t, "65535", F64toU16_ssa(65535), 65535)
1363 expectUint16(t, "65535", F32toU16_ssa(65535), 65535)
1364 }
1365
1366 func fail64(s string, f func(a, b float64) float64, a, b, e float64) {
1367 d := f(a, b)
1368 if d != e {
1369 fmt.Printf("For (float64) %v %v %v, expected %v, got %v\n", a, s, b, e, d)
1370 }
1371 }
1372
1373 func fail64bool(s string, f func(a, b float64) bool, a, b float64, e bool) {
1374 d := f(a, b)
1375 if d != e {
1376 fmt.Printf("For (float64) %v %v %v, expected %v, got %v\n", a, s, b, e, d)
1377 }
1378 }
1379
1380 func fail32(s string, f func(a, b float32) float32, a, b, e float32) {
1381 d := f(a, b)
1382 if d != e {
1383 fmt.Printf("For (float32) %v %v %v, expected %v, got %v\n", a, s, b, e, d)
1384 }
1385 }
1386
1387 func fail32bool(s string, f func(a, b float32) bool, a, b float32, e bool) {
1388 d := f(a, b)
1389 if d != e {
1390 fmt.Printf("For (float32) %v %v %v, expected %v, got %v\n", a, s, b, e, d)
1391 }
1392 }
1393
1394 func expect64(t *testing.T, s string, x, expected float64) {
1395 if x != expected {
1396 println("F64 Expected", expected, "for", s, ", got", x)
1397 }
1398 }
1399
1400 func expect32(t *testing.T, s string, x, expected float32) {
1401 if x != expected {
1402 println("F32 Expected", expected, "for", s, ", got", x)
1403 }
1404 }
1405
1406 func expectUint64(t *testing.T, s string, x, expected uint64) {
1407 if x != expected {
1408 fmt.Printf("U64 Expected 0x%016x for %s, got 0x%016x\n", expected, s, x)
1409 }
1410 }
1411
1412 func expectInt64(t *testing.T, s string, x, expected int64) {
1413 if x != expected {
1414 fmt.Printf("%s: Expected 0x%016x, got 0x%016x\n", s, expected, x)
1415 }
1416 }
1417
1418 func expectUint32(t *testing.T, s string, x, expected uint32) {
1419 if x != expected {
1420 fmt.Printf("U32 %s: Expected 0x%08x, got 0x%08x\n", s, expected, x)
1421 }
1422 }
1423
1424 func expectInt32(t *testing.T, s string, x, expected int32) {
1425 if x != expected {
1426 fmt.Printf("I32 %s: Expected 0x%08x, got 0x%08x\n", s, expected, x)
1427 }
1428 }
1429
1430 func expectUint16(t *testing.T, s string, x, expected uint16) {
1431 if x != expected {
1432 fmt.Printf("U16 %s: Expected 0x%04x, got 0x%04x\n", s, expected, x)
1433 }
1434 }
1435
1436 func expectInt16(t *testing.T, s string, x, expected int16) {
1437 if x != expected {
1438 fmt.Printf("I16 %s: Expected 0x%04x, got 0x%04x\n", s, expected, x)
1439 }
1440 }
1441
1442 func expectAll64(t *testing.T, s string, expected, a, b, c, d, e, f, g, h, i float64) {
1443 expect64(t, s+":a", a, expected)
1444 expect64(t, s+":b", b, expected)
1445 expect64(t, s+":c", c, expected)
1446 expect64(t, s+":d", d, expected)
1447 expect64(t, s+":e", e, expected)
1448 expect64(t, s+":f", f, expected)
1449 expect64(t, s+":g", g, expected)
1450 }
1451
1452 func expectAll32(t *testing.T, s string, expected, a, b, c, d, e, f, g, h, i float32) {
1453 expect32(t, s+":a", a, expected)
1454 expect32(t, s+":b", b, expected)
1455 expect32(t, s+":c", c, expected)
1456 expect32(t, s+":d", d, expected)
1457 expect32(t, s+":e", e, expected)
1458 expect32(t, s+":f", f, expected)
1459 expect32(t, s+":g", g, expected)
1460 }
1461
1462 var ev64 [2]float64 = [2]float64{42.0, 17.0}
1463 var ev32 [2]float32 = [2]float32{42.0, 17.0}
1464
1465 func cmpOpTest(t *testing.T,
1466 s string,
1467 f func(a, b float64) bool,
1468 g func(a, b float64) float64,
1469 ff func(a, b float32) bool,
1470 gg func(a, b float32) float32,
1471 zero, one, inf, nan float64, result uint) {
1472 fail64bool(s, f, zero, zero, result>>16&1 == 1)
1473 fail64bool(s, f, zero, one, result>>12&1 == 1)
1474 fail64bool(s, f, zero, inf, result>>8&1 == 1)
1475 fail64bool(s, f, zero, nan, result>>4&1 == 1)
1476 fail64bool(s, f, nan, nan, result&1 == 1)
1477
1478 fail64(s, g, zero, zero, ev64[result>>16&1])
1479 fail64(s, g, zero, one, ev64[result>>12&1])
1480 fail64(s, g, zero, inf, ev64[result>>8&1])
1481 fail64(s, g, zero, nan, ev64[result>>4&1])
1482 fail64(s, g, nan, nan, ev64[result>>0&1])
1483
1484 {
1485 zero := float32(zero)
1486 one := float32(one)
1487 inf := float32(inf)
1488 nan := float32(nan)
1489 fail32bool(s, ff, zero, zero, (result>>16)&1 == 1)
1490 fail32bool(s, ff, zero, one, (result>>12)&1 == 1)
1491 fail32bool(s, ff, zero, inf, (result>>8)&1 == 1)
1492 fail32bool(s, ff, zero, nan, (result>>4)&1 == 1)
1493 fail32bool(s, ff, nan, nan, result&1 == 1)
1494
1495 fail32(s, gg, zero, zero, ev32[(result>>16)&1])
1496 fail32(s, gg, zero, one, ev32[(result>>12)&1])
1497 fail32(s, gg, zero, inf, ev32[(result>>8)&1])
1498 fail32(s, gg, zero, nan, ev32[(result>>4)&1])
1499 fail32(s, gg, nan, nan, ev32[(result>>0)&1])
1500 }
1501 }
1502
1503 func expectCx128(t *testing.T, s string, x, expected complex128) {
1504 if x != expected {
1505 t.Errorf("Cx 128 Expected %f for %s, got %f", expected, s, x)
1506 }
1507 }
1508
1509 func expectCx64(t *testing.T, s string, x, expected complex64) {
1510 if x != expected {
1511 t.Errorf("Cx 64 Expected %f for %s, got %f", expected, s, x)
1512 }
1513 }
1514
1515
1516 func cx128sum_ssa(a, b complex128) complex128 {
1517 return a + b
1518 }
1519
1520
1521 func cx128diff_ssa(a, b complex128) complex128 {
1522 return a - b
1523 }
1524
1525
1526 func cx128prod_ssa(a, b complex128) complex128 {
1527 return a * b
1528 }
1529
1530
1531 func cx128quot_ssa(a, b complex128) complex128 {
1532 return a / b
1533 }
1534
1535
1536 func cx128neg_ssa(a complex128) complex128 {
1537 return -a
1538 }
1539
1540
1541 func cx128real_ssa(a complex128) float64 {
1542 return real(a)
1543 }
1544
1545
1546 func cx128imag_ssa(a complex128) float64 {
1547 return imag(a)
1548 }
1549
1550
1551 func cx128cnst_ssa(a complex128) complex128 {
1552 b := 2 + 3i
1553 return a * b
1554 }
1555
1556
1557 func cx64sum_ssa(a, b complex64) complex64 {
1558 return a + b
1559 }
1560
1561
1562 func cx64diff_ssa(a, b complex64) complex64 {
1563 return a - b
1564 }
1565
1566
1567 func cx64prod_ssa(a, b complex64) complex64 {
1568 return a * b
1569 }
1570
1571
1572 func cx64quot_ssa(a, b complex64) complex64 {
1573 return a / b
1574 }
1575
1576
1577 func cx64neg_ssa(a complex64) complex64 {
1578 return -a
1579 }
1580
1581
1582 func cx64real_ssa(a complex64) float32 {
1583 return real(a)
1584 }
1585
1586
1587 func cx64imag_ssa(a complex64) float32 {
1588 return imag(a)
1589 }
1590
1591
1592 func cx128eq_ssa(a, b complex128) bool {
1593 return a == b
1594 }
1595
1596
1597 func cx128ne_ssa(a, b complex128) bool {
1598 return a != b
1599 }
1600
1601
1602 func cx64eq_ssa(a, b complex64) bool {
1603 return a == b
1604 }
1605
1606
1607 func cx64ne_ssa(a, b complex64) bool {
1608 return a != b
1609 }
1610
1611 func expectTrue(t *testing.T, s string, b bool) {
1612 if !b {
1613 t.Errorf("expected true for %s, got false", s)
1614 }
1615 }
1616 func expectFalse(t *testing.T, s string, b bool) {
1617 if b {
1618 t.Errorf("expected false for %s, got true", s)
1619 }
1620 }
1621
1622 func complexTest128(t *testing.T) {
1623 var a complex128 = 1 + 2i
1624 var b complex128 = 3 + 6i
1625 sum := cx128sum_ssa(b, a)
1626 diff := cx128diff_ssa(b, a)
1627 prod := cx128prod_ssa(b, a)
1628 quot := cx128quot_ssa(b, a)
1629 neg := cx128neg_ssa(a)
1630 r := cx128real_ssa(a)
1631 i := cx128imag_ssa(a)
1632 cnst := cx128cnst_ssa(a)
1633 c1 := cx128eq_ssa(a, a)
1634 c2 := cx128eq_ssa(a, b)
1635 c3 := cx128ne_ssa(a, a)
1636 c4 := cx128ne_ssa(a, b)
1637
1638 expectCx128(t, "sum", sum, 4+8i)
1639 expectCx128(t, "diff", diff, 2+4i)
1640 expectCx128(t, "prod", prod, -9+12i)
1641 expectCx128(t, "quot", quot, 3+0i)
1642 expectCx128(t, "neg", neg, -1-2i)
1643 expect64(t, "real", r, 1)
1644 expect64(t, "imag", i, 2)
1645 expectCx128(t, "cnst", cnst, -4+7i)
1646 expectTrue(t, fmt.Sprintf("%v==%v", a, a), c1)
1647 expectFalse(t, fmt.Sprintf("%v==%v", a, b), c2)
1648 expectFalse(t, fmt.Sprintf("%v!=%v", a, a), c3)
1649 expectTrue(t, fmt.Sprintf("%v!=%v", a, b), c4)
1650 }
1651
1652 func complexTest64(t *testing.T) {
1653 var a complex64 = 1 + 2i
1654 var b complex64 = 3 + 6i
1655 sum := cx64sum_ssa(b, a)
1656 diff := cx64diff_ssa(b, a)
1657 prod := cx64prod_ssa(b, a)
1658 quot := cx64quot_ssa(b, a)
1659 neg := cx64neg_ssa(a)
1660 r := cx64real_ssa(a)
1661 i := cx64imag_ssa(a)
1662 c1 := cx64eq_ssa(a, a)
1663 c2 := cx64eq_ssa(a, b)
1664 c3 := cx64ne_ssa(a, a)
1665 c4 := cx64ne_ssa(a, b)
1666
1667 expectCx64(t, "sum", sum, 4+8i)
1668 expectCx64(t, "diff", diff, 2+4i)
1669 expectCx64(t, "prod", prod, -9+12i)
1670 expectCx64(t, "quot", quot, 3+0i)
1671 expectCx64(t, "neg", neg, -1-2i)
1672 expect32(t, "real", r, 1)
1673 expect32(t, "imag", i, 2)
1674 expectTrue(t, fmt.Sprintf("%v==%v", a, a), c1)
1675 expectFalse(t, fmt.Sprintf("%v==%v", a, b), c2)
1676 expectFalse(t, fmt.Sprintf("%v!=%v", a, a), c3)
1677 expectTrue(t, fmt.Sprintf("%v!=%v", a, b), c4)
1678 }
1679
1680
1681 func TestFP(t *testing.T) {
1682 a := 3.0
1683 b := 4.0
1684
1685 c := float32(3.0)
1686 d := float32(4.0)
1687
1688 tiny := float32(1.5e-45)
1689 dtiny := float64(tiny)
1690
1691 fail64("+", add64_ssa, a, b, 7.0)
1692 fail64("*", mul64_ssa, a, b, 12.0)
1693 fail64("-", sub64_ssa, a, b, -1.0)
1694 fail64("/", div64_ssa, a, b, 0.75)
1695 fail64("neg", neg64_ssa, a, b, -7)
1696
1697 fail32("+", add32_ssa, c, d, 7.0)
1698 fail32("*", mul32_ssa, c, d, 12.0)
1699 fail32("-", sub32_ssa, c, d, -1.0)
1700 fail32("/", div32_ssa, c, d, 0.75)
1701 fail32("neg", neg32_ssa, c, d, -7)
1702
1703
1704 fail32("*", mul32_ssa, tiny, tiny, 0)
1705
1706
1707 fail64("*", mul64_ssa, dtiny, dtiny, 1.9636373861190906e-90)
1708
1709
1710
1711 aa, ab, ac, ad, ba, bb, bc, bd, ca, cb, cc, cd, da, db, dc, dd := manysub_ssa(1000.0, 100.0, 10.0, 1.0)
1712
1713 expect64(t, "aa", aa, 11.0)
1714 expect64(t, "ab", ab, 900.0)
1715 expect64(t, "ac", ac, 990.0)
1716 expect64(t, "ad", ad, 999.0)
1717
1718 expect64(t, "ba", ba, -900.0)
1719 expect64(t, "bb", bb, 22.0)
1720 expect64(t, "bc", bc, 90.0)
1721 expect64(t, "bd", bd, 99.0)
1722
1723 expect64(t, "ca", ca, -990.0)
1724 expect64(t, "cb", cb, -90.0)
1725 expect64(t, "cc", cc, 33.0)
1726 expect64(t, "cd", cd, 9.0)
1727
1728 expect64(t, "da", da, -999.0)
1729 expect64(t, "db", db, -99.0)
1730 expect64(t, "dc", dc, -9.0)
1731 expect64(t, "dd", dd, 44.0)
1732
1733 integer2floatConversions(t)
1734
1735 multiplyAdd(t)
1736
1737 var zero64 float64 = 0.0
1738 var one64 float64 = 1.0
1739 var inf64 float64 = 1.0 / zero64
1740 var nan64 float64 = sub64_ssa(inf64, inf64)
1741
1742 cmpOpTest(t, "!=", ne64_ssa, nebr64_ssa, ne32_ssa, nebr32_ssa, zero64, one64, inf64, nan64, 0x01111)
1743 cmpOpTest(t, "==", eq64_ssa, eqbr64_ssa, eq32_ssa, eqbr32_ssa, zero64, one64, inf64, nan64, 0x10000)
1744 cmpOpTest(t, "<=", le64_ssa, lebr64_ssa, le32_ssa, lebr32_ssa, zero64, one64, inf64, nan64, 0x11100)
1745 cmpOpTest(t, "<", lt64_ssa, ltbr64_ssa, lt32_ssa, ltbr32_ssa, zero64, one64, inf64, nan64, 0x01100)
1746 cmpOpTest(t, ">", gt64_ssa, gtbr64_ssa, gt32_ssa, gtbr32_ssa, zero64, one64, inf64, nan64, 0x00000)
1747 cmpOpTest(t, ">=", ge64_ssa, gebr64_ssa, ge32_ssa, gebr32_ssa, zero64, one64, inf64, nan64, 0x10000)
1748
1749 {
1750 lt, le, eq, ne, ge, gt := compares64_ssa(0.0, 1.0, inf64, nan64)
1751 expectUint64(t, "lt", lt, 0x0110001000000000)
1752 expectUint64(t, "le", le, 0x1110011000100000)
1753 expectUint64(t, "eq", eq, 0x1000010000100000)
1754 expectUint64(t, "ne", ne, 0x0111101111011111)
1755 expectUint64(t, "ge", ge, 0x1000110011100000)
1756 expectUint64(t, "gt", gt, 0x0000100011000000)
1757
1758
1759 }
1760 {
1761 lt, le, eq, ne, ge, gt := compares32_ssa(0.0, 1.0, float32(inf64), float32(nan64))
1762 expectUint64(t, "lt", lt, 0x0110001000000000)
1763 expectUint64(t, "le", le, 0x1110011000100000)
1764 expectUint64(t, "eq", eq, 0x1000010000100000)
1765 expectUint64(t, "ne", ne, 0x0111101111011111)
1766 expectUint64(t, "ge", ge, 0x1000110011100000)
1767 expectUint64(t, "gt", gt, 0x0000100011000000)
1768 }
1769
1770 floatingToIntegerConversionsTest(t)
1771 complexTest128(t)
1772 complexTest64(t)
1773 }
1774
View as plain text