1*2a6b7db3Sskrll #include <ansidecl.h> 2*2a6b7db3Sskrll 3*2a6b7db3Sskrll #ifdef __IEEE_BIG_ENDIAN 4*2a6b7db3Sskrll 5*2a6b7db3Sskrll typedef union 6*2a6b7db3Sskrll { 7*2a6b7db3Sskrll double value; 8*2a6b7db3Sskrll struct 9*2a6b7db3Sskrll { 10*2a6b7db3Sskrll unsigned int sign : 1; 11*2a6b7db3Sskrll unsigned int exponent: 11; 12*2a6b7db3Sskrll unsigned int fraction0:4; 13*2a6b7db3Sskrll unsigned int fraction1:16; 14*2a6b7db3Sskrll unsigned int fraction2:16; 15*2a6b7db3Sskrll unsigned int fraction3:16; 16*2a6b7db3Sskrll 17*2a6b7db3Sskrll } number; 18*2a6b7db3Sskrll struct 19*2a6b7db3Sskrll { 20*2a6b7db3Sskrll unsigned int sign : 1; 21*2a6b7db3Sskrll unsigned int exponent: 11; 22*2a6b7db3Sskrll unsigned int quiet:1; 23*2a6b7db3Sskrll unsigned int function0:3; 24*2a6b7db3Sskrll unsigned int function1:16; 25*2a6b7db3Sskrll unsigned int function2:16; 26*2a6b7db3Sskrll unsigned int function3:16; 27*2a6b7db3Sskrll } nan; 28*2a6b7db3Sskrll struct 29*2a6b7db3Sskrll { 30*2a6b7db3Sskrll unsigned long msw; 31*2a6b7db3Sskrll unsigned long lsw; 32*2a6b7db3Sskrll } parts; 33*2a6b7db3Sskrll long aslong[2]; 34*2a6b7db3Sskrll } __ieee_double_shape_type; 35*2a6b7db3Sskrll 36*2a6b7db3Sskrll #endif 37*2a6b7db3Sskrll 38*2a6b7db3Sskrll #ifdef __IEEE_LITTLE_ENDIAN 39*2a6b7db3Sskrll 40*2a6b7db3Sskrll typedef union 41*2a6b7db3Sskrll { 42*2a6b7db3Sskrll double value; 43*2a6b7db3Sskrll struct 44*2a6b7db3Sskrll { 45*2a6b7db3Sskrll #ifdef __SMALL_BITFIELDS 46*2a6b7db3Sskrll unsigned int fraction3:16; 47*2a6b7db3Sskrll unsigned int fraction2:16; 48*2a6b7db3Sskrll unsigned int fraction1:16; 49*2a6b7db3Sskrll unsigned int fraction0: 4; 50*2a6b7db3Sskrll #else 51*2a6b7db3Sskrll unsigned int fraction1:32; 52*2a6b7db3Sskrll unsigned int fraction0:20; 53*2a6b7db3Sskrll #endif 54*2a6b7db3Sskrll unsigned int exponent :11; 55*2a6b7db3Sskrll unsigned int sign : 1; 56*2a6b7db3Sskrll } number; 57*2a6b7db3Sskrll struct 58*2a6b7db3Sskrll { 59*2a6b7db3Sskrll #ifdef __SMALL_BITFIELDS 60*2a6b7db3Sskrll unsigned int function3:16; 61*2a6b7db3Sskrll unsigned int function2:16; 62*2a6b7db3Sskrll unsigned int function1:16; 63*2a6b7db3Sskrll unsigned int function0:3; 64*2a6b7db3Sskrll #else 65*2a6b7db3Sskrll unsigned int function1:32; 66*2a6b7db3Sskrll unsigned int function0:19; 67*2a6b7db3Sskrll #endif 68*2a6b7db3Sskrll unsigned int quiet:1; 69*2a6b7db3Sskrll unsigned int exponent: 11; 70*2a6b7db3Sskrll unsigned int sign : 1; 71*2a6b7db3Sskrll } nan; 72*2a6b7db3Sskrll struct 73*2a6b7db3Sskrll { 74*2a6b7db3Sskrll unsigned long lsw; 75*2a6b7db3Sskrll unsigned long msw; 76*2a6b7db3Sskrll } parts; 77*2a6b7db3Sskrll 78*2a6b7db3Sskrll long aslong[2]; 79*2a6b7db3Sskrll 80*2a6b7db3Sskrll } __ieee_double_shape_type; 81*2a6b7db3Sskrll 82*2a6b7db3Sskrll #endif 83*2a6b7db3Sskrll 84*2a6b7db3Sskrll #ifdef __IEEE_BIG_ENDIAN 85*2a6b7db3Sskrll typedef union 86*2a6b7db3Sskrll { 87*2a6b7db3Sskrll float value; 88*2a6b7db3Sskrll struct 89*2a6b7db3Sskrll { 90*2a6b7db3Sskrll unsigned int sign : 1; 91*2a6b7db3Sskrll unsigned int exponent: 8; 92*2a6b7db3Sskrll unsigned int fraction0: 7; 93*2a6b7db3Sskrll unsigned int fraction1: 16; 94*2a6b7db3Sskrll } number; 95*2a6b7db3Sskrll struct 96*2a6b7db3Sskrll { 97*2a6b7db3Sskrll unsigned int sign:1; 98*2a6b7db3Sskrll unsigned int exponent:8; 99*2a6b7db3Sskrll unsigned int quiet:1; 100*2a6b7db3Sskrll unsigned int function0:6; 101*2a6b7db3Sskrll unsigned int function1:16; 102*2a6b7db3Sskrll } nan; 103*2a6b7db3Sskrll long p1; 104*2a6b7db3Sskrll 105*2a6b7db3Sskrll } __ieee_float_shape_type; 106*2a6b7db3Sskrll #endif 107*2a6b7db3Sskrll 108*2a6b7db3Sskrll #ifdef __IEEE_LITTLE_ENDIAN 109*2a6b7db3Sskrll typedef union 110*2a6b7db3Sskrll { 111*2a6b7db3Sskrll float value; 112*2a6b7db3Sskrll struct 113*2a6b7db3Sskrll { 114*2a6b7db3Sskrll unsigned int fraction0: 7; 115*2a6b7db3Sskrll unsigned int fraction1: 16; 116*2a6b7db3Sskrll unsigned int exponent: 8; 117*2a6b7db3Sskrll unsigned int sign : 1; 118*2a6b7db3Sskrll } number; 119*2a6b7db3Sskrll struct 120*2a6b7db3Sskrll { 121*2a6b7db3Sskrll unsigned int function1:16; 122*2a6b7db3Sskrll unsigned int function0:6; 123*2a6b7db3Sskrll unsigned int quiet:1; 124*2a6b7db3Sskrll unsigned int exponent:8; 125*2a6b7db3Sskrll unsigned int sign:1; 126*2a6b7db3Sskrll } nan; 127*2a6b7db3Sskrll long p1; 128*2a6b7db3Sskrll 129*2a6b7db3Sskrll } __ieee_float_shape_type; 130*2a6b7db3Sskrll #endif 131*2a6b7db3Sskrll 132*2a6b7db3Sskrll #if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN) 133*2a6b7db3Sskrll 134*2a6b7db3Sskrll double copysign(double x,double y)135*2a6b7db3Sskrllcopysign (double x, double y) 136*2a6b7db3Sskrll { 137*2a6b7db3Sskrll __ieee_double_shape_type a,b; 138*2a6b7db3Sskrll b.value = y; 139*2a6b7db3Sskrll a.value = x; 140*2a6b7db3Sskrll a.number.sign =b.number.sign; 141*2a6b7db3Sskrll return a.value; 142*2a6b7db3Sskrll } 143*2a6b7db3Sskrll 144*2a6b7db3Sskrll #else 145*2a6b7db3Sskrll 146*2a6b7db3Sskrll double copysign(double x,double y)147*2a6b7db3Sskrllcopysign (double x, double y) 148*2a6b7db3Sskrll { 149*2a6b7db3Sskrll if ((x < 0 && y > 0) || (x > 0 && y < 0)) 150*2a6b7db3Sskrll return -x; 151*2a6b7db3Sskrll return x; 152*2a6b7db3Sskrll } 153*2a6b7db3Sskrll 154*2a6b7db3Sskrll #endif 155