100bf4279Sespie #include <ansidecl.h> 200bf4279Sespie 300bf4279Sespie #ifdef __IEEE_BIG_ENDIAN 400bf4279Sespie 500bf4279Sespie typedef union 600bf4279Sespie { 700bf4279Sespie double value; 800bf4279Sespie struct 900bf4279Sespie { 1000bf4279Sespie unsigned int sign : 1; 1100bf4279Sespie unsigned int exponent: 11; 1200bf4279Sespie unsigned int fraction0:4; 1300bf4279Sespie unsigned int fraction1:16; 1400bf4279Sespie unsigned int fraction2:16; 1500bf4279Sespie unsigned int fraction3:16; 1600bf4279Sespie 1700bf4279Sespie } number; 1800bf4279Sespie struct 1900bf4279Sespie { 2000bf4279Sespie unsigned int sign : 1; 2100bf4279Sespie unsigned int exponent: 11; 2200bf4279Sespie unsigned int quiet:1; 2300bf4279Sespie unsigned int function0:3; 2400bf4279Sespie unsigned int function1:16; 2500bf4279Sespie unsigned int function2:16; 2600bf4279Sespie unsigned int function3:16; 2700bf4279Sespie } nan; 2800bf4279Sespie struct 2900bf4279Sespie { 3000bf4279Sespie unsigned long msw; 3100bf4279Sespie unsigned long lsw; 3200bf4279Sespie } parts; 3300bf4279Sespie long aslong[2]; 3400bf4279Sespie } __ieee_double_shape_type; 3500bf4279Sespie 3600bf4279Sespie #endif 3700bf4279Sespie 3800bf4279Sespie #ifdef __IEEE_LITTLE_ENDIAN 3900bf4279Sespie 4000bf4279Sespie typedef union 4100bf4279Sespie { 4200bf4279Sespie double value; 4300bf4279Sespie struct 4400bf4279Sespie { 4500bf4279Sespie #ifdef __SMALL_BITFIELDS 4600bf4279Sespie unsigned int fraction3:16; 4700bf4279Sespie unsigned int fraction2:16; 4800bf4279Sespie unsigned int fraction1:16; 4900bf4279Sespie unsigned int fraction0: 4; 5000bf4279Sespie #else 5100bf4279Sespie unsigned int fraction1:32; 5200bf4279Sespie unsigned int fraction0:20; 5300bf4279Sespie #endif 5400bf4279Sespie unsigned int exponent :11; 5500bf4279Sespie unsigned int sign : 1; 5600bf4279Sespie } number; 5700bf4279Sespie struct 5800bf4279Sespie { 5900bf4279Sespie #ifdef __SMALL_BITFIELDS 6000bf4279Sespie unsigned int function3:16; 6100bf4279Sespie unsigned int function2:16; 6200bf4279Sespie unsigned int function1:16; 6300bf4279Sespie unsigned int function0:3; 6400bf4279Sespie #else 6500bf4279Sespie unsigned int function1:32; 6600bf4279Sespie unsigned int function0:19; 6700bf4279Sespie #endif 6800bf4279Sespie unsigned int quiet:1; 6900bf4279Sespie unsigned int exponent: 11; 7000bf4279Sespie unsigned int sign : 1; 7100bf4279Sespie } nan; 7200bf4279Sespie struct 7300bf4279Sespie { 7400bf4279Sespie unsigned long lsw; 7500bf4279Sespie unsigned long msw; 7600bf4279Sespie } parts; 7700bf4279Sespie 7800bf4279Sespie long aslong[2]; 7900bf4279Sespie 8000bf4279Sespie } __ieee_double_shape_type; 8100bf4279Sespie 8200bf4279Sespie #endif 8300bf4279Sespie 8400bf4279Sespie #ifdef __IEEE_BIG_ENDIAN 8500bf4279Sespie typedef union 8600bf4279Sespie { 8700bf4279Sespie float value; 8800bf4279Sespie struct 8900bf4279Sespie { 9000bf4279Sespie unsigned int sign : 1; 9100bf4279Sespie unsigned int exponent: 8; 9200bf4279Sespie unsigned int fraction0: 7; 9300bf4279Sespie unsigned int fraction1: 16; 9400bf4279Sespie } number; 9500bf4279Sespie struct 9600bf4279Sespie { 9700bf4279Sespie unsigned int sign:1; 9800bf4279Sespie unsigned int exponent:8; 9900bf4279Sespie unsigned int quiet:1; 10000bf4279Sespie unsigned int function0:6; 10100bf4279Sespie unsigned int function1:16; 10200bf4279Sespie } nan; 10300bf4279Sespie long p1; 10400bf4279Sespie 10500bf4279Sespie } __ieee_float_shape_type; 10600bf4279Sespie #endif 10700bf4279Sespie 10800bf4279Sespie #ifdef __IEEE_LITTLE_ENDIAN 10900bf4279Sespie typedef union 11000bf4279Sespie { 11100bf4279Sespie float value; 11200bf4279Sespie struct 11300bf4279Sespie { 11400bf4279Sespie unsigned int fraction0: 7; 11500bf4279Sespie unsigned int fraction1: 16; 11600bf4279Sespie unsigned int exponent: 8; 11700bf4279Sespie unsigned int sign : 1; 11800bf4279Sespie } number; 11900bf4279Sespie struct 12000bf4279Sespie { 12100bf4279Sespie unsigned int function1:16; 12200bf4279Sespie unsigned int function0:6; 12300bf4279Sespie unsigned int quiet:1; 12400bf4279Sespie unsigned int exponent:8; 12500bf4279Sespie unsigned int sign:1; 12600bf4279Sespie } nan; 12700bf4279Sespie long p1; 12800bf4279Sespie 12900bf4279Sespie } __ieee_float_shape_type; 13000bf4279Sespie #endif 13100bf4279Sespie 1329588ddcfSespie #if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN) 13300bf4279Sespie 13425e200daSespie double copysign(double x,double y)135*150b7e42Smiodcopysign (double x, double y) 13600bf4279Sespie { 13700bf4279Sespie __ieee_double_shape_type a,b; 13800bf4279Sespie b.value = y; 13900bf4279Sespie a.value = x; 14000bf4279Sespie a.number.sign =b.number.sign; 14100bf4279Sespie return a.value; 14200bf4279Sespie } 1439588ddcfSespie 1449588ddcfSespie #else 1459588ddcfSespie 14625e200daSespie double copysign(double x,double y)147*150b7e42Smiodcopysign (double x, double y) 1489588ddcfSespie { 1499588ddcfSespie if ((x < 0 && y > 0) || (x > 0 && y < 0)) 1509588ddcfSespie return -x; 1519588ddcfSespie return x; 1529588ddcfSespie } 1539588ddcfSespie 1549588ddcfSespie #endif 155