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
26206917Smariusenum {
27206917Smarius    INT32_TO_FLOAT32 = 1,
28206917Smarius    INT32_TO_FLOAT64,
29206917Smarius    INT32_TO_FLOATX80,
30206917Smarius    INT32_TO_FLOAT128,
31206917Smarius    INT64_TO_FLOAT32,
32206917Smarius    INT64_TO_FLOAT64,
33206917Smarius    INT64_TO_FLOATX80,
34206917Smarius    INT64_TO_FLOAT128,
35206917Smarius    FLOAT32_TO_INT32,
36206917Smarius    FLOAT32_TO_INT32_ROUND_TO_ZERO,
37206917Smarius    FLOAT32_TO_INT64,
38206917Smarius    FLOAT32_TO_INT64_ROUND_TO_ZERO,
39206917Smarius    FLOAT32_TO_FLOAT64,
40206917Smarius    FLOAT32_TO_FLOATX80,
41206917Smarius    FLOAT32_TO_FLOAT128,
42206917Smarius    FLOAT32_ROUND_TO_INT,
43206917Smarius    FLOAT32_ADD,
44206917Smarius    FLOAT32_SUB,
45206917Smarius    FLOAT32_MUL,
46206917Smarius    FLOAT32_DIV,
47206917Smarius    FLOAT32_REM,
48206917Smarius    FLOAT32_SQRT,
49206917Smarius    FLOAT32_EQ,
50206917Smarius    FLOAT32_LE,
51206917Smarius    FLOAT32_LT,
52206917Smarius    FLOAT32_EQ_SIGNALING,
53206917Smarius    FLOAT32_LE_QUIET,
54206917Smarius    FLOAT32_LT_QUIET,
55206917Smarius    FLOAT64_TO_INT32,
56206917Smarius    FLOAT64_TO_INT32_ROUND_TO_ZERO,
57206917Smarius    FLOAT64_TO_INT64,
58206917Smarius    FLOAT64_TO_INT64_ROUND_TO_ZERO,
59206917Smarius    FLOAT64_TO_FLOAT32,
60206917Smarius    FLOAT64_TO_FLOATX80,
61206917Smarius    FLOAT64_TO_FLOAT128,
62206917Smarius    FLOAT64_ROUND_TO_INT,
63206917Smarius    FLOAT64_ADD,
64206917Smarius    FLOAT64_SUB,
65206917Smarius    FLOAT64_MUL,
66206917Smarius    FLOAT64_DIV,
67206917Smarius    FLOAT64_REM,
68206917Smarius    FLOAT64_SQRT,
69206917Smarius    FLOAT64_EQ,
70206917Smarius    FLOAT64_LE,
71206917Smarius    FLOAT64_LT,
72206917Smarius    FLOAT64_EQ_SIGNALING,
73206917Smarius    FLOAT64_LE_QUIET,
74206917Smarius    FLOAT64_LT_QUIET,
75206917Smarius    FLOATX80_TO_INT32,
76206917Smarius    FLOATX80_TO_INT32_ROUND_TO_ZERO,
77206917Smarius    FLOATX80_TO_INT64,
78206917Smarius    FLOATX80_TO_INT64_ROUND_TO_ZERO,
79206917Smarius    FLOATX80_TO_FLOAT32,
80206917Smarius    FLOATX80_TO_FLOAT64,
81206917Smarius    FLOATX80_TO_FLOAT128,
82206917Smarius    FLOATX80_ROUND_TO_INT,
83206917Smarius    FLOATX80_ADD,
84206917Smarius    FLOATX80_SUB,
85206917Smarius    FLOATX80_MUL,
86206917Smarius    FLOATX80_DIV,
87206917Smarius    FLOATX80_REM,
88206917Smarius    FLOATX80_SQRT,
89206917Smarius    FLOATX80_EQ,
90206917Smarius    FLOATX80_LE,
91206917Smarius    FLOATX80_LT,
92206917Smarius    FLOATX80_EQ_SIGNALING,
93206917Smarius    FLOATX80_LE_QUIET,
94206917Smarius    FLOATX80_LT_QUIET,
95206917Smarius    FLOAT128_TO_INT32,
96206917Smarius    FLOAT128_TO_INT32_ROUND_TO_ZERO,
97206917Smarius    FLOAT128_TO_INT64,
98206917Smarius    FLOAT128_TO_INT64_ROUND_TO_ZERO,
99206917Smarius    FLOAT128_TO_FLOAT32,
100206917Smarius    FLOAT128_TO_FLOAT64,
101206917Smarius    FLOAT128_TO_FLOATX80,
102206917Smarius    FLOAT128_ROUND_TO_INT,
103206917Smarius    FLOAT128_ADD,
104206917Smarius    FLOAT128_SUB,
105206917Smarius    FLOAT128_MUL,
106206917Smarius    FLOAT128_DIV,
107206917Smarius    FLOAT128_REM,
108206917Smarius    FLOAT128_SQRT,
109206917Smarius    FLOAT128_EQ,
110206917Smarius    FLOAT128_LE,
111206917Smarius    FLOAT128_LT,
112206917Smarius    FLOAT128_EQ_SIGNALING,
113206917Smarius    FLOAT128_LE_QUIET,
114206917Smarius    FLOAT128_LT_QUIET,
115206917Smarius    NUM_FUNCTIONS
116206917Smarius};
117206917Smarius
118206917Smariustypedef struct {
119206917Smarius    char *name;
120206917Smarius    int8 numInputs;
121206917Smarius    flag roundingPrecision, roundingMode;
122206917Smarius} functionT;
123206917Smariusextern const functionT functions[ NUM_FUNCTIONS ];
124206917Smariusextern const flag functionExists[ NUM_FUNCTIONS ];
125206917Smarius
126206917Smariusenum {
127206917Smarius    ROUND_NEAREST_EVEN = 1,
128206917Smarius    ROUND_TO_ZERO,
129206917Smarius    ROUND_DOWN,
130206917Smarius    ROUND_UP,
131206917Smarius    NUM_ROUNDINGMODES
132206917Smarius};
133206917Smarius
134206917Smariusvoid testFunction( uint8, int8, int8 );
135206917Smarius
136