X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FStgPrimFloat.c;h=960d5f8fd0558a165647ad894d44d534dac9bf7e;hb=6ea86573500e4a576d22feec71e36cf27c94aaa9;hp=2a739779271d9008f065b08fdf61e5ee81a93821;hpb=e58d0e9b37910fbf802804f534accb159235d539;p=ghc-hetmet.git diff --git a/ghc/rts/StgPrimFloat.c b/ghc/rts/StgPrimFloat.c index 2a73977..960d5f8 100644 --- a/ghc/rts/StgPrimFloat.c +++ b/ghc/rts/StgPrimFloat.c @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------------- - * $Id: StgPrimFloat.c,v 1.4 1999/02/18 12:26:12 simonm Exp $ + * $Id: StgPrimFloat.c,v 1.6 2000/11/07 13:30:41 simonmar Exp $ * - * (c) The GHC Team, 1998-1999 + * (c) The GHC Team, 1998-2000 * * Miscellaneous support for floating-point primitives * @@ -15,11 +15,7 @@ */ #define GMP_BASE 4294967296.0 -#if FLOATS_AS_DOUBLES /* defined in StgTypes.h */ -#define DNBIGIT 1 /* mantissa of a double will fit in one long */ -#else #define DNBIGIT 2 /* mantissa of a double will fit in two longs */ -#endif #define FNBIGIT 1 /* for float, one long */ #if IEEE_FLOATING_POINT @@ -51,13 +47,8 @@ __encodeDouble (I_ size, StgByteArray ba, I_ e) /* result = s * 2^e */ I_ i; /* Convert MP_INT to a double; knows a lot about internal rep! */ - i = __abs(size)-1; - if (i < 0) { - r = 0.0; - } else { - for (r = arr[i], i--; i >= 0; i--) - r = r * GMP_BASE + arr[i]; - } + for(r = 0.0, i = __abs(size)-1; i >= 0; i--) + r = (r * GMP_BASE) + arr[i]; /* Now raise to the exponent */ if ( r != 0.0 ) /* Lennart suggests this avoids a bug in MIPS's ldexp */ @@ -89,7 +80,6 @@ __int_encodeDouble (I_ j, I_ e) return r; } -#if ! FLOATS_AS_DOUBLES StgFloat __encodeFloat (I_ size, StgByteArray ba, I_ e) /* result = s * 2^e */ { @@ -98,7 +88,7 @@ __encodeFloat (I_ size, StgByteArray ba, I_ e) /* result = s * 2^e */ I_ i; /* Convert MP_INT to a float; knows a lot about internal rep! */ - for(r = 0.0, i = __abs(size); i >= 0; i--) + for(r = 0.0, i = __abs(size)-1; i >= 0; i--) r = (r * GMP_BASE) + arr[i]; /* Now raise to the exponent */ @@ -131,8 +121,6 @@ __int_encodeFloat (I_ j, I_ e) return r; } -#endif /* FLOATS_AS_DOUBLES */ - /* This only supports IEEE floating point */ void @@ -190,7 +178,6 @@ __decodeDouble (MP_INT *man, I_ *exp, StgDouble dbl) } } -#if ! FLOATS_AS_DOUBLES void __decodeFloat (MP_INT *man, I_ *exp, StgFloat flt) { @@ -234,7 +221,6 @@ __decodeFloat (MP_INT *man, I_ *exp, StgFloat flt) man->_mp_size = -man->_mp_size; } } -#endif /* FLOATS_AS_DOUBLES */ /* Convenient union types for checking the layout of IEEE 754 types - based on defs in GNU libc @@ -327,8 +313,7 @@ union stg_ieee754_dbl #ifdef IEEE_FLOATING_POINT StgInt -isDoubleNaN(d) -StgDouble d; +isDoubleNaN(StgDouble d) { union stg_ieee754_dbl u; @@ -342,8 +327,7 @@ StgDouble d; } StgInt -isDoubleInfinite(d) -StgDouble d; +isDoubleInfinite(StgDouble d) { union stg_ieee754_dbl u; @@ -358,8 +342,7 @@ StgDouble d; } StgInt -isDoubleDenormalized(d) -StgDouble d; +isDoubleDenormalized(StgDouble d) { union stg_ieee754_dbl u; @@ -381,8 +364,7 @@ StgDouble d; } StgInt -isDoubleNegativeZero(d) -StgDouble d; +isDoubleNegativeZero(StgDouble d) { union stg_ieee754_dbl u; @@ -409,12 +391,8 @@ StgDouble d; StgInt -isFloatNaN(f) -StgFloat f; +isFloatNaN(StgFloat f) { -# ifdef FLOATS_AS_DOUBLES - return (isDoubleNaN(f)); -# else union stg_ieee754_flt u; u.f = f; @@ -423,17 +401,11 @@ StgFloat f; return ( u.ieee.exponent == 255 /* 2^8 - 1 */ && u.ieee.mantissa != 0); - -# endif /* !FLOATS_AS_DOUBLES */ } StgInt -isFloatInfinite(f) -StgFloat f; +isFloatInfinite(StgFloat f) { -# ifdef FLOATS_AS_DOUBLES - return (isDoubleInfinite(f)); -# else union stg_ieee754_flt u; u.f = f; @@ -442,16 +414,11 @@ StgFloat f; return ( u.ieee.exponent == 255 /* 2^8 - 1 */ && u.ieee.mantissa == 0); -# endif /* !FLOATS_AS_DOUBLES */ } StgInt -isFloatDenormalized(f) -StgFloat f; +isFloatDenormalized(StgFloat f) { -# ifdef FLOATS_AS_DOUBLES - return (isDoubleDenormalized(f)); -# else union stg_ieee754_flt u; u.f = f; @@ -465,16 +432,11 @@ StgFloat f; return ( u.ieee.exponent == 0 && u.ieee.mantissa != 0); -#endif /* !FLOATS_AS_DOUBLES */ } StgInt -isFloatNegativeZero(f) -StgFloat f; +isFloatNegativeZero(StgFloat f) { -#ifdef FLOATS_AS_DOUBLES - return (isDoubleNegativeZero(f)); -# else union stg_ieee754_flt u; u.f = f; @@ -483,7 +445,6 @@ StgFloat f; u.ieee.negative && u.ieee.exponent == 0 && u.ieee.mantissa == 0); -# endif /* !FLOATS_AS_DOUBLES */ } #else /* ! IEEE_FLOATING_POINT */