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