module PrimOps ( compareByteArrays# ) where
import Foreign.C.Types (CInt (..), CSize (..))
import GHC.Exts (Int (I#))
import GHC.Exts (ByteArray#, Int#)
import System.IO.Unsafe (unsafeDupablePerformIO)
compareByteArrays# :: ByteArray# -> Int# -> ByteArray# -> Int# -> Int# -> Int#
compareByteArrays# ba1# ofs1# ba2# ofs2# n#
= unI (fromIntegral (unsafeDupablePerformIO (c_memcmp ba1# ofs1 ba2# ofs2 n)))
where
unI (I# i#) = i#
ofs1 = fromIntegral (I# ofs1#)
ofs2 = fromIntegral (I# ofs2#)
n = fromIntegral (I# n#)
foreign import ccall unsafe "hs_text_short_memcmp"
c_memcmp :: ByteArray# -> CSize -> ByteArray# -> CSize -> CSize -> IO CInt