OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libiberty/] [copysign.c] - Blame information for rev 800

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 736 jeremybenn
#include <ansidecl.h>
2
 
3
#ifdef __IEEE_BIG_ENDIAN
4
 
5
typedef 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
 
40
typedef 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
85
typedef 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
109
typedef 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
 
134
double
135
copysign (double x, double y)
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
}
143
 
144
#else
145
 
146
double
147
copysign (double x, double y)
148
{
149
  if ((x < 0 && y > 0) || (x > 0 && y < 0))
150
    return -x;
151
  return x;
152
}
153
 
154
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.