| #include <ansidecl.h> |
| |
| #ifdef __IEEE_BIG_ENDIAN |
| |
| typedef union |
| { |
| double value; |
| struct |
| { |
| unsigned int sign : 1; |
| unsigned int exponent: 11; |
| unsigned int fraction0:4; |
| unsigned int fraction1:16; |
| unsigned int fraction2:16; |
| unsigned int fraction3:16; |
| |
| } number; |
| struct |
| { |
| unsigned int sign : 1; |
| unsigned int exponent: 11; |
| unsigned int quiet:1; |
| unsigned int function0:3; |
| unsigned int function1:16; |
| unsigned int function2:16; |
| unsigned int function3:16; |
| } nan; |
| struct |
| { |
| unsigned long msw; |
| unsigned long lsw; |
| } parts; |
| long aslong[2]; |
| } __ieee_double_shape_type; |
| |
| #endif |
| |
| #ifdef __IEEE_LITTLE_ENDIAN |
| |
| typedef union |
| { |
| double value; |
| struct |
| { |
| #ifdef __SMALL_BITFIELDS |
| unsigned int fraction3:16; |
| unsigned int fraction2:16; |
| unsigned int fraction1:16; |
| unsigned int fraction0: 4; |
| #else |
| unsigned int fraction1:32; |
| unsigned int fraction0:20; |
| #endif |
| unsigned int exponent :11; |
| unsigned int sign : 1; |
| } number; |
| struct |
| { |
| #ifdef __SMALL_BITFIELDS |
| unsigned int function3:16; |
| unsigned int function2:16; |
| unsigned int function1:16; |
| unsigned int function0:3; |
| #else |
| unsigned int function1:32; |
| unsigned int function0:19; |
| #endif |
| unsigned int quiet:1; |
| unsigned int exponent: 11; |
| unsigned int sign : 1; |
| } nan; |
| struct |
| { |
| unsigned long lsw; |
| unsigned long msw; |
| } parts; |
| |
| long aslong[2]; |
| |
| } __ieee_double_shape_type; |
| |
| #endif |
| |
| #ifdef __IEEE_BIG_ENDIAN |
| typedef union |
| { |
| float value; |
| struct |
| { |
| unsigned int sign : 1; |
| unsigned int exponent: 8; |
| unsigned int fraction0: 7; |
| unsigned int fraction1: 16; |
| } number; |
| struct |
| { |
| unsigned int sign:1; |
| unsigned int exponent:8; |
| unsigned int quiet:1; |
| unsigned int function0:6; |
| unsigned int function1:16; |
| } nan; |
| long p1; |
| |
| } __ieee_float_shape_type; |
| #endif |
| |
| #ifdef __IEEE_LITTLE_ENDIAN |
| typedef union |
| { |
| float value; |
| struct |
| { |
| unsigned int fraction0: 7; |
| unsigned int fraction1: 16; |
| unsigned int exponent: 8; |
| unsigned int sign : 1; |
| } number; |
| struct |
| { |
| unsigned int function1:16; |
| unsigned int function0:6; |
| unsigned int quiet:1; |
| unsigned int exponent:8; |
| unsigned int sign:1; |
| } nan; |
| long p1; |
| |
| } __ieee_float_shape_type; |
| #endif |
| |
| |
| double DEFUN(copysign, (x, y), double x AND double y) |
| { |
| __ieee_double_shape_type a,b; |
| b.value = y; |
| a.value = x; |
| a.number.sign =b.number.sign; |
| return a.value; |
| } |