Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 77b2555b52a894a2e39a42e43d993df875c46a6a 84 lines 1.9 kB view raw
1/* IEEE754 floating point arithmetic 2 * double precision: common utilities 3 */ 4/* 5 * MIPS floating point support 6 * Copyright (C) 1994-2000 Algorithmics Ltd. 7 * http://www.algor.co.uk 8 * 9 * ######################################################################## 10 * 11 * This program is free software; you can distribute it and/or modify it 12 * under the terms of the GNU General Public License (Version 2) as 13 * published by the Free Software Foundation. 14 * 15 * This program is distributed in the hope it will be useful, but WITHOUT 16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 18 * for more details. 19 * 20 * You should have received a copy of the GNU General Public License along 21 * with this program; if not, write to the Free Software Foundation, Inc., 22 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 23 * 24 * ######################################################################## 25 */ 26 27 28#include "ieee754dp.h" 29 30int ieee754dp_finite(ieee754dp x) 31{ 32 return DPBEXP(x) != DP_EMAX + 1 + DP_EBIAS; 33} 34 35ieee754dp ieee754dp_copysign(ieee754dp x, ieee754dp y) 36{ 37 CLEARCX; 38 DPSIGN(x) = DPSIGN(y); 39 return x; 40} 41 42 43ieee754dp ieee754dp_neg(ieee754dp x) 44{ 45 COMPXDP; 46 47 EXPLODEXDP; 48 CLEARCX; 49 FLUSHXDP; 50 51 if (xc == IEEE754_CLASS_SNAN) { 52 SETCX(IEEE754_INVALID_OPERATION); 53 return ieee754dp_nanxcpt(ieee754dp_indef(), "neg"); 54 } 55 56 if (ieee754dp_isnan(x)) /* but not infinity */ 57 return ieee754dp_nanxcpt(x, "neg", x); 58 59 /* quick fix up */ 60 DPSIGN(x) ^= 1; 61 return x; 62} 63 64 65ieee754dp ieee754dp_abs(ieee754dp x) 66{ 67 COMPXDP; 68 69 EXPLODEXDP; 70 CLEARCX; 71 FLUSHXDP; 72 73 if (xc == IEEE754_CLASS_SNAN) { 74 SETCX(IEEE754_INVALID_OPERATION); 75 return ieee754dp_nanxcpt(ieee754dp_indef(), "neg"); 76 } 77 78 if (ieee754dp_isnan(x)) /* but not infinity */ 79 return ieee754dp_nanxcpt(x, "abs", x); 80 81 /* quick fix up */ 82 DPSIGN(x) = 0; 83 return x; 84}