OSDN Git Service

Revert delta 190174
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / torture / vec-cvt-1.c
1 /* { dg-do run } */
2
3 #include <stdlib.h>
4
5 #define N 1024
6 signed char sc[N];
7 short ss[N];
8 int si[N];
9 long long sl[N];
10 unsigned char uc[N];
11 unsigned short us[N];
12 unsigned int ui[N];
13 unsigned long long ul[N];
14 float f[N];
15 double d[N];
16
17 #define FN1(from, to) \
18 __attribute__((noinline, noclone)) void         \
19 from##2##to (void)                              \
20 {                                               \
21   int i;                                        \
22   for (i = 0; i < N; i++)                       \
23     to[i] = from[i];                            \
24 }
25 #define FN(intt, fltt) FN1 (intt, fltt) FN1 (fltt, intt)
26
27 FN (sc, f)
28 FN (ss, f)
29 FN (si, f)
30 FN (sl, f)
31 FN (uc, f)
32 FN (us, f)
33 FN (ui, f)
34 FN (ul, f)
35 FN (sc, d)
36 FN (ss, d)
37 FN (si, d)
38 FN (sl, d)
39 FN (uc, d)
40 FN (us, d)
41 FN (ui, d)
42 FN (ul, d)
43
44 #define FLTTEST(min, max, intt) \
45 __attribute__((noinline, noclone)) void                                 \
46 flttointtest##intt (void)                                               \
47 {                                                                       \
48   int i;                                                                \
49   volatile float fltmin, fltmax, vf, vf2;                               \
50   volatile double dblmin, dblmax, vd, vd2;                              \
51   if (min == 0)                                                         \
52     fltmin = 0.0f;                                                      \
53   else                                                                  \
54     {                                                                   \
55       vf2 = fltmin = min - 1.0f;                                        \
56       for (vf = 1.0f; (fltmin = vf2 + vf) == vf2; vf = vf * 2.0f)       \
57         ;                                                               \
58     }                                                                   \
59   vf2 = fltmax = max + 1.0f;                                            \
60   for (vf = 1.0f; (fltmax = vf2 - vf) == vf2; vf = vf * 2.0f)           \
61     ;                                                                   \
62   if (min == 0)                                                         \
63     dblmin = 0.0;                                                       \
64   else                                                                  \
65     {                                                                   \
66       vd2 = dblmin = min - 1.0;                                         \
67       for (vd = 1.0; (dblmin = vd2 + vd) == vd2; vd = vd * 2.0)         \
68         ;                                                               \
69     }                                                                   \
70   vd2 = dblmax = max + 1.0;                                             \
71   for (vd = 1.0; (dblmax = vd2 - vd) == vd2; vd = vd * 2.0)             \
72     ;                                                                   \
73   for (i = 0; i < N; i++)                                               \
74     {                                                                   \
75       asm ("");                                                         \
76       if (i == 0)                                                       \
77         f[i] = fltmin;                                                  \
78       else if (i < N / 4)                                               \
79         f[i] = fltmin + i + 0.25f;                                      \
80       else if (i < 3 * N / 4)                                           \
81         f[i] = (fltmax + fltmin) / 2.0 - N * 8 + 16.0f * i;             \
82       else                                                              \
83         f[i] = fltmax - N + 1 + i;                                      \
84       if (f[i] < fltmin) f[i] = fltmin;                                 \
85       if (f[i] > fltmax) f[i] = fltmax;                                 \
86       if (i == 0)                                                       \
87         d[i] = dblmin;                                                  \
88       else if (i < N / 4)                                               \
89         d[i] = dblmin + i + 0.25f;                                      \
90       else if (i < 3 * N / 4)                                           \
91         d[i] = (dblmax + dblmin) / 2.0 - N * 8 + 16.0f * i;             \
92       else                                                              \
93         d[i] = dblmax - N + 1 + i;                                      \
94       if (d[i] < dblmin) d[i] = dblmin;                                 \
95       if (d[i] > dblmax) d[i] = dblmax;                                 \
96     }                                                                   \
97   f2##intt ();                                                          \
98   for (i = 0; i < N; i++)                                               \
99     if (intt[i] != (__typeof (intt[0])) f[i])                           \
100       abort ();                                                         \
101   d2##intt ();                                                          \
102   for (i = 0; i < N; i++)                                               \
103     if (intt[i] != (__typeof (intt[0])) d[i])                           \
104       abort ();                                                         \
105   for (i = 0; i < N; i++)                                               \
106     {                                                                   \
107       unsigned long long r = rand ();                                   \
108       r = (r << 21) ^ (unsigned) rand ();                               \
109       r = (r << 21) ^ (unsigned) rand ();                               \
110       asm ("");                                                         \
111       f[i] = (r >> 59) / 32.0f + (__typeof (intt[0])) r;                \
112       if (f[i] < fltmin) f[i] = fltmin;                                 \
113       if (f[i] > fltmax) f[i] = fltmax;                                 \
114       d[i] = (r >> 59) / 32.0 + (__typeof (intt[0])) r;                 \
115       if (d[i] < dblmin) f[i] = dblmin;                                 \
116       if (d[i] > dblmax) f[i] = dblmax;                                 \
117     }                                                                   \
118   f2##intt ();                                                          \
119   for (i = 0; i < N; i++)                                               \
120     if (intt[i] != (__typeof (intt[0])) f[i])                           \
121       abort ();                                                         \
122   d2##intt ();                                                          \
123   for (i = 0; i < N; i++)                                               \
124     if (intt[i] != (__typeof (intt[0])) d[i])                           \
125       abort ();                                                         \
126 }                                                                       \
127                                                                         \
128 __attribute__((noinline, noclone)) void                                 \
129 inttoflttest##intt (void)                                               \
130 {                                                                       \
131   int i;                                                                \
132   volatile float vf;                                                    \
133   volatile double vd;                                                   \
134   for (i = 0; i < N; i++)                                               \
135     {                                                                   \
136       asm ("");                                                         \
137       if (i < N / 4)                                                    \
138         intt[i] = min + i;                                              \
139       else if (i < 3 * N / 4)                                           \
140         intt[i] = (max + min) / 2 - N * 8 + 16 * i;                     \
141       else                                                              \
142         intt[i] = max - N + 1 + i;                                      \
143     }                                                                   \
144   intt##2f ();                                                          \
145   for (i = 0; i < N; i++)                                               \
146     {                                                                   \
147       vf = intt[i];                                                     \
148       if (f[i] != vf)                                                   \
149         abort ();                                                       \
150     }                                                                   \
151   intt##2d ();                                                          \
152   for (i = 0; i < N; i++)                                               \
153     {                                                                   \
154       vd = intt[i];                                                     \
155       if (d[i] != vd)                                                   \
156         abort ();                                                       \
157     }                                                                   \
158   for (i = 0; i < N; i++)                                               \
159     {                                                                   \
160       unsigned long long r = rand ();                                   \
161       r = (r << 21) ^ (unsigned) rand ();                               \
162       r = (r << 21) ^ (unsigned) rand ();                               \
163       asm ("");                                                         \
164       intt[i] = r;                                                      \
165     }                                                                   \
166   intt##2f ();                                                          \
167   for (i = 0; i < N; i++)                                               \
168     {                                                                   \
169       vf = intt[i];                                                     \
170       if (f[i] != vf)                                                   \
171         abort ();                                                       \
172     }                                                                   \
173   intt##2d ();                                                          \
174   for (i = 0; i < N; i++)                                               \
175     {                                                                   \
176       vd = intt[i];                                                     \
177       if (d[i] != vd)                                                   \
178         abort ();                                                       \
179     }                                                                   \
180 }
181
182 FLTTEST (- __SCHAR_MAX__ - 1, __SCHAR_MAX__, sc)
183 FLTTEST (- __SHRT_MAX__ - 1, __SHRT_MAX__, ss)
184 FLTTEST (- __INT_MAX__ - 1, __INT_MAX__, si)
185 FLTTEST (- __LONG_LONG_MAX__ - 1LL, __LONG_LONG_MAX__, sl)
186 FLTTEST (0, 2U * __SCHAR_MAX__ + 1, uc)
187 FLTTEST (0, 2U * __SHRT_MAX__ + 1, us)
188 FLTTEST (0, 2U * __INT_MAX__ + 1, ui)
189 FLTTEST (0, 2ULL * __LONG_LONG_MAX__ + 1, ul)
190
191 int
192 main ()
193 {
194   flttointtestsc ();
195   flttointtestss ();
196   flttointtestsi ();
197   flttointtestsl ();
198   flttointtestuc ();
199   flttointtestus ();
200   flttointtestui ();
201   flttointtestul ();
202   inttoflttestsc ();
203   inttoflttestss ();
204   inttoflttestsi ();
205   inttoflttestsl ();
206   inttoflttestuc ();
207   inttoflttestus ();
208   inttoflttestui ();
209   inttoflttestul ();
210   return 0;
211 }