{-# LANGUAGE UnboxedTuples #-}

module Raehik.Compat.GHC.Exts.GHC908MemcpyPrimops where

import GHC.Exts
import GHC.IO ( unIO )
import Foreign.Marshal.Utils ( copyBytes, fillBytes )

copyAddrToAddrNonOverlapping#
    :: Addr# -> Addr# -> Int# -> State# RealWorld -> State# RealWorld
copyAddrToAddrNonOverlapping# :: Addr# -> Addr# -> Int# -> State# RealWorld -> State# RealWorld
copyAddrToAddrNonOverlapping# Addr#
src# Addr#
dest# Int#
len# State# RealWorld
s# =
    case IO () -> State# RealWorld -> (# State# RealWorld, () #)
forall a. IO a -> State# RealWorld -> (# State# RealWorld, a #)
unIO (Ptr Any -> Ptr Any -> Int -> IO ()
forall a. Ptr a -> Ptr a -> Int -> IO ()
copyBytes (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
dest#) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
src#) (Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int# -> Int
I# Int#
len#))) State# RealWorld
s# of
      (# State# RealWorld
s'#, () #) -> State# RealWorld
s'#

setAddrRange#
    :: Addr# -> Int# -> Int# -> State# RealWorld -> State# RealWorld
setAddrRange# :: Addr# -> Int# -> Int# -> State# RealWorld -> State# RealWorld
setAddrRange# Addr#
dest# Int#
w# Int#
len# State# RealWorld
s0 =
    case IO () -> State# RealWorld -> (# State# RealWorld, () #)
forall a. IO a -> State# RealWorld -> (# State# RealWorld, a #)
unIO (Ptr Any -> Word8 -> Int -> IO ()
forall a. Ptr a -> Word8 -> Int -> IO ()
fillBytes (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
dest#) (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int# -> Int
I# Int#
w#)) (Int# -> Int
I# Int#
len#)) State# RealWorld
s0 of
      (# State# RealWorld
s1, () #) -> State# RealWorld
s1