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