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 --- |