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