source: trunk/src/binutils/libiberty/copysign.c@ 1489

Last change on this file since 1489 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.6 KB
Line 
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#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN)
133
134double
135copysign (x, y)
136 double x, y;
137{
138 __ieee_double_shape_type a,b;
139 b.value = y;
140 a.value = x;
141 a.number.sign =b.number.sign;
142 return a.value;
143}
144
145#else
146
147double
148copysign (x, y)
149 double x, y;
150{
151 if ((x < 0 && y > 0) || (x > 0 && y < 0))
152 return -x;
153 return x;
154}
155
156#endif
Note: See TracBrowser for help on using the repository browser.