simplify 8*x as well as x*8
[qbe.git] / test / fpcnv.ssa
blob3fe078f796fddd5493ad67f66c4ca8a47481ce45
1 # floating point casts and conversions
3 export
4 function s $fneg(s %f) {
5 @fneg
6         %b0 =w cast %f
7         %b1 =w xor 2147483648, %b0
8         %rs =s cast %b1
9         ret %rs
12 export
13 function d $ftrunc(d %f) {
14 @ftrunc
15         %l0 =w dtosi %f
16         %rt =d swtof %l0
17         ret %rt
20 export
21 function s $wtos(w %w) {
22 @start
23         %rt =s uwtof %w
24         ret %rt
26 export
27 function d $wtod(w %w) {
28 @start
29         %rt =d uwtof %w
30         ret %rt
33 export
34 function s $ltos(l %l) {
35 @start
36         %rt =s ultof %l
37         ret %rt
39 export
40 function d $ltod(l %l) {
41 @start
42         %rt =d ultof %l
43         ret %rt
46 export
47 function w $stow(s %f) {
48 @start
49         %rt =w stoui %f
50         ret %rt
52 export
53 function w $dtow(d %f) {
54 @start
55         %rt =w dtoui %f
56         ret %rt
59 export
60 function l $stol(s %f) {
61 @start
62         %rt =l stoui %f
63         ret %rt
65 export
66 function l $dtol(d %f) {
67 @start
68         %rt =l dtoui %f
69         ret %rt
74 # >>> driver
75 # #include <float.h>
76 # #include <limits.h>
77
78 # extern float fneg(float);
79 # extern double ftrunc(double);
80
81 # extern float wtos(unsigned int);
82 # extern double wtod(unsigned int);
83 # extern float ltos(long long unsigned int);
84 # extern double ltod(long long unsigned int);
85
86 # extern unsigned int stow(float);
87 # extern unsigned int dtow(double);
88 # extern unsigned long long stol(float);
89 # extern unsigned long long dtol(double);
90
91 # unsigned long long iin[] = { 0, 1, 16, 234987, 427386245, 0x7fff0000,
92 #       0xffff0000, 23602938196141, 72259248152500195, 9589010795705032704ull,
93 #       0xdcf5fbe299d0148aull, 0xffffffff00000000ull, -1 };
94
95 # double fin[] = { 0.17346516197824458, 442.0760005466251, 4342856.879893436,
96 #       4294967295.0, 98547543006.49626, 236003043787688.3, 9.499222733527032e+18,
97 #       1.1936266170755652e+19 };
98
99 # int main() {
100 #       int i;
102 #       if (fneg(1.23f) != -1.23f)  return 1;
103 #       if (ftrunc(3.1415) != 3.0)  return 2;
104 #       if (ftrunc(-1.234) != -1.0) return 3;
106 #       for (i=0; i<sizeof(iin)/sizeof(iin[0]); i++) {
107 #               if (wtos(iin[i]) != (float) (unsigned int)iin[i])
108 #                       return 4;
109 #               if (wtod(iin[i]) != (double)(unsigned int)iin[i])
110 #                       return 5;
111 #               if (ltos(iin[i]) != (float) iin[i])
112 #                       return 6;
113 #               if (ltod(iin[i]) != (double)iin[i])
114 #                       return 7;
115 #       }
116 #       for (i=0; i<sizeof(fin)/sizeof(fin[0]); i++) {
117 #               if (fin[i] >= 1LL << DBL_MANT_DIG)
118 #                       break;
119 #               if (dtol(fin[i]) != (unsigned long long)fin[i])
120 #                       return 8;
121 #               if((unsigned long long)fin[i] > UINT_MAX)
122 #                       continue;
123 #               if (dtow(fin[i]) != (unsigned int)fin[i])
124 #                       return 9;
125 #               if (fin[i] >= 1LL << FLT_MANT_DIG)
126 #                       continue;
127 #               if (stol((float)fin[i]) != (unsigned long long)(float)fin[i])
128 #                       return 10;
129 #               if (stow((float)fin[i]) != (unsigned int)(float)fin[i])
130 #                       return 11;
131 #       }
132 #       return 0;
133 # }
134 # <<<