testFunction.c revision 1.6 1 1.6 martin /* $NetBSD: testFunction.c,v 1.6 2008/04/28 20:23:04 martin Exp $ */
2 1.3 ross
3 1.3 ross /* This is a derivative work. */
4 1.3 ross
5 1.3 ross /*-
6 1.3 ross * Copyright (c) 2001 The NetBSD Foundation, Inc.
7 1.3 ross * All rights reserved.
8 1.3 ross *
9 1.3 ross * This code is derived from software contributed to The NetBSD Foundation
10 1.3 ross * by Ross Harvey.
11 1.3 ross *
12 1.3 ross * Redistribution and use in source and binary forms, with or without
13 1.3 ross * modification, are permitted provided that the following conditions
14 1.3 ross * are met:
15 1.3 ross * 1. Redistributions of source code must retain the above copyright
16 1.3 ross * notice, this list of conditions and the following disclaimer.
17 1.3 ross * 2. Redistributions in binary form must reproduce the above copyright
18 1.3 ross * notice, this list of conditions and the following disclaimer in the
19 1.3 ross * documentation and/or other materials provided with the distribution.
20 1.3 ross *
21 1.3 ross * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
22 1.3 ross * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23 1.3 ross * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 1.3 ross * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
25 1.3 ross * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 1.3 ross * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 1.3 ross * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 1.3 ross * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 1.3 ross * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 1.3 ross * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 1.3 ross * POSSIBILITY OF SUCH DAMAGE.
32 1.3 ross */
33 1.1 ross
34 1.1 ross /*
35 1.1 ross ===============================================================================
36 1.1 ross
37 1.1 ross This C source file is part of TestFloat, Release 2a, a package of programs
38 1.1 ross for testing the correctness of floating-point arithmetic complying to the
39 1.1 ross IEC/IEEE Standard for Floating-Point.
40 1.1 ross
41 1.1 ross Written by John R. Hauser. More information is available through the Web
42 1.1 ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
43 1.1 ross
44 1.1 ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
45 1.1 ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
46 1.1 ross TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
47 1.1 ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
48 1.1 ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
49 1.1 ross
50 1.1 ross Derivative works are acceptable, even for commercial purposes, so long as
51 1.1 ross (1) they include prominent notice that the work is derivative, and (2) they
52 1.1 ross include prominent notice akin to these four paragraphs for those parts of
53 1.1 ross this code that are retained.
54 1.1 ross
55 1.1 ross ===============================================================================
56 1.1 ross */
57 1.1 ross
58 1.1 ross #include "milieu.h"
59 1.1 ross #include "softfloat.h"
60 1.1 ross #include "testCases.h"
61 1.1 ross #include "testLoops.h"
62 1.1 ross #include "systmodes.h"
63 1.1 ross #include "systflags.h"
64 1.1 ross #include "systfloat.h"
65 1.1 ross #include "testFunction.h"
66 1.1 ross
67 1.1 ross const functionT functions[ NUM_FUNCTIONS ] = {
68 1.1 ross { 0, 0, 0, 0 },
69 1.1 ross { "int32_to_float32", 1, FALSE, TRUE },
70 1.1 ross { "int32_to_float64", 1, FALSE, FALSE },
71 1.1 ross { "int32_to_floatx80", 1, FALSE, FALSE },
72 1.1 ross { "int32_to_float128", 1, FALSE, FALSE },
73 1.1 ross { "int64_to_float32", 1, FALSE, TRUE },
74 1.1 ross { "int64_to_float64", 1, FALSE, TRUE },
75 1.1 ross { "int64_to_floatx80", 1, FALSE, FALSE },
76 1.1 ross { "int64_to_float128", 1, FALSE, FALSE },
77 1.1 ross { "float32_to_int32", 1, FALSE, TRUE },
78 1.1 ross { "float32_to_int32_round_to_zero", 1, FALSE, FALSE },
79 1.1 ross { "float32_to_int64", 1, FALSE, TRUE },
80 1.1 ross { "float32_to_int64_round_to_zero", 1, FALSE, FALSE },
81 1.1 ross { "float32_to_float64", 1, FALSE, FALSE },
82 1.1 ross { "float32_to_floatx80", 1, FALSE, FALSE },
83 1.1 ross { "float32_to_float128", 1, FALSE, FALSE },
84 1.1 ross { "float32_round_to_int", 1, FALSE, TRUE },
85 1.1 ross { "float32_add", 2, FALSE, TRUE },
86 1.1 ross { "float32_sub", 2, FALSE, TRUE },
87 1.1 ross { "float32_mul", 2, FALSE, TRUE },
88 1.1 ross { "float32_div", 2, FALSE, TRUE },
89 1.1 ross { "float32_rem", 2, FALSE, FALSE },
90 1.1 ross { "float32_sqrt", 1, FALSE, TRUE },
91 1.1 ross { "float32_eq", 2, FALSE, FALSE },
92 1.1 ross { "float32_le", 2, FALSE, FALSE },
93 1.1 ross { "float32_lt", 2, FALSE, FALSE },
94 1.1 ross { "float32_eq_signaling", 2, FALSE, FALSE },
95 1.1 ross { "float32_le_quiet", 2, FALSE, FALSE },
96 1.1 ross { "float32_lt_quiet", 2, FALSE, FALSE },
97 1.1 ross { "float64_to_int32", 1, FALSE, TRUE },
98 1.1 ross { "float64_to_int32_round_to_zero", 1, FALSE, FALSE },
99 1.1 ross { "float64_to_int64", 1, FALSE, TRUE },
100 1.1 ross { "float64_to_int64_round_to_zero", 1, FALSE, FALSE },
101 1.1 ross { "float64_to_float32", 1, FALSE, TRUE },
102 1.1 ross { "float64_to_floatx80", 1, FALSE, FALSE },
103 1.1 ross { "float64_to_float128", 1, FALSE, FALSE },
104 1.1 ross { "float64_round_to_int", 1, FALSE, TRUE },
105 1.1 ross { "float64_add", 2, FALSE, TRUE },
106 1.1 ross { "float64_sub", 2, FALSE, TRUE },
107 1.1 ross { "float64_mul", 2, FALSE, TRUE },
108 1.1 ross { "float64_div", 2, FALSE, TRUE },
109 1.1 ross { "float64_rem", 2, FALSE, FALSE },
110 1.1 ross { "float64_sqrt", 1, FALSE, TRUE },
111 1.1 ross { "float64_eq", 2, FALSE, FALSE },
112 1.1 ross { "float64_le", 2, FALSE, FALSE },
113 1.1 ross { "float64_lt", 2, FALSE, FALSE },
114 1.1 ross { "float64_eq_signaling", 2, FALSE, FALSE },
115 1.1 ross { "float64_le_quiet", 2, FALSE, FALSE },
116 1.1 ross { "float64_lt_quiet", 2, FALSE, FALSE },
117 1.1 ross { "floatx80_to_int32", 1, FALSE, TRUE },
118 1.1 ross { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE },
119 1.1 ross { "floatx80_to_int64", 1, FALSE, TRUE },
120 1.1 ross { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE },
121 1.1 ross { "floatx80_to_float32", 1, FALSE, TRUE },
122 1.1 ross { "floatx80_to_float64", 1, FALSE, TRUE },
123 1.1 ross { "floatx80_to_float128", 1, FALSE, FALSE },
124 1.1 ross { "floatx80_round_to_int", 1, FALSE, TRUE },
125 1.1 ross { "floatx80_add", 2, TRUE, TRUE },
126 1.1 ross { "floatx80_sub", 2, TRUE, TRUE },
127 1.1 ross { "floatx80_mul", 2, TRUE, TRUE },
128 1.1 ross { "floatx80_div", 2, TRUE, TRUE },
129 1.1 ross { "floatx80_rem", 2, FALSE, FALSE },
130 1.1 ross { "floatx80_sqrt", 1, TRUE, TRUE },
131 1.1 ross { "floatx80_eq", 2, FALSE, FALSE },
132 1.1 ross { "floatx80_le", 2, FALSE, FALSE },
133 1.1 ross { "floatx80_lt", 2, FALSE, FALSE },
134 1.1 ross { "floatx80_eq_signaling", 2, FALSE, FALSE },
135 1.1 ross { "floatx80_le_quiet", 2, FALSE, FALSE },
136 1.1 ross { "floatx80_lt_quiet", 2, FALSE, FALSE },
137 1.1 ross { "float128_to_int32", 1, FALSE, TRUE },
138 1.1 ross { "float128_to_int32_round_to_zero", 1, FALSE, FALSE },
139 1.1 ross { "float128_to_int64", 1, FALSE, TRUE },
140 1.1 ross { "float128_to_int64_round_to_zero", 1, FALSE, FALSE },
141 1.1 ross { "float128_to_float32", 1, FALSE, TRUE },
142 1.1 ross { "float128_to_float64", 1, FALSE, TRUE },
143 1.1 ross { "float128_to_floatx80", 1, FALSE, TRUE },
144 1.1 ross { "float128_round_to_int", 1, FALSE, TRUE },
145 1.1 ross { "float128_add", 2, FALSE, TRUE },
146 1.1 ross { "float128_sub", 2, FALSE, TRUE },
147 1.1 ross { "float128_mul", 2, FALSE, TRUE },
148 1.1 ross { "float128_div", 2, FALSE, TRUE },
149 1.1 ross { "float128_rem", 2, FALSE, FALSE },
150 1.1 ross { "float128_sqrt", 1, FALSE, TRUE },
151 1.1 ross { "float128_eq", 2, FALSE, FALSE },
152 1.1 ross { "float128_le", 2, FALSE, FALSE },
153 1.1 ross { "float128_lt", 2, FALSE, FALSE },
154 1.1 ross { "float128_eq_signaling", 2, FALSE, FALSE },
155 1.1 ross { "float128_le_quiet", 2, FALSE, FALSE },
156 1.1 ross { "float128_lt_quiet", 2, FALSE, FALSE },
157 1.1 ross };
158 1.1 ross
159 1.1 ross const flag functionExists[ NUM_FUNCTIONS ] = {
160 1.1 ross 0,
161 1.1 ross #ifdef SYST_INT32_TO_FLOAT32
162 1.1 ross 1,
163 1.1 ross #else
164 1.1 ross 0,
165 1.1 ross #endif
166 1.1 ross #ifdef SYST_INT32_TO_FLOAT64
167 1.1 ross 1,
168 1.1 ross #else
169 1.1 ross 0,
170 1.1 ross #endif
171 1.1 ross #ifdef SYST_INT32_TO_FLOATX80
172 1.1 ross 1,
173 1.1 ross #else
174 1.1 ross 0,
175 1.1 ross #endif
176 1.1 ross #ifdef SYST_INT32_TO_FLOAT128
177 1.1 ross 1,
178 1.1 ross #else
179 1.1 ross 0,
180 1.1 ross #endif
181 1.1 ross #ifdef SYST_INT64_TO_FLOAT32
182 1.1 ross 1,
183 1.1 ross #else
184 1.1 ross 0,
185 1.1 ross #endif
186 1.1 ross #ifdef SYST_INT64_TO_FLOAT64
187 1.1 ross 1,
188 1.1 ross #else
189 1.1 ross 0,
190 1.1 ross #endif
191 1.1 ross #ifdef SYST_INT64_TO_FLOATX80
192 1.1 ross 1,
193 1.1 ross #else
194 1.1 ross 0,
195 1.1 ross #endif
196 1.1 ross #ifdef SYST_INT64_TO_FLOAT128
197 1.1 ross 1,
198 1.1 ross #else
199 1.1 ross 0,
200 1.1 ross #endif
201 1.1 ross #ifdef SYST_FLOAT32_TO_INT32
202 1.1 ross 1,
203 1.1 ross #else
204 1.1 ross 0,
205 1.1 ross #endif
206 1.1 ross #ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO
207 1.1 ross 1,
208 1.1 ross #else
209 1.1 ross 0,
210 1.1 ross #endif
211 1.1 ross #ifdef SYST_FLOAT32_TO_INT64
212 1.1 ross 1,
213 1.1 ross #else
214 1.1 ross 0,
215 1.1 ross #endif
216 1.1 ross #ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO
217 1.1 ross 1,
218 1.1 ross #else
219 1.1 ross 0,
220 1.1 ross #endif
221 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT64
222 1.1 ross 1,
223 1.1 ross #else
224 1.1 ross 0,
225 1.1 ross #endif
226 1.1 ross #ifdef SYST_FLOAT32_TO_FLOATX80
227 1.1 ross 1,
228 1.1 ross #else
229 1.1 ross 0,
230 1.1 ross #endif
231 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT128
232 1.1 ross 1,
233 1.1 ross #else
234 1.1 ross 0,
235 1.1 ross #endif
236 1.1 ross #ifdef SYST_FLOAT32_ROUND_TO_INT
237 1.1 ross 1,
238 1.1 ross #else
239 1.1 ross 0,
240 1.1 ross #endif
241 1.1 ross #ifdef SYST_FLOAT32_ADD
242 1.1 ross 1,
243 1.1 ross #else
244 1.1 ross 0,
245 1.1 ross #endif
246 1.1 ross #ifdef SYST_FLOAT32_SUB
247 1.1 ross 1,
248 1.1 ross #else
249 1.1 ross 0,
250 1.1 ross #endif
251 1.1 ross #ifdef SYST_FLOAT32_MUL
252 1.1 ross 1,
253 1.1 ross #else
254 1.1 ross 0,
255 1.1 ross #endif
256 1.1 ross #ifdef SYST_FLOAT32_DIV
257 1.1 ross 1,
258 1.1 ross #else
259 1.1 ross 0,
260 1.1 ross #endif
261 1.1 ross #ifdef SYST_FLOAT32_REM
262 1.1 ross 1,
263 1.1 ross #else
264 1.1 ross 0,
265 1.1 ross #endif
266 1.1 ross #ifdef SYST_FLOAT32_SQRT
267 1.1 ross 1,
268 1.1 ross #else
269 1.1 ross 0,
270 1.1 ross #endif
271 1.1 ross #ifdef SYST_FLOAT32_EQ
272 1.1 ross 1,
273 1.1 ross #else
274 1.1 ross 0,
275 1.1 ross #endif
276 1.1 ross #ifdef SYST_FLOAT32_LE
277 1.1 ross 1,
278 1.1 ross #else
279 1.1 ross 0,
280 1.1 ross #endif
281 1.1 ross #ifdef SYST_FLOAT32_LT
282 1.1 ross 1,
283 1.1 ross #else
284 1.1 ross 0,
285 1.1 ross #endif
286 1.1 ross #ifdef SYST_FLOAT32_EQ_SIGNALING
287 1.1 ross 1,
288 1.1 ross #else
289 1.1 ross 0,
290 1.1 ross #endif
291 1.1 ross #ifdef SYST_FLOAT32_LE_QUIET
292 1.1 ross 1,
293 1.1 ross #else
294 1.1 ross 0,
295 1.1 ross #endif
296 1.1 ross #ifdef SYST_FLOAT32_LT_QUIET
297 1.1 ross 1,
298 1.1 ross #else
299 1.1 ross 0,
300 1.1 ross #endif
301 1.1 ross #ifdef SYST_FLOAT64_TO_INT32
302 1.1 ross 1,
303 1.1 ross #else
304 1.1 ross 0,
305 1.1 ross #endif
306 1.1 ross #ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO
307 1.1 ross 1,
308 1.1 ross #else
309 1.1 ross 0,
310 1.1 ross #endif
311 1.1 ross #ifdef SYST_FLOAT64_TO_INT64
312 1.1 ross 1,
313 1.1 ross #else
314 1.1 ross 0,
315 1.1 ross #endif
316 1.1 ross #ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO
317 1.1 ross 1,
318 1.1 ross #else
319 1.1 ross 0,
320 1.1 ross #endif
321 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT32
322 1.1 ross 1,
323 1.1 ross #else
324 1.1 ross 0,
325 1.1 ross #endif
326 1.1 ross #ifdef SYST_FLOAT64_TO_FLOATX80
327 1.1 ross 1,
328 1.1 ross #else
329 1.1 ross 0,
330 1.1 ross #endif
331 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT128
332 1.1 ross 1,
333 1.1 ross #else
334 1.1 ross 0,
335 1.1 ross #endif
336 1.1 ross #ifdef SYST_FLOAT64_ROUND_TO_INT
337 1.1 ross 1,
338 1.1 ross #else
339 1.1 ross 0,
340 1.1 ross #endif
341 1.1 ross #ifdef SYST_FLOAT64_ADD
342 1.1 ross 1,
343 1.1 ross #else
344 1.1 ross 0,
345 1.1 ross #endif
346 1.1 ross #ifdef SYST_FLOAT64_SUB
347 1.1 ross 1,
348 1.1 ross #else
349 1.1 ross 0,
350 1.1 ross #endif
351 1.1 ross #ifdef SYST_FLOAT64_MUL
352 1.1 ross 1,
353 1.1 ross #else
354 1.1 ross 0,
355 1.1 ross #endif
356 1.1 ross #ifdef SYST_FLOAT64_DIV
357 1.1 ross 1,
358 1.1 ross #else
359 1.1 ross 0,
360 1.1 ross #endif
361 1.1 ross #ifdef SYST_FLOAT64_REM
362 1.1 ross 1,
363 1.1 ross #else
364 1.1 ross 0,
365 1.1 ross #endif
366 1.1 ross #ifdef SYST_FLOAT64_SQRT
367 1.1 ross 1,
368 1.1 ross #else
369 1.1 ross 0,
370 1.1 ross #endif
371 1.1 ross #ifdef SYST_FLOAT64_EQ
372 1.1 ross 1,
373 1.1 ross #else
374 1.1 ross 0,
375 1.1 ross #endif
376 1.1 ross #ifdef SYST_FLOAT64_LE
377 1.1 ross 1,
378 1.1 ross #else
379 1.1 ross 0,
380 1.1 ross #endif
381 1.1 ross #ifdef SYST_FLOAT64_LT
382 1.1 ross 1,
383 1.1 ross #else
384 1.1 ross 0,
385 1.1 ross #endif
386 1.1 ross #ifdef SYST_FLOAT64_EQ_SIGNALING
387 1.1 ross 1,
388 1.1 ross #else
389 1.1 ross 0,
390 1.1 ross #endif
391 1.1 ross #ifdef SYST_FLOAT64_LE_QUIET
392 1.1 ross 1,
393 1.1 ross #else
394 1.1 ross 0,
395 1.1 ross #endif
396 1.1 ross #ifdef SYST_FLOAT64_LT_QUIET
397 1.1 ross 1,
398 1.1 ross #else
399 1.1 ross 0,
400 1.1 ross #endif
401 1.1 ross #ifdef SYST_FLOATX80_TO_INT32
402 1.1 ross 1,
403 1.1 ross #else
404 1.1 ross 0,
405 1.1 ross #endif
406 1.1 ross #ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO
407 1.1 ross 1,
408 1.1 ross #else
409 1.1 ross 0,
410 1.1 ross #endif
411 1.1 ross #ifdef SYST_FLOATX80_TO_INT64
412 1.1 ross 1,
413 1.1 ross #else
414 1.1 ross 0,
415 1.1 ross #endif
416 1.1 ross #ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO
417 1.1 ross 1,
418 1.1 ross #else
419 1.1 ross 0,
420 1.1 ross #endif
421 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT32
422 1.1 ross 1,
423 1.1 ross #else
424 1.1 ross 0,
425 1.1 ross #endif
426 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT64
427 1.1 ross 1,
428 1.1 ross #else
429 1.1 ross 0,
430 1.1 ross #endif
431 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT128
432 1.1 ross 1,
433 1.1 ross #else
434 1.1 ross 0,
435 1.1 ross #endif
436 1.1 ross #ifdef SYST_FLOATX80_ROUND_TO_INT
437 1.1 ross 1,
438 1.1 ross #else
439 1.1 ross 0,
440 1.1 ross #endif
441 1.1 ross #ifdef SYST_FLOATX80_ADD
442 1.1 ross 1,
443 1.1 ross #else
444 1.1 ross 0,
445 1.1 ross #endif
446 1.1 ross #ifdef SYST_FLOATX80_SUB
447 1.1 ross 1,
448 1.1 ross #else
449 1.1 ross 0,
450 1.1 ross #endif
451 1.1 ross #ifdef SYST_FLOATX80_MUL
452 1.1 ross 1,
453 1.1 ross #else
454 1.1 ross 0,
455 1.1 ross #endif
456 1.1 ross #ifdef SYST_FLOATX80_DIV
457 1.1 ross 1,
458 1.1 ross #else
459 1.1 ross 0,
460 1.1 ross #endif
461 1.1 ross #ifdef SYST_FLOATX80_REM
462 1.1 ross 1,
463 1.1 ross #else
464 1.1 ross 0,
465 1.1 ross #endif
466 1.1 ross #ifdef SYST_FLOATX80_SQRT
467 1.1 ross 1,
468 1.1 ross #else
469 1.1 ross 0,
470 1.1 ross #endif
471 1.1 ross #ifdef SYST_FLOATX80_EQ
472 1.1 ross 1,
473 1.1 ross #else
474 1.1 ross 0,
475 1.1 ross #endif
476 1.1 ross #ifdef SYST_FLOATX80_LE
477 1.1 ross 1,
478 1.1 ross #else
479 1.1 ross 0,
480 1.1 ross #endif
481 1.1 ross #ifdef SYST_FLOATX80_LT
482 1.1 ross 1,
483 1.1 ross #else
484 1.1 ross 0,
485 1.1 ross #endif
486 1.1 ross #ifdef SYST_FLOATX80_EQ_SIGNALING
487 1.1 ross 1,
488 1.1 ross #else
489 1.1 ross 0,
490 1.1 ross #endif
491 1.1 ross #ifdef SYST_FLOATX80_LE_QUIET
492 1.1 ross 1,
493 1.1 ross #else
494 1.1 ross 0,
495 1.1 ross #endif
496 1.1 ross #ifdef SYST_FLOATX80_LT_QUIET
497 1.1 ross 1,
498 1.1 ross #else
499 1.1 ross 0,
500 1.1 ross #endif
501 1.1 ross #ifdef SYST_FLOAT128_TO_INT32
502 1.1 ross 1,
503 1.1 ross #else
504 1.1 ross 0,
505 1.1 ross #endif
506 1.1 ross #ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO
507 1.1 ross 1,
508 1.1 ross #else
509 1.1 ross 0,
510 1.1 ross #endif
511 1.1 ross #ifdef SYST_FLOAT128_TO_INT64
512 1.1 ross 1,
513 1.1 ross #else
514 1.1 ross 0,
515 1.1 ross #endif
516 1.1 ross #ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO
517 1.1 ross 1,
518 1.1 ross #else
519 1.1 ross 0,
520 1.1 ross #endif
521 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT32
522 1.1 ross 1,
523 1.1 ross #else
524 1.1 ross 0,
525 1.1 ross #endif
526 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT64
527 1.1 ross 1,
528 1.1 ross #else
529 1.1 ross 0,
530 1.1 ross #endif
531 1.1 ross #ifdef SYST_FLOAT128_TO_FLOATX80
532 1.1 ross 1,
533 1.1 ross #else
534 1.1 ross 0,
535 1.1 ross #endif
536 1.1 ross #ifdef SYST_FLOAT128_ROUND_TO_INT
537 1.1 ross 1,
538 1.1 ross #else
539 1.1 ross 0,
540 1.1 ross #endif
541 1.1 ross #ifdef SYST_FLOAT128_ADD
542 1.1 ross 1,
543 1.1 ross #else
544 1.1 ross 0,
545 1.1 ross #endif
546 1.1 ross #ifdef SYST_FLOAT128_SUB
547 1.1 ross 1,
548 1.1 ross #else
549 1.1 ross 0,
550 1.1 ross #endif
551 1.1 ross #ifdef SYST_FLOAT128_MUL
552 1.1 ross 1,
553 1.1 ross #else
554 1.1 ross 0,
555 1.1 ross #endif
556 1.1 ross #ifdef SYST_FLOAT128_DIV
557 1.1 ross 1,
558 1.1 ross #else
559 1.1 ross 0,
560 1.1 ross #endif
561 1.1 ross #ifdef SYST_FLOAT128_REM
562 1.1 ross 1,
563 1.1 ross #else
564 1.1 ross 0,
565 1.1 ross #endif
566 1.1 ross #ifdef SYST_FLOAT128_SQRT
567 1.1 ross 1,
568 1.1 ross #else
569 1.1 ross 0,
570 1.1 ross #endif
571 1.1 ross #ifdef SYST_FLOAT128_EQ
572 1.1 ross 1,
573 1.1 ross #else
574 1.1 ross 0,
575 1.1 ross #endif
576 1.1 ross #ifdef SYST_FLOAT128_LE
577 1.1 ross 1,
578 1.1 ross #else
579 1.1 ross 0,
580 1.1 ross #endif
581 1.1 ross #ifdef SYST_FLOAT128_LT
582 1.1 ross 1,
583 1.1 ross #else
584 1.1 ross 0,
585 1.1 ross #endif
586 1.1 ross #ifdef SYST_FLOAT128_EQ_SIGNALING
587 1.1 ross 1,
588 1.1 ross #else
589 1.1 ross 0,
590 1.1 ross #endif
591 1.1 ross #ifdef SYST_FLOAT128_LE_QUIET
592 1.1 ross 1,
593 1.1 ross #else
594 1.1 ross 0,
595 1.1 ross #endif
596 1.1 ross #ifdef SYST_FLOAT128_LT_QUIET
597 1.1 ross 1,
598 1.1 ross #else
599 1.1 ross 0,
600 1.1 ross #endif
601 1.1 ross };
602 1.1 ross
603 1.1 ross static void
604 1.1 ross testFunctionVariety(
605 1.1 ross uint8 functionCode, int8 roundingPrecision, int8 roundingMode )
606 1.1 ross {
607 1.1 ross uint8 roundingCode;
608 1.1 ross
609 1.1 ross functionName = functions[ functionCode ].name;
610 1.1 ross #ifdef FLOATX80
611 1.1 ross if ( roundingPrecision == 32 ) {
612 1.1 ross roundingPrecisionName = "32";
613 1.1 ross }
614 1.1 ross else if ( roundingPrecision == 64 ) {
615 1.1 ross roundingPrecisionName = "64";
616 1.1 ross }
617 1.1 ross else if ( roundingPrecision == 80 ) {
618 1.1 ross roundingPrecisionName = "80";
619 1.1 ross }
620 1.1 ross else {
621 1.1 ross roundingPrecision = 80;
622 1.1 ross roundingPrecisionName = 0;
623 1.1 ross }
624 1.1 ross floatx80_rounding_precision = roundingPrecision;
625 1.1 ross syst_float_set_rounding_precision( roundingPrecision );
626 1.1 ross #endif
627 1.1 ross switch ( roundingMode ) {
628 1.1 ross case 0:
629 1.1 ross roundingModeName = 0;
630 1.1 ross roundingCode = float_round_nearest_even;
631 1.1 ross break;
632 1.1 ross case ROUND_NEAREST_EVEN:
633 1.1 ross roundingModeName = "nearest_even";
634 1.1 ross roundingCode = float_round_nearest_even;
635 1.1 ross break;
636 1.1 ross case ROUND_TO_ZERO:
637 1.1 ross roundingModeName = "to_zero";
638 1.1 ross roundingCode = float_round_to_zero;
639 1.1 ross break;
640 1.1 ross case ROUND_DOWN:
641 1.1 ross roundingModeName = "down";
642 1.1 ross roundingCode = float_round_down;
643 1.1 ross break;
644 1.1 ross case ROUND_UP:
645 1.1 ross roundingModeName = "up";
646 1.1 ross roundingCode = float_round_up;
647 1.1 ross break;
648 1.5 drochner default:
649 1.5 drochner return;
650 1.1 ross }
651 1.1 ross float_rounding_mode = roundingCode;
652 1.1 ross syst_float_set_rounding_mode( roundingCode );
653 1.1 ross fputs( "Testing ", stderr );
654 1.1 ross writeFunctionName( stderr );
655 1.1 ross fputs( ".\n", stderr );
656 1.1 ross switch ( functionCode ) {
657 1.1 ross #ifdef SYST_INT32_TO_FLOAT32
658 1.1 ross case INT32_TO_FLOAT32:
659 1.1 ross test_a_int32_z_float32( int32_to_float32, syst_int32_to_float32 );
660 1.1 ross break;
661 1.1 ross #endif
662 1.1 ross #ifdef SYST_INT32_TO_FLOAT64
663 1.1 ross case INT32_TO_FLOAT64:
664 1.1 ross test_a_int32_z_float64( int32_to_float64, syst_int32_to_float64 );
665 1.1 ross break;
666 1.1 ross #endif
667 1.1 ross #ifdef SYST_INT32_TO_FLOATX80
668 1.1 ross case INT32_TO_FLOATX80:
669 1.1 ross test_a_int32_z_floatx80( int32_to_floatx80, syst_int32_to_floatx80 );
670 1.1 ross break;
671 1.1 ross #endif
672 1.1 ross #ifdef SYST_INT32_TO_FLOAT128
673 1.1 ross case INT32_TO_FLOAT128:
674 1.1 ross test_a_int32_z_float128( int32_to_float128, syst_int32_to_float128 );
675 1.1 ross break;
676 1.1 ross #endif
677 1.1 ross #ifdef SYST_INT64_TO_FLOAT32
678 1.1 ross case INT64_TO_FLOAT32:
679 1.1 ross test_a_int64_z_float32( int64_to_float32, syst_int64_to_float32 );
680 1.1 ross break;
681 1.1 ross #endif
682 1.1 ross #ifdef SYST_INT64_TO_FLOAT64
683 1.1 ross case INT64_TO_FLOAT64:
684 1.1 ross test_a_int64_z_float64( int64_to_float64, syst_int64_to_float64 );
685 1.1 ross break;
686 1.1 ross #endif
687 1.1 ross #ifdef SYST_INT64_TO_FLOATX80
688 1.1 ross case INT64_TO_FLOATX80:
689 1.1 ross test_a_int64_z_floatx80( int64_to_floatx80, syst_int64_to_floatx80 );
690 1.1 ross break;
691 1.1 ross #endif
692 1.1 ross #ifdef SYST_INT64_TO_FLOAT128
693 1.1 ross case INT64_TO_FLOAT128:
694 1.1 ross test_a_int64_z_float128( int64_to_float128, syst_int64_to_float128 );
695 1.1 ross break;
696 1.1 ross #endif
697 1.1 ross #ifdef SYST_FLOAT32_TO_INT32
698 1.1 ross case FLOAT32_TO_INT32:
699 1.1 ross test_a_float32_z_int32( float32_to_int32, syst_float32_to_int32 );
700 1.1 ross break;
701 1.1 ross #endif
702 1.1 ross #ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO
703 1.1 ross case FLOAT32_TO_INT32_ROUND_TO_ZERO:
704 1.1 ross test_a_float32_z_int32(
705 1.1 ross float32_to_int32_round_to_zero,
706 1.1 ross syst_float32_to_int32_round_to_zero
707 1.1 ross );
708 1.1 ross break;
709 1.1 ross #endif
710 1.1 ross #ifdef SYST_FLOAT32_TO_INT64
711 1.1 ross case FLOAT32_TO_INT64:
712 1.1 ross test_a_float32_z_int64( float32_to_int64, syst_float32_to_int64 );
713 1.1 ross break;
714 1.1 ross #endif
715 1.1 ross #ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO
716 1.1 ross case FLOAT32_TO_INT64_ROUND_TO_ZERO:
717 1.1 ross test_a_float32_z_int64(
718 1.1 ross float32_to_int64_round_to_zero,
719 1.1 ross syst_float32_to_int64_round_to_zero
720 1.1 ross );
721 1.1 ross break;
722 1.1 ross #endif
723 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT64
724 1.1 ross case FLOAT32_TO_FLOAT64:
725 1.1 ross test_a_float32_z_float64(
726 1.1 ross float32_to_float64, syst_float32_to_float64 );
727 1.1 ross break;
728 1.1 ross #endif
729 1.1 ross #ifdef SYST_FLOAT32_TO_FLOATX80
730 1.1 ross case FLOAT32_TO_FLOATX80:
731 1.1 ross test_a_float32_z_floatx80(
732 1.1 ross float32_to_floatx80, syst_float32_to_floatx80 );
733 1.1 ross break;
734 1.1 ross #endif
735 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT128
736 1.1 ross case FLOAT32_TO_FLOAT128:
737 1.1 ross test_a_float32_z_float128(
738 1.1 ross float32_to_float128, syst_float32_to_float128 );
739 1.1 ross break;
740 1.1 ross #endif
741 1.1 ross #ifdef SYST_FLOAT32_ROUND_TO_INT
742 1.1 ross case FLOAT32_ROUND_TO_INT:
743 1.1 ross test_az_float32( float32_round_to_int, syst_float32_round_to_int );
744 1.1 ross break;
745 1.1 ross #endif
746 1.1 ross #ifdef SYST_FLOAT32_ADD
747 1.1 ross case FLOAT32_ADD:
748 1.1 ross test_abz_float32( float32_add, syst_float32_add );
749 1.1 ross break;
750 1.1 ross #endif
751 1.1 ross #ifdef SYST_FLOAT32_SUB
752 1.1 ross case FLOAT32_SUB:
753 1.1 ross test_abz_float32( float32_sub, syst_float32_sub );
754 1.1 ross break;
755 1.1 ross #endif
756 1.1 ross #ifdef SYST_FLOAT32_MUL
757 1.1 ross case FLOAT32_MUL:
758 1.1 ross test_abz_float32( float32_mul, syst_float32_mul );
759 1.1 ross break;
760 1.1 ross #endif
761 1.1 ross #ifdef SYST_FLOAT32_DIV
762 1.1 ross case FLOAT32_DIV:
763 1.1 ross test_abz_float32( float32_div, syst_float32_div );
764 1.1 ross break;
765 1.1 ross #endif
766 1.1 ross #ifdef SYST_FLOAT32_REM
767 1.1 ross case FLOAT32_REM:
768 1.1 ross test_abz_float32( float32_rem, syst_float32_rem );
769 1.1 ross break;
770 1.1 ross #endif
771 1.1 ross #ifdef SYST_FLOAT32_SQRT
772 1.1 ross case FLOAT32_SQRT:
773 1.1 ross test_az_float32( float32_sqrt, syst_float32_sqrt );
774 1.1 ross break;
775 1.1 ross #endif
776 1.1 ross #ifdef SYST_FLOAT32_EQ
777 1.1 ross case FLOAT32_EQ:
778 1.1 ross test_ab_float32_z_flag( float32_eq, syst_float32_eq );
779 1.1 ross break;
780 1.1 ross #endif
781 1.1 ross #ifdef SYST_FLOAT32_LE
782 1.1 ross case FLOAT32_LE:
783 1.1 ross test_ab_float32_z_flag( float32_le, syst_float32_le );
784 1.1 ross break;
785 1.1 ross #endif
786 1.1 ross #ifdef SYST_FLOAT32_LT
787 1.1 ross case FLOAT32_LT:
788 1.1 ross test_ab_float32_z_flag( float32_lt, syst_float32_lt );
789 1.1 ross break;
790 1.1 ross #endif
791 1.1 ross #ifdef SYST_FLOAT32_EQ_SIGNALING
792 1.1 ross case FLOAT32_EQ_SIGNALING:
793 1.1 ross test_ab_float32_z_flag(
794 1.1 ross float32_eq_signaling, syst_float32_eq_signaling );
795 1.1 ross break;
796 1.1 ross #endif
797 1.1 ross #ifdef SYST_FLOAT32_LE_QUIET
798 1.1 ross case FLOAT32_LE_QUIET:
799 1.1 ross test_ab_float32_z_flag( float32_le_quiet, syst_float32_le_quiet );
800 1.1 ross break;
801 1.1 ross #endif
802 1.1 ross #ifdef SYST_FLOAT32_LT_QUIET
803 1.1 ross case FLOAT32_LT_QUIET:
804 1.1 ross test_ab_float32_z_flag( float32_lt_quiet, syst_float32_lt_quiet );
805 1.1 ross break;
806 1.1 ross #endif
807 1.1 ross #ifdef SYST_FLOAT64_TO_INT32
808 1.1 ross case FLOAT64_TO_INT32:
809 1.1 ross test_a_float64_z_int32( float64_to_int32, syst_float64_to_int32 );
810 1.1 ross break;
811 1.1 ross #endif
812 1.1 ross #ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO
813 1.1 ross case FLOAT64_TO_INT32_ROUND_TO_ZERO:
814 1.1 ross test_a_float64_z_int32(
815 1.1 ross float64_to_int32_round_to_zero,
816 1.1 ross syst_float64_to_int32_round_to_zero
817 1.1 ross );
818 1.1 ross break;
819 1.1 ross #endif
820 1.1 ross #ifdef SYST_FLOAT64_TO_INT64
821 1.1 ross case FLOAT64_TO_INT64:
822 1.1 ross test_a_float64_z_int64( float64_to_int64, syst_float64_to_int64 );
823 1.1 ross break;
824 1.1 ross #endif
825 1.1 ross #ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO
826 1.1 ross case FLOAT64_TO_INT64_ROUND_TO_ZERO:
827 1.1 ross test_a_float64_z_int64(
828 1.1 ross float64_to_int64_round_to_zero,
829 1.1 ross syst_float64_to_int64_round_to_zero
830 1.1 ross );
831 1.1 ross break;
832 1.1 ross #endif
833 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT32
834 1.1 ross case FLOAT64_TO_FLOAT32:
835 1.1 ross test_a_float64_z_float32(
836 1.1 ross float64_to_float32, syst_float64_to_float32 );
837 1.1 ross break;
838 1.1 ross #endif
839 1.1 ross #ifdef SYST_FLOAT64_TO_FLOATX80
840 1.1 ross case FLOAT64_TO_FLOATX80:
841 1.1 ross test_a_float64_z_floatx80(
842 1.1 ross float64_to_floatx80, syst_float64_to_floatx80 );
843 1.1 ross break;
844 1.1 ross #endif
845 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT128
846 1.1 ross case FLOAT64_TO_FLOAT128:
847 1.1 ross test_a_float64_z_float128(
848 1.1 ross float64_to_float128, syst_float64_to_float128 );
849 1.1 ross break;
850 1.1 ross #endif
851 1.1 ross #ifdef SYST_FLOAT64_ROUND_TO_INT
852 1.1 ross case FLOAT64_ROUND_TO_INT:
853 1.1 ross test_az_float64( float64_round_to_int, syst_float64_round_to_int );
854 1.1 ross break;
855 1.1 ross #endif
856 1.1 ross #ifdef SYST_FLOAT64_ADD
857 1.1 ross case FLOAT64_ADD:
858 1.1 ross test_abz_float64( float64_add, syst_float64_add );
859 1.1 ross break;
860 1.1 ross #endif
861 1.1 ross #ifdef SYST_FLOAT64_SUB
862 1.1 ross case FLOAT64_SUB:
863 1.1 ross test_abz_float64( float64_sub, syst_float64_sub );
864 1.1 ross break;
865 1.1 ross #endif
866 1.1 ross #ifdef SYST_FLOAT64_MUL
867 1.1 ross case FLOAT64_MUL:
868 1.1 ross test_abz_float64( float64_mul, syst_float64_mul );
869 1.1 ross break;
870 1.1 ross #endif
871 1.1 ross #ifdef SYST_FLOAT64_DIV
872 1.1 ross case FLOAT64_DIV:
873 1.1 ross test_abz_float64( float64_div, syst_float64_div );
874 1.1 ross break;
875 1.1 ross #endif
876 1.1 ross #ifdef SYST_FLOAT64_REM
877 1.1 ross case FLOAT64_REM:
878 1.1 ross test_abz_float64( float64_rem, syst_float64_rem );
879 1.1 ross break;
880 1.1 ross #endif
881 1.1 ross #ifdef SYST_FLOAT64_SQRT
882 1.1 ross case FLOAT64_SQRT:
883 1.1 ross test_az_float64( float64_sqrt, syst_float64_sqrt );
884 1.1 ross break;
885 1.1 ross #endif
886 1.1 ross #ifdef SYST_FLOAT64_EQ
887 1.1 ross case FLOAT64_EQ:
888 1.1 ross test_ab_float64_z_flag( float64_eq, syst_float64_eq );
889 1.1 ross break;
890 1.1 ross #endif
891 1.1 ross #ifdef SYST_FLOAT64_LE
892 1.1 ross case FLOAT64_LE:
893 1.1 ross test_ab_float64_z_flag( float64_le, syst_float64_le );
894 1.1 ross break;
895 1.1 ross #endif
896 1.1 ross #ifdef SYST_FLOAT64_LT
897 1.1 ross case FLOAT64_LT:
898 1.1 ross test_ab_float64_z_flag( float64_lt, syst_float64_lt );
899 1.1 ross break;
900 1.1 ross #endif
901 1.1 ross #ifdef SYST_FLOAT64_EQ_SIGNALING
902 1.1 ross case FLOAT64_EQ_SIGNALING:
903 1.1 ross test_ab_float64_z_flag(
904 1.1 ross float64_eq_signaling, syst_float64_eq_signaling );
905 1.1 ross break;
906 1.1 ross #endif
907 1.1 ross #ifdef SYST_FLOAT64_LE_QUIET
908 1.1 ross case FLOAT64_LE_QUIET:
909 1.1 ross test_ab_float64_z_flag( float64_le_quiet, syst_float64_le_quiet );
910 1.1 ross break;
911 1.1 ross #endif
912 1.1 ross #ifdef SYST_FLOAT64_LT_QUIET
913 1.1 ross case FLOAT64_LT_QUIET:
914 1.1 ross test_ab_float64_z_flag( float64_lt_quiet, syst_float64_lt_quiet );
915 1.1 ross break;
916 1.1 ross #endif
917 1.1 ross #ifdef SYST_FLOATX80_TO_INT32
918 1.1 ross case FLOATX80_TO_INT32:
919 1.1 ross test_a_floatx80_z_int32( floatx80_to_int32, syst_floatx80_to_int32 );
920 1.1 ross break;
921 1.1 ross #endif
922 1.1 ross #ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO
923 1.1 ross case FLOATX80_TO_INT32_ROUND_TO_ZERO:
924 1.1 ross test_a_floatx80_z_int32(
925 1.1 ross floatx80_to_int32_round_to_zero,
926 1.1 ross syst_floatx80_to_int32_round_to_zero
927 1.1 ross );
928 1.1 ross break;
929 1.1 ross #endif
930 1.1 ross #ifdef SYST_FLOATX80_TO_INT64
931 1.1 ross case FLOATX80_TO_INT64:
932 1.1 ross test_a_floatx80_z_int64( floatx80_to_int64, syst_floatx80_to_int64 );
933 1.1 ross break;
934 1.1 ross #endif
935 1.1 ross #ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO
936 1.1 ross case FLOATX80_TO_INT64_ROUND_TO_ZERO:
937 1.1 ross test_a_floatx80_z_int64(
938 1.1 ross floatx80_to_int64_round_to_zero,
939 1.1 ross syst_floatx80_to_int64_round_to_zero
940 1.1 ross );
941 1.1 ross break;
942 1.1 ross #endif
943 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT32
944 1.1 ross case FLOATX80_TO_FLOAT32:
945 1.1 ross test_a_floatx80_z_float32(
946 1.1 ross floatx80_to_float32, syst_floatx80_to_float32 );
947 1.1 ross break;
948 1.1 ross #endif
949 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT64
950 1.1 ross case FLOATX80_TO_FLOAT64:
951 1.1 ross test_a_floatx80_z_float64(
952 1.1 ross floatx80_to_float64, syst_floatx80_to_float64 );
953 1.1 ross break;
954 1.1 ross #endif
955 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT128
956 1.1 ross case FLOATX80_TO_FLOAT128:
957 1.1 ross test_a_floatx80_z_float128(
958 1.1 ross floatx80_to_float128, syst_floatx80_to_float128 );
959 1.1 ross break;
960 1.1 ross #endif
961 1.1 ross #ifdef SYST_FLOATX80_ROUND_TO_INT
962 1.1 ross case FLOATX80_ROUND_TO_INT:
963 1.1 ross test_az_floatx80( floatx80_round_to_int, syst_floatx80_round_to_int );
964 1.1 ross break;
965 1.1 ross #endif
966 1.1 ross #ifdef SYST_FLOATX80_ADD
967 1.1 ross case FLOATX80_ADD:
968 1.1 ross test_abz_floatx80( floatx80_add, syst_floatx80_add );
969 1.1 ross break;
970 1.1 ross #endif
971 1.1 ross #ifdef SYST_FLOATX80_SUB
972 1.1 ross case FLOATX80_SUB:
973 1.1 ross test_abz_floatx80( floatx80_sub, syst_floatx80_sub );
974 1.1 ross break;
975 1.1 ross #endif
976 1.1 ross #ifdef SYST_FLOATX80_MUL
977 1.1 ross case FLOATX80_MUL:
978 1.1 ross test_abz_floatx80( floatx80_mul, syst_floatx80_mul );
979 1.1 ross break;
980 1.1 ross #endif
981 1.1 ross #ifdef SYST_FLOATX80_DIV
982 1.1 ross case FLOATX80_DIV:
983 1.1 ross test_abz_floatx80( floatx80_div, syst_floatx80_div );
984 1.1 ross break;
985 1.1 ross #endif
986 1.1 ross #ifdef SYST_FLOATX80_REM
987 1.1 ross case FLOATX80_REM:
988 1.1 ross test_abz_floatx80( floatx80_rem, syst_floatx80_rem );
989 1.1 ross break;
990 1.1 ross #endif
991 1.1 ross #ifdef SYST_FLOATX80_SQRT
992 1.1 ross case FLOATX80_SQRT:
993 1.1 ross test_az_floatx80( floatx80_sqrt, syst_floatx80_sqrt );
994 1.1 ross break;
995 1.1 ross #endif
996 1.1 ross #ifdef SYST_FLOATX80_EQ
997 1.1 ross case FLOATX80_EQ:
998 1.1 ross test_ab_floatx80_z_flag( floatx80_eq, syst_floatx80_eq );
999 1.1 ross break;
1000 1.1 ross #endif
1001 1.1 ross #ifdef SYST_FLOATX80_LE
1002 1.1 ross case FLOATX80_LE:
1003 1.1 ross test_ab_floatx80_z_flag( floatx80_le, syst_floatx80_le );
1004 1.1 ross break;
1005 1.1 ross #endif
1006 1.1 ross #ifdef SYST_FLOATX80_LT
1007 1.1 ross case FLOATX80_LT:
1008 1.1 ross test_ab_floatx80_z_flag( floatx80_lt, syst_floatx80_lt );
1009 1.1 ross break;
1010 1.1 ross #endif
1011 1.1 ross #ifdef SYST_FLOATX80_EQ_SIGNALING
1012 1.1 ross case FLOATX80_EQ_SIGNALING:
1013 1.1 ross test_ab_floatx80_z_flag(
1014 1.1 ross floatx80_eq_signaling, syst_floatx80_eq_signaling );
1015 1.1 ross break;
1016 1.1 ross #endif
1017 1.1 ross #ifdef SYST_FLOATX80_LE_QUIET
1018 1.1 ross case FLOATX80_LE_QUIET:
1019 1.1 ross test_ab_floatx80_z_flag( floatx80_le_quiet, syst_floatx80_le_quiet );
1020 1.1 ross break;
1021 1.1 ross #endif
1022 1.1 ross #ifdef SYST_FLOATX80_LT_QUIET
1023 1.1 ross case FLOATX80_LT_QUIET:
1024 1.1 ross test_ab_floatx80_z_flag( floatx80_lt_quiet, syst_floatx80_lt_quiet );
1025 1.1 ross break;
1026 1.1 ross #endif
1027 1.1 ross #ifdef SYST_FLOAT128_TO_INT32
1028 1.1 ross case FLOAT128_TO_INT32:
1029 1.1 ross test_a_float128_z_int32( float128_to_int32, syst_float128_to_int32 );
1030 1.1 ross break;
1031 1.1 ross #endif
1032 1.1 ross #ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO
1033 1.1 ross case FLOAT128_TO_INT32_ROUND_TO_ZERO:
1034 1.1 ross test_a_float128_z_int32(
1035 1.1 ross float128_to_int32_round_to_zero,
1036 1.1 ross syst_float128_to_int32_round_to_zero
1037 1.1 ross );
1038 1.1 ross break;
1039 1.1 ross #endif
1040 1.1 ross #ifdef SYST_FLOAT128_TO_INT64
1041 1.1 ross case FLOAT128_TO_INT64:
1042 1.1 ross test_a_float128_z_int64( float128_to_int64, syst_float128_to_int64 );
1043 1.1 ross break;
1044 1.1 ross #endif
1045 1.1 ross #ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO
1046 1.1 ross case FLOAT128_TO_INT64_ROUND_TO_ZERO:
1047 1.1 ross test_a_float128_z_int64(
1048 1.1 ross float128_to_int64_round_to_zero,
1049 1.1 ross syst_float128_to_int64_round_to_zero
1050 1.1 ross );
1051 1.1 ross break;
1052 1.1 ross #endif
1053 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT32
1054 1.1 ross case FLOAT128_TO_FLOAT32:
1055 1.1 ross test_a_float128_z_float32(
1056 1.1 ross float128_to_float32, syst_float128_to_float32 );
1057 1.1 ross break;
1058 1.1 ross #endif
1059 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT64
1060 1.1 ross case FLOAT128_TO_FLOAT64:
1061 1.1 ross test_a_float128_z_float64(
1062 1.1 ross float128_to_float64, syst_float128_to_float64 );
1063 1.1 ross break;
1064 1.1 ross #endif
1065 1.1 ross #ifdef SYST_FLOAT128_TO_FLOATX80
1066 1.1 ross case FLOAT128_TO_FLOATX80:
1067 1.1 ross test_a_float128_z_floatx80(
1068 1.1 ross float128_to_floatx80, syst_float128_to_floatx80 );
1069 1.1 ross break;
1070 1.1 ross #endif
1071 1.1 ross #ifdef SYST_FLOAT128_ROUND_TO_INT
1072 1.1 ross case FLOAT128_ROUND_TO_INT:
1073 1.1 ross test_az_float128( float128_round_to_int, syst_float128_round_to_int );
1074 1.1 ross break;
1075 1.1 ross #endif
1076 1.1 ross #ifdef SYST_FLOAT128_ADD
1077 1.1 ross case FLOAT128_ADD:
1078 1.1 ross test_abz_float128( float128_add, syst_float128_add );
1079 1.1 ross break;
1080 1.1 ross #endif
1081 1.1 ross #ifdef SYST_FLOAT128_SUB
1082 1.1 ross case FLOAT128_SUB:
1083 1.1 ross test_abz_float128( float128_sub, syst_float128_sub );
1084 1.1 ross break;
1085 1.1 ross #endif
1086 1.1 ross #ifdef SYST_FLOAT128_MUL
1087 1.1 ross case FLOAT128_MUL:
1088 1.1 ross test_abz_float128( float128_mul, syst_float128_mul );
1089 1.1 ross break;
1090 1.1 ross #endif
1091 1.1 ross #ifdef SYST_FLOAT128_DIV
1092 1.1 ross case FLOAT128_DIV:
1093 1.1 ross test_abz_float128( float128_div, syst_float128_div );
1094 1.1 ross break;
1095 1.1 ross #endif
1096 1.1 ross #ifdef SYST_FLOAT128_REM
1097 1.1 ross case FLOAT128_REM:
1098 1.1 ross test_abz_float128( float128_rem, syst_float128_rem );
1099 1.1 ross break;
1100 1.1 ross #endif
1101 1.1 ross #ifdef SYST_FLOAT128_SQRT
1102 1.1 ross case FLOAT128_SQRT:
1103 1.1 ross test_az_float128( float128_sqrt, syst_float128_sqrt );
1104 1.1 ross break;
1105 1.1 ross #endif
1106 1.1 ross #ifdef SYST_FLOAT128_EQ
1107 1.1 ross case FLOAT128_EQ:
1108 1.1 ross test_ab_float128_z_flag( float128_eq, syst_float128_eq );
1109 1.1 ross break;
1110 1.1 ross #endif
1111 1.1 ross #ifdef SYST_FLOAT128_LE
1112 1.1 ross case FLOAT128_LE:
1113 1.1 ross test_ab_float128_z_flag( float128_le, syst_float128_le );
1114 1.1 ross break;
1115 1.1 ross #endif
1116 1.1 ross #ifdef SYST_FLOAT128_LT
1117 1.1 ross case FLOAT128_LT:
1118 1.1 ross test_ab_float128_z_flag( float128_lt, syst_float128_lt );
1119 1.1 ross break;
1120 1.1 ross #endif
1121 1.1 ross #ifdef SYST_FLOAT128_EQ_SIGNALING
1122 1.1 ross case FLOAT128_EQ_SIGNALING:
1123 1.1 ross test_ab_float128_z_flag(
1124 1.1 ross float128_eq_signaling, syst_float128_eq_signaling );
1125 1.1 ross break;
1126 1.1 ross #endif
1127 1.1 ross #ifdef SYST_FLOAT128_LE_QUIET
1128 1.1 ross case FLOAT128_LE_QUIET:
1129 1.1 ross test_ab_float128_z_flag( float128_le_quiet, syst_float128_le_quiet );
1130 1.1 ross break;
1131 1.1 ross #endif
1132 1.1 ross #ifdef SYST_FLOAT128_LT_QUIET
1133 1.1 ross case FLOAT128_LT_QUIET:
1134 1.1 ross test_ab_float128_z_flag( float128_lt_quiet, syst_float128_lt_quiet );
1135 1.1 ross break;
1136 1.1 ross #endif
1137 1.1 ross }
1138 1.1 ross if ( ( errorStop && anyErrors ) || stop ) exitWithStatus();
1139 1.1 ross
1140 1.1 ross }
1141 1.1 ross
1142 1.1 ross void
1143 1.1 ross testFunction(
1144 1.1 ross uint8 functionCode, int8 roundingPrecisionIn, int8 roundingModeIn )
1145 1.1 ross {
1146 1.1 ross int8 roundingPrecision, roundingMode;
1147 1.1 ross
1148 1.1 ross roundingPrecision = 32;
1149 1.1 ross for (;;) {
1150 1.1 ross if ( ! functions[ functionCode ].roundingPrecision ) {
1151 1.1 ross roundingPrecision = 0;
1152 1.1 ross }
1153 1.1 ross else if ( roundingPrecisionIn ) {
1154 1.1 ross roundingPrecision = roundingPrecisionIn;
1155 1.1 ross }
1156 1.1 ross for ( roundingMode = 1;
1157 1.1 ross roundingMode < NUM_ROUNDINGMODES;
1158 1.1 ross ++roundingMode
1159 1.1 ross ) {
1160 1.1 ross if ( ! functions[ functionCode ].roundingMode ) {
1161 1.1 ross roundingMode = 0;
1162 1.1 ross }
1163 1.1 ross else if ( roundingModeIn ) {
1164 1.1 ross roundingMode = roundingModeIn;
1165 1.1 ross }
1166 1.1 ross testFunctionVariety(
1167 1.1 ross functionCode, roundingPrecision, roundingMode );
1168 1.1 ross if ( roundingModeIn || ! roundingMode ) break;
1169 1.1 ross }
1170 1.1 ross if ( roundingPrecisionIn || ! roundingPrecision ) break;
1171 1.1 ross if ( roundingPrecision == 80 ) {
1172 1.1 ross break;
1173 1.1 ross }
1174 1.1 ross else if ( roundingPrecision == 64 ) {
1175 1.1 ross roundingPrecision = 80;
1176 1.1 ross }
1177 1.1 ross else if ( roundingPrecision == 32 ) {
1178 1.1 ross roundingPrecision = 64;
1179 1.1 ross }
1180 1.1 ross }
1181 1.1 ross
1182 1.1 ross }
1183 1.1 ross
1184