Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Transfer values between Haskell and JIT generated code
in a Haskell-compatible format as dictated by the Storable
class.
E.g. instance Bool
may use more than a byte (e.g. Word32).
For tuples, you may use the Tuple
wrapper from the storable-record
package.
The Storable
instance for Vector
s is compatible with arrays,
i.e. indices always count upwards irrespective of machine endianess
and tuple elements are interleaved.
Synopsis
- class (Storable a, Value a, Phi (ValueOf a), Undefined (ValueOf a)) => C a where
- load :: Value (Ptr a) -> CodeGenFunction r (ValueOf a)
- store :: ValueOf a -> Value (Ptr a) -> CodeGenFunction r ()
- storeNext :: (C a, ValueOf a ~ al, Value (Ptr a) ~ ptr) => al -> ptr -> CodeGenFunction r ptr
- modify :: (C a, ValueOf a ~ al) => (al -> CodeGenFunction r al) -> Value (Ptr a) -> CodeGenFunction r ()
- class (Storable tuple, Value tuple, Phi (ValueOf tuple), Undefined (ValueOf tuple)) => Tuple tuple where
- loadTuple :: Value (Ptr (Tuple tuple)) -> CodeGenFunction r (ValueOf tuple)
- storeTuple :: ValueOf tuple -> Value (Ptr (Tuple tuple)) -> CodeGenFunction r ()
- class C a => Vector a where
- assembleVector :: Positive n => Proxy a -> Vector n (ValueOf a) -> CodeGenFunction r (VectorValueOf n a)
- disassembleVector :: Positive n => Proxy a -> VectorValueOf n a -> CodeGenFunction r (Vector n (ValueOf a))
- class TupleVector a where
- deinterleave :: Positive n => Proxy a -> Vector n (ValueOf a) -> CodeGenFunction r (VectorValueOf n a)
- interleave :: Positive n => Proxy a -> VectorValueOf n a -> CodeGenFunction r (Vector n (ValueOf a))
- loadNewtype :: (C a, ValueOf a ~ al) => (a -> wrapped) -> (al -> wrappedl) -> Value (Ptr wrapped) -> CodeGenFunction r wrappedl
- storeNewtype :: (C a, ValueOf a ~ al) => (a -> wrapped) -> (wrappedl -> al) -> wrappedl -> Value (Ptr wrapped) -> CodeGenFunction r ()
- loadTraversable :: (Repeat f, Traversable f, C a, ValueOf a ~ al) => Value (Ptr (f a)) -> CodeGenFunction r (f al)
- loadApplicative :: (Applicative f, Traversable f, C a, ValueOf a ~ al) => Value (Ptr (f a)) -> CodeGenFunction r (f al)
- storeFoldable :: (Foldable f, C a, ValueOf a ~ al) => f al -> Value (Ptr (f a)) -> CodeGenFunction r ()
- advancePtr :: (Storable a, Value (Ptr a) ~ ptr) => Value Int -> ptr -> CodeGenFunction r ptr
- incrementPtr :: (Storable a, Value (Ptr a) ~ ptr) => ptr -> CodeGenFunction r ptr
- decrementPtr :: (Storable a, Value (Ptr a) ~ ptr) => ptr -> CodeGenFunction r ptr
- arrayLoop :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA) => Value i -> ptrA -> s -> (ptrA -> s -> CodeGenFunction r s) -> CodeGenFunction r s
- arrayLoop2 :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, Storable b, Value (Ptr b) ~ ptrB) => Value i -> ptrA -> ptrB -> s -> (ptrA -> ptrB -> s -> CodeGenFunction r s) -> CodeGenFunction r s
- arrayLoopMaybeCont :: (Phi s, Undefined s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, T (ptrA, s) ~ z) => Value i -> ptrA -> s -> (ptrA -> s -> T r z s) -> CodeGenFunction r (Value i, T s)
- arrayLoopMaybeCont2 :: (Phi s, Undefined s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, Storable b, Value (Ptr b) ~ ptrB, T (ptrA, (ptrB, s)) ~ z) => Value i -> ptrA -> ptrB -> s -> (ptrA -> ptrB -> s -> T r z s) -> CodeGenFunction r (Value i, T s)
Basic class
class (Storable a, Value a, Phi (ValueOf a), Undefined (ValueOf a)) => C a where Source #
load :: Value (Ptr a) -> CodeGenFunction r (ValueOf a) Source #
store :: ValueOf a -> Value (Ptr a) -> CodeGenFunction r () Source #
Instances
C Int16 Source # | |
C Int32 Source # | |
C Int64 Source # | |
C Int8 Source # | |
C Word16 Source # | |
C Word32 Source # | |
C Word64 Source # | |
C Word8 Source # | |
C Bool8 Source # | |
C () Source # | |
Defined in LLVM.Extra.Storable.Private | |
C Bool Source # | Not very efficient implementation
because we want to adapt to |
C Double Source # | |
C Float Source # | |
C Int Source # | |
C Word Source # | |
C a => C (Complex a) Source # | |
Tuple tuple => C (Tuple tuple) Source # | |
(Positive n, Vector a, VectorValue n a, Phi (VectorValueOf n a)) => C (Vector n a) Source # | |
Defined in LLVM.Extra.Storable.Private |
storeNext :: (C a, ValueOf a ~ al, Value (Ptr a) ~ ptr) => al -> ptr -> CodeGenFunction r ptr Source #
modify :: (C a, ValueOf a ~ al) => (al -> CodeGenFunction r al) -> Value (Ptr a) -> CodeGenFunction r () Source #
Classes for tuples and vectors
class (Storable tuple, Value tuple, Phi (ValueOf tuple), Undefined (ValueOf tuple)) => Tuple tuple where Source #
loadTuple :: Value (Ptr (Tuple tuple)) -> CodeGenFunction r (ValueOf tuple) Source #
storeTuple :: ValueOf tuple -> Value (Ptr (Tuple tuple)) -> CodeGenFunction r () Source #
class C a => Vector a where Source #
assembleVector :: Positive n => Proxy a -> Vector n (ValueOf a) -> CodeGenFunction r (VectorValueOf n a) Source #
disassembleVector :: Positive n => Proxy a -> VectorValueOf n a -> CodeGenFunction r (Vector n (ValueOf a)) Source #
Instances
class TupleVector a where Source #
deinterleave :: Positive n => Proxy a -> Vector n (ValueOf a) -> CodeGenFunction r (VectorValueOf n a) Source #
interleave :: Positive n => Proxy a -> VectorValueOf n a -> CodeGenFunction r (Vector n (ValueOf a)) Source #
Instances
(Vector a, Vector b) => TupleVector (a, b) Source # | |
Defined in LLVM.Extra.Storable.Private deinterleave :: Positive n => Proxy (a, b) -> Vector n (ValueOf (a, b)) -> CodeGenFunction r (VectorValueOf n (a, b)) Source # interleave :: Positive n => Proxy (a, b) -> VectorValueOf n (a, b) -> CodeGenFunction r (Vector n (ValueOf (a, b))) Source # | |
(Vector a, Vector b, Vector c) => TupleVector (a, b, c) Source # | |
Defined in LLVM.Extra.Storable.Private deinterleave :: Positive n => Proxy (a, b, c) -> Vector n (ValueOf (a, b, c)) -> CodeGenFunction r (VectorValueOf n (a, b, c)) Source # interleave :: Positive n => Proxy (a, b, c) -> VectorValueOf n (a, b, c) -> CodeGenFunction r (Vector n (ValueOf (a, b, c))) Source # |
Standard method implementations
loadNewtype :: (C a, ValueOf a ~ al) => (a -> wrapped) -> (al -> wrappedl) -> Value (Ptr wrapped) -> CodeGenFunction r wrappedl Source #
storeNewtype :: (C a, ValueOf a ~ al) => (a -> wrapped) -> (wrappedl -> al) -> wrappedl -> Value (Ptr wrapped) -> CodeGenFunction r () Source #
loadTraversable :: (Repeat f, Traversable f, C a, ValueOf a ~ al) => Value (Ptr (f a)) -> CodeGenFunction r (f al) Source #
loadApplicative :: (Applicative f, Traversable f, C a, ValueOf a ~ al) => Value (Ptr (f a)) -> CodeGenFunction r (f al) Source #
storeFoldable :: (Foldable f, C a, ValueOf a ~ al) => f al -> Value (Ptr (f a)) -> CodeGenFunction r () Source #
Pointer handling
advancePtr :: (Storable a, Value (Ptr a) ~ ptr) => Value Int -> ptr -> CodeGenFunction r ptr Source #
incrementPtr :: (Storable a, Value (Ptr a) ~ ptr) => ptr -> CodeGenFunction r ptr Source #
decrementPtr :: (Storable a, Value (Ptr a) ~ ptr) => ptr -> CodeGenFunction r ptr Source #
Loops over Storable arrays
arrayLoop :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA) => Value i -> ptrA -> s -> (ptrA -> s -> CodeGenFunction r s) -> CodeGenFunction r s Source #
arrayLoop2 :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, Storable b, Value (Ptr b) ~ ptrB) => Value i -> ptrA -> ptrB -> s -> (ptrA -> ptrB -> s -> CodeGenFunction r s) -> CodeGenFunction r s Source #
arrayLoopMaybeCont :: (Phi s, Undefined s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, T (ptrA, s) ~ z) => Value i -> ptrA -> s -> (ptrA -> s -> T r z s) -> CodeGenFunction r (Value i, T s) Source #
arrayLoopMaybeCont2 :: (Phi s, Undefined s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, Storable b, Value (Ptr b) ~ ptrB, T (ptrA, (ptrB, s)) ~ z) => Value i -> ptrA -> ptrB -> s -> (ptrA -> ptrB -> s -> T r z s) -> CodeGenFunction r (Value i, T s) Source #