xref: /netbsd-src/lib/libc/arch/sparc64/softfloat/qp.c (revision a1fe3592c65d7226e9961a82801b61650acd0b36)
1 /* $NetBSD: qp.c,v 1.2 2002/03/27 03:41:54 jmc Exp $ */
2 
3 #include <sys/cdefs.h>
4 #include <memory.h>
5 
6 #include "milieu.h"
7 #include "softfloat.h"
8 
9 
10 void _Qp_add(float128 *c, float128 *a, float128 *b);
11 
12 void _Qp_add(float128 *c, float128 *a, float128 *b)
13 {
14 	 *c =  float128_add(*a, *b);
15 }
16 
17 
18 int _Qp_cmp(float128 *a, float128 *b);
19 
20 int _Qp_cmp(float128 *a, float128 *b)
21 {
22 
23 	if (float128_eq(*a, *b))
24 		return 0;
25 
26 	if (float128_le(*a, *b))
27 		return 1;
28 
29 	return 2;
30 }
31 
32 
33 /*
34  * XXX
35  */
36 int _Qp_cmpe(float128 *a, float128 *b);
37 
38 int _Qp_cmpe(float128 *a, float128 *b)
39 {
40 	return _Qp_cmp(a, b);
41 }
42 
43 
44 void _Qp_div(float128 *c, float128 *a, float128 *b);
45 
46 void _Qp_div(float128 *c, float128 *a, float128 *b)
47 {
48 	*c = float128_div(*a, *b);
49 }
50 
51 
52 void _Qp_dtoq(float128 *c, double a);
53 
54 void _Qp_dtoq(float128 *c, double a)
55 {
56 	float64 _b;
57 	memcpy (&_b, &a, sizeof(float64));
58 	*c = float64_to_float128(b);
59 }
60 
61 
62 
63 int _Qp_feq(float128 *a, float128 *b);
64 
65 int _Qp_feq(float128 *a, float128 *b)
66 {
67 	return float128_eq(*a, *b);
68 }
69 
70 
71 int _Qp_fge(float128 *a, float128 *b);
72 
73 int _Qp_fge(float128 *a, float128 *b)
74 {
75 	return float128_le(*b, *a);
76 }
77 
78 
79 int _Qp_fgt(float128 *a, float128 *b);
80 
81 int _Qp_fgt(float128 *a, float128 *b)
82 {
83 	return float128_lt(*b, *a);
84 }
85 
86 
87 int _Qp_fle(float128 *a, float128 *b);
88 
89 int _Qp_fle(float128 *a, float128 *b)
90 {
91 	return float128_le(*a, *b);
92 }
93 
94 
95 int _Qp_flt(float128 *a, float128 *b);
96 
97 int _Qp_flt(float128 *a, float128 *b)
98 {
99 	return float128_lt(*a, *b);
100 }
101 
102 
103 int _Qp_fne(float128 *a, float128 *b);
104 
105 int _Qp_fne(float128 *a, float128 *b)
106 {
107 	return !float128_eq(*a, *b);
108 }
109 
110 
111 void _Qp_itoq(float128 *c, int a);
112 
113 void _Qp_itoq(float128 *c, int a)
114 {
115 	*c = int32_to_float128(a);
116 }
117 
118 
119 
120 void _Qp_mul(float128 *c, float128 *a, float128 *b);
121 
122 void _Qp_mul(float128 *c, float128 *a, float128 *b)
123 {
124 	*c = float128_mul(*a, *b);
125 }
126 
127 
128 /*
129  * XXX easy way to do this, softfloat function
130  */
131 void _Qp_neg(float128 *c, float128 *a);
132 
133 static float128 __zero = {0x4034000000000000, 0x00000000};
134 
135 void _Qp_neg(float128 *c, float128 *a)
136 {
137 	*c = float128_sub(__zero, *a);
138 }
139 
140 
141 
142 double _Qp_qtod(float128 *a);
143 
144 double _Qp_qtod(float128 *a)
145 {
146 	float64 _c;
147 	double c;
148 
149 	_c = float128_to_float64(*a);
150 
151 	memcpy(&c, &_c, sizeof(double));
152 
153 	return c;
154 }
155 
156 
157 int _Qp_qtoi(float128 *a);
158 
159 int _Qp_qtoi(float128 *a)
160 {
161 	return float128_to_int32(*a);
162 }
163 
164 
165 float _Qp_qtos(float128 *a);
166 
167 float _Qp_qtos(float128 *a)
168 {
169 	float c;
170 	float32 _c;
171 
172 	_c = float128_to_float32(*a);
173 
174 	memcpy(&c, &_c, sizeof(_c));
175 
176 	return c;
177 }
178 
179 
180 unsigned int _Qp_qtoui(float128 *a);
181 
182 unsigned int _Qp_qtoui(float128 *a)
183 {
184 	return (unsigned int)float128_to_int32(*a);
185 }
186 
187 
188 
189 unsigned long _Qp_qtoux(float128 *a);
190 
191 unsigned long _Qp_qtoux(float128 *a)
192 {
193 	return (unsigned long)float128_to_int64(*a);
194 }
195 
196 
197 
198 long _Qp_qtox(float128 *a);
199 
200 long _Qp_qtox(float128 *a)
201 {
202 	return (long)float128_to_int64(*a);
203 }
204 
205 
206 void _Qp_sqrt(float128 *c, float128 *a);
207 
208 void _Qp_sqrt(float128 *c, float128 *a)
209 {
210 	*c = float128_sqrt(*a);
211 }
212 
213 
214 void _Qp_stoq(float128 *c, float a);
215 
216 void _Qp_stoq(float128 *c, float a)
217 {
218 	float32 _a;
219 
220 	memcpy(&_a, &a, sizeof(a));
221 
222 	*c = float32_to_float128(_a);
223 }
224 
225 
226 void _Qp_sub(float128 *c, float128 *a, float128 *b);
227 
228 void _Qp_sub(float128 *c, float128 *a, float128 *b)
229 {
230 	*c = float128_sub(*a, *b);
231 }
232 
233 
234 void _Qp_uitoq(float128 *c, unsigned int a);
235 
236 void _Qp_uitoq(float128 *c, unsigned int a)
237 {
238 	*c = int32_to_float128(a);
239 }
240 
241 
242 void _Qp_uxtoq(float128 *c, unsigned long a);
243 
244 void _Qp_uxtoq(float128 *c, unsigned long a)
245 {
246 	*c = int64_to_float128(a);
247 }
248 
249 
250 void _Qp_xtoq(float128 *c, long a);
251 
252 void _Qp_xtoq(float128 *c, long a)
253 {
254 	*c = int64_to_float128(a);
255 }
256