[Internal] move all primitives stuff in CompatPrim

This commit is contained in:
Vincent Hanquez 2015-04-11 08:26:30 +01:00
parent 6dcba8d8cd
commit 8655eb0468
2 changed files with 9 additions and 13 deletions

View File

@ -9,20 +9,15 @@
-- or other needed packages, so that modules don't need to use CPP
--
{-# LANGUAGE CPP #-}
{-# LANGUAGE MagicHash #-}
module Crypto.Internal.Compat
( unsafeDoIO
, popCount
, byteSwap64
, booleanPrim
) where
import System.IO.Unsafe
import Data.Word
import Data.Bits
#if __GLASGOW_HASKELL__ >= 708
import GHC.Prim
#endif
-- | perform io for hashes that do allocation and ffi.
-- unsafeDupablePerformIO is used when possible as the
@ -51,11 +46,3 @@ byteSwap64 w =
.|. ((w `shiftR` 24) .&. 0xff0000) .|. ((w .&. 0xff0000) `shiftL` 24)
.|. ((w `shiftR` 8) .&. 0xff000000) .|. ((w .&. 0xff000000) `shiftL` 8)
#endif
#if __GLASGOW_HASKELL__ >= 708
booleanPrim :: Int# -> Bool
booleanPrim v = tagToEnum# v
#else
booleanPrim :: Bool -> Bool
booleanPrim b = b
#endif

View File

@ -16,6 +16,7 @@
module Crypto.Internal.CompatPrim
( be32Prim
, byteswap32Prim
, booleanPrim
) where
import GHC.Prim
@ -38,3 +39,11 @@ byteswap32Prim w =
d = and# (uncheckedShiftRL# w 24#) 0x000000ff##
in or# a (or# b (or# c d))
#endif
#if __GLASGOW_HASKELL__ >= 708
booleanPrim :: Int# -> Bool
booleanPrim v = tagToEnum# v
#else
booleanPrim :: Bool -> Bool
booleanPrim b = b
#endif