llvm-extra-0.12.0.1: Utility functions for the llvm interface
Safe HaskellSafe-Inferred
LanguageHaskell98

LLVM.Extra.Multi.Value.Marshal

Description

Transfer values between Haskell and JIT generated code in an LLVM-compatible format. E.g. Bool is stored as i1 and occupies a byte, Vector n Bool is stored as a bit vector, Vector n Word8 is stored in an order depending on machine endianess, and Haskell tuples are stored as LLVM structs.

Documentation

class (C a, C (Repr a), Marshal (Struct a), IsConst (Struct a)) => C a where Source #

Methods

pack :: a -> Struct a Source #

unpack :: Struct a -> a Source #

Instances

Instances details
C Int16 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Int32 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Int64 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Int8 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Word16 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Word32 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Word64 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Word8 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C () Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: () -> Struct () Source #

unpack :: Struct () -> () Source #

C Bool Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Double Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Float Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Int Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C Word Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

C a => C (Complex a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

IsFunction a => C (FunPtr a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: FunPtr a -> Struct (FunPtr a) Source #

unpack :: Struct (FunPtr a) -> FunPtr a Source #

Storable a => C (Ptr a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: Ptr a -> Struct (Ptr a) Source #

unpack :: Struct (Ptr a) -> Ptr a Source #

C (StablePtr a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

IsType a => C (Ptr a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: Ptr a -> Struct (Ptr a) Source #

unpack :: Struct (Ptr a) -> Ptr a Source #

(Natural n, C a, Natural (n :*: SizeOf (Struct a))) => C (Array n a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Array

Methods

pack :: Array n a -> Struct (Array n a) Source #

unpack :: Struct (Array n a) -> Array n a Source #

(Positive n, Vector n a) => C (Vector n a) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: Vector n a -> Struct (Vector n a) Source #

unpack :: Struct (Vector n a) -> Vector n a Source #

(C a, C b) => C (a, b) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: (a, b) -> Struct (a, b) Source #

unpack :: Struct (a, b) -> (a, b) Source #

(C a, C b, C c) => C (a, b, c) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: (a, b, c) -> Struct (a, b, c) Source #

unpack :: Struct (a, b, c) -> (a, b, c) Source #

(C a, C b, C c, C d) => C (a, b, c, d) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

pack :: (a, b, c, d) -> Struct (a, b, c, d) Source #

unpack :: Struct (a, b, c, d) -> (a, b, c, d) Source #

type Struct a = Struct (Repr a) Source #

peek :: (C a, Struct a ~ struct, Marshal struct) => Ptr struct -> IO a Source #

poke :: (C a, Struct a ~ struct, Marshal struct) => Ptr struct -> a -> IO () Source #

type VectorStruct n a = Struct (Repr n a) Source #

class (Positive n, C a, C a, C (Repr n a), Marshal (VectorStruct n a), IsConst (VectorStruct n a)) => Vector n a where Source #

Methods

packVector :: Vector n a -> VectorStruct n a Source #

unpackVector :: VectorStruct n a -> Vector n a Source #

Instances

Instances details
(Positive n, Natural (n :*: D16)) => Vector n Int16 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D32)) => Vector n Int32 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D64)) => Vector n Int64 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D8)) => Vector n Int8 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

packVector :: Vector n Int8 -> VectorStruct n Int8 Source #

unpackVector :: VectorStruct n Int8 -> Vector n Int8 Source #

(Positive n, Natural (n :*: D16)) => Vector n Word16 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D32)) => Vector n Word32 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D64)) => Vector n Word64 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D8)) => Vector n Word8 Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D1)) => Vector n Bool Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

packVector :: Vector n Bool -> VectorStruct n Bool Source #

unpackVector :: VectorStruct n Bool -> Vector n Bool Source #

(Positive n, Natural (n :*: D64)) => Vector n Double Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: D32)) => Vector n Float Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

(Positive n, Natural (n :*: IntSize)) => Vector n Int Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

packVector :: Vector n Int -> VectorStruct n Int Source #

unpackVector :: VectorStruct n Int -> Vector n Int Source #

(Positive n, Natural (n :*: IntSize)) => Vector n Word Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

packVector :: Vector n Word -> VectorStruct n Word Source #

unpackVector :: VectorStruct n Word -> Vector n Word Source #

(Vector n a, Vector n b) => Vector n (a, b) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

packVector :: Vector n (a, b) -> VectorStruct n (a, b) Source #

unpackVector :: VectorStruct n (a, b) -> Vector n (a, b) Source #

(Vector n a, Vector n b, Vector n c) => Vector n (a, b, c) Source # 
Instance details

Defined in LLVM.Extra.Multi.Value.Marshal

Methods

packVector :: Vector n (a, b, c) -> VectorStruct n (a, b, c) Source #

unpackVector :: VectorStruct n (a, b, c) -> Vector n (a, b, c) Source #

with :: C a => a -> (Ptr (Struct a) -> IO b) -> IO b Source #

alloca :: IsType a => (Ptr a -> IO b) -> IO b #