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