13 unsigned long long ul[N];
17 #define FN1(from, to) \
18 __attribute__((noinline, noclone)) void \
22 for (i = 0; i < N; i++) \
25 #define FN(intt, fltt) FN1 (intt, fltt) FN1 (fltt, intt)
44 #define FLTTEST(min, max, intt) \
45 __attribute__((noinline, noclone)) void \
46 flttointtest##intt (void) \
49 volatile float fltmin, fltmax, vf, vf2; \
50 volatile double dblmin, dblmax, vd, vd2; \
55 vf2 = fltmin = min - 1.0f; \
56 for (vf = 1.0f; (fltmin = vf2 + vf) == vf2; vf = vf * 2.0f) \
59 vf2 = fltmax = max + 1.0f; \
60 for (vf = 1.0f; (fltmax = vf2 - vf) == vf2; vf = vf * 2.0f) \
66 vd2 = dblmin = min - 1.0; \
67 for (vd = 1.0; (dblmin = vd2 + vd) == vd2; vd = vd * 2.0) \
70 vd2 = dblmax = max + 1.0; \
71 for (vd = 1.0; (dblmax = vd2 - vd) == vd2; vd = vd * 2.0) \
73 for (i = 0; i < N; i++) \
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; \
83 f[i] = fltmax - N + 1 + i; \
84 if (f[i] < fltmin) f[i] = fltmin; \
85 if (f[i] > fltmax) f[i] = fltmax; \
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; \
93 d[i] = dblmax - N + 1 + i; \
94 if (d[i] < dblmin) d[i] = dblmin; \
95 if (d[i] > dblmax) d[i] = dblmax; \
98 for (i = 0; i < N; i++) \
99 if (intt[i] != (__typeof (intt[0])) f[i]) \
102 for (i = 0; i < N; i++) \
103 if (intt[i] != (__typeof (intt[0])) d[i]) \
105 for (i = 0; i < N; i++) \
107 unsigned long long r = rand (); \
108 r = (r << 21) ^ (unsigned) rand (); \
109 r = (r << 21) ^ (unsigned) rand (); \
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; \
119 for (i = 0; i < N; i++) \
120 if (intt[i] != (__typeof (intt[0])) f[i]) \
123 for (i = 0; i < N; i++) \
124 if (intt[i] != (__typeof (intt[0])) d[i]) \
128 __attribute__((noinline, noclone)) void \
129 inttoflttest##intt (void) \
133 volatile double vd; \
134 for (i = 0; i < N; i++) \
139 else if (i < 3 * N / 4) \
140 intt[i] = (max + min) / 2 - N * 8 + 16 * i; \
142 intt[i] = max - N + 1 + i; \
145 for (i = 0; i < N; i++) \
152 for (i = 0; i < N; i++) \
158 for (i = 0; i < N; i++) \
160 unsigned long long r = rand (); \
161 r = (r << 21) ^ (unsigned) rand (); \
162 r = (r << 21) ^ (unsigned) rand (); \
167 for (i = 0; i < N; i++) \
174 for (i = 0; i < N; i++) \
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)