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