Deleted Added
full compact
extended.h (169689) extended.h (171825)
1/* Software floating-point emulation.
2 Definitions for IEEE Extended Precision.
1/* Software floating-point emulation.
2 Definitions for IEEE Extended Precision.
3 Copyright (C) 1999,2006 Free Software Foundation, Inc.
3 Copyright (C) 1999,2006,2007 Free Software Foundation, Inc.
4 This file is part of the GNU C Library.
5 Contributed by Jakub Jelinek (jj@ultra.linux.cz).
6
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
11

--- 77 unchanged lines hidden (view full) ---

89 do { \
90 union _FP_UNION_E _flo; _flo.flt = (val); \
91 \
92 X##_f[2] = 0; X##_f[3] = 0; \
93 X##_f[0] = _flo.bits.frac0; \
94 X##_f[1] = _flo.bits.frac1; \
95 X##_e = _flo.bits.exp; \
96 X##_s = _flo.bits.sign; \
4 This file is part of the GNU C Library.
5 Contributed by Jakub Jelinek (jj@ultra.linux.cz).
6
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
11

--- 77 unchanged lines hidden (view full) ---

89 do { \
90 union _FP_UNION_E _flo; _flo.flt = (val); \
91 \
92 X##_f[2] = 0; X##_f[3] = 0; \
93 X##_f[0] = _flo.bits.frac0; \
94 X##_f[1] = _flo.bits.frac1; \
95 X##_e = _flo.bits.exp; \
96 X##_s = _flo.bits.sign; \
97 if (!X##_e && (X##_f[1] || X##_f[0]) \
98 && !(X##_f[1] & _FP_IMPLBIT_E)) \
99 { \
100 X##_e++; \
101 FP_SET_EXCEPTION(FP_EX_DENORM); \
102 } \
103 } while (0)
104
105#define FP_UNPACK_RAW_EP(X, val) \
106 do { \
107 union _FP_UNION_E *_flo = \
108 (union _FP_UNION_E *)(val); \
109 \
110 X##_f[2] = 0; X##_f[3] = 0; \
111 X##_f[0] = _flo->bits.frac0; \
112 X##_f[1] = _flo->bits.frac1; \
113 X##_e = _flo->bits.exp; \
114 X##_s = _flo->bits.sign; \
97 } while (0)
98
99#define FP_UNPACK_RAW_EP(X, val) \
100 do { \
101 union _FP_UNION_E *_flo = \
102 (union _FP_UNION_E *)(val); \
103 \
104 X##_f[2] = 0; X##_f[3] = 0; \
105 X##_f[0] = _flo->bits.frac0; \
106 X##_f[1] = _flo->bits.frac1; \
107 X##_e = _flo->bits.exp; \
108 X##_s = _flo->bits.sign; \
115 if (!X##_e && (X##_f[1] || X##_f[0]) \
116 && !(X##_f[1] & _FP_IMPLBIT_E)) \
117 { \
118 X##_e++; \
119 FP_SET_EXCEPTION(FP_EX_DENORM); \
120 } \
121 } while (0)
122
123#define FP_PACK_RAW_E(val, X) \
124 do { \
125 union _FP_UNION_E _flo; \
126 \
127 if (X##_e) X##_f[1] |= _FP_IMPLBIT_E; \
128 else X##_f[1] &= ~(_FP_IMPLBIT_E); \

--- 30 unchanged lines hidden (view full) ---

159#define FP_UNPACK_EP(X,val) \
160 do { \
161 FP_UNPACK_RAW_EP(X,val); \
162 _FP_UNPACK_CANONICAL(E,4,X); \
163 } while (0)
164
165#define FP_UNPACK_SEMIRAW_E(X,val) \
166 do { \
109 } while (0)
110
111#define FP_PACK_RAW_E(val, X) \
112 do { \
113 union _FP_UNION_E _flo; \
114 \
115 if (X##_e) X##_f[1] |= _FP_IMPLBIT_E; \
116 else X##_f[1] &= ~(_FP_IMPLBIT_E); \

--- 30 unchanged lines hidden (view full) ---

147#define FP_UNPACK_EP(X,val) \
148 do { \
149 FP_UNPACK_RAW_EP(X,val); \
150 _FP_UNPACK_CANONICAL(E,4,X); \
151 } while (0)
152
153#define FP_UNPACK_SEMIRAW_E(X,val) \
154 do { \
167 _FP_UNPACK_RAW_E(X,val); \
155 FP_UNPACK_RAW_E(X,val); \
168 _FP_UNPACK_SEMIRAW(E,4,X); \
169 } while (0)
170
171#define FP_UNPACK_SEMIRAW_EP(X,val) \
172 do { \
156 _FP_UNPACK_SEMIRAW(E,4,X); \
157 } while (0)
158
159#define FP_UNPACK_SEMIRAW_EP(X,val) \
160 do { \
173 _FP_UNPACK_RAW_EP(X,val); \
161 FP_UNPACK_RAW_EP(X,val); \
174 _FP_UNPACK_SEMIRAW(E,4,X); \
175 } while (0)
176
177#define FP_PACK_E(val,X) \
178 do { \
179 _FP_PACK_CANONICAL(E,4,X); \
180 FP_PACK_RAW_E(val,X); \
181 } while (0)
182
183#define FP_PACK_EP(val,X) \
184 do { \
185 _FP_PACK_CANONICAL(E,4,X); \
186 FP_PACK_RAW_EP(val,X); \
187 } while (0)
188
189#define FP_PACK_SEMIRAW_E(val,X) \
190 do { \
191 _FP_PACK_SEMIRAW(E,4,X); \
162 _FP_UNPACK_SEMIRAW(E,4,X); \
163 } while (0)
164
165#define FP_PACK_E(val,X) \
166 do { \
167 _FP_PACK_CANONICAL(E,4,X); \
168 FP_PACK_RAW_E(val,X); \
169 } while (0)
170
171#define FP_PACK_EP(val,X) \
172 do { \
173 _FP_PACK_CANONICAL(E,4,X); \
174 FP_PACK_RAW_EP(val,X); \
175 } while (0)
176
177#define FP_PACK_SEMIRAW_E(val,X) \
178 do { \
179 _FP_PACK_SEMIRAW(E,4,X); \
192 _FP_PACK_RAW_E(val,X); \
180 FP_PACK_RAW_E(val,X); \
193 } while (0)
194
195#define FP_PACK_SEMIRAW_EP(val,X) \
196 do { \
197 _FP_PACK_SEMIRAW(E,4,X); \
181 } while (0)
182
183#define FP_PACK_SEMIRAW_EP(val,X) \
184 do { \
185 _FP_PACK_SEMIRAW(E,4,X); \
198 _FP_PACK_RAW_EP(val,X); \
186 FP_PACK_RAW_EP(val,X); \
199 } while (0)
200
201#define FP_ISSIGNAN_E(X) _FP_ISSIGNAN(E,4,X)
202#define FP_NEG_E(R,X) _FP_NEG(E,4,R,X)
203#define FP_ADD_E(R,X,Y) _FP_ADD(E,4,R,X,Y)
204#define FP_SUB_E(R,X,Y) _FP_SUB(E,4,R,X,Y)
205#define FP_MUL_E(R,X,Y) _FP_MUL(E,4,R,X,Y)
206#define FP_DIV_E(R,X,Y) _FP_DIV(E,4,R,X,Y)

--- 65 unchanged lines hidden (view full) ---

272#define _FP_FRAC_HIGH_RAW_E(X) (X##_f[1])
273
274#else /* not _FP_W_TYPE_SIZE < 64 */
275union _FP_UNION_E
276{
277 XFtype flt;
278 struct {
279#if __BYTE_ORDER == __BIG_ENDIAN
187 } while (0)
188
189#define FP_ISSIGNAN_E(X) _FP_ISSIGNAN(E,4,X)
190#define FP_NEG_E(R,X) _FP_NEG(E,4,R,X)
191#define FP_ADD_E(R,X,Y) _FP_ADD(E,4,R,X,Y)
192#define FP_SUB_E(R,X,Y) _FP_SUB(E,4,R,X,Y)
193#define FP_MUL_E(R,X,Y) _FP_MUL(E,4,R,X,Y)
194#define FP_DIV_E(R,X,Y) _FP_DIV(E,4,R,X,Y)

--- 65 unchanged lines hidden (view full) ---

260#define _FP_FRAC_HIGH_RAW_E(X) (X##_f[1])
261
262#else /* not _FP_W_TYPE_SIZE < 64 */
263union _FP_UNION_E
264{
265 XFtype flt;
266 struct {
267#if __BYTE_ORDER == __BIG_ENDIAN
280 unsigned long pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
281 unsigned sign : 1;
282 unsigned exp : _FP_EXPBITS_E;
283 unsigned long frac : _FP_W_TYPE_SIZE;
268 _FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
269 unsigned sign : 1;
270 unsigned exp : _FP_EXPBITS_E;
271 _FP_W_TYPE frac : _FP_W_TYPE_SIZE;
284#else
272#else
285 unsigned long frac : _FP_W_TYPE_SIZE;
286 unsigned exp : _FP_EXPBITS_E;
287 unsigned sign : 1;
273 _FP_W_TYPE frac : _FP_W_TYPE_SIZE;
274 unsigned exp : _FP_EXPBITS_E;
275 unsigned sign : 1;
288#endif
289 } bits;
290};
291
292#define FP_DECL_E(X) _FP_DECL(2,X)
293
294#define FP_UNPACK_RAW_E(X, val) \
295 do { \
296 union _FP_UNION_E _flo; _flo.flt = (val); \
297 \
298 X##_f0 = _flo.bits.frac; \
299 X##_f1 = 0; \
300 X##_e = _flo.bits.exp; \
301 X##_s = _flo.bits.sign; \
276#endif
277 } bits;
278};
279
280#define FP_DECL_E(X) _FP_DECL(2,X)
281
282#define FP_UNPACK_RAW_E(X, val) \
283 do { \
284 union _FP_UNION_E _flo; _flo.flt = (val); \
285 \
286 X##_f0 = _flo.bits.frac; \
287 X##_f1 = 0; \
288 X##_e = _flo.bits.exp; \
289 X##_s = _flo.bits.sign; \
302 if (!X##_e && X##_f0 && !(X##_f0 & _FP_IMPLBIT_E)) \
303 { \
304 X##_e++; \
305 FP_SET_EXCEPTION(FP_EX_DENORM); \
306 } \
307 } while (0)
308
309#define FP_UNPACK_RAW_EP(X, val) \
310 do { \
311 union _FP_UNION_E *_flo = \
312 (union _FP_UNION_E *)(val); \
313 \
314 X##_f0 = _flo->bits.frac; \
315 X##_f1 = 0; \
316 X##_e = _flo->bits.exp; \
317 X##_s = _flo->bits.sign; \
290 } while (0)
291
292#define FP_UNPACK_RAW_EP(X, val) \
293 do { \
294 union _FP_UNION_E *_flo = \
295 (union _FP_UNION_E *)(val); \
296 \
297 X##_f0 = _flo->bits.frac; \
298 X##_f1 = 0; \
299 X##_e = _flo->bits.exp; \
300 X##_s = _flo->bits.sign; \
318 if (!X##_e && X##_f0 && !(X##_f0 & _FP_IMPLBIT_E)) \
319 { \
320 X##_e++; \
321 FP_SET_EXCEPTION(FP_EX_DENORM); \
322 } \
323 } while (0)
324
325#define FP_PACK_RAW_E(val, X) \
326 do { \
327 union _FP_UNION_E _flo; \
328 \
329 if (X##_e) X##_f0 |= _FP_IMPLBIT_E; \
330 else X##_f0 &= ~(_FP_IMPLBIT_E); \

--- 29 unchanged lines hidden (view full) ---

360#define FP_UNPACK_EP(X,val) \
361 do { \
362 FP_UNPACK_RAW_EP(X,val); \
363 _FP_UNPACK_CANONICAL(E,2,X); \
364 } while (0)
365
366#define FP_UNPACK_SEMIRAW_E(X,val) \
367 do { \
301 } while (0)
302
303#define FP_PACK_RAW_E(val, X) \
304 do { \
305 union _FP_UNION_E _flo; \
306 \
307 if (X##_e) X##_f0 |= _FP_IMPLBIT_E; \
308 else X##_f0 &= ~(_FP_IMPLBIT_E); \

--- 29 unchanged lines hidden (view full) ---

338#define FP_UNPACK_EP(X,val) \
339 do { \
340 FP_UNPACK_RAW_EP(X,val); \
341 _FP_UNPACK_CANONICAL(E,2,X); \
342 } while (0)
343
344#define FP_UNPACK_SEMIRAW_E(X,val) \
345 do { \
368 _FP_UNPACK_RAW_E(X,val); \
346 FP_UNPACK_RAW_E(X,val); \
369 _FP_UNPACK_SEMIRAW(E,2,X); \
370 } while (0)
371
372#define FP_UNPACK_SEMIRAW_EP(X,val) \
373 do { \
347 _FP_UNPACK_SEMIRAW(E,2,X); \
348 } while (0)
349
350#define FP_UNPACK_SEMIRAW_EP(X,val) \
351 do { \
374 _FP_UNPACK_RAW_EP(X,val); \
352 FP_UNPACK_RAW_EP(X,val); \
375 _FP_UNPACK_SEMIRAW(E,2,X); \
376 } while (0)
377
378#define FP_PACK_E(val,X) \
379 do { \
380 _FP_PACK_CANONICAL(E,2,X); \
381 FP_PACK_RAW_E(val,X); \
382 } while (0)
383
384#define FP_PACK_EP(val,X) \
385 do { \
386 _FP_PACK_CANONICAL(E,2,X); \
387 FP_PACK_RAW_EP(val,X); \
388 } while (0)
389
390#define FP_PACK_SEMIRAW_E(val,X) \
391 do { \
392 _FP_PACK_SEMIRAW(E,2,X); \
353 _FP_UNPACK_SEMIRAW(E,2,X); \
354 } while (0)
355
356#define FP_PACK_E(val,X) \
357 do { \
358 _FP_PACK_CANONICAL(E,2,X); \
359 FP_PACK_RAW_E(val,X); \
360 } while (0)
361
362#define FP_PACK_EP(val,X) \
363 do { \
364 _FP_PACK_CANONICAL(E,2,X); \
365 FP_PACK_RAW_EP(val,X); \
366 } while (0)
367
368#define FP_PACK_SEMIRAW_E(val,X) \
369 do { \
370 _FP_PACK_SEMIRAW(E,2,X); \
393 _FP_PACK_RAW_E(val,X); \
371 FP_PACK_RAW_E(val,X); \
394 } while (0)
395
396#define FP_PACK_SEMIRAW_EP(val,X) \
397 do { \
398 _FP_PACK_SEMIRAW(E,2,X); \
372 } while (0)
373
374#define FP_PACK_SEMIRAW_EP(val,X) \
375 do { \
376 _FP_PACK_SEMIRAW(E,2,X); \
399 _FP_PACK_RAW_EP(val,X); \
377 FP_PACK_RAW_EP(val,X); \
400 } while (0)
401
402#define FP_ISSIGNAN_E(X) _FP_ISSIGNAN(E,2,X)
403#define FP_NEG_E(R,X) _FP_NEG(E,2,R,X)
404#define FP_ADD_E(R,X,Y) _FP_ADD(E,2,R,X,Y)
405#define FP_SUB_E(R,X,Y) _FP_SUB(E,2,R,X,Y)
406#define FP_MUL_E(R,X,Y) _FP_MUL(E,2,R,X,Y)
407#define FP_DIV_E(R,X,Y) _FP_DIV(E,2,R,X,Y)

--- 46 unchanged lines hidden ---
378 } while (0)
379
380#define FP_ISSIGNAN_E(X) _FP_ISSIGNAN(E,2,X)
381#define FP_NEG_E(R,X) _FP_NEG(E,2,R,X)
382#define FP_ADD_E(R,X,Y) _FP_ADD(E,2,R,X,Y)
383#define FP_SUB_E(R,X,Y) _FP_SUB(E,2,R,X,Y)
384#define FP_MUL_E(R,X,Y) _FP_MUL(E,2,R,X,Y)
385#define FP_DIV_E(R,X,Y) _FP_DIV(E,2,R,X,Y)

--- 46 unchanged lines hidden ---