Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Synopsis
- class Zero a => Additive a where
- zero :: a
- add :: a -> a -> CodeGenFunction r a
- sub :: a -> a -> CodeGenFunction r a
- neg :: a -> CodeGenFunction r a
- one :: IntegerConstant a => a
- inc :: (IsArithmetic a, IsConst a, Num a) => Value a -> CodeGenFunction r (Value a)
- dec :: (IsArithmetic a, IsConst a, Num a) => Value a -> CodeGenFunction r (Value a)
- class Additive a => PseudoRing a where
- mul :: a -> a -> CodeGenFunction r a
- square :: PseudoRing a => a -> CodeGenFunction r a
- type family Scalar vector
- class (PseudoRing (Scalar v), Additive v) => PseudoModule v where
- scale :: Scalar v -> v -> CodeGenFunction r v
- class PseudoRing a => Field a where
- fdiv :: a -> a -> CodeGenFunction r a
- class IntegerConstant a where
- fromInteger' :: Integer -> a
- class IntegerConstant a => RationalConstant a where
- fromRational' :: Rational -> a
- idiv :: IsInteger a => Value a -> Value a -> CodeGenFunction r (Value a)
- irem :: IsInteger a => Value a -> Value a -> CodeGenFunction r (Value a)
- class Comparison a => FloatingComparison a where
- fcmp :: FPPredicate -> a -> a -> CodeGenFunction r (CmpResult a)
- class Comparison a where
- cmp :: CmpPredicate -> a -> a -> CodeGenFunction r (CmpResult a)
- type family CmpResult a
- data CmpPredicate
- class Logic a where
- and :: a -> a -> CodeGenFunction r a
- or :: a -> a -> CodeGenFunction r a
- xor :: a -> a -> CodeGenFunction r a
- inv :: a -> CodeGenFunction r a
- class Additive a => Real a where
- min :: a -> a -> CodeGenFunction r a
- max :: a -> a -> CodeGenFunction r a
- abs :: a -> CodeGenFunction r a
- signum :: a -> CodeGenFunction r a
- class Real a => Fraction a where
- truncate :: a -> CodeGenFunction r a
- fraction :: a -> CodeGenFunction r a
- signedFraction :: Fraction a => a -> CodeGenFunction r a
- addToPhase :: Fraction a => a -> a -> CodeGenFunction r a
- incPhase :: Fraction a => a -> a -> CodeGenFunction r a
- advanceArrayElementPtr :: IsType a => Value (Ptr a) -> CodeGenFunction r (Value (Ptr a))
- decreaseArrayElementPtr :: IsType a => Value (Ptr a) -> CodeGenFunction r (Value (Ptr a))
- class Field a => Algebraic a where
- sqrt :: a -> CodeGenFunction r a
- class Algebraic a => Transcendental a where
- pi :: CodeGenFunction r a
- sin, cos, exp, log :: a -> CodeGenFunction r a
- pow :: a -> a -> CodeGenFunction r a
- exp2 :: IsFloating a => Value a -> CodeGenFunction r (Value a)
- log2 :: IsFloating a => Value a -> CodeGenFunction r (Value a)
- log10 :: IsFloating a => Value a -> CodeGenFunction r (Value a)
arithmetic: generalized and improved type inference
class Zero a => Additive a where Source #
This and the following type classes are intended for arithmetic operations on wrappers around LLVM types. E.g. you might define a fixed point fraction type by
newtype Fixed = Fixed Int32
and then use the same methods for floating point and fixed point arithmetic.
In contrast to the arithmetic methods in the llvm
wrapper,
in our methods the types of operands and result match.
Advantage: Type inference determines most of the types automatically.
Disadvantage: You cannot use constant values directly,
but you have to convert them all to Value
.
add :: a -> a -> CodeGenFunction r a Source #
sub :: a -> a -> CodeGenFunction r a Source #
neg :: a -> CodeGenFunction r a Source #
Instances
one :: IntegerConstant a => a Source #
class Additive a => PseudoRing a where Source #
mul :: a -> a -> CodeGenFunction r a Source #
Instances
PseudoRing a => PseudoRing (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
PseudoRing a => PseudoRing (T a) Source # | |
Defined in LLVM.Extra.Scalar | |
IsInteger v => PseudoRing (ConstValue v) Source # | |
Defined in LLVM.Extra.Arithmetic mul :: ConstValue v -> ConstValue v -> CodeGenFunction r (ConstValue v) Source # | |
IsArithmetic v => PseudoRing (Value v) Source # | |
Defined in LLVM.Extra.Arithmetic | |
(Flags flags, PseudoRing a, Tuple a) => PseudoRing (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath | |
(Positive n, PseudoRing a) => PseudoRing (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
square :: PseudoRing a => a -> CodeGenFunction r a Source #
type family Scalar vector Source #
Instances
type Scalar (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
type Scalar (T a) Source # | |
Defined in LLVM.Extra.Scalar | |
type Scalar (ConstValue a) Source # | |
Defined in LLVM.Extra.Arithmetic | |
type Scalar (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic | |
type Scalar (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath | |
type Scalar (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
class (PseudoRing (Scalar v), Additive v) => PseudoModule v where Source #
scale :: Scalar v -> v -> CodeGenFunction r v Source #
Instances
PseudoModule a => PseudoModule (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
PseudoRing a => PseudoModule (T a) Source # | |
Defined in LLVM.Extra.Scalar | |
PseudoModule v => PseudoModule (Value v) Source # | |
Defined in LLVM.Extra.Arithmetic | |
(Flags flags, PseudoModule v, Tuple v, Scalar v ~ a, Tuple a) => PseudoModule (Context flags v) Source # | |
Defined in LLVM.Extra.FastMath | |
(Positive n, PseudoModule a) => PseudoModule (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
class PseudoRing a => Field a where Source #
fdiv :: a -> a -> CodeGenFunction r a Source #
Instances
Field a => Field (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
Field a => Field (T a) Source # | |
Defined in LLVM.Extra.Scalar | |
IsFloating v => Field (Value v) Source # | |
Defined in LLVM.Extra.Arithmetic | |
(Flags flags, Tuple v, Field v) => Field (Context flags v) Source # | |
Defined in LLVM.Extra.FastMath | |
(Positive n, Field a) => Field (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
class IntegerConstant a where Source #
fromInteger' :: Integer -> a Source #
Instances
IntegerConstant a => IntegerConstant (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private fromInteger' :: Integer -> T a Source # | |
IntegerConstant a => IntegerConstant (T a) Source # | |
Defined in LLVM.Extra.Scalar fromInteger' :: Integer -> T a Source # | |
IntegerConstant a => IntegerConstant (ConstValue a) Source # | |
Defined in LLVM.Extra.Arithmetic fromInteger' :: Integer -> ConstValue a Source # | |
IntegerConstant a => IntegerConstant (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic fromInteger' :: Integer -> Value a Source # | |
(Flags flags, Tuple a, IntegerConstant a) => IntegerConstant (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath fromInteger' :: Integer -> Context flags a Source # | |
(Positive n, IntegerConstant a) => IntegerConstant (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector fromInteger' :: Integer -> T n a Source # |
class IntegerConstant a => RationalConstant a where Source #
fromRational' :: Rational -> a Source #
Instances
RationalConstant a => RationalConstant (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private fromRational' :: Rational -> T a Source # | |
RationalConstant a => RationalConstant (T a) Source # | |
Defined in LLVM.Extra.Scalar fromRational' :: Rational -> T a Source # | |
RationalConstant a => RationalConstant (ConstValue a) Source # | |
Defined in LLVM.Extra.Arithmetic fromRational' :: Rational -> ConstValue a Source # | |
RationalConstant a => RationalConstant (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic fromRational' :: Rational -> Value a Source # | |
(Flags flags, Tuple a, RationalConstant a) => RationalConstant (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath fromRational' :: Rational -> Context flags a Source # | |
(Positive n, RationalConstant a) => RationalConstant (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector fromRational' :: Rational -> T n a Source # |
idiv :: IsInteger a => Value a -> Value a -> CodeGenFunction r (Value a) Source #
In Haskell terms this is a quot
.
class Comparison a => FloatingComparison a where Source #
fcmp :: FPPredicate -> a -> a -> CodeGenFunction r (CmpResult a) Source #
Instances
class Comparison a where Source #
cmp :: CmpPredicate -> a -> a -> CodeGenFunction r (CmpResult a) Source #
Instances
Comparison a => Comparison (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private cmp :: CmpPredicate -> T a -> T a -> CodeGenFunction r (CmpResult (T a)) Source # | |
CmpRet a => Comparison (ConstValue a) Source # | |
Defined in LLVM.Extra.Arithmetic type CmpResult (ConstValue a) Source # cmp :: CmpPredicate -> ConstValue a -> ConstValue a -> CodeGenFunction r (CmpResult (ConstValue a)) Source # | |
CmpRet a => Comparison (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic cmp :: CmpPredicate -> Value a -> Value a -> CodeGenFunction r (CmpResult (Value a)) Source # | |
(Flags flags, Tuple a, Comparison a) => Comparison (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath cmp :: CmpPredicate -> Context flags a -> Context flags a -> CodeGenFunction r (CmpResult (Context flags a)) Source # | |
(Positive n, Comparison a) => Comparison (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector cmp :: CmpPredicate -> T n a -> T n a -> CodeGenFunction r (CmpResult (T n a)) Source # |
type family CmpResult a Source #
Instances
type CmpResult (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
type CmpResult (ConstValue a) Source # | |
Defined in LLVM.Extra.Arithmetic | |
type CmpResult (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic | |
type CmpResult (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath | |
type CmpResult (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
data CmpPredicate #
Instances
and :: a -> a -> CodeGenFunction r a Source #
or :: a -> a -> CodeGenFunction r a Source #
xor :: a -> a -> CodeGenFunction r a Source #
inv :: a -> CodeGenFunction r a Source #
Instances
Logic a => Logic (T a) Source # | |
IsInteger a => Logic (ConstValue a) Source # | |
Defined in LLVM.Extra.Arithmetic and :: ConstValue a -> ConstValue a -> CodeGenFunction r (ConstValue a) Source # or :: ConstValue a -> ConstValue a -> CodeGenFunction r (ConstValue a) Source # xor :: ConstValue a -> ConstValue a -> CodeGenFunction r (ConstValue a) Source # inv :: ConstValue a -> CodeGenFunction r (ConstValue a) Source # | |
IsInteger a => Logic (Value a) Source # | |
(Positive n, Logic a) => Logic (T n a) Source # | |
class Additive a => Real a where Source #
min :: a -> a -> CodeGenFunction r a Source #
max :: a -> a -> CodeGenFunction r a Source #
abs :: a -> CodeGenFunction r a Source #
signum :: a -> CodeGenFunction r a Source #
Instances
Real a => Real (T a) Source # | |
Real a => Real (T a) Source # | |
Real a => Real (Value a) Source # | |
(Flags flags, Tuple a, Real a) => Real (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath min :: Context flags a -> Context flags a -> CodeGenFunction r (Context flags a) Source # max :: Context flags a -> Context flags a -> CodeGenFunction r (Context flags a) Source # abs :: Context flags a -> CodeGenFunction r (Context flags a) Source # signum :: Context flags a -> CodeGenFunction r (Context flags a) Source # | |
(Positive n, Real a) => Real (T n a) Source # | |
class Real a => Fraction a where Source #
truncate :: a -> CodeGenFunction r a Source #
fraction :: a -> CodeGenFunction r a Source #
Instances
Fraction a => Fraction (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
Fraction a => Fraction (T a) Source # | |
Defined in LLVM.Extra.Scalar | |
Fraction a => Fraction (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic | |
(Flags flags, Tuple a, Fraction a) => Fraction (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath | |
(Positive n, Fraction a) => Fraction (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
signedFraction :: Fraction a => a -> CodeGenFunction r a Source #
addToPhase :: Fraction a => a -> a -> CodeGenFunction r a Source #
incPhase :: Fraction a => a -> a -> CodeGenFunction r a Source #
both increment and phase must be non-negative
pointer arithmetic
advanceArrayElementPtr :: IsType a => Value (Ptr a) -> CodeGenFunction r (Value (Ptr a)) #
decreaseArrayElementPtr :: IsType a => Value (Ptr a) -> CodeGenFunction r (Value (Ptr a)) #
transcendental functions
class Field a => Algebraic a where Source #
sqrt :: a -> CodeGenFunction r a Source #
Instances
Algebraic a => Algebraic (T a) Source # | |
Defined in LLVM.Extra.Multi.Value.Private | |
Algebraic a => Algebraic (T a) Source # | |
Defined in LLVM.Extra.Scalar | |
IsFloating a => Algebraic (Value a) Source # | |
Defined in LLVM.Extra.Arithmetic | |
(Flags flags, Tuple a, Algebraic a) => Algebraic (Context flags a) Source # | |
Defined in LLVM.Extra.FastMath | |
(Positive n, Algebraic a) => Algebraic (T n a) Source # | |
Defined in LLVM.Extra.Multi.Vector |
class Algebraic a => Transcendental a where Source #
pi :: CodeGenFunction r a Source #
sin :: a -> CodeGenFunction r a Source #
cos :: a -> CodeGenFunction r a Source #
exp :: a -> CodeGenFunction r a Source #
log :: a -> CodeGenFunction r a Source #
pow :: a -> a -> CodeGenFunction r a Source #