Implement `decodeDouble_Int64#` primop
authorHerbert Valerio Riedel <hvr@gnu.org>
Wed, 17 Sep 2014 15:54:20 +0000 (17:54 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Wed, 17 Sep 2014 15:55:37 +0000 (17:55 +0200)
commitb62bd5ecf3be421778e4835010b6b334e95c5a56
treee19e2efc012ec3940c4b4c739f0b1e8bcfed3eaf
parent3c2829017943522a946e7ae0560034c7d28d96ce
Implement `decodeDouble_Int64#` primop

The existing `decodeDouble_2Int#` primop is rather inconvenient to use
(and in fact is not even used by `integer-gmp`) as the mantissa is split
into 3 components which would actually fit in an `Int64#` value.

However, `decodeDouble_Int64#` is to be used by the new `integer-gmp2`
re-implementation (see #9281).

Moreover, `decodeDouble_2Int#` performs direct bit-wise operations on the
IEEE representation which can be replaced by a combination of the
portable standard C99 `scalbn(3)` and `frexp(3)` functions.

Differential Revision: https://phabricator.haskell.org/D160
compiler/prelude/primops.txt.pp
includes/stg/MiscClosures.h
rts/Linker.c
rts/PrimOps.cmm
rts/StgPrimFloat.c
rts/StgPrimFloat.h