1*1f21f64aSMarius Strobl 
2*1f21f64aSMarius Strobl /*
3*1f21f64aSMarius Strobl ===============================================================================
4*1f21f64aSMarius Strobl 
5*1f21f64aSMarius Strobl This C header file is part of TestFloat, Release 2a, a package of programs
6*1f21f64aSMarius Strobl for testing the correctness of floating-point arithmetic complying to the
7*1f21f64aSMarius Strobl IEC/IEEE Standard for Floating-Point.
8*1f21f64aSMarius Strobl 
9*1f21f64aSMarius Strobl Written by John R. Hauser.  More information is available through the Web
10*1f21f64aSMarius Strobl page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
11*1f21f64aSMarius Strobl 
12*1f21f64aSMarius Strobl THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
13*1f21f64aSMarius Strobl has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
14*1f21f64aSMarius Strobl TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
15*1f21f64aSMarius Strobl PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
16*1f21f64aSMarius Strobl AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
17*1f21f64aSMarius Strobl 
18*1f21f64aSMarius Strobl Derivative works are acceptable, even for commercial purposes, so long as
19*1f21f64aSMarius Strobl (1) they include prominent notice that the work is derivative, and (2) they
20*1f21f64aSMarius Strobl include prominent notice akin to these four paragraphs for those parts of
21*1f21f64aSMarius Strobl this code that are retained.
22*1f21f64aSMarius Strobl 
23*1f21f64aSMarius Strobl ===============================================================================
24*1f21f64aSMarius Strobl */
25*1f21f64aSMarius Strobl 
26*1f21f64aSMarius Strobl enum {
27*1f21f64aSMarius Strobl     INT32_TO_FLOAT32 = 1,
28*1f21f64aSMarius Strobl     INT32_TO_FLOAT64,
29*1f21f64aSMarius Strobl     INT32_TO_FLOATX80,
30*1f21f64aSMarius Strobl     INT32_TO_FLOAT128,
31*1f21f64aSMarius Strobl     INT64_TO_FLOAT32,
32*1f21f64aSMarius Strobl     INT64_TO_FLOAT64,
33*1f21f64aSMarius Strobl     INT64_TO_FLOATX80,
34*1f21f64aSMarius Strobl     INT64_TO_FLOAT128,
35*1f21f64aSMarius Strobl     FLOAT32_TO_INT32,
36*1f21f64aSMarius Strobl     FLOAT32_TO_INT32_ROUND_TO_ZERO,
37*1f21f64aSMarius Strobl     FLOAT32_TO_INT64,
38*1f21f64aSMarius Strobl     FLOAT32_TO_INT64_ROUND_TO_ZERO,
39*1f21f64aSMarius Strobl     FLOAT32_TO_FLOAT64,
40*1f21f64aSMarius Strobl     FLOAT32_TO_FLOATX80,
41*1f21f64aSMarius Strobl     FLOAT32_TO_FLOAT128,
42*1f21f64aSMarius Strobl     FLOAT32_ROUND_TO_INT,
43*1f21f64aSMarius Strobl     FLOAT32_ADD,
44*1f21f64aSMarius Strobl     FLOAT32_SUB,
45*1f21f64aSMarius Strobl     FLOAT32_MUL,
46*1f21f64aSMarius Strobl     FLOAT32_DIV,
47*1f21f64aSMarius Strobl     FLOAT32_REM,
48*1f21f64aSMarius Strobl     FLOAT32_SQRT,
49*1f21f64aSMarius Strobl     FLOAT32_EQ,
50*1f21f64aSMarius Strobl     FLOAT32_LE,
51*1f21f64aSMarius Strobl     FLOAT32_LT,
52*1f21f64aSMarius Strobl     FLOAT32_EQ_SIGNALING,
53*1f21f64aSMarius Strobl     FLOAT32_LE_QUIET,
54*1f21f64aSMarius Strobl     FLOAT32_LT_QUIET,
55*1f21f64aSMarius Strobl     FLOAT64_TO_INT32,
56*1f21f64aSMarius Strobl     FLOAT64_TO_INT32_ROUND_TO_ZERO,
57*1f21f64aSMarius Strobl     FLOAT64_TO_INT64,
58*1f21f64aSMarius Strobl     FLOAT64_TO_INT64_ROUND_TO_ZERO,
59*1f21f64aSMarius Strobl     FLOAT64_TO_FLOAT32,
60*1f21f64aSMarius Strobl     FLOAT64_TO_FLOATX80,
61*1f21f64aSMarius Strobl     FLOAT64_TO_FLOAT128,
62*1f21f64aSMarius Strobl     FLOAT64_ROUND_TO_INT,
63*1f21f64aSMarius Strobl     FLOAT64_ADD,
64*1f21f64aSMarius Strobl     FLOAT64_SUB,
65*1f21f64aSMarius Strobl     FLOAT64_MUL,
66*1f21f64aSMarius Strobl     FLOAT64_DIV,
67*1f21f64aSMarius Strobl     FLOAT64_REM,
68*1f21f64aSMarius Strobl     FLOAT64_SQRT,
69*1f21f64aSMarius Strobl     FLOAT64_EQ,
70*1f21f64aSMarius Strobl     FLOAT64_LE,
71*1f21f64aSMarius Strobl     FLOAT64_LT,
72*1f21f64aSMarius Strobl     FLOAT64_EQ_SIGNALING,
73*1f21f64aSMarius Strobl     FLOAT64_LE_QUIET,
74*1f21f64aSMarius Strobl     FLOAT64_LT_QUIET,
75*1f21f64aSMarius Strobl     FLOATX80_TO_INT32,
76*1f21f64aSMarius Strobl     FLOATX80_TO_INT32_ROUND_TO_ZERO,
77*1f21f64aSMarius Strobl     FLOATX80_TO_INT64,
78*1f21f64aSMarius Strobl     FLOATX80_TO_INT64_ROUND_TO_ZERO,
79*1f21f64aSMarius Strobl     FLOATX80_TO_FLOAT32,
80*1f21f64aSMarius Strobl     FLOATX80_TO_FLOAT64,
81*1f21f64aSMarius Strobl     FLOATX80_TO_FLOAT128,
82*1f21f64aSMarius Strobl     FLOATX80_ROUND_TO_INT,
83*1f21f64aSMarius Strobl     FLOATX80_ADD,
84*1f21f64aSMarius Strobl     FLOATX80_SUB,
85*1f21f64aSMarius Strobl     FLOATX80_MUL,
86*1f21f64aSMarius Strobl     FLOATX80_DIV,
87*1f21f64aSMarius Strobl     FLOATX80_REM,
88*1f21f64aSMarius Strobl     FLOATX80_SQRT,
89*1f21f64aSMarius Strobl     FLOATX80_EQ,
90*1f21f64aSMarius Strobl     FLOATX80_LE,
91*1f21f64aSMarius Strobl     FLOATX80_LT,
92*1f21f64aSMarius Strobl     FLOATX80_EQ_SIGNALING,
93*1f21f64aSMarius Strobl     FLOATX80_LE_QUIET,
94*1f21f64aSMarius Strobl     FLOATX80_LT_QUIET,
95*1f21f64aSMarius Strobl     FLOAT128_TO_INT32,
96*1f21f64aSMarius Strobl     FLOAT128_TO_INT32_ROUND_TO_ZERO,
97*1f21f64aSMarius Strobl     FLOAT128_TO_INT64,
98*1f21f64aSMarius Strobl     FLOAT128_TO_INT64_ROUND_TO_ZERO,
99*1f21f64aSMarius Strobl     FLOAT128_TO_FLOAT32,
100*1f21f64aSMarius Strobl     FLOAT128_TO_FLOAT64,
101*1f21f64aSMarius Strobl     FLOAT128_TO_FLOATX80,
102*1f21f64aSMarius Strobl     FLOAT128_ROUND_TO_INT,
103*1f21f64aSMarius Strobl     FLOAT128_ADD,
104*1f21f64aSMarius Strobl     FLOAT128_SUB,
105*1f21f64aSMarius Strobl     FLOAT128_MUL,
106*1f21f64aSMarius Strobl     FLOAT128_DIV,
107*1f21f64aSMarius Strobl     FLOAT128_REM,
108*1f21f64aSMarius Strobl     FLOAT128_SQRT,
109*1f21f64aSMarius Strobl     FLOAT128_EQ,
110*1f21f64aSMarius Strobl     FLOAT128_LE,
111*1f21f64aSMarius Strobl     FLOAT128_LT,
112*1f21f64aSMarius Strobl     FLOAT128_EQ_SIGNALING,
113*1f21f64aSMarius Strobl     FLOAT128_LE_QUIET,
114*1f21f64aSMarius Strobl     FLOAT128_LT_QUIET,
115*1f21f64aSMarius Strobl     NUM_FUNCTIONS
116*1f21f64aSMarius Strobl };
117*1f21f64aSMarius Strobl 
118*1f21f64aSMarius Strobl typedef struct {
119*1f21f64aSMarius Strobl     char *name;
120*1f21f64aSMarius Strobl     int8 numInputs;
121*1f21f64aSMarius Strobl     flag roundingPrecision, roundingMode;
122*1f21f64aSMarius Strobl } functionT;
123*1f21f64aSMarius Strobl extern const functionT functions[ NUM_FUNCTIONS ];
124*1f21f64aSMarius Strobl extern const flag functionExists[ NUM_FUNCTIONS ];
125*1f21f64aSMarius Strobl 
126*1f21f64aSMarius Strobl enum {
127*1f21f64aSMarius Strobl     ROUND_NEAREST_EVEN = 1,
128*1f21f64aSMarius Strobl     ROUND_TO_ZERO,
129*1f21f64aSMarius Strobl     ROUND_DOWN,
130*1f21f64aSMarius Strobl     ROUND_UP,
131*1f21f64aSMarius Strobl     NUM_ROUNDINGMODES
132*1f21f64aSMarius Strobl };
133*1f21f64aSMarius Strobl 
134*1f21f64aSMarius Strobl void testFunction( uint8, int8, int8 );
135*1f21f64aSMarius Strobl 
136