fp-ieee-0.1.0: src/GHC/Float/Compat.hs
{-# LANGUAGE CPP #-}
-- castFloatToWord32 is buggy on GHC <= 8.8 && 64-bit systems.
-- See https://gitlab.haskell.org/ghc/ghc/issues/16617
#include "MachDeps.h"
#if MIN_VERSION_base(4,14,0) || WORD_SIZE_IN_BITS == 32
module GHC.Float.Compat (module GHC.Float) where
import GHC.Float
#else
module GHC.Float.Compat (module GHC.Float, castFloatToWord32) where
import GHC.Float hiding (castFloatToWord32)
import qualified GHC.Float as F
import Data.Bits ((.&.))
import Data.Word (Word32)
-- Let's hope the compiler is not smart enough to eliminate the bit-and...
-- Or @fromIntegral (fromIntegral x :: Int) :: Word32@ might be better?
castFloatToWord32 :: Float -> Word32
castFloatToWord32 x = F.castFloatToWord32 x .&. 0xFFFFFFFF
#endif