{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
module LLVM.Extra.Multi.Vector (
T(Cons), consPrim, deconsPrim,
C(..),
Value,
map,
zip, zip3, unzip, unzip3,
replicate,
iterate,
take,
takeRev,
sum,
dotProduct,
cumulate,
cumulate1,
lift1,
modify,
assemble,
dissect,
dissectList,
assemble1,
dissect1,
dissectList1,
assembleFromVector,
reverse,
rotateUp,
rotateDown,
shiftUp,
shiftDown,
shiftUpMultiZero,
shiftDownMultiZero,
shiftUpMultiUndef,
shiftDownMultiUndef,
undefPrimitive,
shufflePrimitive,
extractPrimitive,
insertPrimitive,
shuffleMatchTraversable,
insertTraversable,
extractTraversable,
IntegerConstant(..),
RationalConstant(..),
Additive(..),
PseudoRing(..),
Field(..),
scale,
PseudoModule(..),
Real(..),
Fraction(..),
NativeInteger, NativeFloating, fromIntegral,
Algebraic(..),
Transcendental(..),
FloatingComparison(..),
Select(..),
Comparison(..),
Logic(..),
BitShift(..),
) where
import qualified LLVM.Extra.Multi.Value.Private as MultiValue
import qualified LLVM.Extra.ScalarOrVector as SoV
import qualified LLVM.Extra.Arithmetic as A
import qualified LLVM.Extra.Tuple as Tuple
import qualified LLVM.Core as LLVM
import LLVM.Core (CodeGenFunction, IsPrimitive, valueOf, value, )
import qualified Type.Data.Num.Decimal as TypeNum
import qualified Foreign.Storable.Record.Tuple as StoreTuple
import qualified Data.Traversable as Trav
import qualified Data.NonEmpty.Class as NonEmptyC
import qualified Data.NonEmpty as NonEmpty
import qualified Data.List as List
import qualified Data.Bool8 as Bool8
import Data.Traversable (mapM, sequence, )
import Data.Foldable (foldlM)
import Data.NonEmpty ((!:), )
import Data.Function (flip, (.), ($), )
import Data.Tuple (snd, )
import Data.Maybe (maybe, )
import Data.Ord ((<), )
import Data.Word (Word8, Word16, Word32, Word64, Word)
import Data.Int (Int8, Int16, Int32, Int64, )
import Data.Bool8 (Bool8)
import Data.Bool (Bool, )
import qualified Control.Monad.HT as Monad
import qualified Control.Applicative as App
import qualified Control.Functor.HT as FuncHT
import Control.Monad.HT ((<=<), )
import Control.Monad (Monad, join, fmap, return, (>>), (=<<))
import Control.Applicative (liftA2, (<$>))
import qualified Prelude as P
import Prelude
(Float, Double, Integer, Int, Rational, asTypeOf, (-), (+), (*), error)
newtype T n a = Cons (Repr n a)
type Value n a = LLVM.Value (LLVM.Vector n a)
consPrim :: (Repr n a ~ Value n ar) => Value n ar -> T n a
consPrim :: forall n a ar. (Repr n a ~ Value n ar) => Value n ar -> T n a
consPrim = Value n ar -> T n a
Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons
deconsPrim :: (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim :: forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim (Cons Repr n a
a) = Value n ar
Repr n a
a
instance (TypeNum.Positive n, C a) => Tuple.Undefined (T n a) where
undef :: T n a
undef = T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
instance (TypeNum.Positive n, C a) => Tuple.Zero (T n a) where
zero :: T n a
zero = T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero
instance (TypeNum.Positive n, C a) => Tuple.Phi (T n a) where
phi :: forall r. BasicBlock -> T n a -> CodeGenFunction r (T n a)
phi = BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phi
addPhi :: forall r. BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhi = BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhi
sizeS :: TypeNum.Positive n => T n a -> TypeNum.Singleton n
sizeS :: forall n a. Positive n => T n a -> Singleton n
sizeS T n a
_ = Singleton n
forall x. Integer x => Singleton x
TypeNum.singleton
size :: (TypeNum.Positive n, P.Integral i) => T n a -> i
size :: forall n i a. (Positive n, Integral i) => T n a -> i
size = Singleton n -> i
forall n a. (Integer n, Num a) => Singleton n -> a
TypeNum.integralFromSingleton (Singleton n -> i) -> (T n a -> Singleton n) -> T n a -> i
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T n a -> Singleton n
forall n a. Positive n => T n a -> Singleton n
sizeS
last ::
(TypeNum.Positive n, C a) =>
T n a -> CodeGenFunction r (MultiValue.T a)
last :: forall n a r. (Positive n, C a) => T n a -> CodeGenFunction r (T a)
last T n a
x = Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract (Word32 -> Value Word32
forall a. IsConst a => a -> Value a
valueOf (T n a -> Word32
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
1)) T n a
x
zip :: T n a -> T n b -> T n (a,b)
zip :: forall n a b. T n a -> T n b -> T n (a, b)
zip (Cons Repr n a
a) (Cons Repr n b
b) = Repr n (a, b) -> T n (a, b)
forall n a. Repr n a -> T n a
Cons (Repr n a
a,Repr n b
b)
zip3 :: T n a -> T n b -> T n c -> T n (a,b,c)
zip3 :: forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3 (Cons Repr n a
a) (Cons Repr n b
b) (Cons Repr n c
c) = Repr n (a, b, c) -> T n (a, b, c)
forall n a. Repr n a -> T n a
Cons (Repr n a
a,Repr n b
b,Repr n c
c)
unzip :: T n (a,b) -> (T n a, T n b)
unzip :: forall n a b. T n (a, b) -> (T n a, T n b)
unzip (Cons (Repr n a
a,Repr n b
b)) = (Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons Repr n a
a, Repr n b -> T n b
forall n a. Repr n a -> T n a
Cons Repr n b
b)
unzip3 :: T n (a,b,c) -> (T n a, T n b, T n c)
unzip3 :: forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 (Cons (Repr n a
a,Repr n b
b,Repr n c
c)) = (Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons Repr n a
a, Repr n b -> T n b
forall n a. Repr n a -> T n a
Cons Repr n b
b, Repr n c -> T n c
forall n a. Repr n a -> T n a
Cons Repr n c
c)
class (MultiValue.C a) => C a where
type Repr n a
cons :: (TypeNum.Positive n) => LLVM.Vector n a -> T n a
undef :: (TypeNum.Positive n) => T n a
zero :: (TypeNum.Positive n) => T n a
phi ::
(TypeNum.Positive n) =>
LLVM.BasicBlock -> T n a -> LLVM.CodeGenFunction r (T n a)
addPhi ::
(TypeNum.Positive n) =>
LLVM.BasicBlock -> T n a -> T n a -> LLVM.CodeGenFunction r ()
shuffle ::
(TypeNum.Positive n, TypeNum.Positive m) =>
LLVM.ConstValue (LLVM.Vector m Word32) -> T n a -> T n a ->
CodeGenFunction r (T m a)
::
(TypeNum.Positive n) =>
LLVM.Value Word32 -> T n a -> CodeGenFunction r (MultiValue.T a)
insert ::
(TypeNum.Positive n) =>
LLVM.Value Word32 -> MultiValue.T a ->
T n a -> CodeGenFunction r (T n a)
instance C Bool where
type Repr n Bool = LLVM.Value (LLVM.Vector n Bool)
cons :: forall n. Positive n => Vector n Bool -> T n Bool
cons = Vector n Bool -> T n Bool
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Bool
undef = T n Bool
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Bool
zero = T n Bool
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Bool -> CodeGenFunction r (T n Bool)
phi = BasicBlock -> T n Bool -> CodeGenFunction r (T n Bool)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Bool -> T n Bool -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Bool -> T n Bool -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Bool -> T n Bool -> CodeGenFunction r (T m Bool)
shuffle = ConstValue (Vector m Word32)
-> T n Bool -> T n Bool -> CodeGenFunction r (T m Bool)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Bool -> CodeGenFunction r (T Bool)
extract = Value Word32 -> T n Bool -> CodeGenFunction r (T Bool)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32 -> T Bool -> T n Bool -> CodeGenFunction r (T n Bool)
insert = Value Word32 -> T Bool -> T n Bool -> CodeGenFunction r (T n Bool)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Bool8 where
type Repr n Bool8 = LLVM.Value (LLVM.Vector n Bool)
cons :: forall n. Positive n => Vector n Bool8 -> T n Bool8
cons = Vector n Bool -> T n Bool8
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive (Vector n Bool -> T n Bool8)
-> (Vector n Bool8 -> Vector n Bool) -> Vector n Bool8 -> T n Bool8
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool8 -> Bool) -> Vector n Bool8 -> Vector n Bool
forall a b. (a -> b) -> Vector n a -> Vector n b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Bool8 -> Bool
Bool8.toBool
undef :: forall n. Positive n => T n Bool8
undef = T n Bool8
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Bool8
zero = T n Bool8
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Bool8 -> CodeGenFunction r (T n Bool8)
phi = BasicBlock -> T n Bool8 -> CodeGenFunction r (T n Bool8)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Bool8 -> T n Bool8 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Bool8 -> T n Bool8 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Bool8 -> T n Bool8 -> CodeGenFunction r (T m Bool8)
shuffle = ConstValue (Vector m Word32)
-> T n Bool8 -> T n Bool8 -> CodeGenFunction r (T m Bool8)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Bool8 -> CodeGenFunction r (T Bool8)
extract = Value Word32 -> T n Bool8 -> CodeGenFunction r (T Bool8)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Bool8 -> T n Bool8 -> CodeGenFunction r (T n Bool8)
insert = Value Word32
-> T Bool8 -> T n Bool8 -> CodeGenFunction r (T n Bool8)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Float where
type Repr n Float = LLVM.Value (LLVM.Vector n Float)
cons :: forall n. Positive n => Vector n Float -> T n Float
cons = Vector n Float -> T n Float
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Float
undef = T n Float
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Float
zero = T n Float
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Float -> CodeGenFunction r (T n Float)
phi = BasicBlock -> T n Float -> CodeGenFunction r (T n Float)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Float -> T n Float -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Float -> T n Float -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Float -> T n Float -> CodeGenFunction r (T m Float)
shuffle = ConstValue (Vector m Word32)
-> T n Float -> T n Float -> CodeGenFunction r (T m Float)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Float -> CodeGenFunction r (T Float)
extract = Value Word32 -> T n Float -> CodeGenFunction r (T Float)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Float -> T n Float -> CodeGenFunction r (T n Float)
insert = Value Word32
-> T Float -> T n Float -> CodeGenFunction r (T n Float)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Double where
type Repr n Double = LLVM.Value (LLVM.Vector n Double)
cons :: forall n. Positive n => Vector n Double -> T n Double
cons = Vector n Double -> T n Double
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Double
undef = T n Double
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Double
zero = T n Double
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Double -> CodeGenFunction r (T n Double)
phi = BasicBlock -> T n Double -> CodeGenFunction r (T n Double)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Double -> T n Double -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Double -> T n Double -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Double -> T n Double -> CodeGenFunction r (T m Double)
shuffle = ConstValue (Vector m Word32)
-> T n Double -> T n Double -> CodeGenFunction r (T m Double)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Double -> CodeGenFunction r (T Double)
extract = Value Word32 -> T n Double -> CodeGenFunction r (T Double)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Double -> T n Double -> CodeGenFunction r (T n Double)
insert = Value Word32
-> T Double -> T n Double -> CodeGenFunction r (T n Double)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Int where
type Repr n Int = LLVM.Value (LLVM.Vector n Int)
cons :: forall n. Positive n => Vector n Int -> T n Int
cons = Vector n Int -> T n Int
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Int
undef = T n Int
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Int
zero = T n Int
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Int -> CodeGenFunction r (T n Int)
phi = BasicBlock -> T n Int -> CodeGenFunction r (T n Int)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Int -> T n Int -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Int -> T n Int -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Int -> T n Int -> CodeGenFunction r (T m Int)
shuffle = ConstValue (Vector m Word32)
-> T n Int -> T n Int -> CodeGenFunction r (T m Int)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Int -> CodeGenFunction r (T Int)
extract = Value Word32 -> T n Int -> CodeGenFunction r (T Int)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32 -> T Int -> T n Int -> CodeGenFunction r (T n Int)
insert = Value Word32 -> T Int -> T n Int -> CodeGenFunction r (T n Int)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Int8 where
type Repr n Int8 = LLVM.Value (LLVM.Vector n Int8)
cons :: forall n. Positive n => Vector n Int8 -> T n Int8
cons = Vector n Int8 -> T n Int8
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Int8
undef = T n Int8
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Int8
zero = T n Int8
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Int8 -> CodeGenFunction r (T n Int8)
phi = BasicBlock -> T n Int8 -> CodeGenFunction r (T n Int8)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Int8 -> T n Int8 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Int8 -> T n Int8 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T m Int8)
shuffle = ConstValue (Vector m Word32)
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T m Int8)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Int8 -> CodeGenFunction r (T Int8)
extract = Value Word32 -> T n Int8 -> CodeGenFunction r (T Int8)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32 -> T Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
insert = Value Word32 -> T Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Int16 where
type Repr n Int16 = LLVM.Value (LLVM.Vector n Int16)
cons :: forall n. Positive n => Vector n Int16 -> T n Int16
cons = Vector n Int16 -> T n Int16
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Int16
undef = T n Int16
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Int16
zero = T n Int16
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Int16 -> CodeGenFunction r (T n Int16)
phi = BasicBlock -> T n Int16 -> CodeGenFunction r (T n Int16)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Int16 -> T n Int16 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Int16 -> T n Int16 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T m Int16)
shuffle = ConstValue (Vector m Word32)
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T m Int16)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Int16 -> CodeGenFunction r (T Int16)
extract = Value Word32 -> T n Int16 -> CodeGenFunction r (T Int16)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
insert = Value Word32
-> T Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Int32 where
type Repr n Int32 = LLVM.Value (LLVM.Vector n Int32)
cons :: forall n. Positive n => Vector n Int32 -> T n Int32
cons = Vector n Int32 -> T n Int32
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Int32
undef = T n Int32
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Int32
zero = T n Int32
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Int32 -> CodeGenFunction r (T n Int32)
phi = BasicBlock -> T n Int32 -> CodeGenFunction r (T n Int32)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Int32 -> T n Int32 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Int32 -> T n Int32 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T m Int32)
shuffle = ConstValue (Vector m Word32)
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T m Int32)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Int32 -> CodeGenFunction r (T Int32)
extract = Value Word32 -> T n Int32 -> CodeGenFunction r (T Int32)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
insert = Value Word32
-> T Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Int64 where
type Repr n Int64 = LLVM.Value (LLVM.Vector n Int64)
cons :: forall n. Positive n => Vector n Int64 -> T n Int64
cons = Vector n Int64 -> T n Int64
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Int64
undef = T n Int64
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Int64
zero = T n Int64
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Int64 -> CodeGenFunction r (T n Int64)
phi = BasicBlock -> T n Int64 -> CodeGenFunction r (T n Int64)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Int64 -> T n Int64 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Int64 -> T n Int64 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T m Int64)
shuffle = ConstValue (Vector m Word32)
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T m Int64)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Int64 -> CodeGenFunction r (T Int64)
extract = Value Word32 -> T n Int64 -> CodeGenFunction r (T Int64)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
insert = Value Word32
-> T Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Word where
type Repr n Word = LLVM.Value (LLVM.Vector n Word)
cons :: forall n. Positive n => Vector n Word -> T n Word
cons = Vector n Word -> T n Word
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Word
undef = T n Word
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Word
zero = T n Word
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Word -> CodeGenFunction r (T n Word)
phi = BasicBlock -> T n Word -> CodeGenFunction r (T n Word)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Word -> T n Word -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Word -> T n Word -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Word -> T n Word -> CodeGenFunction r (T m Word)
shuffle = ConstValue (Vector m Word32)
-> T n Word -> T n Word -> CodeGenFunction r (T m Word)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Word -> CodeGenFunction r (T Word)
extract = Value Word32 -> T n Word -> CodeGenFunction r (T Word)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32 -> T Word -> T n Word -> CodeGenFunction r (T n Word)
insert = Value Word32 -> T Word -> T n Word -> CodeGenFunction r (T n Word)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Word8 where
type Repr n Word8 = LLVM.Value (LLVM.Vector n Word8)
cons :: forall n. Positive n => Vector n Word8 -> T n Word8
cons = Vector n Word8 -> T n Word8
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Word8
undef = T n Word8
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Word8
zero = T n Word8
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Word8 -> CodeGenFunction r (T n Word8)
phi = BasicBlock -> T n Word8 -> CodeGenFunction r (T n Word8)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Word8 -> T n Word8 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Word8 -> T n Word8 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T m Word8)
shuffle = ConstValue (Vector m Word32)
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T m Word8)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Word8 -> CodeGenFunction r (T Word8)
extract = Value Word32 -> T n Word8 -> CodeGenFunction r (T Word8)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
insert = Value Word32
-> T Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Word16 where
type Repr n Word16 = LLVM.Value (LLVM.Vector n Word16)
cons :: forall n. Positive n => Vector n Word16 -> T n Word16
cons = Vector n Word16 -> T n Word16
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Word16
undef = T n Word16
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Word16
zero = T n Word16
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Word16 -> CodeGenFunction r (T n Word16)
phi = BasicBlock -> T n Word16 -> CodeGenFunction r (T n Word16)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Word16 -> T n Word16 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Word16 -> T n Word16 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T m Word16)
shuffle = ConstValue (Vector m Word32)
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T m Word16)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Word16 -> CodeGenFunction r (T Word16)
extract = Value Word32 -> T n Word16 -> CodeGenFunction r (T Word16)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
insert = Value Word32
-> T Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Word32 where
type Repr n Word32 = LLVM.Value (LLVM.Vector n Word32)
cons :: forall n. Positive n => Vector n Word32 -> T n Word32
cons = Vector n Word32 -> T n Word32
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Word32
undef = T n Word32
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Word32
zero = T n Word32
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Word32 -> CodeGenFunction r (T n Word32)
phi = BasicBlock -> T n Word32 -> CodeGenFunction r (T n Word32)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Word32 -> T n Word32 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Word32 -> T n Word32 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T m Word32)
shuffle = ConstValue (Vector m Word32)
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T m Word32)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Word32 -> CodeGenFunction r (T Word32)
extract = Value Word32 -> T n Word32 -> CodeGenFunction r (T Word32)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
insert = Value Word32
-> T Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
instance C Word64 where
type Repr n Word64 = LLVM.Value (LLVM.Vector n Word64)
cons :: forall n. Positive n => Vector n Word64 -> T n Word64
cons = Vector n Word64 -> T n Word64
forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive
undef :: forall n. Positive n => T n Word64
undef = T n Word64
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive
zero :: forall n. Positive n => T n Word64
zero = T n Word64
forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive
phi :: forall n r.
Positive n =>
BasicBlock -> T n Word64 -> CodeGenFunction r (T n Word64)
phi = BasicBlock -> T n Word64 -> CodeGenFunction r (T n Word64)
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n Word64 -> T n Word64 -> CodeGenFunction r ()
addPhi = BasicBlock -> T n Word64 -> T n Word64 -> CodeGenFunction r ()
forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T m Word64)
shuffle = ConstValue (Vector m Word32)
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T m Word64)
forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive
extract :: forall n r.
Positive n =>
Value Word32 -> T n Word64 -> CodeGenFunction r (T Word64)
extract = Value Word32 -> T n Word64 -> CodeGenFunction r (T Word64)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extractPrimitive
insert :: forall n r.
Positive n =>
Value Word32
-> T Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
insert = Value Word32
-> T Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive
consPrimitive ::
(TypeNum.Positive n, LLVM.IsConst al, IsPrimitive al,
Repr n a ~ Value n al) =>
LLVM.Vector n al -> T n a
consPrimitive :: forall n al a.
(Positive n, IsConst al, IsPrimitive al, Repr n a ~ Value n al) =>
Vector n al -> T n a
consPrimitive = Value n al -> T n a
Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (Value n al -> T n a)
-> (Vector n al -> Value n al) -> Vector n al -> T n a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector n al -> Value n al
forall a. IsConst a => a -> Value a
LLVM.valueOf
undefPrimitive ::
(TypeNum.Positive n, IsPrimitive al,
Repr n a ~ Value n al) =>
T n a
undefPrimitive :: forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
undefPrimitive = Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (Repr n a -> T n a) -> Repr n a -> T n a
forall a b. (a -> b) -> a -> b
$ ConstValue (Vector n al) -> Value n al
forall a. ConstValue a -> Value a
LLVM.value ConstValue (Vector n al)
forall a. IsType a => ConstValue a
LLVM.undef
zeroPrimitive ::
(TypeNum.Positive n, IsPrimitive al,
Repr n a ~ Value n al) =>
T n a
zeroPrimitive :: forall n al a.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
T n a
zeroPrimitive = Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (Repr n a -> T n a) -> Repr n a -> T n a
forall a b. (a -> b) -> a -> b
$ ConstValue (Vector n al) -> Value n al
forall a. ConstValue a -> Value a
LLVM.value ConstValue (Vector n al)
forall a. IsType a => ConstValue a
LLVM.zero
phiPrimitive ::
(TypeNum.Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
LLVM.BasicBlock -> T n a -> LLVM.CodeGenFunction r (T n a)
phiPrimitive :: forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phiPrimitive BasicBlock
bb (Cons Repr n a
a) = (Value n al -> T n a)
-> CodeGenFunction r (Value n al) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value n al -> T n a
Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (CodeGenFunction r (Value n al) -> CodeGenFunction r (T n a))
-> CodeGenFunction r (Value n al) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> a -> b
$ BasicBlock -> Value n al -> CodeGenFunction r (Value n al)
forall r.
BasicBlock -> Value n al -> CodeGenFunction r (Value n al)
forall a r. Phi a => BasicBlock -> a -> CodeGenFunction r a
Tuple.phi BasicBlock
bb Value n al
Repr n a
a
addPhiPrimitive ::
(TypeNum.Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
LLVM.BasicBlock -> T n a -> T n a -> LLVM.CodeGenFunction r ()
addPhiPrimitive :: forall n al a r.
(Positive n, IsPrimitive al, Repr n a ~ Value n al) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhiPrimitive BasicBlock
bb (Cons Repr n a
a) (Cons Repr n a
b) = BasicBlock -> Value n al -> Value n al -> CodeGenFunction r ()
forall r.
BasicBlock -> Value n al -> Value n al -> CodeGenFunction r ()
forall a r. Phi a => BasicBlock -> a -> a -> CodeGenFunction r ()
Tuple.addPhi BasicBlock
bb Value n al
Repr n a
a Value n al
Repr n a
b
shufflePrimitive ::
(TypeNum.Positive n, TypeNum.Positive m, IsPrimitive al,
MultiValue.Repr a ~ LLVM.Value al,
Repr n a ~ Value n al,
Repr m a ~ Value m al) =>
LLVM.ConstValue (LLVM.Vector m Word32) ->
T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive :: forall n m al a r.
(Positive n, Positive m, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al, Repr m a ~ Value m al) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shufflePrimitive ConstValue (Vector m Word32)
k (Cons Repr n a
u) (Cons Repr n a
v) =
(Value m al -> T m a)
-> CodeGenFunction r (Value m al) -> CodeGenFunction r (T m a)
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value m al -> T m a
Repr m a -> T m a
forall n a. Repr n a -> T n a
Cons (CodeGenFunction r (Value m al) -> CodeGenFunction r (T m a))
-> CodeGenFunction r (Value m al) -> CodeGenFunction r (T m a)
forall a b. (a -> b) -> a -> b
$ Value n al
-> Value n al
-> ConstValue (Vector m Word32)
-> CodeGenFunction r (Value m al)
forall n m a r.
(Positive n, Positive m, IsPrimitive a) =>
Value (Vector n a)
-> Value (Vector n a)
-> ConstValue (Vector m Word32)
-> CodeGenFunction r (Value (Vector m a))
LLVM.shufflevector Value n al
Repr n a
u Value n al
Repr n a
v ConstValue (Vector m Word32)
k
extractPrimitive ::
(TypeNum.Positive n, IsPrimitive al,
MultiValue.Repr a ~ LLVM.Value al,
Repr n a ~ Value n al) =>
LLVM.Value Word32 -> T n a -> CodeGenFunction r (MultiValue.T a)
Value Word32
k (Cons Repr n a
v) =
(Value al -> T a)
-> CodeGenFunction r (Value al) -> CodeGenFunction r (T a)
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value al -> T a
Repr a -> T a
forall a. Repr a -> T a
MultiValue.Cons (CodeGenFunction r (Value al) -> CodeGenFunction r (T a))
-> CodeGenFunction r (Value al) -> CodeGenFunction r (T a)
forall a b. (a -> b) -> a -> b
$ Value n al -> Value Word32 -> CodeGenFunction r (Value al)
forall n a r.
(Positive n, IsPrimitive a) =>
Value (Vector n a) -> Value Word32 -> CodeGenFunction r (Value a)
LLVM.extractelement Value n al
Repr n a
v Value Word32
k
insertPrimitive ::
(TypeNum.Positive n, IsPrimitive al,
MultiValue.Repr a ~ LLVM.Value al,
Repr n a ~ Value n al) =>
LLVM.Value Word32 ->
MultiValue.T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive :: forall n al a r.
(Positive n, IsPrimitive al, Repr a ~ Value al,
Repr n a ~ Value n al) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insertPrimitive Value Word32
k (MultiValue.Cons Repr a
a) (Cons Repr n a
v) =
(Value n al -> T n a)
-> CodeGenFunction r (Value n al) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value n al -> T n a
Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (CodeGenFunction r (Value n al) -> CodeGenFunction r (T n a))
-> CodeGenFunction r (Value n al) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> a -> b
$ Value n al
-> Value al -> Value Word32 -> CodeGenFunction r (Value n al)
forall n a r.
(Positive n, IsPrimitive a) =>
Value (Vector n a)
-> Value a
-> Value Word32
-> CodeGenFunction r (Value (Vector n a))
LLVM.insertelement Value n al
Repr n a
v Value al
Repr a
a Value Word32
k
instance (C a, C b) => C (a,b) where
type Repr n (a,b) = (Repr n a, Repr n b)
cons :: forall n. Positive n => Vector n (a, b) -> T n (a, b)
cons Vector n (a, b)
v = case Vector n (a, b) -> (Vector n a, Vector n b)
forall (f :: * -> *) a b. Functor f => f (a, b) -> (f a, f b)
FuncHT.unzip Vector n (a, b)
v of (Vector n a
a,Vector n b
b) -> T n a -> T n b -> T n (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip (Vector n a -> T n a
forall n. Positive n => Vector n a -> T n a
forall a n. (C a, Positive n) => Vector n a -> T n a
cons Vector n a
a) (Vector n b -> T n b
forall n. Positive n => Vector n b -> T n b
forall a n. (C a, Positive n) => Vector n a -> T n a
cons Vector n b
b)
undef :: forall n. Positive n => T n (a, b)
undef = T n a -> T n b -> T n (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef T n b
forall n. Positive n => T n b
forall a n. (C a, Positive n) => T n a
undef
zero :: forall n. Positive n => T n (a, b)
zero = T n a -> T n b -> T n (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero T n b
forall n. Positive n => T n b
forall a n. (C a, Positive n) => T n a
zero
phi :: forall n r.
Positive n =>
BasicBlock -> T n (a, b) -> CodeGenFunction r (T n (a, b))
phi BasicBlock
bb T n (a, b)
a =
case T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
a of
(T n a
a0,T n b
a1) ->
(T n a -> T n b -> T n (a, b))
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T n b)
-> CodeGenFunction r (T n (a, b))
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 T n a -> T n b -> T n (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip (BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phi BasicBlock
bb T n a
a0) (BasicBlock -> T n b -> CodeGenFunction r (T n b)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n b -> CodeGenFunction r (T n b)
phi BasicBlock
bb T n b
a1)
addPhi :: forall n r.
Positive n =>
BasicBlock -> T n (a, b) -> T n (a, b) -> CodeGenFunction r ()
addPhi BasicBlock
bb T n (a, b)
a T n (a, b)
b =
case (T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
a, T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
b) of
((T n a
a0,T n b
a1), (T n a
b0,T n b
b1)) ->
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhi BasicBlock
bb T n a
a0 T n a
b0 CodeGenFunction r ()
-> CodeGenFunction r () -> CodeGenFunction r ()
forall a b.
CodeGenFunction r a -> CodeGenFunction r b -> CodeGenFunction r b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
BasicBlock -> T n b -> T n b -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n b -> T n b -> CodeGenFunction r ()
addPhi BasicBlock
bb T n b
a1 T n b
b1
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n (a, b) -> T n (a, b) -> CodeGenFunction r (T m (a, b))
shuffle ConstValue (Vector m Word32)
is T n (a, b)
u T n (a, b)
v =
case (T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
u, T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
v) of
((T n a
u0,T n b
u1), (T n a
v0,T n b
v1)) ->
(T m a -> T m b -> T m (a, b))
-> CodeGenFunction r (T m a)
-> CodeGenFunction r (T m b)
-> CodeGenFunction r (T m (a, b))
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 T m a -> T m b -> T m (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip
(ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle ConstValue (Vector m Word32)
is T n a
u0 T n a
v0)
(ConstValue (Vector m Word32)
-> T n b -> T n b -> CodeGenFunction r (T m b)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n b -> T n b -> CodeGenFunction r (T m b)
shuffle ConstValue (Vector m Word32)
is T n b
u1 T n b
v1)
extract :: forall n r.
Positive n =>
Value Word32 -> T n (a, b) -> CodeGenFunction r (T (a, b))
extract Value Word32
k T n (a, b)
v =
case T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
v of
(T n a
v0,T n b
v1) ->
(T a -> T b -> T (a, b))
-> CodeGenFunction r (T a)
-> CodeGenFunction r (T b)
-> CodeGenFunction r (T (a, b))
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 T a -> T b -> T (a, b)
forall a b. T a -> T b -> T (a, b)
MultiValue.zip
(Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract Value Word32
k T n a
v0)
(Value Word32 -> T n b -> CodeGenFunction r (T b)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n b -> CodeGenFunction r (T b)
extract Value Word32
k T n b
v1)
insert :: forall n r.
Positive n =>
Value Word32
-> T (a, b) -> T n (a, b) -> CodeGenFunction r (T n (a, b))
insert Value Word32
k T (a, b)
a T n (a, b)
v =
case (T (a, b) -> (T a, T b)
forall a b. T (a, b) -> (T a, T b)
MultiValue.unzip T (a, b)
a, T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
v) of
((T a
a0,T b
a1), (T n a
v0,T n b
v1)) ->
(T n a -> T n b -> T n (a, b))
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T n b)
-> CodeGenFunction r (T n (a, b))
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 T n a -> T n b -> T n (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip
(Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert Value Word32
k T a
a0 T n a
v0)
(Value Word32 -> T b -> T n b -> CodeGenFunction r (T n b)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T b -> T n b -> CodeGenFunction r (T n b)
insert Value Word32
k T b
a1 T n b
v1)
instance (C a, C b, C c) => C (a,b,c) where
type Repr n (a,b,c) = (Repr n a, Repr n b, Repr n c)
cons :: forall n. Positive n => Vector n (a, b, c) -> T n (a, b, c)
cons Vector n (a, b, c)
v = case Vector n (a, b, c) -> (Vector n a, Vector n b, Vector n c)
forall (f :: * -> *) a b c.
Functor f =>
f (a, b, c) -> (f a, f b, f c)
FuncHT.unzip3 Vector n (a, b, c)
v of (Vector n a
a,Vector n b
b,Vector n c
c) -> T n a -> T n b -> T n c -> T n (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3 (Vector n a -> T n a
forall n. Positive n => Vector n a -> T n a
forall a n. (C a, Positive n) => Vector n a -> T n a
cons Vector n a
a) (Vector n b -> T n b
forall n. Positive n => Vector n b -> T n b
forall a n. (C a, Positive n) => Vector n a -> T n a
cons Vector n b
b) (Vector n c -> T n c
forall n. Positive n => Vector n c -> T n c
forall a n. (C a, Positive n) => Vector n a -> T n a
cons Vector n c
c)
undef :: forall n. Positive n => T n (a, b, c)
undef = T n a -> T n b -> T n c -> T n (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3 T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef T n b
forall n. Positive n => T n b
forall a n. (C a, Positive n) => T n a
undef T n c
forall n. Positive n => T n c
forall a n. (C a, Positive n) => T n a
undef
zero :: forall n. Positive n => T n (a, b, c)
zero = T n a -> T n b -> T n c -> T n (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3 T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero T n b
forall n. Positive n => T n b
forall a n. (C a, Positive n) => T n a
zero T n c
forall n. Positive n => T n c
forall a n. (C a, Positive n) => T n a
zero
phi :: forall n r.
Positive n =>
BasicBlock -> T n (a, b, c) -> CodeGenFunction r (T n (a, b, c))
phi BasicBlock
bb T n (a, b, c)
a =
case T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
a of
(T n a
a0,T n b
a1,T n c
a2) ->
(T n a -> T n b -> T n c -> T n (a, b, c))
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T n b)
-> CodeGenFunction r (T n c)
-> CodeGenFunction r (T n (a, b, c))
forall (m :: * -> *) a b c r.
Monad m =>
(a -> b -> c -> r) -> m a -> m b -> m c -> m r
Monad.lift3 T n a -> T n b -> T n c -> T n (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3 (BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
phi BasicBlock
bb T n a
a0) (BasicBlock -> T n b -> CodeGenFunction r (T n b)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n b -> CodeGenFunction r (T n b)
phi BasicBlock
bb T n b
a1) (BasicBlock -> T n c -> CodeGenFunction r (T n c)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n c -> CodeGenFunction r (T n c)
phi BasicBlock
bb T n c
a2)
addPhi :: forall n r.
Positive n =>
BasicBlock
-> T n (a, b, c) -> T n (a, b, c) -> CodeGenFunction r ()
addPhi BasicBlock
bb T n (a, b, c)
a T n (a, b, c)
b =
case (T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
a, T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
b) of
((T n a
a0,T n b
a1,T n c
a2), (T n a
b0,T n b
b1,T n c
b2)) ->
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
addPhi BasicBlock
bb T n a
a0 T n a
b0 CodeGenFunction r ()
-> CodeGenFunction r () -> CodeGenFunction r ()
forall a b.
CodeGenFunction r a -> CodeGenFunction r b -> CodeGenFunction r b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
BasicBlock -> T n b -> T n b -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n b -> T n b -> CodeGenFunction r ()
addPhi BasicBlock
bb T n b
a1 T n b
b1 CodeGenFunction r ()
-> CodeGenFunction r () -> CodeGenFunction r ()
forall a b.
CodeGenFunction r a -> CodeGenFunction r b -> CodeGenFunction r b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
BasicBlock -> T n c -> T n c -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n c -> T n c -> CodeGenFunction r ()
addPhi BasicBlock
bb T n c
a2 T n c
b2
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n (a, b, c)
-> T n (a, b, c)
-> CodeGenFunction r (T m (a, b, c))
shuffle ConstValue (Vector m Word32)
is T n (a, b, c)
u T n (a, b, c)
v =
case (T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
u, T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
v) of
((T n a
u0,T n b
u1,T n c
u2), (T n a
v0,T n b
v1,T n c
v2)) ->
(T m a -> T m b -> T m c -> T m (a, b, c))
-> CodeGenFunction r (T m a)
-> CodeGenFunction r (T m b)
-> CodeGenFunction r (T m c)
-> CodeGenFunction r (T m (a, b, c))
forall (m :: * -> *) a b c r.
Monad m =>
(a -> b -> c -> r) -> m a -> m b -> m c -> m r
Monad.lift3 T m a -> T m b -> T m c -> T m (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3
(ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle ConstValue (Vector m Word32)
is T n a
u0 T n a
v0)
(ConstValue (Vector m Word32)
-> T n b -> T n b -> CodeGenFunction r (T m b)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n b -> T n b -> CodeGenFunction r (T m b)
shuffle ConstValue (Vector m Word32)
is T n b
u1 T n b
v1)
(ConstValue (Vector m Word32)
-> T n c -> T n c -> CodeGenFunction r (T m c)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n c -> T n c -> CodeGenFunction r (T m c)
shuffle ConstValue (Vector m Word32)
is T n c
u2 T n c
v2)
extract :: forall n r.
Positive n =>
Value Word32 -> T n (a, b, c) -> CodeGenFunction r (T (a, b, c))
extract Value Word32
k T n (a, b, c)
v =
case T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
v of
(T n a
v0,T n b
v1,T n c
v2) ->
(T a -> T b -> T c -> T (a, b, c))
-> CodeGenFunction r (T a)
-> CodeGenFunction r (T b)
-> CodeGenFunction r (T c)
-> CodeGenFunction r (T (a, b, c))
forall (m :: * -> *) a b c r.
Monad m =>
(a -> b -> c -> r) -> m a -> m b -> m c -> m r
Monad.lift3 T a -> T b -> T c -> T (a, b, c)
forall a b c. T a -> T b -> T c -> T (a, b, c)
MultiValue.zip3
(Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract Value Word32
k T n a
v0)
(Value Word32 -> T n b -> CodeGenFunction r (T b)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n b -> CodeGenFunction r (T b)
extract Value Word32
k T n b
v1)
(Value Word32 -> T n c -> CodeGenFunction r (T c)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n c -> CodeGenFunction r (T c)
extract Value Word32
k T n c
v2)
insert :: forall n r.
Positive n =>
Value Word32
-> T (a, b, c)
-> T n (a, b, c)
-> CodeGenFunction r (T n (a, b, c))
insert Value Word32
k T (a, b, c)
a T n (a, b, c)
v =
case (T (a, b, c) -> (T a, T b, T c)
forall a b c. T (a, b, c) -> (T a, T b, T c)
MultiValue.unzip3 T (a, b, c)
a, T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
v) of
((T a
a0,T b
a1,T c
a2), (T n a
v0,T n b
v1,T n c
v2)) ->
(T n a -> T n b -> T n c -> T n (a, b, c))
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T n b)
-> CodeGenFunction r (T n c)
-> CodeGenFunction r (T n (a, b, c))
forall (m :: * -> *) a b c r.
Monad m =>
(a -> b -> c -> r) -> m a -> m b -> m c -> m r
Monad.lift3 T n a -> T n b -> T n c -> T n (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3
(Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert Value Word32
k T a
a0 T n a
v0)
(Value Word32 -> T b -> T n b -> CodeGenFunction r (T n b)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T b -> T n b -> CodeGenFunction r (T n b)
insert Value Word32
k T b
a1 T n b
v1)
(Value Word32 -> T c -> T n c -> CodeGenFunction r (T n c)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T c -> T n c -> CodeGenFunction r (T n c)
insert Value Word32
k T c
a2 T n c
v2)
instance (C tuple) => C (StoreTuple.Tuple tuple) where
type Repr n (StoreTuple.Tuple tuple) = Repr n tuple
cons :: forall n. Positive n => Vector n (Tuple tuple) -> T n (Tuple tuple)
cons = T n tuple -> T n (Tuple tuple)
forall n tuple. T n tuple -> T n (Tuple tuple)
tuple (T n tuple -> T n (Tuple tuple))
-> (Vector n (Tuple tuple) -> T n tuple)
-> Vector n (Tuple tuple)
-> T n (Tuple tuple)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector n tuple -> T n tuple
forall n. Positive n => Vector n tuple -> T n tuple
forall a n. (C a, Positive n) => Vector n a -> T n a
cons (Vector n tuple -> T n tuple)
-> (Vector n (Tuple tuple) -> Vector n tuple)
-> Vector n (Tuple tuple)
-> T n tuple
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tuple tuple -> tuple) -> Vector n (Tuple tuple) -> Vector n tuple
forall a b. (a -> b) -> Vector n a -> Vector n b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tuple tuple -> tuple
forall a. Tuple a -> a
StoreTuple.getTuple
undef :: forall n. Positive n => T n (Tuple tuple)
undef = T n tuple -> T n (Tuple tuple)
forall n tuple. T n tuple -> T n (Tuple tuple)
tuple T n tuple
forall n. Positive n => T n tuple
forall a n. (C a, Positive n) => T n a
undef
zero :: forall n. Positive n => T n (Tuple tuple)
zero = T n tuple -> T n (Tuple tuple)
forall n tuple. T n tuple -> T n (Tuple tuple)
tuple T n tuple
forall n. Positive n => T n tuple
forall a n. (C a, Positive n) => T n a
zero
phi :: forall n r.
Positive n =>
BasicBlock
-> T n (Tuple tuple) -> CodeGenFunction r (T n (Tuple tuple))
phi BasicBlock
bb = (T n tuple -> T n (Tuple tuple))
-> CodeGenFunction r (T n tuple)
-> CodeGenFunction r (T n (Tuple tuple))
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T n tuple -> T n (Tuple tuple)
forall n tuple. T n tuple -> T n (Tuple tuple)
tuple (CodeGenFunction r (T n tuple)
-> CodeGenFunction r (T n (Tuple tuple)))
-> (T n (Tuple tuple) -> CodeGenFunction r (T n tuple))
-> T n (Tuple tuple)
-> CodeGenFunction r (T n (Tuple tuple))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BasicBlock -> T n tuple -> CodeGenFunction r (T n tuple)
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
BasicBlock -> T n tuple -> CodeGenFunction r (T n tuple)
phi BasicBlock
bb (T n tuple -> CodeGenFunction r (T n tuple))
-> (T n (Tuple tuple) -> T n tuple)
-> T n (Tuple tuple)
-> CodeGenFunction r (T n tuple)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple
addPhi :: forall n r.
Positive n =>
BasicBlock
-> T n (Tuple tuple) -> T n (Tuple tuple) -> CodeGenFunction r ()
addPhi BasicBlock
bb T n (Tuple tuple)
a T n (Tuple tuple)
b = BasicBlock -> T n tuple -> T n tuple -> CodeGenFunction r ()
forall a n r.
(C a, Positive n) =>
BasicBlock -> T n a -> T n a -> CodeGenFunction r ()
forall n r.
Positive n =>
BasicBlock -> T n tuple -> T n tuple -> CodeGenFunction r ()
addPhi BasicBlock
bb (T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple T n (Tuple tuple)
a) (T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple T n (Tuple tuple)
b)
shuffle :: forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n (Tuple tuple)
-> T n (Tuple tuple)
-> CodeGenFunction r (T m (Tuple tuple))
shuffle ConstValue (Vector m Word32)
is T n (Tuple tuple)
u T n (Tuple tuple)
v = T m tuple -> T m (Tuple tuple)
forall n tuple. T n tuple -> T n (Tuple tuple)
tuple (T m tuple -> T m (Tuple tuple))
-> CodeGenFunction r (T m tuple)
-> CodeGenFunction r (T m (Tuple tuple))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConstValue (Vector m Word32)
-> T n tuple -> T n tuple -> CodeGenFunction r (T m tuple)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n tuple -> T n tuple -> CodeGenFunction r (T m tuple)
shuffle ConstValue (Vector m Word32)
is (T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple T n (Tuple tuple)
u) (T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple T n (Tuple tuple)
v)
extract :: forall n r.
Positive n =>
Value Word32
-> T n (Tuple tuple) -> CodeGenFunction r (T (Tuple tuple))
extract Value Word32
k T n (Tuple tuple)
v = T tuple -> T (Tuple tuple)
forall tuple. T tuple -> T (Tuple tuple)
MultiValue.tuple (T tuple -> T (Tuple tuple))
-> CodeGenFunction r (T tuple)
-> CodeGenFunction r (T (Tuple tuple))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value Word32 -> T n tuple -> CodeGenFunction r (T tuple)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n tuple -> CodeGenFunction r (T tuple)
extract Value Word32
k (T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple T n (Tuple tuple)
v)
insert :: forall n r.
Positive n =>
Value Word32
-> T (Tuple tuple)
-> T n (Tuple tuple)
-> CodeGenFunction r (T n (Tuple tuple))
insert Value Word32
k T (Tuple tuple)
a T n (Tuple tuple)
v = T n tuple -> T n (Tuple tuple)
forall n tuple. T n tuple -> T n (Tuple tuple)
tuple (T n tuple -> T n (Tuple tuple))
-> CodeGenFunction r (T n tuple)
-> CodeGenFunction r (T n (Tuple tuple))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value Word32
-> T tuple -> T n tuple -> CodeGenFunction r (T n tuple)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32
-> T tuple -> T n tuple -> CodeGenFunction r (T n tuple)
insert Value Word32
k (T (Tuple tuple) -> T tuple
forall tuple. T (Tuple tuple) -> T tuple
MultiValue.untuple T (Tuple tuple)
a) (T n (Tuple tuple) -> T n tuple
forall n tuple. T n (Tuple tuple) -> T n tuple
untuple T n (Tuple tuple)
v)
tuple :: T n tuple -> T n (StoreTuple.Tuple tuple)
tuple :: forall n tuple. T n tuple -> T n (Tuple tuple)
tuple (Cons Repr n tuple
a) = Repr n (Tuple tuple) -> T n (Tuple tuple)
forall n a. Repr n a -> T n a
Cons Repr n tuple
Repr n (Tuple tuple)
a
untuple :: T n (StoreTuple.Tuple tuple) -> T n tuple
untuple :: forall n tuple. T n (Tuple tuple) -> T n tuple
untuple (Cons Repr n (Tuple tuple)
a) = Repr n tuple -> T n tuple
forall n a. Repr n a -> T n a
Cons Repr n tuple
Repr n (Tuple tuple)
a
class (MultiValue.IntegerConstant a, C a) => IntegerConstant a where
fromInteger' :: (TypeNum.Positive n) => Integer -> T n a
class
(MultiValue.RationalConstant a, IntegerConstant a) =>
RationalConstant a where
fromRational' :: (TypeNum.Positive n) => Rational -> T n a
instance IntegerConstant Float where fromInteger' :: forall n. Positive n => Integer -> T n Float
fromInteger' = Integer -> T n Float
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Double where fromInteger' :: forall n. Positive n => Integer -> T n Double
fromInteger' = Integer -> T n Double
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Word where fromInteger' :: forall n. Positive n => Integer -> T n Word
fromInteger' = Integer -> T n Word
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Word8 where fromInteger' :: forall n. Positive n => Integer -> T n Word8
fromInteger' = Integer -> T n Word8
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Word16 where fromInteger' :: forall n. Positive n => Integer -> T n Word16
fromInteger' = Integer -> T n Word16
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Word32 where fromInteger' :: forall n. Positive n => Integer -> T n Word32
fromInteger' = Integer -> T n Word32
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Word64 where fromInteger' :: forall n. Positive n => Integer -> T n Word64
fromInteger' = Integer -> T n Word64
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Int where fromInteger' :: forall n. Positive n => Integer -> T n Int
fromInteger' = Integer -> T n Int
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Int8 where fromInteger' :: forall n. Positive n => Integer -> T n Int8
fromInteger' = Integer -> T n Int8
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Int16 where fromInteger' :: forall n. Positive n => Integer -> T n Int16
fromInteger' = Integer -> T n Int16
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Int32 where fromInteger' :: forall n. Positive n => Integer -> T n Int32
fromInteger' = Integer -> T n Int32
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
instance IntegerConstant Int64 where fromInteger' :: forall n. Positive n => Integer -> T n Int64
fromInteger' = Integer -> T n Int64
forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive
fromIntegerPrimitive ::
(TypeNum.Positive n, IsPrimitive a, SoV.IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive :: forall n a.
(Positive n, IsPrimitive a, IntegerConstant a,
Repr n a ~ Value n a) =>
Integer -> T n a
fromIntegerPrimitive = Value n a -> T n a
Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (Value n a -> T n a) -> (Integer -> Value n a) -> Integer -> T n a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstValue (Vector n a) -> Value n a
forall a. ConstValue a -> Value a
LLVM.value (ConstValue (Vector n a) -> Value n a)
-> (Integer -> ConstValue (Vector n a)) -> Integer -> Value n a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> ConstValue (Vector n a)
forall a. IntegerConstant a => Integer -> ConstValue a
SoV.constFromInteger
instance RationalConstant Float where fromRational' :: forall n. Positive n => Rational -> T n Float
fromRational' = Rational -> T n Float
forall n a.
(Positive n, IsPrimitive a, RationalConstant a,
Repr n a ~ Value n a) =>
Rational -> T n a
fromRationalPrimitive
instance RationalConstant Double where fromRational' :: forall n. Positive n => Rational -> T n Double
fromRational' = Rational -> T n Double
forall n a.
(Positive n, IsPrimitive a, RationalConstant a,
Repr n a ~ Value n a) =>
Rational -> T n a
fromRationalPrimitive
fromRationalPrimitive ::
(TypeNum.Positive n, IsPrimitive a, SoV.RationalConstant a,
Repr n a ~ Value n a) =>
Rational -> T n a
fromRationalPrimitive :: forall n a.
(Positive n, IsPrimitive a, RationalConstant a,
Repr n a ~ Value n a) =>
Rational -> T n a
fromRationalPrimitive = Value n a -> T n a
Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons (Value n a -> T n a)
-> (Rational -> Value n a) -> Rational -> T n a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstValue (Vector n a) -> Value n a
forall a. ConstValue a -> Value a
LLVM.value (ConstValue (Vector n a) -> Value n a)
-> (Rational -> ConstValue (Vector n a)) -> Rational -> Value n a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> ConstValue (Vector n a)
forall a. RationalConstant a => Rational -> ConstValue a
SoV.constFromRational
instance
(TypeNum.Positive n, IntegerConstant a) =>
A.IntegerConstant (T n a) where
fromInteger' :: Integer -> T n a
fromInteger' = Integer -> T n a
forall n. Positive n => Integer -> T n a
forall a n. (IntegerConstant a, Positive n) => Integer -> T n a
fromInteger'
instance
(TypeNum.Positive n, RationalConstant a) =>
A.RationalConstant (T n a) where
fromRational' :: Rational -> T n a
fromRational' = Rational -> T n a
forall n. Positive n => Rational -> T n a
forall a n. (RationalConstant a, Positive n) => Rational -> T n a
fromRational'
modify ::
(TypeNum.Positive n, C a) =>
LLVM.Value Word32 ->
(MultiValue.T a -> CodeGenFunction r (MultiValue.T a)) ->
(T n a -> CodeGenFunction r (T n a))
modify :: forall n a r.
(Positive n, C a) =>
Value Word32
-> (T a -> CodeGenFunction r (T a))
-> T n a
-> CodeGenFunction r (T n a)
modify Value Word32
k T a -> CodeGenFunction r (T a)
f T n a
v =
(T a -> T n a -> CodeGenFunction r (T n a))
-> T n a -> T a -> CodeGenFunction r (T n a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip (Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert Value Word32
k) T n a
v (T a -> CodeGenFunction r (T n a))
-> CodeGenFunction r (T a) -> CodeGenFunction r (T n a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T a -> CodeGenFunction r (T a)
f (T a -> CodeGenFunction r (T a))
-> CodeGenFunction r (T a) -> CodeGenFunction r (T a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract Value Word32
k T n a
v
assemble ::
(TypeNum.Positive n, C a) =>
[MultiValue.T a] -> CodeGenFunction r (T n a)
assemble :: forall n a r.
(Positive n, C a) =>
[T a] -> CodeGenFunction r (T n a)
assemble =
(T n a -> (Word32, T a) -> CodeGenFunction r (T n a))
-> T n a -> [(Word32, T a)] -> CodeGenFunction r (T n a)
forall (t :: * -> *) (m :: * -> *) b a.
(Foldable t, Monad m) =>
(b -> a -> m b) -> b -> t a -> m b
foldlM (\T n a
v (Word32
k,T a
x) -> Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert (Word32 -> Value Word32
forall a. IsConst a => a -> Value a
valueOf Word32
k) T a
x T n a
v) T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef ([(Word32, T a)] -> CodeGenFunction r (T n a))
-> ([T a] -> [(Word32, T a)]) -> [T a] -> CodeGenFunction r (T n a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
[Word32] -> [T a] -> [(Word32, T a)]
forall a b. [a] -> [b] -> [(a, b)]
List.zip [Word32
0..]
dissect ::
(TypeNum.Positive n, C a) =>
T n a -> LLVM.CodeGenFunction r [MultiValue.T a]
dissect :: forall n a r. (Positive n, C a) => T n a -> CodeGenFunction r [T a]
dissect = [CodeGenFunction r (T a)] -> CodeGenFunction r [T a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence ([CodeGenFunction r (T a)] -> CodeGenFunction r [T a])
-> (T n a -> [CodeGenFunction r (T a)])
-> T n a
-> CodeGenFunction r [T a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T n a -> [CodeGenFunction r (T a)]
forall n a r.
(Positive n, C a) =>
T n a -> [CodeGenFunction r (T a)]
dissectList
dissectList ::
(TypeNum.Positive n, C a) =>
T n a -> [LLVM.CodeGenFunction r (MultiValue.T a)]
dissectList :: forall n a r.
(Positive n, C a) =>
T n a -> [CodeGenFunction r (T a)]
dissectList T n a
x =
(Word32 -> CodeGenFunction r (T a))
-> [Word32] -> [CodeGenFunction r (T a)]
forall a b. (a -> b) -> [a] -> [b]
List.map
((Value Word32 -> T n a -> CodeGenFunction r (T a))
-> T n a -> Value Word32 -> CodeGenFunction r (T a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract T n a
x (Value Word32 -> CodeGenFunction r (T a))
-> (Word32 -> Value Word32) -> Word32 -> CodeGenFunction r (T a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> Value Word32
forall a. IsConst a => a -> Value a
LLVM.valueOf)
(Int -> [Word32] -> [Word32]
forall a. Int -> [a] -> [a]
List.take (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x) [Word32
0..])
assemble1 ::
(TypeNum.Positive n, C a) =>
NonEmpty.T [] (MultiValue.T a) -> CodeGenFunction r (T n a)
assemble1 :: forall n a r.
(Positive n, C a) =>
T [] (T a) -> CodeGenFunction r (T n a)
assemble1 = [T a] -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
[T a] -> CodeGenFunction r (T n a)
assemble ([T a] -> CodeGenFunction r (T n a))
-> (T [] (T a) -> [T a]) -> T [] (T a) -> CodeGenFunction r (T n a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T [] (T a) -> [T a]
forall (f :: * -> *) a. Cons f => T f a -> f a
NonEmpty.flatten
dissect1 ::
(TypeNum.Positive n, C a) =>
T n a -> LLVM.CodeGenFunction r (NonEmpty.T [] (MultiValue.T a))
dissect1 :: forall n a r.
(Positive n, C a) =>
T n a -> CodeGenFunction r (T [] (T a))
dissect1 = T [] (CodeGenFunction r (T a)) -> CodeGenFunction r (T [] (T a))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => T [] (m a) -> m (T [] a)
sequence (T [] (CodeGenFunction r (T a)) -> CodeGenFunction r (T [] (T a)))
-> (T n a -> T [] (CodeGenFunction r (T a)))
-> T n a
-> CodeGenFunction r (T [] (T a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T n a -> T [] (CodeGenFunction r (T a))
forall n a r.
(Positive n, C a) =>
T n a -> T [] (CodeGenFunction r (T a))
dissectList1
dissectList1 ::
(TypeNum.Positive n, C a) =>
T n a -> NonEmpty.T [] (LLVM.CodeGenFunction r (MultiValue.T a))
dissectList1 :: forall n a r.
(Positive n, C a) =>
T n a -> T [] (CodeGenFunction r (T a))
dissectList1 T n a
x =
(Word32 -> CodeGenFunction r (T a))
-> T [] Word32 -> T [] (CodeGenFunction r (T a))
forall a b. (a -> b) -> T [] a -> T [] b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
((Value Word32 -> T n a -> CodeGenFunction r (T a))
-> T n a -> Value Word32 -> CodeGenFunction r (T a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract T n a
x (Value Word32 -> CodeGenFunction r (T a))
-> (Word32 -> Value Word32) -> Word32 -> CodeGenFunction r (T a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> Value Word32
forall a. IsConst a => a -> Value a
LLVM.valueOf)
(Word32
0 Word32 -> [Word32] -> T [] Word32
forall a (f :: * -> *). a -> f a -> T f a
!: Int -> [Word32] -> [Word32]
forall a. Int -> [a] -> [a]
List.take (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Word32
1 ..])
assembleFromVector ::
(TypeNum.Positive n, C a) =>
LLVM.Vector n (MultiValue.T a) -> CodeGenFunction r (T n a)
assembleFromVector :: forall n a r.
(Positive n, C a) =>
Vector n (T a) -> CodeGenFunction r (T n a)
assembleFromVector =
((Word32, T n a) -> T n a)
-> CodeGenFunction r (Word32, T n a) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Word32, T n a) -> T n a
forall a b. (a, b) -> b
snd (CodeGenFunction r (Word32, T n a) -> CodeGenFunction r (T n a))
-> (Vector n (T a) -> CodeGenFunction r (Word32, T n a))
-> Vector n (T a)
-> CodeGenFunction r (T n a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
((Word32, T n a) -> T a -> CodeGenFunction r (Word32, T n a))
-> (Word32, T n a)
-> Vector n (T a)
-> CodeGenFunction r (Word32, T n a)
forall (t :: * -> *) (m :: * -> *) b a.
(Foldable t, Monad m) =>
(b -> a -> m b) -> b -> t a -> m b
foldlM (\(Word32
k,T n a
v) T a
x -> (,) (Word32
kWord32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+Word32
1) (T n a -> (Word32, T n a))
-> CodeGenFunction r (T n a) -> CodeGenFunction r (Word32, T n a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert (Word32 -> Value Word32
forall a. IsConst a => a -> Value a
valueOf Word32
k) T a
x T n a
v) (Word32
0,T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef)
map ::
(TypeNum.Positive n, C a, C b) =>
(MultiValue.T a -> CodeGenFunction r (MultiValue.T b)) ->
(T n a -> CodeGenFunction r (T n b))
map :: forall n a b r.
(Positive n, C a, C b) =>
(T a -> CodeGenFunction r (T b))
-> T n a -> CodeGenFunction r (T n b)
map T a -> CodeGenFunction r (T b)
f = [T b] -> CodeGenFunction r (T n b)
forall n a r.
(Positive n, C a) =>
[T a] -> CodeGenFunction r (T n a)
assemble ([T b] -> CodeGenFunction r (T n b))
-> (T n a -> CodeGenFunction r [T b])
-> T n a
-> CodeGenFunction r (T n b)
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< (T a -> CodeGenFunction r (T b))
-> [T a] -> CodeGenFunction r [T b]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM T a -> CodeGenFunction r (T b)
f ([T a] -> CodeGenFunction r [T b])
-> (T n a -> CodeGenFunction r [T a])
-> T n a
-> CodeGenFunction r [T b]
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< T n a -> CodeGenFunction r [T a]
forall n a r. (Positive n, C a) => T n a -> CodeGenFunction r [T a]
dissect
singleton :: (C a) => MultiValue.T a -> CodeGenFunction r (T TypeNum.D1 a)
singleton :: forall a r. C a => T a -> CodeGenFunction r (T D1 a)
singleton T a
x = Value Word32 -> T a -> T D1 a -> CodeGenFunction r (T D1 a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert (ConstValue Word32 -> Value Word32
forall a. ConstValue a -> Value a
LLVM.value ConstValue Word32
forall a. IsType a => ConstValue a
LLVM.zero) T a
x T D1 a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
replicate ::
(TypeNum.Positive n, C a) =>
MultiValue.T a -> CodeGenFunction r (T n a)
replicate :: forall n a r. (Positive n, C a) => T a -> CodeGenFunction r (T n a)
replicate T a
x = do
T D1 a
single <- T a -> CodeGenFunction r (T D1 a)
forall a r. C a => T a -> CodeGenFunction r (T D1 a)
singleton T a
x
ConstValue (Vector n Word32)
-> T D1 a -> T D1 a -> CodeGenFunction r (T n a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle (T [] Word32 -> ConstValue (Vector n Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector n Word32))
-> T [] Word32 -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$ Word32 -> T [] Word32
forall (f :: * -> *) a. Empty f => a -> T f a
NonEmpty.singleton Word32
0) T D1 a
single T D1 a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
iterate ::
(TypeNum.Positive n, C a) =>
(MultiValue.T a -> CodeGenFunction r (MultiValue.T a)) ->
MultiValue.T a -> CodeGenFunction r (T n a)
iterate :: forall n a r.
(Positive n, C a) =>
(T a -> CodeGenFunction r (T a))
-> T a -> CodeGenFunction r (T n a)
iterate T a -> CodeGenFunction r (T a)
f T a
x = ((T a, T n a) -> T n a)
-> CodeGenFunction r (T a, T n a) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> CodeGenFunction r a -> CodeGenFunction r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (T a, T n a) -> T n a
forall a b. (a, b) -> b
snd (CodeGenFunction r (T a, T n a) -> CodeGenFunction r (T n a))
-> CodeGenFunction r (T a, T n a) -> CodeGenFunction r (T n a)
forall a b. (a -> b) -> a -> b
$ (T a -> CodeGenFunction r (T a))
-> T a -> T n a -> CodeGenFunction r (T a, T n a)
forall n a r.
(Positive n, C a) =>
(T a -> CodeGenFunction r (T a))
-> T a -> T n a -> CodeGenFunction r (T a, T n a)
iterateCore T a -> CodeGenFunction r (T a)
f T a
x T n a
forall a. Undefined a => a
Tuple.undef
iterateCore ::
(TypeNum.Positive n, C a) =>
(MultiValue.T a -> CodeGenFunction r (MultiValue.T a)) ->
MultiValue.T a -> T n a ->
CodeGenFunction r (MultiValue.T a, T n a)
iterateCore :: forall n a r.
(Positive n, C a) =>
(T a -> CodeGenFunction r (T a))
-> T a -> T n a -> CodeGenFunction r (T a, T n a)
iterateCore T a -> CodeGenFunction r (T a)
f T a
x0 T n a
v0 =
((T a, T n a) -> Word32 -> CodeGenFunction r (T a, T n a))
-> (T a, T n a) -> [Word32] -> CodeGenFunction r (T a, T n a)
forall (t :: * -> *) (m :: * -> *) b a.
(Foldable t, Monad m) =>
(b -> a -> m b) -> b -> t a -> m b
foldlM
(\(T a
x,T n a
v) Word32
k -> (T a -> T n a -> (T a, T n a))
-> CodeGenFunction r (T a)
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T a, T n a)
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 (,) (T a -> CodeGenFunction r (T a)
f T a
x) (Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert (Word32 -> Value Word32
forall a. IsConst a => a -> Value a
valueOf Word32
k) T a
x T n a
v))
(T a
x0,T n a
v0)
(Int -> [Word32] -> [Word32]
forall a. Int -> [a] -> [a]
List.take (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
v0) [Word32
0..])
sum ::
(TypeNum.Positive n, Additive a) =>
T n a -> CodeGenFunction r (MultiValue.T a)
sum :: forall n a r.
(Positive n, Additive a) =>
T n a -> CodeGenFunction r (T a)
sum =
(CodeGenFunction r (T a)
-> CodeGenFunction r (T a) -> CodeGenFunction r (T a))
-> T [] (CodeGenFunction r (T a)) -> CodeGenFunction r (T a)
forall a. (a -> a -> a) -> T [] a -> a
NonEmpty.foldBalanced (\CodeGenFunction r (T a)
x CodeGenFunction r (T a)
y -> CodeGenFunction r (CodeGenFunction r (T a))
-> CodeGenFunction r (T a)
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (CodeGenFunction r (CodeGenFunction r (T a))
-> CodeGenFunction r (T a))
-> CodeGenFunction r (CodeGenFunction r (T a))
-> CodeGenFunction r (T a)
forall a b. (a -> b) -> a -> b
$ (T a -> T a -> CodeGenFunction r (T a))
-> CodeGenFunction r (T a)
-> CodeGenFunction r (T a)
-> CodeGenFunction r (CodeGenFunction r (T a))
forall a b c.
(a -> b -> c)
-> CodeGenFunction r a
-> CodeGenFunction r b
-> CodeGenFunction r c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 T a -> T a -> CodeGenFunction r (T a)
forall a r. Additive a => T a -> T a -> CodeGenFunction r (T a)
forall r. T a -> T a -> CodeGenFunction r (T a)
MultiValue.add CodeGenFunction r (T a)
x CodeGenFunction r (T a)
y) (T [] (CodeGenFunction r (T a)) -> CodeGenFunction r (T a))
-> (T n a -> T [] (CodeGenFunction r (T a)))
-> T n a
-> CodeGenFunction r (T a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
T n a -> T [] (CodeGenFunction r (T a))
forall n a r.
(Positive n, C a) =>
T n a -> T [] (CodeGenFunction r (T a))
dissectList1
dotProduct ::
(TypeNum.Positive n, PseudoRing a) =>
T n a -> T n a -> CodeGenFunction r (MultiValue.T a)
dotProduct :: forall n a r.
(Positive n, PseudoRing a) =>
T n a -> T n a -> CodeGenFunction r (T a)
dotProduct T n a
x T n a
y = T n a -> CodeGenFunction r (T a)
forall n a r.
(Positive n, Additive a) =>
T n a -> CodeGenFunction r (T a)
sum (T n a -> CodeGenFunction r (T a))
-> CodeGenFunction r (T n a) -> CodeGenFunction r (T a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(PseudoRing a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
mul T n a
x T n a
y
cumulate ::
(TypeNum.Positive n, Additive a) =>
MultiValue.T a -> T n a ->
CodeGenFunction r (MultiValue.T a, T n a)
cumulate :: forall n a r.
(Positive n, Additive a) =>
T a -> T n a -> CodeGenFunction r (T a, T n a)
cumulate T a
a T n a
x0 = do
(T a
b,T n a
x1) <- T a -> T n a -> CodeGenFunction r (T a, T n a)
forall n a r.
(Positive n, C a) =>
T a -> T n a -> CodeGenFunction r (T a, T n a)
shiftUp T a
a T n a
x0
T n a
y <- T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, Additive a) =>
T n a -> CodeGenFunction r (T n a)
cumulate1 T n a
x1
T a
z <- T a -> T a -> CodeGenFunction r (T a)
forall a r. Additive a => a -> a -> CodeGenFunction r a
forall r. T a -> T a -> CodeGenFunction r (T a)
A.add T a
b (T a -> CodeGenFunction r (T a))
-> CodeGenFunction r (T a) -> CodeGenFunction r (T a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T n a -> CodeGenFunction r (T a)
forall n a r. (Positive n, C a) => T n a -> CodeGenFunction r (T a)
last T n a
y
(T a, T n a) -> CodeGenFunction r (T a, T n a)
forall a. a -> CodeGenFunction r a
forall (m :: * -> *) a. Monad m => a -> m a
return (T a
z,T n a
y)
cumulate1 ::
(TypeNum.Positive n, Additive a) =>
T n a -> CodeGenFunction r (T n a)
cumulate1 :: forall n a r.
(Positive n, Additive a) =>
T n a -> CodeGenFunction r (T n a)
cumulate1 T n a
x =
(T n a -> Int -> CodeGenFunction r (T n a))
-> T n a -> [Int] -> CodeGenFunction r (T n a)
forall (t :: * -> *) (m :: * -> *) b a.
(Foldable t, Monad m) =>
(b -> a -> m b) -> b -> t a -> m b
foldlM
(\T n a
y Int
k -> T n a -> T n a -> CodeGenFunction r (T n a)
forall a r. Additive a => a -> a -> CodeGenFunction r a
forall r. T n a -> T n a -> CodeGenFunction r (T n a)
A.add T n a
y (T n a -> CodeGenFunction r (T n a))
-> CodeGenFunction r (T n a) -> CodeGenFunction r (T n a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Int -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
Int -> T n a -> CodeGenFunction r (T n a)
shiftUpMultiZero Int
k T n a
y)
T n a
x
((Int -> Bool) -> [Int] -> [Int]
forall a. (a -> Bool) -> [a] -> [a]
List.takeWhile (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x) ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ (Int -> Int) -> Int -> [Int]
forall a. (a -> a) -> a -> [a]
List.iterate (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*) Int
1)
constCyclicVector ::
(LLVM.IsConst a, TypeNum.Positive n) =>
NonEmpty.T [] a -> LLVM.ConstValue (LLVM.Vector n a)
constCyclicVector :: forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector =
T [] (ConstValue a) -> ConstValue (Vector n a)
forall a n.
Positive n =>
T [] (ConstValue a) -> ConstValue (Vector n a)
LLVM.constCyclicVector (T [] (ConstValue a) -> ConstValue (Vector n a))
-> (T [] a -> T [] (ConstValue a))
-> T [] a
-> ConstValue (Vector n a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> ConstValue a) -> T [] a -> T [] (ConstValue a)
forall a b. (a -> b) -> T [] a -> T [] b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> ConstValue a
forall a. IsConst a => a -> ConstValue a
LLVM.constOf
shuffleMatch ::
(TypeNum.Positive n, C a) =>
LLVM.ConstValue (LLVM.Vector n Word32) -> T n a ->
CodeGenFunction r (T n a)
shuffleMatch :: forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch ConstValue (Vector n Word32)
k T n a
v = ConstValue (Vector n Word32)
-> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle ConstValue (Vector n Word32)
k T n a
v T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
rotateUp ::
(TypeNum.Positive n, C a) =>
T n a -> CodeGenFunction r (T n a)
rotateUp :: forall n a r.
(Positive n, C a) =>
T n a -> CodeGenFunction r (T n a)
rotateUp T n a
x =
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch (T [] Word32 -> ConstValue (Vector n Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector n Word32))
-> T [] Word32 -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$ (T n a -> Word32
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
1) Word32 -> [Word32] -> T [] Word32
forall a (f :: * -> *). a -> f a -> T f a
!: [Word32
0..]) T n a
x
rotateDown ::
(TypeNum.Positive n, C a) =>
T n a -> CodeGenFunction r (T n a)
rotateDown :: forall n a r.
(Positive n, C a) =>
T n a -> CodeGenFunction r (T n a)
rotateDown T n a
x =
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch
(T [] Word32 -> ConstValue (Vector n Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector n Word32))
-> T [] Word32 -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$
[Word32] -> Word32 -> T [] Word32
forall (f :: * -> *) a. Traversable f => f a -> a -> T f a
NonEmpty.snoc (Int -> [Word32] -> [Word32]
forall a. Int -> [a] -> [a]
List.take (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Word32
1..]) Word32
0) T n a
x
reverse ::
(TypeNum.Positive n, C a) =>
T n a -> CodeGenFunction r (T n a)
reverse :: forall n a r.
(Positive n, C a) =>
T n a -> CodeGenFunction r (T n a)
reverse T n a
x =
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch
(T [] Word32 -> ConstValue (Vector n Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector n Word32))
-> T [] Word32 -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$
T [] Word32
-> (T [] Word32 -> T [] Word32)
-> Maybe (T [] Word32)
-> T [] Word32
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Char] -> T [] Word32
forall a. HasCallStack => [Char] -> a
error [Char]
"vector size must be positive") T [] Word32 -> T [] Word32
forall (f :: * -> *) a.
(Traversable f, Reverse f) =>
T f a -> T f a
NonEmpty.reverse (Maybe (T [] Word32) -> T [] Word32)
-> Maybe (T [] Word32) -> T [] Word32
forall a b. (a -> b) -> a -> b
$
[Word32] -> Maybe (T [] Word32)
forall (f :: * -> *) a. ViewL f => f a -> Maybe (T f a)
NonEmpty.fetch ([Word32] -> Maybe (T [] Word32))
-> [Word32] -> Maybe (T [] Word32)
forall a b. (a -> b) -> a -> b
$
Int -> [Word32] -> [Word32]
forall a. Int -> [a] -> [a]
List.take (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x) [Word32
0..])
T n a
x
take ::
(TypeNum.Positive n, TypeNum.Positive m, C a) =>
T n a -> CodeGenFunction r (T m a)
take :: forall n m a r.
(Positive n, Positive m, C a) =>
T n a -> CodeGenFunction r (T m a)
take T n a
u = ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle (T [] Word32 -> ConstValue (Vector m Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector m Word32))
-> T [] Word32 -> ConstValue (Vector m Word32)
forall a b. (a -> b) -> a -> b
$ (Word32 -> Word32) -> Word32 -> T [] Word32
forall a. (a -> a) -> a -> T [] a
forall (f :: * -> *) a. Iterate f => (a -> a) -> a -> f a
NonEmptyC.iterate (Word32
1Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+) Word32
0) T n a
u T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
takeRev ::
(TypeNum.Positive n, TypeNum.Positive m, C a) =>
T n a -> CodeGenFunction r (T m a)
takeRev :: forall n m a r.
(Positive n, Positive m, C a) =>
T n a -> CodeGenFunction r (T m a)
takeRev T n a
u = do
let v0 :: T m a
v0 = T m a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero
T m a
v <-
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle
(T [] Word32 -> ConstValue (Vector m Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector m Word32))
-> T [] Word32 -> ConstValue (Vector m Word32)
forall a b. (a -> b) -> a -> b
$ (Word32 -> Word32) -> Word32 -> T [] Word32
forall a. (a -> a) -> a -> T [] a
forall (f :: * -> *) a. Iterate f => (a -> a) -> a -> f a
NonEmptyC.iterate (Word32
1Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+) (T n a -> Word32
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
u Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- T m a -> Word32
forall n i a. (Positive n, Integral i) => T n a -> i
size T m a
v0))
T n a
u T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
T m a -> CodeGenFunction r (T m a)
forall a. a -> CodeGenFunction r a
forall (m :: * -> *) a. Monad m => a -> m a
return (T m a -> CodeGenFunction r (T m a))
-> T m a -> CodeGenFunction r (T m a)
forall a b. (a -> b) -> a -> b
$ T m a
v T m a -> T m a -> T m a
forall a. a -> a -> a
`asTypeOf` T m a
v0
shiftUp ::
(TypeNum.Positive n, C a) =>
MultiValue.T a -> T n a -> CodeGenFunction r (MultiValue.T a, T n a)
shiftUp :: forall n a r.
(Positive n, C a) =>
T a -> T n a -> CodeGenFunction r (T a, T n a)
shiftUp T a
x0 T n a
x = do
T n a
y <-
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch
(T [] (ConstValue Word32) -> ConstValue (Vector n Word32)
forall a n.
Positive n =>
T [] (ConstValue a) -> ConstValue (Vector n a)
LLVM.constCyclicVector (T [] (ConstValue Word32) -> ConstValue (Vector n Word32))
-> T [] (ConstValue Word32) -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$ ConstValue Word32
forall a. IsType a => ConstValue a
LLVM.undef ConstValue Word32
-> [ConstValue Word32] -> T [] (ConstValue Word32)
forall a (f :: * -> *). a -> f a -> T f a
!: (Word32 -> ConstValue Word32) -> [Word32] -> [ConstValue Word32]
forall a b. (a -> b) -> [a] -> [b]
List.map Word32 -> ConstValue Word32
forall a. IsConst a => a -> ConstValue a
LLVM.constOf [Word32
0..]) T n a
x
(T a -> T n a -> (T a, T n a))
-> CodeGenFunction r (T a)
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T a, T n a)
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 (,) (T n a -> CodeGenFunction r (T a)
forall n a r. (Positive n, C a) => T n a -> CodeGenFunction r (T a)
last T n a
x) (Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert (ConstValue Word32 -> Value Word32
forall a. ConstValue a -> Value a
value ConstValue Word32
forall a. IsType a => ConstValue a
LLVM.zero) T a
x0 T n a
y)
shiftDown ::
(TypeNum.Positive n, C a) =>
MultiValue.T a -> T n a -> CodeGenFunction r (MultiValue.T a, T n a)
shiftDown :: forall n a r.
(Positive n, C a) =>
T a -> T n a -> CodeGenFunction r (T a, T n a)
shiftDown T a
x0 T n a
x = do
T n a
y <-
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch
(T [] (ConstValue Word32) -> ConstValue (Vector n Word32)
forall a n.
Positive n =>
T [] (ConstValue a) -> ConstValue (Vector n a)
LLVM.constCyclicVector (T [] (ConstValue Word32) -> ConstValue (Vector n Word32))
-> T [] (ConstValue Word32) -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$
[ConstValue Word32]
-> ConstValue Word32 -> T [] (ConstValue Word32)
forall (f :: * -> *) a. Traversable f => f a -> a -> T f a
NonEmpty.snoc
((Word32 -> ConstValue Word32) -> [Word32] -> [ConstValue Word32]
forall a b. (a -> b) -> [a] -> [b]
List.map Word32 -> ConstValue Word32
forall a. IsConst a => a -> ConstValue a
LLVM.constOf ([Word32] -> [ConstValue Word32])
-> [Word32] -> [ConstValue Word32]
forall a b. (a -> b) -> a -> b
$ Int -> [Word32] -> [Word32]
forall a. Int -> [a] -> [a]
List.take (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Word32
1..])
ConstValue Word32
forall a. IsType a => ConstValue a
LLVM.undef) T n a
x
(T a -> T n a -> (T a, T n a))
-> CodeGenFunction r (T a)
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T a, T n a)
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 (,)
(Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract (ConstValue Word32 -> Value Word32
forall a. ConstValue a -> Value a
value ConstValue Word32
forall a. IsType a => ConstValue a
LLVM.zero) T n a
x)
(Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert (Word32 -> Value Word32
forall a. IsConst a => a -> Value a
LLVM.valueOf (T n a -> Word32
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
x Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
1)) T a
x0 T n a
y)
shiftUpMultiIndices ::
(TypeNum.Positive n) => Int -> Int -> LLVM.ConstValue (LLVM.Vector n Word32)
shiftUpMultiIndices :: forall n. Positive n => Int -> Int -> ConstValue (Vector n Word32)
shiftUpMultiIndices Int
n Int
sizev =
T [] Word32 -> ConstValue (Vector n Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector n Word32))
-> T [] Word32 -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$ (Int -> Word32) -> T [] Int -> T [] Word32
forall a b. (a -> b) -> T [] a -> T [] b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int -> Word32
forall a b. (Integral a, Num b) => a -> b
P.fromIntegral (T [] Int -> T [] Word32) -> T [] Int -> T [] Word32
forall a b. (a -> b) -> a -> b
$
[Int] -> T [] Int -> T [] Int
forall (f :: * -> *) a.
(Append f, Traversable f) =>
f a -> T f a -> T f a
NonEmpty.appendLeft (Int -> Int -> [Int]
forall a. Int -> a -> [a]
List.replicate Int
n Int
sizev) ((Int -> Int) -> Int -> T [] Int
forall a. (a -> a) -> a -> T [] a
forall (f :: * -> *) a. Iterate f => (a -> a) -> a -> f a
NonEmptyC.iterate (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+) Int
0)
shiftDownMultiIndices ::
(TypeNum.Positive n) => Int -> Int -> LLVM.ConstValue (LLVM.Vector n Word32)
shiftDownMultiIndices :: forall n. Positive n => Int -> Int -> ConstValue (Vector n Word32)
shiftDownMultiIndices Int
n Int
sizev =
T [] Word32 -> ConstValue (Vector n Word32)
forall a n.
(IsConst a, Positive n) =>
T [] a -> ConstValue (Vector n a)
constCyclicVector (T [] Word32 -> ConstValue (Vector n Word32))
-> T [] Word32 -> ConstValue (Vector n Word32)
forall a b. (a -> b) -> a -> b
$ (Int -> Word32) -> T [] Int -> T [] Word32
forall a b. (a -> b) -> T [] a -> T [] b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int -> Word32
forall a b. (Integral a, Num b) => a -> b
P.fromIntegral (T [] Int -> T [] Word32) -> T [] Int -> T [] Word32
forall a b. (a -> b) -> a -> b
$
[Int] -> T [] Int -> T [] Int
forall (f :: * -> *) a.
(Append f, Traversable f) =>
f a -> T f a -> T f a
NonEmpty.appendLeft
((Int -> Bool) -> [Int] -> [Int]
forall a. (a -> Bool) -> [a] -> [a]
List.takeWhile (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
sizev) ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ (Int -> Int) -> Int -> [Int]
forall a. (a -> a) -> a -> [a]
List.iterate (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+) Int
n)
(Int -> T [] Int
forall a. a -> T [] a
forall (f :: * -> *) a. Repeat f => a -> f a
NonEmptyC.repeat Int
sizev)
shiftUpMultiZero ::
(TypeNum.Positive n, C a) =>
Int -> T n a -> LLVM.CodeGenFunction r (T n a)
shiftUpMultiZero :: forall n a r.
(Positive n, C a) =>
Int -> T n a -> CodeGenFunction r (T n a)
shiftUpMultiZero Int
n T n a
v =
ConstValue (Vector n Word32)
-> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle (Int -> Int -> ConstValue (Vector n Word32)
forall n. Positive n => Int -> Int -> ConstValue (Vector n Word32)
shiftUpMultiIndices Int
n (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
v)) T n a
v T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero
shiftDownMultiZero ::
(TypeNum.Positive n, C a) =>
Int -> T n a -> LLVM.CodeGenFunction r (T n a)
shiftDownMultiZero :: forall n a r.
(Positive n, C a) =>
Int -> T n a -> CodeGenFunction r (T n a)
shiftDownMultiZero Int
n T n a
v =
ConstValue (Vector n Word32)
-> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle (Int -> Int -> ConstValue (Vector n Word32)
forall n. Positive n => Int -> Int -> ConstValue (Vector n Word32)
shiftDownMultiIndices Int
n (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
v)) T n a
v T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero
shiftUpMultiUndef ::
(TypeNum.Positive n, C a) =>
Int -> T n a -> LLVM.CodeGenFunction r (T n a)
shiftUpMultiUndef :: forall n a r.
(Positive n, C a) =>
Int -> T n a -> CodeGenFunction r (T n a)
shiftUpMultiUndef Int
n T n a
v =
ConstValue (Vector n Word32)
-> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle (Int -> Int -> ConstValue (Vector n Word32)
forall n. Positive n => Int -> Int -> ConstValue (Vector n Word32)
shiftUpMultiIndices Int
n (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
v)) T n a
v T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
shiftDownMultiUndef ::
(TypeNum.Positive n, C a) =>
Int -> T n a -> LLVM.CodeGenFunction r (T n a)
shiftDownMultiUndef :: forall n a r.
(Positive n, C a) =>
Int -> T n a -> CodeGenFunction r (T n a)
shiftDownMultiUndef Int
n T n a
v =
ConstValue (Vector n Word32)
-> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n m r.
(C a, Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
forall n m r.
(Positive n, Positive m) =>
ConstValue (Vector m Word32)
-> T n a -> T n a -> CodeGenFunction r (T m a)
shuffle (Int -> Int -> ConstValue (Vector n Word32)
forall n. Positive n => Int -> Int -> ConstValue (Vector n Word32)
shiftDownMultiIndices Int
n (T n a -> Int
forall n i a. (Positive n, Integral i) => T n a -> i
size T n a
v)) T n a
v T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
undef
shuffleMatchTraversable ::
(TypeNum.Positive n, C a, Trav.Traversable f) =>
LLVM.ConstValue (LLVM.Vector n Word32) ->
f (T n a) -> CodeGenFunction r (f (T n a))
shuffleMatchTraversable :: forall n a (f :: * -> *) r.
(Positive n, C a, Traversable f) =>
ConstValue (Vector n Word32)
-> f (T n a) -> CodeGenFunction r (f (T n a))
shuffleMatchTraversable ConstValue (Vector n Word32)
is f (T n a)
v =
(T n a -> CodeGenFunction r (T n a))
-> f (T n a) -> CodeGenFunction r (f (T n a))
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> f a -> m (f b)
Trav.mapM (ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
forall n a r.
(Positive n, C a) =>
ConstValue (Vector n Word32) -> T n a -> CodeGenFunction r (T n a)
shuffleMatch ConstValue (Vector n Word32)
is) f (T n a)
v
insertTraversable ::
(TypeNum.Positive n, C a, Trav.Traversable f, App.Applicative f) =>
LLVM.Value Word32 -> f (MultiValue.T a) ->
f (T n a) -> CodeGenFunction r (f (T n a))
insertTraversable :: forall n a (f :: * -> *) r.
(Positive n, C a, Traversable f, Applicative f) =>
Value Word32
-> f (T a) -> f (T n a) -> CodeGenFunction r (f (T n a))
insertTraversable Value Word32
n f (T a)
a f (T n a)
v =
f (CodeGenFunction r (T n a)) -> CodeGenFunction r (f (T n a))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => f (m a) -> m (f a)
Trav.sequence ((T a -> T n a -> CodeGenFunction r (T n a))
-> f (T a) -> f (T n a) -> f (CodeGenFunction r (T n a))
forall a b c. (a -> b -> c) -> f a -> f b -> f c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
Value Word32 -> T a -> T n a -> CodeGenFunction r (T n a)
insert Value Word32
n) f (T a)
a f (T n a)
v)
extractTraversable ::
(TypeNum.Positive n, C a, Trav.Traversable f) =>
LLVM.Value Word32 -> f (T n a) ->
CodeGenFunction r (f (MultiValue.T a))
Value Word32
n f (T n a)
v =
(T n a -> CodeGenFunction r (T a))
-> f (T n a) -> CodeGenFunction r (f (T a))
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> f a -> m (f b)
Trav.mapM (Value Word32 -> T n a -> CodeGenFunction r (T a)
forall a n r.
(C a, Positive n) =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
forall n r.
Positive n =>
Value Word32 -> T n a -> CodeGenFunction r (T a)
extract Value Word32
n) f (T n a)
v
lift1 :: (Repr n a -> Repr n b) -> T n a -> T n b
lift1 :: forall n a b. (Repr n a -> Repr n b) -> T n a -> T n b
lift1 Repr n a -> Repr n b
f (Cons Repr n a
a) = Repr n b -> T n b
forall n a. Repr n a -> T n a
Cons (Repr n b -> T n b) -> Repr n b -> T n b
forall a b. (a -> b) -> a -> b
$ Repr n a -> Repr n b
f Repr n a
a
_liftM0 ::
(Monad m) =>
m (Repr n a) ->
m (T n a)
_liftM0 :: forall (m :: * -> *) n a. Monad m => m (Repr n a) -> m (T n a)
_liftM0 m (Repr n a)
f = (Repr n a -> T n a) -> m (Repr n a) -> m (T n a)
forall (m :: * -> *) a r. Monad m => (a -> r) -> m a -> m r
Monad.lift Repr n a -> T n a
forall n a. Repr n a -> T n a
Cons m (Repr n a)
f
liftM0 ::
(Monad m,
Repr n a ~ Value n ar) =>
m (Value n ar) ->
m (T n a)
liftM0 :: forall (m :: * -> *) n a ar.
(Monad m, Repr n a ~ Value n ar) =>
m (Value n ar) -> m (T n a)
liftM0 m (Value n ar)
f = (Value n ar -> T n a) -> m (Value n ar) -> m (T n a)
forall (m :: * -> *) a r. Monad m => (a -> r) -> m a -> m r
Monad.lift Value n ar -> T n a
forall n a ar. (Repr n a ~ Value n ar) => Value n ar -> T n a
consPrim m (Value n ar)
f
liftM ::
(Monad m,
Repr n a ~ Value n ar,
Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) ->
T n a -> m (T n b)
liftM :: forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n ar -> m (Value n br)
f T n a
a = (Value n br -> T n b) -> m (Value n br) -> m (T n b)
forall (m :: * -> *) a r. Monad m => (a -> r) -> m a -> m r
Monad.lift Value n br -> T n b
forall n a ar. (Repr n a ~ Value n ar) => Value n ar -> T n a
consPrim (m (Value n br) -> m (T n b)) -> m (Value n br) -> m (T n b)
forall a b. (a -> b) -> a -> b
$ Value n ar -> m (Value n br)
f (T n a -> Value n ar
forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim T n a
a)
liftM2 ::
(Monad m,
Repr n a ~ Value n ar,
Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr)) ->
T n a -> T n b -> m (T n c)
liftM2 :: forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n ar -> Value n br -> m (Value n cr)
f T n a
a T n b
b = (Value n cr -> T n c) -> m (Value n cr) -> m (T n c)
forall (m :: * -> *) a r. Monad m => (a -> r) -> m a -> m r
Monad.lift Value n cr -> T n c
forall n a ar. (Repr n a ~ Value n ar) => Value n ar -> T n a
consPrim (m (Value n cr) -> m (T n c)) -> m (Value n cr) -> m (T n c)
forall a b. (a -> b) -> a -> b
$ Value n ar -> Value n br -> m (Value n cr)
f (T n a -> Value n ar
forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim T n a
a) (T n b -> Value n br
forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim T n b
b)
liftM3 ::
(Monad m,
Repr n a ~ Value n ar,
Repr n b ~ Value n br,
Repr n c ~ Value n cr,
Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr)) ->
T n a -> T n b -> T n c -> m (T n d)
liftM3 :: forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value n ar -> Value n br -> Value n cr -> m (Value n dr)
f T n a
a T n b
b T n c
c =
(Value n dr -> T n d) -> m (Value n dr) -> m (T n d)
forall (m :: * -> *) a r. Monad m => (a -> r) -> m a -> m r
Monad.lift Value n dr -> T n d
forall n a ar. (Repr n a ~ Value n ar) => Value n ar -> T n a
consPrim (m (Value n dr) -> m (T n d)) -> m (Value n dr) -> m (T n d)
forall a b. (a -> b) -> a -> b
$ Value n ar -> Value n br -> Value n cr -> m (Value n dr)
f (T n a -> Value n ar
forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim T n a
a) (T n b -> Value n br
forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim T n b
b) (T n c -> Value n cr
forall n a ar. (Repr n a ~ Value n ar) => T n a -> Value n ar
deconsPrim T n c
c)
class (MultiValue.Additive a, C a) => Additive a where
add ::
(TypeNum.Positive n) =>
T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
sub ::
(TypeNum.Positive n) =>
T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
neg ::
(TypeNum.Positive n) =>
T n a -> LLVM.CodeGenFunction r (T n a)
instance Additive Float where
add :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
add = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
sub = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
neg = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Double where
add :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
add = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
sub = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
neg = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Int where
add :: forall n r.
Positive n =>
T n Int -> T n Int -> CodeGenFunction r (T n Int)
add = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Int -> T n Int -> CodeGenFunction r (T n Int)
sub = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r. Positive n => T n Int -> CodeGenFunction r (T n Int)
neg = (Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int -> CodeGenFunction r (Value n Int)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Int8 where
add :: forall n r.
Positive n =>
T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
add = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
sub = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r. Positive n => T n Int8 -> CodeGenFunction r (T n Int8)
neg = (Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Int16 where
add :: forall n r.
Positive n =>
T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
add = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
sub = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Int16 -> CodeGenFunction r (T n Int16)
neg = (Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Int32 where
add :: forall n r.
Positive n =>
T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
add = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
sub = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Int32 -> CodeGenFunction r (T n Int32)
neg = (Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Int64 where
add :: forall n r.
Positive n =>
T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
add = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
sub = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Int64 -> CodeGenFunction r (T n Int64)
neg = (Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Word where
add :: forall n r.
Positive n =>
T n Word -> T n Word -> CodeGenFunction r (T n Word)
add = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Word -> T n Word -> CodeGenFunction r (T n Word)
sub = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r. Positive n => T n Word -> CodeGenFunction r (T n Word)
neg = (Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word -> CodeGenFunction r (Value n Word)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Word8 where
add :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
add = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
sub = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Word8 -> CodeGenFunction r (T n Word8)
neg = (Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Word16 where
add :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
add = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
sub = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Word16 -> CodeGenFunction r (T n Word16)
neg = (Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Word32 where
add :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
add = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
sub = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Word32 -> CodeGenFunction r (T n Word32)
neg = (Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance Additive Word64 where
add :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
add = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.add; sub :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
sub = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.sub; neg :: forall n r.
Positive n =>
T n Word64 -> CodeGenFunction r (T n Word64)
neg = (Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r.
IsArithmetic a =>
Value a -> CodeGenFunction r (Value a)
LLVM.neg
instance (TypeNum.Positive n, Additive a) => A.Additive (T n a) where
zero :: T n a
zero = T n a
forall n. Positive n => T n a
forall a n. (C a, Positive n) => T n a
zero
add :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
add = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Additive a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
add
sub :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
sub = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Additive a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
sub
neg :: forall r. T n a -> CodeGenFunction r (T n a)
neg = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Additive a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
neg
class (MultiValue.PseudoRing a, Additive a) => PseudoRing a where
mul ::
(TypeNum.Positive n) =>
T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
instance PseudoRing Float where
mul :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
mul = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.mul
instance PseudoRing Double where
mul :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
mul = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r.
IsArithmetic a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.mul
instance (TypeNum.Positive n, PseudoRing a) => A.PseudoRing (T n a) where
mul :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
mul = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(PseudoRing a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
mul
class (MultiValue.Field a, PseudoRing a) => Field a where
fdiv ::
(TypeNum.Positive n) =>
T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
instance Field Float where
fdiv :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
fdiv = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r.
IsFloating a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.fdiv
instance Field Double where
fdiv :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
fdiv = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r.
IsFloating a =>
Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.fdiv
instance (TypeNum.Positive n, Field a) => A.Field (T n a) where
fdiv :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
fdiv = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Field a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
fdiv
scale ::
(TypeNum.Positive n, PseudoRing a) =>
MultiValue.T a -> T n a -> LLVM.CodeGenFunction r (T n a)
scale :: forall n a r.
(Positive n, PseudoRing a) =>
T a -> T n a -> CodeGenFunction r (T n a)
scale T a
a T n a
v = (T n a -> T n a -> CodeGenFunction r (T n a))
-> T n a -> T n a -> CodeGenFunction r (T n a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(PseudoRing a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
mul T n a
v (T n a -> CodeGenFunction r (T n a))
-> CodeGenFunction r (T n a) -> CodeGenFunction r (T n a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T a -> CodeGenFunction r (T n a)
forall n a r. (Positive n, C a) => T a -> CodeGenFunction r (T n a)
replicate T a
a
type instance A.Scalar (T n a) = T n (MultiValue.Scalar a)
class
(MultiValue.PseudoModule v, PseudoRing (MultiValue.Scalar v), Additive v) =>
PseudoModule v where
scaleMulti ::
(TypeNum.Positive n) =>
T n (MultiValue.Scalar v) -> T n v -> LLVM.CodeGenFunction r (T n v)
instance PseudoModule Float where
scaleMulti :: forall n r.
Positive n =>
T n (Scalar Float) -> T n Float -> CodeGenFunction r (T n Float)
scaleMulti = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall r.
Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r. PseudoRing a => a -> a -> CodeGenFunction r a
A.mul
instance PseudoModule Double where
scaleMulti :: forall n r.
Positive n =>
T n (Scalar Double) -> T n Double -> CodeGenFunction r (T n Double)
scaleMulti = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall r.
Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r. PseudoRing a => a -> a -> CodeGenFunction r a
A.mul
instance (TypeNum.Positive n, PseudoModule a) => A.PseudoModule (T n a) where
scale :: forall r. Scalar (T n a) -> T n a -> CodeGenFunction r (T n a)
scale = Scalar (T n a) -> T n a -> CodeGenFunction r (T n a)
T n (Scalar a) -> T n a -> CodeGenFunction r (T n a)
forall v n r.
(PseudoModule v, Positive n) =>
T n (Scalar v) -> T n v -> CodeGenFunction r (T n v)
forall n r.
Positive n =>
T n (Scalar a) -> T n a -> CodeGenFunction r (T n a)
scaleMulti
class (MultiValue.Real a, Additive a) => Real a where
min :: (TypeNum.Positive n) => T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
max :: (TypeNum.Positive n) => T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
abs :: (TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
signum :: (TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
instance Real Float where
min :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
min = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall r.
Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
max = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall r.
Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
abs = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
signum = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Double where
min :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
min = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall r.
Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
max = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall r.
Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
abs = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
signum = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Word where
min :: forall n r.
Positive n =>
T n Word -> T n Word -> CodeGenFunction r (T n Word)
min = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall r.
Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Word -> T n Word -> CodeGenFunction r (T n Word)
max = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall r.
Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r. Positive n => T n Word -> CodeGenFunction r (T n Word)
abs = (Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word -> CodeGenFunction r (Value n Word)
forall r. Value n Word -> CodeGenFunction r (Value n Word)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r. Positive n => T n Word -> CodeGenFunction r (T n Word)
signum = (Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word -> CodeGenFunction r (Value n Word)
forall r. Value n Word -> CodeGenFunction r (Value n Word)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Word8 where
min :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
min = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
forall r.
Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
max = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
forall r.
Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Word8 -> CodeGenFunction r (T n Word8)
abs = (Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word8 -> CodeGenFunction r (Value n Word8)
forall r. Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Word8 -> CodeGenFunction r (T n Word8)
signum = (Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word8 -> CodeGenFunction r (Value n Word8)
forall r. Value n Word8 -> CodeGenFunction r (Value n Word8)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Word16 where
min :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
min = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
forall r.
Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
max = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
forall r.
Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Word16 -> CodeGenFunction r (T n Word16)
abs = (Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word16 -> CodeGenFunction r (Value n Word16)
forall r. Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Word16 -> CodeGenFunction r (T n Word16)
signum = (Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word16 -> CodeGenFunction r (Value n Word16)
forall r. Value n Word16 -> CodeGenFunction r (Value n Word16)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Word32 where
min :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
min = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
forall r.
Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
max = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
forall r.
Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Word32 -> CodeGenFunction r (T n Word32)
abs = (Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word32 -> CodeGenFunction r (Value n Word32)
forall r. Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Word32 -> CodeGenFunction r (T n Word32)
signum = (Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word32 -> CodeGenFunction r (Value n Word32)
forall r. Value n Word32 -> CodeGenFunction r (Value n Word32)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Word64 where
min :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
min = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
forall r.
Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
max = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
forall r.
Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Word64 -> CodeGenFunction r (T n Word64)
abs = (Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word64 -> CodeGenFunction r (Value n Word64)
forall r. Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Word64 -> CodeGenFunction r (T n Word64)
signum = (Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word64 -> CodeGenFunction r (Value n Word64)
forall r. Value n Word64 -> CodeGenFunction r (Value n Word64)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Int where
min :: forall n r.
Positive n =>
T n Int -> T n Int -> CodeGenFunction r (T n Int)
min = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall r.
Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Int -> T n Int -> CodeGenFunction r (T n Int)
max = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall r.
Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r. Positive n => T n Int -> CodeGenFunction r (T n Int)
abs = (Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int -> CodeGenFunction r (Value n Int)
forall r. Value n Int -> CodeGenFunction r (Value n Int)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r. Positive n => T n Int -> CodeGenFunction r (T n Int)
signum = (Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int -> CodeGenFunction r (Value n Int)
forall r. Value n Int -> CodeGenFunction r (Value n Int)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Int8 where
min :: forall n r.
Positive n =>
T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
min = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall r.
Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
max = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall r.
Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r. Positive n => T n Int8 -> CodeGenFunction r (T n Int8)
abs = (Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int8 -> CodeGenFunction r (Value n Int8)
forall r. Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r. Positive n => T n Int8 -> CodeGenFunction r (T n Int8)
signum = (Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int8 -> CodeGenFunction r (Value n Int8)
forall r. Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Int16 where
min :: forall n r.
Positive n =>
T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
min = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
forall r.
Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
max = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
forall r.
Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Int16 -> CodeGenFunction r (T n Int16)
abs = (Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int16 -> CodeGenFunction r (Value n Int16)
forall r. Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Int16 -> CodeGenFunction r (T n Int16)
signum = (Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int16 -> CodeGenFunction r (Value n Int16)
forall r. Value n Int16 -> CodeGenFunction r (Value n Int16)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Int32 where
min :: forall n r.
Positive n =>
T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
min = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
forall r.
Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
max = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
forall r.
Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Int32 -> CodeGenFunction r (T n Int32)
abs = (Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int32 -> CodeGenFunction r (Value n Int32)
forall r. Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Int32 -> CodeGenFunction r (T n Int32)
signum = (Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int32 -> CodeGenFunction r (Value n Int32)
forall r. Value n Int32 -> CodeGenFunction r (Value n Int32)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance Real Int64 where
min :: forall n r.
Positive n =>
T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
min = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
forall r.
Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.min
max :: forall n r.
Positive n =>
T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
max = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
forall r.
Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r. Real a => a -> a -> CodeGenFunction r a
A.max
abs :: forall n r.
Positive n =>
T n Int64 -> CodeGenFunction r (T n Int64)
abs = (Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int64 -> CodeGenFunction r (Value n Int64)
forall r. Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r. Real a => a -> CodeGenFunction r a
A.abs
signum :: forall n r.
Positive n =>
T n Int64 -> CodeGenFunction r (T n Int64)
signum = (Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Int64 -> CodeGenFunction r (Value n Int64)
forall r. Value n Int64 -> CodeGenFunction r (Value n Int64)
forall a r. Real a => a -> CodeGenFunction r a
A.signum
instance (TypeNum.Positive n, Real a) => A.Real (T n a) where
min :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
min = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Real a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
min
max :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
max = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Real a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
max
abs :: forall r. T n a -> CodeGenFunction r (T n a)
abs = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Real a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
abs
signum :: forall r. T n a -> CodeGenFunction r (T n a)
signum = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Real a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
signum
class (MultiValue.Fraction a, Real a) => Fraction a where
truncate :: (TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
fraction :: (TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
instance Fraction Float where
truncate :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
truncate = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Fraction a => a -> CodeGenFunction r a
A.truncate
fraction :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
fraction = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Fraction a => a -> CodeGenFunction r a
A.fraction
instance Fraction Double where
truncate :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
truncate = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Fraction a => a -> CodeGenFunction r a
A.truncate
fraction :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
fraction = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Fraction a => a -> CodeGenFunction r a
A.fraction
instance (TypeNum.Positive n, Fraction a) => A.Fraction (T n a) where
truncate :: forall r. T n a -> CodeGenFunction r (T n a)
truncate = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Fraction a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
truncate
fraction :: forall r. T n a -> CodeGenFunction r (T n a)
fraction = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Fraction a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
fraction
class
(TypeNum.Positive n, Repr n i ~ Value n ir,
MultiValue.NativeInteger i ir, IsPrimitive ir, LLVM.IsInteger ir) =>
NativeInteger n i ir where
instance (TypeNum.Positive n) => NativeInteger n Word Word where
instance (TypeNum.Positive n) => NativeInteger n Word8 Word8 where
instance (TypeNum.Positive n) => NativeInteger n Word16 Word16 where
instance (TypeNum.Positive n) => NativeInteger n Word32 Word32 where
instance (TypeNum.Positive n) => NativeInteger n Word64 Word64 where
instance (TypeNum.Positive n) => NativeInteger n Int Int where
instance (TypeNum.Positive n) => NativeInteger n Int8 Int8 where
instance (TypeNum.Positive n) => NativeInteger n Int16 Int16 where
instance (TypeNum.Positive n) => NativeInteger n Int32 Int32 where
instance (TypeNum.Positive n) => NativeInteger n Int64 Int64 where
class
(TypeNum.Positive n, Repr n a ~ Value n ar,
MultiValue.NativeFloating a ar, IsPrimitive ar, LLVM.IsFloating ar) =>
NativeFloating n a ar where
instance (TypeNum.Positive n) => NativeFloating n Float Float where
instance (TypeNum.Positive n) => NativeFloating n Double Double where
fromIntegral ::
(NativeInteger n i ir, NativeFloating n a ar) =>
T n i -> LLVM.CodeGenFunction r (T n a)
fromIntegral :: forall n i ir a ar r.
(NativeInteger n i ir, NativeFloating n a ar) =>
T n i -> CodeGenFunction r (T n a)
fromIntegral = (Value n ir -> CodeGenFunction r (Value n ar))
-> T n i -> CodeGenFunction r (T n a)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n ir -> CodeGenFunction r (Value n ar)
forall (value :: * -> *) a b r.
(ValueCons value, IsInteger a, IsFloating b,
ShapeOf a ~ ShapeOf b) =>
value a -> CodeGenFunction r (value b)
LLVM.inttofp
class (MultiValue.Algebraic a, Field a) => Algebraic a where
sqrt :: (TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
instance Algebraic Float where
sqrt :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
sqrt = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Algebraic a => a -> CodeGenFunction r a
A.sqrt
instance Algebraic Double where
sqrt :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
sqrt = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Algebraic a => a -> CodeGenFunction r a
A.sqrt
instance (TypeNum.Positive n, Algebraic a) => A.Algebraic (T n a) where
sqrt :: forall r. T n a -> CodeGenFunction r (T n a)
sqrt = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Algebraic a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
sqrt
class (MultiValue.Transcendental a, Algebraic a) => Transcendental a where
pi :: (TypeNum.Positive n) => LLVM.CodeGenFunction r (T n a)
sin, cos, exp, log ::
(TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
pow ::
(TypeNum.Positive n) => T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
instance Transcendental Float where
pi :: forall n r. Positive n => CodeGenFunction r (T n Float)
pi = CodeGenFunction r (Value n Float) -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar.
(Monad m, Repr n a ~ Value n ar) =>
m (Value n ar) -> m (T n a)
liftM0 CodeGenFunction r (Value n Float)
forall r. CodeGenFunction r (Value n Float)
forall a r. Transcendental a => CodeGenFunction r a
A.pi
sin :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
sin = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.sin
cos :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
cos = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.cos
exp :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
exp = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.exp
log :: forall n r.
Positive n =>
T n Float -> CodeGenFunction r (T n Float)
log = (Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Float -> CodeGenFunction r (Value n Float)
forall r. Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.log
pow :: forall n r.
Positive n =>
T n Float -> T n Float -> CodeGenFunction r (T n Float)
pow = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Float))
-> T n Float -> T n Float -> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall r.
Value n Float -> Value n Float -> CodeGenFunction r (Value n Float)
forall a r. Transcendental a => a -> a -> CodeGenFunction r a
A.pow
instance Transcendental Double where
pi :: forall n r. Positive n => CodeGenFunction r (T n Double)
pi = CodeGenFunction r (Value n Double)
-> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar.
(Monad m, Repr n a ~ Value n ar) =>
m (Value n ar) -> m (T n a)
liftM0 CodeGenFunction r (Value n Double)
forall r. CodeGenFunction r (Value n Double)
forall a r. Transcendental a => CodeGenFunction r a
A.pi
sin :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
sin = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.sin
cos :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
cos = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.cos
exp :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
exp = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.exp
log :: forall n r.
Positive n =>
T n Double -> CodeGenFunction r (T n Double)
log = (Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Double -> CodeGenFunction r (Value n Double)
forall r. Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Transcendental a => a -> CodeGenFunction r a
A.log
pow :: forall n r.
Positive n =>
T n Double -> T n Double -> CodeGenFunction r (T n Double)
pow = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double))
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall r.
Value n Double
-> Value n Double -> CodeGenFunction r (Value n Double)
forall a r. Transcendental a => a -> a -> CodeGenFunction r a
A.pow
instance (TypeNum.Positive n, Transcendental a) => A.Transcendental (T n a) where
pi :: forall r. CodeGenFunction r (T n a)
pi = CodeGenFunction r (T n a)
forall a n r.
(Transcendental a, Positive n) =>
CodeGenFunction r (T n a)
forall n r. Positive n => CodeGenFunction r (T n a)
pi
sin :: forall r. T n a -> CodeGenFunction r (T n a)
sin = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Transcendental a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
sin
cos :: forall r. T n a -> CodeGenFunction r (T n a)
cos = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Transcendental a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
cos
exp :: forall r. T n a -> CodeGenFunction r (T n a)
exp = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Transcendental a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
exp
log :: forall r. T n a -> CodeGenFunction r (T n a)
log = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Transcendental a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
log
pow :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
pow = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Transcendental a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
pow
class (MultiValue.Select a, C a) => Select a where
select ::
(TypeNum.Positive n) =>
T n Bool -> T n a -> T n a ->
LLVM.CodeGenFunction r (T n a)
instance Select Float where select :: forall n r.
Positive n =>
T n Bool -> T n Float -> T n Float -> CodeGenFunction r (T n Float)
select = (Value n Bool
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Float))
-> T n Bool
-> T n Float
-> T n Float
-> CodeGenFunction r (T n Float)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Float))
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Float)
Value n Bool
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Float)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Double where select :: forall n r.
Positive n =>
T n Bool
-> T n Double -> T n Double -> CodeGenFunction r (T n Double)
select = (Value n Bool
-> Value n Double
-> Value n Double
-> CodeGenFunction r (Value n Double))
-> T n Bool
-> T n Double
-> T n Double
-> CodeGenFunction r (T n Double)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Double))
-> Value n Double
-> Value n Double
-> CodeGenFunction r (Value n Double)
Value n Bool
-> Value n Double
-> Value n Double
-> CodeGenFunction r (Value n Double)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Bool where select :: forall n r.
Positive n =>
T n Bool -> T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
select = (Value n Bool
-> Value n Bool
-> Value n Bool
-> CodeGenFunction r (Value n Bool))
-> T n Bool -> T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Bool))
-> Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool)
Value n Bool
-> Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Word where select :: forall n r.
Positive n =>
T n Bool -> T n Word -> T n Word -> CodeGenFunction r (T n Word)
select = (Value n Bool
-> Value n Word
-> Value n Word
-> CodeGenFunction r (Value n Word))
-> T n Bool -> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Word))
-> Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
Value n Bool
-> Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Word8 where select :: forall n r.
Positive n =>
T n Bool -> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
select = (Value n Bool
-> Value n Word8
-> Value n Word8
-> CodeGenFunction r (Value n Word8))
-> T n Bool
-> T n Word8
-> T n Word8
-> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Word8))
-> Value n Word8
-> Value n Word8
-> CodeGenFunction r (Value n Word8)
Value n Bool
-> Value n Word8
-> Value n Word8
-> CodeGenFunction r (Value n Word8)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Word16 where select :: forall n r.
Positive n =>
T n Bool
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
select = (Value n Bool
-> Value n Word16
-> Value n Word16
-> CodeGenFunction r (Value n Word16))
-> T n Bool
-> T n Word16
-> T n Word16
-> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Word16))
-> Value n Word16
-> Value n Word16
-> CodeGenFunction r (Value n Word16)
Value n Bool
-> Value n Word16
-> Value n Word16
-> CodeGenFunction r (Value n Word16)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Word32 where select :: forall n r.
Positive n =>
T n Bool
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
select = (Value n Bool
-> Value n Word32
-> Value n Word32
-> CodeGenFunction r (Value n Word32))
-> T n Bool
-> T n Word32
-> T n Word32
-> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Word32))
-> Value n Word32
-> Value n Word32
-> CodeGenFunction r (Value n Word32)
Value n Bool
-> Value n Word32
-> Value n Word32
-> CodeGenFunction r (Value n Word32)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Word64 where select :: forall n r.
Positive n =>
T n Bool
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
select = (Value n Bool
-> Value n Word64
-> Value n Word64
-> CodeGenFunction r (Value n Word64))
-> T n Bool
-> T n Word64
-> T n Word64
-> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Word64))
-> Value n Word64
-> Value n Word64
-> CodeGenFunction r (Value n Word64)
Value n Bool
-> Value n Word64
-> Value n Word64
-> CodeGenFunction r (Value n Word64)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Int where select :: forall n r.
Positive n =>
T n Bool -> T n Int -> T n Int -> CodeGenFunction r (T n Int)
select = (Value n Bool
-> Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Bool -> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Int))
-> Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
Value n Bool
-> Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Int8 where select :: forall n r.
Positive n =>
T n Bool -> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
select = (Value n Bool
-> Value n Int8
-> Value n Int8
-> CodeGenFunction r (Value n Int8))
-> T n Bool -> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Int8))
-> Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
Value n Bool
-> Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Int16 where select :: forall n r.
Positive n =>
T n Bool -> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
select = (Value n Bool
-> Value n Int16
-> Value n Int16
-> CodeGenFunction r (Value n Int16))
-> T n Bool
-> T n Int16
-> T n Int16
-> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Int16))
-> Value n Int16
-> Value n Int16
-> CodeGenFunction r (Value n Int16)
Value n Bool
-> Value n Int16
-> Value n Int16
-> CodeGenFunction r (Value n Int16)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Int32 where select :: forall n r.
Positive n =>
T n Bool -> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
select = (Value n Bool
-> Value n Int32
-> Value n Int32
-> CodeGenFunction r (Value n Int32))
-> T n Bool
-> T n Int32
-> T n Int32
-> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Int32))
-> Value n Int32
-> Value n Int32
-> CodeGenFunction r (Value n Int32)
Value n Bool
-> Value n Int32
-> Value n Int32
-> CodeGenFunction r (Value n Int32)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance Select Int64 where select :: forall n r.
Positive n =>
T n Bool -> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
select = (Value n Bool
-> Value n Int64
-> Value n Int64
-> CodeGenFunction r (Value n Int64))
-> T n Bool
-> T n Int64
-> T n Int64
-> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr d dr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr, Repr n d ~ Value n dr) =>
(Value n ar -> Value n br -> Value n cr -> m (Value n dr))
-> T n a -> T n b -> T n c -> m (T n d)
liftM3 Value (CmpResult (Vector n Int64))
-> Value n Int64
-> Value n Int64
-> CodeGenFunction r (Value n Int64)
Value n Bool
-> Value n Int64
-> Value n Int64
-> CodeGenFunction r (Value n Int64)
forall a r.
CmpRet a =>
Value (CmpResult a)
-> Value a -> Value a -> CodeGenFunction r (Value a)
LLVM.select
instance (Select a, Select b) => Select (a,b) where
select :: forall n r.
Positive n =>
T n Bool
-> T n (a, b) -> T n (a, b) -> CodeGenFunction r (T n (a, b))
select T n Bool
x T n (a, b)
y0 T n (a, b)
y1 =
case (T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
y0, T n (a, b) -> (T n a, T n b)
forall n a b. T n (a, b) -> (T n a, T n b)
unzip T n (a, b)
y1) of
((T n a
a0,T n b
b0), (T n a
a1,T n b
b1)) ->
(T n a -> T n b -> T n (a, b))
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T n b)
-> CodeGenFunction r (T n (a, b))
forall (m :: * -> *) a b r.
Monad m =>
(a -> b -> r) -> m a -> m b -> m r
Monad.lift2 T n a -> T n b -> T n (a, b)
forall n a b. T n a -> T n b -> T n (a, b)
zip
(T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Select a, Positive n) =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
select T n Bool
x T n a
a0 T n a
a1)
(T n Bool -> T n b -> T n b -> CodeGenFunction r (T n b)
forall a n r.
(Select a, Positive n) =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n Bool -> T n b -> T n b -> CodeGenFunction r (T n b)
select T n Bool
x T n b
b0 T n b
b1)
instance (Select a, Select b, Select c) => Select (a,b,c) where
select :: forall n r.
Positive n =>
T n Bool
-> T n (a, b, c)
-> T n (a, b, c)
-> CodeGenFunction r (T n (a, b, c))
select T n Bool
x T n (a, b, c)
y0 T n (a, b, c)
y1 =
case (T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
y0, T n (a, b, c) -> (T n a, T n b, T n c)
forall n a b c. T n (a, b, c) -> (T n a, T n b, T n c)
unzip3 T n (a, b, c)
y1) of
((T n a
a0,T n b
b0,T n c
c0), (T n a
a1,T n b
b1,T n c
c1)) ->
(T n a -> T n b -> T n c -> T n (a, b, c))
-> CodeGenFunction r (T n a)
-> CodeGenFunction r (T n b)
-> CodeGenFunction r (T n c)
-> CodeGenFunction r (T n (a, b, c))
forall (m :: * -> *) a b c r.
Monad m =>
(a -> b -> c -> r) -> m a -> m b -> m c -> m r
Monad.lift3 T n a -> T n b -> T n c -> T n (a, b, c)
forall n a b c. T n a -> T n b -> T n c -> T n (a, b, c)
zip3
(T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Select a, Positive n) =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
select T n Bool
x T n a
a0 T n a
a1)
(T n Bool -> T n b -> T n b -> CodeGenFunction r (T n b)
forall a n r.
(Select a, Positive n) =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n Bool -> T n b -> T n b -> CodeGenFunction r (T n b)
select T n Bool
x T n b
b0 T n b
b1)
(T n Bool -> T n c -> T n c -> CodeGenFunction r (T n c)
forall a n r.
(Select a, Positive n) =>
T n Bool -> T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n Bool -> T n c -> T n c -> CodeGenFunction r (T n c)
select T n Bool
x T n c
c0 T n c
c1)
class (MultiValue.Comparison a, Real a) => Comparison a where
cmp ::
(TypeNum.Positive n) =>
LLVM.CmpPredicate -> T n a -> T n a ->
LLVM.CodeGenFunction r (T n Bool)
instance Comparison Float where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Float -> T n Float -> CodeGenFunction r (T n Bool)
cmp = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Bool))
-> T n Float -> T n Float -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Float
-> Value n Float -> CodeGenFunction r (Value n Bool))
-> T n Float -> T n Float -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Float
-> T n Float
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Float
-> Value n Float
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Float))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Double where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Double -> T n Double -> CodeGenFunction r (T n Bool)
cmp = (Value n Double
-> Value n Double -> CodeGenFunction r (Value n Bool))
-> T n Double -> T n Double -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Double
-> Value n Double -> CodeGenFunction r (Value n Bool))
-> T n Double -> T n Double -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Double
-> Value n Double
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Double
-> T n Double
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Double
-> Value n Double
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Double
-> Value n Double
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Double))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Word where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Word -> T n Word -> CodeGenFunction r (T n Bool)
cmp = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Bool))
-> T n Word -> T n Word -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Word -> Value n Word -> CodeGenFunction r (Value n Bool))
-> T n Word -> T n Word -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Word
-> Value n Word
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Word
-> T n Word
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Word -> Value n Word -> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Word
-> Value n Word
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Word))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Word8 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Bool)
cmp = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Bool))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Bool))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Word8
-> Value n Word8
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Word8
-> T n Word8
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Word8
-> Value n Word8
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Word8
-> Value n Word8
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Word8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Word16 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Bool)
cmp = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Bool))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Bool))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Word16
-> Value n Word16
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Word16
-> T n Word16
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Word16
-> Value n Word16
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Word16
-> Value n Word16
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Word16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Word32 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Bool)
cmp = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Bool))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Bool))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Word32
-> Value n Word32
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Word32
-> T n Word32
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Word32
-> Value n Word32
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Word32
-> Value n Word32
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Word32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Word64 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Bool)
cmp = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Bool))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Bool))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Word64
-> Value n Word64
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Word64
-> T n Word64
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Word64
-> Value n Word64
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Word64
-> Value n Word64
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Word64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Int where cmp :: forall n r.
Positive n =>
CmpPredicate -> T n Int -> T n Int -> CodeGenFunction r (T n Bool)
cmp = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Bool))
-> T n Int -> T n Int -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Int -> Value n Int -> CodeGenFunction r (Value n Bool))
-> T n Int -> T n Int -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Int -> Value n Int -> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Int
-> T n Int
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Int -> Value n Int -> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Int
-> Value n Int
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Int))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Int8 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Bool)
cmp = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Bool))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Bool))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Int8
-> Value n Int8
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Int8
-> T n Int8
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Int8
-> Value n Int8
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Int8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Int16 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Bool)
cmp = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Bool))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Bool))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Int16
-> Value n Int16
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Int16
-> T n Int16
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Int16
-> Value n Int16
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Int16
-> Value n Int16
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Int16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Int32 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Bool)
cmp = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Bool))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Bool))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Int32
-> Value n Int32
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Int32
-> T n Int32
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Int32
-> Value n Int32
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Int32
-> Value n Int32
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Int32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance Comparison Int64 where cmp :: forall n r.
Positive n =>
CmpPredicate
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Bool)
cmp = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Bool))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Bool))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Bool))
-> (CmpPredicate
-> Value n Int64
-> Value n Int64
-> CodeGenFunction r (Value n Bool))
-> CmpPredicate
-> T n Int64
-> T n Int64
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CmpPredicate
-> Value n Int64
-> Value n Int64
-> CodeGenFunction r (Value n Bool)
CmpPredicate
-> Value n Int64
-> Value n Int64
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Int64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a) =>
CmpPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.cmp
instance (TypeNum.Positive n, Comparison a) => A.Comparison (T n a) where
type CmpResult (T n a) = T n Bool
cmp :: forall r.
CmpPredicate
-> T n a -> T n a -> CodeGenFunction r (CmpResult (T n a))
cmp = CmpPredicate
-> T n a -> T n a -> CodeGenFunction r (CmpResult (T n a))
CmpPredicate -> T n a -> T n a -> CodeGenFunction r (T n Bool)
forall a n r.
(Comparison a, Positive n) =>
CmpPredicate -> T n a -> T n a -> CodeGenFunction r (T n Bool)
forall n r.
Positive n =>
CmpPredicate -> T n a -> T n a -> CodeGenFunction r (T n Bool)
cmp
class
(MultiValue.FloatingComparison a, Comparison a) =>
FloatingComparison a where
fcmp ::
(TypeNum.Positive n) =>
LLVM.FPPredicate -> T n a -> T n a ->
LLVM.CodeGenFunction r (T n Bool)
instance FloatingComparison Float where
fcmp :: forall n r.
Positive n =>
FPPredicate
-> T n Float -> T n Float -> CodeGenFunction r (T n Bool)
fcmp = (Value n Float
-> Value n Float -> CodeGenFunction r (Value n Bool))
-> T n Float -> T n Float -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 ((Value n Float
-> Value n Float -> CodeGenFunction r (Value n Bool))
-> T n Float -> T n Float -> CodeGenFunction r (T n Bool))
-> (FPPredicate
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Bool))
-> FPPredicate
-> T n Float
-> T n Float
-> CodeGenFunction r (T n Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FPPredicate
-> Value n Float
-> Value n Float
-> CodeGenFunction r (Value n Bool)
FPPredicate
-> Value n Float
-> Value n Float
-> CodeGenFunction r (CmpValueResult Value Value (Vector n Float))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, CmpRet a, IsFloating a) =>
FPPredicate
-> value0 a
-> value1 a
-> CodeGenFunction r (CmpValueResult value0 value1 a)
LLVM.fcmp
instance
(TypeNum.Positive n, FloatingComparison a) =>
A.FloatingComparison (T n a) where
fcmp :: forall r.
FPPredicate
-> T n a -> T n a -> CodeGenFunction r (CmpResult (T n a))
fcmp = FPPredicate
-> T n a -> T n a -> CodeGenFunction r (CmpResult (T n a))
FPPredicate -> T n a -> T n a -> CodeGenFunction r (T n Bool)
forall a n r.
(FloatingComparison a, Positive n) =>
FPPredicate -> T n a -> T n a -> CodeGenFunction r (T n Bool)
forall n r.
Positive n =>
FPPredicate -> T n a -> T n a -> CodeGenFunction r (T n Bool)
fcmp
class (MultiValue.Logic a, C a) => Logic a where
and, or, xor ::
(TypeNum.Positive n) => T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
inv :: (TypeNum.Positive n) => T n a -> LLVM.CodeGenFunction r (T n a)
instance Logic Bool where
and :: forall n r.
Positive n =>
T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
and = (Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool))
-> T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool)
Value n Bool
-> Value n Bool
-> CodeGenFunction r (BinOpValue Value Value (Vector n Bool))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.and; or :: forall n r.
Positive n =>
T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
or = (Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool))
-> T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool)
Value n Bool
-> Value n Bool
-> CodeGenFunction r (BinOpValue Value Value (Vector n Bool))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.or
xor :: forall n r.
Positive n =>
T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
xor = (Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool))
-> T n Bool -> T n Bool -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Bool -> Value n Bool -> CodeGenFunction r (Value n Bool)
Value n Bool
-> Value n Bool
-> CodeGenFunction r (BinOpValue Value Value (Vector n Bool))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.xor; inv :: forall n r. Positive n => T n Bool -> CodeGenFunction r (T n Bool)
inv = (Value n Bool -> CodeGenFunction r (Value n Bool))
-> T n Bool -> CodeGenFunction r (T n Bool)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Bool -> CodeGenFunction r (Value n Bool)
forall (value :: * -> *) a r.
(ValueCons value, IsInteger a) =>
value a -> CodeGenFunction r (value a)
LLVM.inv
instance Logic Word8 where
and :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
and = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
Value n Word8
-> Value n Word8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.and; or :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
or = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
Value n Word8
-> Value n Word8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.or
xor :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
xor = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
Value n Word8
-> Value n Word8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.xor; inv :: forall n r.
Positive n =>
T n Word8 -> CodeGenFunction r (T n Word8)
inv = (Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word8 -> CodeGenFunction r (Value n Word8)
forall (value :: * -> *) a r.
(ValueCons value, IsInteger a) =>
value a -> CodeGenFunction r (value a)
LLVM.inv
instance Logic Word16 where
and :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
and = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
Value n Word16
-> Value n Word16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.and; or :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
or = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
Value n Word16
-> Value n Word16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.or
xor :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
xor = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
Value n Word16
-> Value n Word16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.xor; inv :: forall n r.
Positive n =>
T n Word16 -> CodeGenFunction r (T n Word16)
inv = (Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word16 -> CodeGenFunction r (Value n Word16)
forall (value :: * -> *) a r.
(ValueCons value, IsInteger a) =>
value a -> CodeGenFunction r (value a)
LLVM.inv
instance Logic Word32 where
and :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
and = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
Value n Word32
-> Value n Word32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.and; or :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
or = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
Value n Word32
-> Value n Word32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.or
xor :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
xor = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
Value n Word32
-> Value n Word32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.xor; inv :: forall n r.
Positive n =>
T n Word32 -> CodeGenFunction r (T n Word32)
inv = (Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word32 -> CodeGenFunction r (Value n Word32)
forall (value :: * -> *) a r.
(ValueCons value, IsInteger a) =>
value a -> CodeGenFunction r (value a)
LLVM.inv
instance Logic Word64 where
and :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
and = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
Value n Word64
-> Value n Word64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.and; or :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
or = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
Value n Word64
-> Value n Word64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.or
xor :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
xor = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
Value n Word64
-> Value n Word64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.xor; inv :: forall n r.
Positive n =>
T n Word64 -> CodeGenFunction r (T n Word64)
inv = (Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br) =>
(Value n ar -> m (Value n br)) -> T n a -> m (T n b)
liftM Value n Word64 -> CodeGenFunction r (Value n Word64)
forall (value :: * -> *) a r.
(ValueCons value, IsInteger a) =>
value a -> CodeGenFunction r (value a)
LLVM.inv
instance (TypeNum.Positive n, Logic a) => A.Logic (T n a) where
and :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
and = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Logic a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
and
or :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
or = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Logic a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
or
xor :: forall r. T n a -> T n a -> CodeGenFunction r (T n a)
xor = T n a -> T n a -> CodeGenFunction r (T n a)
forall a n r.
(Logic a, Positive n) =>
T n a -> T n a -> CodeGenFunction r (T n a)
forall n r.
Positive n =>
T n a -> T n a -> CodeGenFunction r (T n a)
xor
inv :: forall r. T n a -> CodeGenFunction r (T n a)
inv = T n a -> CodeGenFunction r (T n a)
forall a n r.
(Logic a, Positive n) =>
T n a -> CodeGenFunction r (T n a)
forall n r. Positive n => T n a -> CodeGenFunction r (T n a)
inv
class (MultiValue.BitShift a, C a) => BitShift a where
shl :: (TypeNum.Positive n) => T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
shr :: (TypeNum.Positive n) => T n a -> T n a -> LLVM.CodeGenFunction r (T n a)
instance BitShift Word where
shl :: forall n r.
Positive n =>
T n Word -> T n Word -> CodeGenFunction r (T n Word)
shl = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
Value n Word
-> Value n Word
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Word -> T n Word -> CodeGenFunction r (T n Word)
shr = (Value n Word -> Value n Word -> CodeGenFunction r (Value n Word))
-> T n Word -> T n Word -> CodeGenFunction r (T n Word)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word -> Value n Word -> CodeGenFunction r (Value n Word)
Value n Word
-> Value n Word
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.lshr
instance BitShift Word8 where
shl :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
shl = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
Value n Word8
-> Value n Word8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
shr = (Value n Word8
-> Value n Word8 -> CodeGenFunction r (Value n Word8))
-> T n Word8 -> T n Word8 -> CodeGenFunction r (T n Word8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word8 -> Value n Word8 -> CodeGenFunction r (Value n Word8)
Value n Word8
-> Value n Word8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.lshr
instance BitShift Word16 where
shl :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
shl = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
Value n Word16
-> Value n Word16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
shr = (Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16))
-> T n Word16 -> T n Word16 -> CodeGenFunction r (T n Word16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word16
-> Value n Word16 -> CodeGenFunction r (Value n Word16)
Value n Word16
-> Value n Word16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.lshr
instance BitShift Word32 where
shl :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
shl = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
Value n Word32
-> Value n Word32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
shr = (Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32))
-> T n Word32 -> T n Word32 -> CodeGenFunction r (T n Word32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word32
-> Value n Word32 -> CodeGenFunction r (Value n Word32)
Value n Word32
-> Value n Word32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.lshr
instance BitShift Word64 where
shl :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
shl = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
Value n Word64
-> Value n Word64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
shr = (Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64))
-> T n Word64 -> T n Word64 -> CodeGenFunction r (T n Word64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Word64
-> Value n Word64 -> CodeGenFunction r (Value n Word64)
Value n Word64
-> Value n Word64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Word64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.lshr
instance BitShift Int where
shl :: forall n r.
Positive n =>
T n Int -> T n Int -> CodeGenFunction r (T n Int)
shl = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
Value n Int
-> Value n Int
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Int -> T n Int -> CodeGenFunction r (T n Int)
shr = (Value n Int -> Value n Int -> CodeGenFunction r (Value n Int))
-> T n Int -> T n Int -> CodeGenFunction r (T n Int)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int -> Value n Int -> CodeGenFunction r (Value n Int)
Value n Int
-> Value n Int
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.ashr
instance BitShift Int8 where
shl :: forall n r.
Positive n =>
T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
shl = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
Value n Int8
-> Value n Int8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
shr = (Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8))
-> T n Int8 -> T n Int8 -> CodeGenFunction r (T n Int8)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int8 -> Value n Int8 -> CodeGenFunction r (Value n Int8)
Value n Int8
-> Value n Int8
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int8))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.ashr
instance BitShift Int16 where
shl :: forall n r.
Positive n =>
T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
shl = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
Value n Int16
-> Value n Int16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
shr = (Value n Int16
-> Value n Int16 -> CodeGenFunction r (Value n Int16))
-> T n Int16 -> T n Int16 -> CodeGenFunction r (T n Int16)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int16 -> Value n Int16 -> CodeGenFunction r (Value n Int16)
Value n Int16
-> Value n Int16
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int16))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.ashr
instance BitShift Int32 where
shl :: forall n r.
Positive n =>
T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
shl = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
Value n Int32
-> Value n Int32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
shr = (Value n Int32
-> Value n Int32 -> CodeGenFunction r (Value n Int32))
-> T n Int32 -> T n Int32 -> CodeGenFunction r (T n Int32)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int32 -> Value n Int32 -> CodeGenFunction r (Value n Int32)
Value n Int32
-> Value n Int32
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int32))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.ashr
instance BitShift Int64 where
shl :: forall n r.
Positive n =>
T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
shl = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
Value n Int64
-> Value n Int64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.shl; shr :: forall n r.
Positive n =>
T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
shr = (Value n Int64
-> Value n Int64 -> CodeGenFunction r (Value n Int64))
-> T n Int64 -> T n Int64 -> CodeGenFunction r (T n Int64)
forall (m :: * -> *) n a ar b br c cr.
(Monad m, Repr n a ~ Value n ar, Repr n b ~ Value n br,
Repr n c ~ Value n cr) =>
(Value n ar -> Value n br -> m (Value n cr))
-> T n a -> T n b -> m (T n c)
liftM2 Value n Int64 -> Value n Int64 -> CodeGenFunction r (Value n Int64)
Value n Int64
-> Value n Int64
-> CodeGenFunction r (BinOpValue Value Value (Vector n Int64))
forall (value0 :: * -> *) (value1 :: * -> *) a r.
(ValueCons2 value0 value1, IsInteger a) =>
value0 a
-> value1 a -> CodeGenFunction r (BinOpValue value0 value1 a)
LLVM.ashr