]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - libiberty/copysign.c
Automatic date update in version.in
[thirdparty/binutils-gdb.git] / libiberty / copysign.c
CommitLineData
252b5132
RH
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
cc096b71 132#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN)
252b5132 133
7ec2fc6f 134double
9334f9c6 135copysign (double x, double y)
252b5132
RH
136{
137 __ieee_double_shape_type a,b;
138 b.value = y;
139 a.value = x;
140 a.number.sign =b.number.sign;
141 return a.value;
142}
cc096b71
DD
143
144#else
145
7ec2fc6f 146double
9334f9c6 147copysign (double x, double y)
cc096b71
DD
148{
149 if ((x < 0 && y > 0) || (x > 0 && y < 0))
150 return -x;
151 return x;
152}
153
154#endif