{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE GHCForeignImportPrim #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnliftedFFITypes #-}
{-# LANGUAGE UnboxedTuples #-}

module GHC.Integer.GMP.PrimExt
    ( popCountInteger#
    , testBitInteger#
    , setBitInteger#
    , clearBitInteger#
    ) where

import GHC.Prim (Int#, ByteArray#)

foreign import prim "integer_cmm_popCountIntegerzh" popCountInteger#
  :: Int# -> ByteArray# -> Int#

foreign import prim "integer_cmm_testBitIntegerzh" testBitInteger#
  :: Int# -> ByteArray# -> Int# -> Int#

foreign import prim "integer_cmm_setBitIntegerzh" setBitInteger#
  :: Int# -> ByteArray# -> Int# -> (# Int#, ByteArray# #)

foreign import prim "integer_cmm_clearBitIntegerzh" clearBitInteger#
  :: Int# -> ByteArray# -> Int# -> (# Int#, ByteArray# #)