@@ -24,7 +24,7 @@ module Streamly.Internal.Data.Unboxed
2424import Data.Complex (Complex((:+)))
2525import GHC.Base (IO(..))
2626import GHC.Int (Int32(..), Int64(..))
27−import GHC.Word (Word8(..), Word64(..))
27+import GHC.Word (Word32(..), Word64(..), Word8(..))
2828import Foreign.Storable (Storable(..))
2929
3030import GHC.Exts
@@ -119,6 +119,7 @@ unpin arr@(MutableByteArray marr#) =
119119#define SIZEOF_HSINT_PRIMITIVE 8#
120120#define SIZEOF_HSWORD_PRIMITIVE 8#
121121#define SIZEOF_WORD8_PRIMITIVE 1#
122+#define SIZEOF_WORD32_PRIMITIVE 4#
122123#define SIZEOF_WORD64_PRIMITIVE 8#
123124#define SIZEOF_HSDOUBLE_PRIMITIVE 8#
124125#define SIZEOF_INT32_PRIMITIVE 4#
@@ -196,6 +197,18 @@ writeWord8ArrayAsWord# ::
196197writeWord8ArrayAsWord# arr# i# =
197198 writeWordArray# arr# (quotInt# i# SIZEOF_HSWORD_PRIMITIVE)
198199
200+{-# INLINE readWord8ArrayAsWord32# #-}
201+readWord8ArrayAsWord32# ::
202+ MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
203+readWord8ArrayAsWord32# arr# i# =
204+ readWord32Array# arr# (quotInt# i# SIZEOF_WORD32_PRIMITIVE)
205+
206+{-# INLINE writeWord8ArrayAsWord32# #-}
207+writeWord8ArrayAsWord32# ::
208+ MutableByteArray# d -> Int# -> Word# -> State# d -> State# d
209+writeWord8ArrayAsWord32# arr# i# =
210+ writeWord32Array# arr# (quotInt# i# SIZEOF_WORD32_PRIMITIVE)
211+
199212{-# INLINE readWord8ArrayAsWord64# #-}
200213readWord8ArrayAsWord64# ::
201214 MutableByteArray# d -> Int# -> State# d -> (# State# d, WORD64TYP #)
@@ -313,6 +326,11 @@ DERIVE_UNBOXED( Word8
313326 , readWord8Array#
314327 , writeWord8Array#)
315328
329+DERIVE_UNBOXED( Word32
330+ , W32#
331+ , readWord8ArrayAsWord32#
332+ , writeWord8ArrayAsWord32#)
333+
316334DERIVE_UNBOXED( Word64
317335 , W64#
318336 , readWord8ArrayAsWord64#