From: simonm Date: Tue, 18 Nov 1997 10:41:40 +0000 (+0000) Subject: [project @ 1997-11-18 10:41:40 by simonm] X-Git-Tag: Approx_2487_patches~1291 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=1d111ef169341e0689c29046de29be6ed75f7fc5;p=ghc-hetmet.git [project @ 1997-11-18 10:41:40 by simonm] implement plusAddr, and add a load of ToDos for the various offset functions. --- diff --git a/ghc/lib/glaExts/Addr.lhs b/ghc/lib/glaExts/Addr.lhs index a634094..91056ee 100644 --- a/ghc/lib/glaExts/Addr.lhs +++ b/ghc/lib/glaExts/Addr.lhs @@ -8,7 +8,9 @@ {-# OPTIONS -fno-implicit-prelude #-} module Addr ( - Addr(..), -- ToDo: nullAddr, + Addr(..), + nullAddr, -- :: Addr + plusAddr, -- :: Addr -> Int -> Addr ) where import GHC @@ -18,14 +20,62 @@ import CCall \end{code} \begin{code} -data Addr = A# Addr# deriving (Eq, Ord) -- Glasgow extension +data Addr = A# Addr# deriving (Eq, Ord) nullAddr = ``NULL'' :: Addr +plusAddr :: Addr -> Int -> Addr +plusAddr (A# addr) (I# off) = A# (int2Addr# (addr2Int# addr +# off)) + instance CCallable Addr instance CCallable Addr# instance CReturnable Addr \end{code} +ToDo: + +-- read value out of _immutable_ memory + indexCharOffAddr :: Addr -> Int -> Char + indexIntOffAddr :: Addr -> Int -> Int -- should we drop this? + indexAddrOffAddr :: Addr -> Int -> Addr + indexFloatOffAddr :: Addr -> Int -> Float + indexDoubleOffAddr :: Addr -> Int -> Double + indexWord8OffAddr :: Addr -> Int -> Word8 + indexWord16OffAddr :: Addr -> Int -> Word16 + indexWord32OffAddr :: Addr -> Int -> Word32 + indexWord64OffAddr :: Addr -> Int -> Word64 + indexInt8OffAddr :: Addr -> Int -> Int8 + indexInt16OffAddr :: Addr -> Int -> Int16 + indexInt32OffAddr :: Addr -> Int -> Int32 + indexInt64OffAddr :: Addr -> Int -> Int64 + + -- read value out of mutable memory + readCharOffAddr :: Addr -> Int -> IO Char + readIntOffAddr :: Addr -> Int -> IO Int -- should we drop this? + readAddrOffAddr :: Addr -> Int -> IO Addr + readFloatOffAddr :: Addr -> Int -> IO Float + readDoubleOffAddr :: Addr -> Int -> IO Double + readWord8OffAddr :: Addr -> Int -> IO Word8 + readWord16OffAddr :: Addr -> Int -> IO Word16 + readWord32OffAddr :: Addr -> Int -> IO Word32 + readWord64OffAddr :: Addr -> Int -> IO Word64 + readInt8OffAddr :: Addr -> Int -> IO Int8 + readInt16OffAddr :: Addr -> Int -> IO Int16 + readInt32OffAddr :: Addr -> Int -> IO Int32 + readInt64OffAddr :: Addr -> Int -> IO Int64 + -- write value into mutable memory + writeCharOffAddr :: Addr -> Int -> Char -> IO () + writeIntOffAddr :: Addr -> Int -> Int -> IO () -- should we drop this? + writeAddrOffAddr :: Addr -> Int -> Addr -> IO () + writeFloatOffAddr :: Addr -> Int -> Float -> IO () + writeDoubleOffAddr :: Addr -> Int -> Double -> IO () + writeWord8OffAddr :: Addr -> Int -> Word8 -> IO () + writeWord16OffAddr :: Addr -> Int -> Word16 -> IO () + writeWord32OffAddr :: Addr -> Int -> Word32 -> IO () + writeWord64OffAddr :: Addr -> Int -> Word64 -> IO () + writeInt8OffAddr :: Addr -> Int -> Int8 -> IO () + writeInt16OffAddr :: Addr -> Int -> Int16 -> IO () + writeInt32OffAddr :: Addr -> Int -> Int32 -> IO () + writeInt64OffAddr :: Addr -> Int -> Int64 -> IO ()