1206917Smarius
2206917Smarius/*
3206917Smarius===============================================================================
4206917Smarius
5206917SmariusThis C header file is part of TestFloat, Release 2a, a package of programs
6206917Smariusfor testing the correctness of floating-point arithmetic complying to the
7206917SmariusIEC/IEEE Standard for Floating-Point.
8206917Smarius
9206917SmariusWritten by John R. Hauser.  More information is available through the Web
10206917Smariuspage `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
11206917Smarius
12206917SmariusTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
13206917Smariushas been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
14206917SmariusTIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
15206917SmariusPERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
16206917SmariusAND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
17206917Smarius
18206917SmariusDerivative works are acceptable, even for commercial purposes, so long as
19206917Smarius(1) they include prominent notice that the work is derivative, and (2) they
20206917Smariusinclude prominent notice akin to these four paragraphs for those parts of
21206917Smariusthis code that are retained.
22206917Smarius
23206917Smarius===============================================================================
24206917Smarius*/
25206917Smarius
26206917Smarius#include <stdio.h>
27206917Smarius
28206917Smariusextern volatile flag stop;
29206917Smarius
30206917Smariusextern char *trueName, *testName;
31206917Smariusextern flag forever, errorStop;
32206917Smariusextern uint32 maxErrorCount;
33206917Smariusextern flag checkNaNs;
34206917Smariusextern int8 *trueFlagsPtr;
35206917Smariusextern int8 ( *testFlagsFunctionPtr )( void );
36206917Smariusextern char *functionName;
37206917Smariusextern char *roundingPrecisionName, *roundingModeName, *tininessModeName;
38206917Smariusextern flag anyErrors;
39206917Smarius
40206917Smariusvoid writeFunctionName( FILE * );
41206917Smariusvoid exitWithStatus( void );
42206917Smarius
43206917Smariusvoid test_a_int32_z_float32( float32 ( int32 ), float32 ( int32 ) );
44206917Smariusvoid test_a_int32_z_float64( float64 ( int32 ), float64 ( int32 ) );
45206917Smarius#ifdef FLOATX80
46206917Smariusvoid test_a_int32_z_floatx80( floatx80 ( int32 ), floatx80 ( int32 ) );
47206917Smarius#endif
48206917Smarius#ifdef FLOAT128
49206917Smariusvoid test_a_int32_z_float128( float128 ( int32 ), float128 ( int32 ) );
50206917Smarius#endif
51206917Smarius#ifdef BITS64
52206917Smariusvoid test_a_int64_z_float32( float32 ( int64 ), float32 ( int64 ) );
53206917Smariusvoid test_a_int64_z_float64( float64 ( int64 ), float64 ( int64 ) );
54206917Smarius#ifdef FLOATX80
55206917Smariusvoid test_a_int64_z_floatx80( floatx80 ( int64 ), floatx80 ( int64 ) );
56206917Smarius#endif
57206917Smarius#ifdef FLOAT128
58206917Smariusvoid test_a_int64_z_float128( float128 ( int64 ), float128 ( int64 ) );
59206917Smarius#endif
60206917Smarius#endif
61206917Smarius
62206917Smariusvoid test_a_float32_z_int32( int32 ( float32 ), int32 ( float32 ) );
63206917Smarius#ifdef BITS64
64206917Smariusvoid test_a_float32_z_int64( int64 ( float32 ), int64 ( float32 ) );
65206917Smarius#endif
66206917Smariusvoid test_a_float32_z_float64( float64 ( float32 ), float64 ( float32 ) );
67206917Smarius#ifdef FLOATX80
68206917Smariusvoid test_a_float32_z_floatx80( floatx80 ( float32 ), floatx80 ( float32 ) );
69206917Smarius#endif
70206917Smarius#ifdef FLOAT128
71206917Smariusvoid test_a_float32_z_float128( float128 ( float32 ), float128 ( float32 ) );
72206917Smarius#endif
73206917Smariusvoid test_az_float32( float32 ( float32 ), float32 ( float32 ) );
74206917Smariusvoid
75206917Smarius test_ab_float32_z_flag(
76206917Smarius     flag ( float32, float32 ), flag ( float32, float32 ) );
77206917Smariusvoid
78206917Smarius test_abz_float32(
79206917Smarius     float32 ( float32, float32 ), float32 ( float32, float32 ) );
80206917Smarius
81206917Smariusvoid test_a_float64_z_int32( int32 ( float64 ), int32 ( float64 ) );
82206917Smarius#ifdef BITS64
83206917Smariusvoid test_a_float64_z_int64( int64 ( float64 ), int64 ( float64 ) );
84206917Smarius#endif
85206917Smariusvoid test_a_float64_z_float32( float32 ( float64 ), float32 ( float64 ) );
86206917Smarius#ifdef FLOATX80
87206917Smariusvoid test_a_float64_z_floatx80( floatx80 ( float64 ), floatx80 ( float64 ) );
88206917Smarius#endif
89206917Smarius#ifdef FLOAT128
90206917Smariusvoid test_a_float64_z_float128( float128 ( float64 ), float128 ( float64 ) );
91206917Smarius#endif
92206917Smariusvoid test_az_float64( float64 ( float64 ), float64 ( float64 ) );
93206917Smariusvoid
94206917Smarius test_ab_float64_z_flag(
95206917Smarius     flag ( float64, float64 ), flag ( float64, float64 ) );
96206917Smariusvoid
97206917Smarius test_abz_float64(
98206917Smarius     float64 ( float64, float64 ), float64 ( float64, float64 ) );
99206917Smarius
100206917Smarius#ifdef FLOATX80
101206917Smarius
102206917Smariusvoid test_a_floatx80_z_int32( int32 ( floatx80 ), int32 ( floatx80 ) );
103206917Smarius#ifdef BITS64
104206917Smariusvoid test_a_floatx80_z_int64( int64 ( floatx80 ), int64 ( floatx80 ) );
105206917Smarius#endif
106206917Smariusvoid test_a_floatx80_z_float32( float32 ( floatx80 ), float32 ( floatx80 ) );
107206917Smariusvoid test_a_floatx80_z_float64( float64 ( floatx80 ), float64 ( floatx80 ) );
108206917Smarius#ifdef FLOAT128
109206917Smariusvoid
110206917Smarius test_a_floatx80_z_float128( float128 ( floatx80 ), float128 ( floatx80 ) );
111206917Smarius#endif
112206917Smariusvoid test_az_floatx80( floatx80 ( floatx80 ), floatx80 ( floatx80 ) );
113206917Smariusvoid
114206917Smarius test_ab_floatx80_z_flag(
115206917Smarius     flag ( floatx80, floatx80 ), flag ( floatx80, floatx80 ) );
116206917Smariusvoid
117206917Smarius test_abz_floatx80(
118206917Smarius     floatx80 ( floatx80, floatx80 ), floatx80 ( floatx80, floatx80 ) );
119206917Smarius
120206917Smarius#endif
121206917Smarius
122206917Smarius#ifdef FLOAT128
123206917Smarius
124206917Smariusvoid test_a_float128_z_int32( int32 ( float128 ), int32 ( float128 ) );
125206917Smarius#ifdef BITS64
126206917Smariusvoid test_a_float128_z_int64( int64 ( float128 ), int64 ( float128 ) );
127206917Smarius#endif
128206917Smariusvoid test_a_float128_z_float32( float32 ( float128 ), float32 ( float128 ) );
129206917Smariusvoid test_a_float128_z_float64( float64 ( float128 ), float64 ( float128 ) );
130206917Smarius#ifdef FLOATX80
131206917Smariusvoid
132206917Smarius test_a_float128_z_floatx80( floatx80 ( float128 ), floatx80 ( float128 ) );
133206917Smarius#endif
134206917Smariusvoid test_az_float128( float128 ( float128 ), float128 ( float128 ) );
135206917Smariusvoid
136206917Smarius test_ab_float128_z_flag(
137206917Smarius     flag ( float128, float128 ), flag ( float128, float128 ) );
138206917Smariusvoid
139206917Smarius test_abz_float128(
140206917Smarius     float128 ( float128, float128 ), float128 ( float128, float128 ) );
141206917Smarius
142206917Smarius#endif
143206917Smarius
144