diff options
Diffstat (limited to 'rts/StgPrimFloat.c')
-rw-r--r-- | rts/StgPrimFloat.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/rts/StgPrimFloat.c b/rts/StgPrimFloat.c index 123e77b806..6e78546b3e 100644 --- a/rts/StgPrimFloat.c +++ b/rts/StgPrimFloat.c @@ -17,6 +17,10 @@ #define IEEE_FLOATING_POINT 1 +#if FLT_RADIX != 2 +# error FLT_RADIX != 2 not supported +#endif + /* * Encoding and decoding Doubles. Code based on the HBC code * (lib/fltcode.c). @@ -158,6 +162,20 @@ __decodeDouble_2Int (I_ *man_sign, W_ *man_high, W_ *man_low, I_ *exp, StgDouble } } +/* This is expected to replace uses of __decodeDouble_2Int() in the long run */ +StgInt +__decodeDouble_Int64 (StgInt64 *const mantissa, const StgDouble dbl) +{ + if (dbl) { + int exp = 0; + *mantissa = (StgInt64)scalbn(frexp(dbl, &exp), DBL_MANT_DIG); + return exp-DBL_MANT_DIG; + } else { + *mantissa = 0; + return 0; + } +} + /* Convenient union types for checking the layout of IEEE 754 types - based on defs in GNU libc <ieee754.h> */ |