    -- |
    -- Module:      Data.Bit.PdepPext
    -- Copyright:   (c) 2022 Andrew Lelechenko
    -- Licence:     BSD3
    --
    -- | Parallel bit deposit and extract instructions.
    -- https://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets#Parallel_bit_deposit_and_extract

    {-# LANGUAGE MagicHash    #-}

    module Data.Bit.PdepPext
      ( pdep
      , pext
      ) where

    import GHC.Exts

    pdep :: Word -> Word -> Word
    pdep :: Word -> Word -> Word
    pdep (W# Word#
    src#) (W# Word#
    mask#) = Word# -> Word
    W# (Word# -> Word# -> Word#
    pdep# Word#
    src# Word#
    mask#)

    pext :: Word -> Word -> Word
    pext :: Word -> Word -> Word
    pext (W# Word#
    src#) (W# Word#
    mask#) = Word# -> Word
    W# (Word# -> Word# -> Word#
    pext# Word#
    src# Word#
    mask#)