]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fp-test.c
[Ada] Replace low-level membership tests with high-level routines
[thirdparty/gcc.git] / gcc / fp-test.c
CommitLineData
5870d23d 1/* fp-test.c - Check that all floating-point operations are available.
fbd26352 2 Copyright (C) 1995-2019 Free Software Foundation, Inc.
5870d23d 3 Contributed by Ronald F. Guilmette <rfg@monkeys.com>.
4
f12b58b3 5 This file is part of GCC.
5870d23d 6
f12b58b3 7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
8c4c00c1 9 the Free Software Foundation; either version 3, or (at your option)
a4110d9a 10 any later version.
5870d23d 11
f12b58b3 12 GCC is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
5870d23d 16
a4110d9a 17 You should have received a copy of the GNU General Public License
8c4c00c1 18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
5870d23d 20
21/* This is a trivial test program which may be useful to people who are
22 porting the GCC or G++ compilers to a new system. The intent here is
23 merely to check that all floating-point operations have been provided
24 by the port. (Note that I say ``provided'' rather than ``implemented''.)
25
26 To use this file, simply compile it (with GCC or G++) and then try to
27 link it in the normal way (also using GCC or G++ respectively). If
28 all of the floating -point operations (including conversions) have
29 been provided, then this file will link without incident. If however
30 one or more of the primitive floating-point operations have not been
31 properly provided, you will get link-time errors indicating which
32 floating-point operations are unavailable.
33
34 This file will typically be used when porting the GNU compilers to
35 some system which lacks floating-point hardware, and for which
36 software emulation routines (for FP ops) are needed in order to
37 complete the port. */
38
39#if 0
40#include <math.h>
41#endif
42
43extern double acos (double);
44extern double asin (double);
45extern double atan (double);
46extern double atan2 (double, double);
47extern double cos (double);
48extern double sin (double);
49extern double tan (double);
50extern double cosh (double);
51extern double sinh (double);
52extern double tanh (double);
53extern double exp (double);
54extern double frexp (double, int *);
55extern double ldexp (double, int);
56extern double log (double);
57extern double log10 (double);
58extern double modf (double, double *);
59extern double pow (double, double);
60extern double sqrt (double);
61extern double ceil (double);
62extern double fabs (double);
63extern double floor (double);
64extern double fmod (double, double);
65
66int i1, i2 = 2;
67
68volatile signed char sc;
69volatile unsigned char uc;
70
71volatile signed short ss;
72volatile unsigned short us;
73
74volatile signed int si;
75volatile unsigned int ui;
76
77volatile signed long sl;
78volatile unsigned long ul;
79
80volatile float f1 = 1.0, f2 = 1.0, f3 = 1.0;
81volatile double d1 = 1.0, d2 = 1.0, d3 = 1.0;
82volatile long double D1 = 1.0, D2 = 1.0, D3 = 1.0;
83
84int
eeba438a 85main (void)
5870d23d 86{
87 /* TYPE: float */
88
89 f1 = -f2;
90 f1 = f2 + f3;
91 f1 = f2 - f3;
92 f1 = f2 * f3;
93 f1 = f2 / f3;
94 f1 += f2;
95 f1 -= f2;
96 f1 *= f2;
97 f1 /= f2;
98
99 si = f1 == f2;
100 si = f1 != f2;
101 si = f1 > f2;
102 si = f1 < f2;
103 si = f1 >= f2;
104 si = f1 <= f2;
105
a4110d9a 106 si = __builtin_isgreater (f1, f2);
107 si = __builtin_isgreaterequal (f1, f2);
108 si = __builtin_isless (f1, f2);
109 si = __builtin_islessequal (f1, f2);
110 si = __builtin_islessgreater (f1, f2);
111 si = __builtin_isunordered (f1, f2);
112
5870d23d 113 sc = f1;
114 uc = f1;
115 ss = f1;
116 us = f1;
117 si = f1;
118 ui = f1;
119 sl = f1;
120 ul = f1;
121 d1 = f1;
122 D1 = f1;
123
124 f1 = sc;
125 f1 = uc;
126 f1 = ss;
127 f1 = us;
128 f1 = si;
129 f1 = ui;
130 f1 = sl;
131 f1 = ul;
132 f1 = d1;
133 f1 = D1;
134
135 d1 = -d2;
136 d1 = d2 + d3;
137 d1 = d2 - d3;
138 d1 = d2 * d3;
139 d1 = d2 / d3;
140 d1 += d2;
141 d1 -= d2;
142 d1 *= d2;
143 d1 /= d2;
144
145 si = d1 == d2;
146 si = d1 != d2;
147 si = d1 > d2;
148 si = d1 < d2;
149 si = d1 >= d2;
150 si = d1 <= d2;
151
a4110d9a 152 si = __builtin_isgreater (d1, d2);
153 si = __builtin_isgreaterequal (d1, d2);
154 si = __builtin_isless (d1, d2);
155 si = __builtin_islessequal (d1, d2);
156 si = __builtin_islessgreater (d1, d2);
157 si = __builtin_isunordered (d1, d2);
158
5870d23d 159 sc = d1;
160 uc = d1;
161 ss = d1;
162 us = d1;
163 si = d1;
164 ui = d1;
165 sl = d1;
166 ul = d1;
167 f1 = d1;
168 D1 = d1;
169
170 d1 = sc;
171 d1 = uc;
172 d1 = ss;
173 d1 = us;
174 d1 = si;
175 d1 = ui;
176 d1 = sl;
177 d1 = ul;
178 d1 = f1;
179 d1 = D1;
180
181 D1 = -D2;
182 D1 = D2 + D3;
183 D1 = D2 - D3;
184 D1 = D2 * D3;
185 D1 = D2 / D3;
186 D1 += D2;
187 D1 -= D2;
188 D1 *= D2;
189 D1 /= D2;
190
191 si = D1 == D2;
192 si = D1 != D2;
193 si = D1 > D2;
194 si = D1 < D2;
195 si = D1 >= D2;
196 si = D1 <= D2;
197
a4110d9a 198 si = __builtin_isgreater (D1, D2);
199 si = __builtin_isgreaterequal (D1, D2);
200 si = __builtin_isless (D1, D2);
201 si = __builtin_islessequal (D1, D2);
202 si = __builtin_islessgreater (D1, D2);
203 si = __builtin_isunordered (D1, D2);
204
5870d23d 205 sc = D1;
206 uc = D1;
207 ss = D1;
208 us = D1;
209 si = D1;
210 ui = D1;
211 sl = D1;
212 ul = D1;
213 f1 = D1;
214 d1 = D1;
215
216 D1 = sc;
217 D1 = uc;
218 D1 = ss;
219 D1 = us;
220 D1 = si;
221 D1 = ui;
222 D1 = sl;
223 D1 = ul;
224 D1 = f1;
225 D1 = d1;
226
227 d1 = acos (d2);
228 d1 = asin (d2);
229 d1 = atan (d2);
230 d1 = atan2 (d2, d3);
231 d1 = cos (d2);
232 d1 = sin (d2);
233 d1 = tan (d2);
234 d1 = cosh (d2);
235 d1 = sinh (d2);
236 d1 = tanh (d2);
237 d1 = exp (d2);
238 d1 = frexp (d2, &i1);
239 d1 = ldexp (d2, i2);
240 d1 = log (d2);
241 d1 = log10 (d2);
242 d1 = modf (d2, &d3);
243 d1 = pow (d2, d3);
244 d1 = sqrt (d2);
245 d1 = ceil (d2);
246 d1 = fabs (d2);
247 d1 = floor (d2);
248 d1 = fmod (d2, d3);
249
250 return 0;
251}