{-# LINE 1 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module Foreign.CUDA.FFT.Execute (
Mode(..),
execC2C, execZ2Z,
execR2C, execD2Z,
execC2R, execZ2D,
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import Foreign.CUDA.FFT.Error
import Foreign.CUDA.FFT.Plan
import Foreign.CUDA.FFT.Internal.C2HS
import Foreign.CUDA.Ptr
import Foreign
import Foreign.C
import Data.Complex
{-# LINE 36 "./Foreign/CUDA/FFT/Execute.chs" #-}
data Mode = Forward
| Inverse
deriving (Eq,Show,Bounded)
instance Enum Mode where
succ Forward = Inverse
succ Inverse = error "Mode.succ: Inverse has no successor"
pred Inverse = Forward
pred Forward = error "Mode.pred: Forward has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Inverse
fromEnum Forward = (-1)
fromEnum Inverse = 1
toEnum (-1) = Forward
toEnum 1 = Inverse
toEnum unmatched = error ("Mode.toEnum: Cannot match " ++ show unmatched)
{-# LINE 48 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINEABLE execC2C #-}
execC2C
:: Handle
-> Mode
-> DevicePtr (Complex Float)
-> DevicePtr (Complex Float)
-> IO ()
execC2C hdl dir i o = cufftExecC2C hdl i o dir
where
cufftExecC2C :: (Handle) -> (DevicePtr (Complex Float)) -> (DevicePtr (Complex Float)) -> (Mode) -> IO ()
cufftExecC2C a1 a2 a3 a4 =
let {a1' = useHandle a1} in
let {a2' = useDevicePtr' a2} in
let {a3' = useDevicePtr' a3} in
let {a4' = cFromEnum a4} in
cufftExecC2C'_ a1' a2' a3' a4' >>= \res ->
checkStatus res >>
return ()
{-# LINE 73 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINEABLE execZ2Z #-}
execZ2Z
:: Handle
-> Mode
-> DevicePtr (Complex Double)
-> DevicePtr (Complex Double)
-> IO ()
execZ2Z hdl dir i o = cufftExecZ2Z hdl i o dir
where
cufftExecZ2Z :: (Handle) -> (DevicePtr (Complex Double)) -> (DevicePtr (Complex Double)) -> (Mode) -> IO ()
cufftExecZ2Z a1 a2 a3 a4 =
let {a1' = useHandle a1} in
let {a2' = useDevicePtr' a2} in
let {a3' = useDevicePtr' a3} in
let {a4' = cFromEnum a4} in
cufftExecZ2Z'_ a1' a2' a3' a4' >>= \res ->
checkStatus res >>
return ()
{-# LINE 98 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINEABLE execR2C #-}
execR2C :: (Handle)
-> (DevicePtr Float)
-> (DevicePtr (Complex Float))
-> IO ()
execR2C a1 a2 a3 =
let {a1' = useHandle a1} in
let {a2' = useDevicePtr' a2} in
let {a3' = useDevicePtr' a3} in
execR2C'_ a1' a2' a3' >>= \res ->
checkStatus res >>
return ()
{-# LINE 114 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINEABLE execD2Z #-}
execD2Z :: (Handle)
-> (DevicePtr Double)
-> (DevicePtr (Complex Double))
-> IO ()
execD2Z a1 a2 a3 =
let {a1' = useHandle a1} in
let {a2' = useDevicePtr' a2} in
let {a3' = useDevicePtr' a3} in
execD2Z'_ a1' a2' a3' >>= \res ->
checkStatus res >>
return ()
{-# LINE 130 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINEABLE execC2R #-}
execC2R :: (Handle)
-> (DevicePtr (Complex Float))
-> (DevicePtr Float)
-> IO ()
execC2R a1 a2 a3 =
let {a1' = useHandle a1} in
let {a2' = useDevicePtr' a2} in
let {a3' = useDevicePtr' a3} in
execC2R'_ a1' a2' a3' >>= \res ->
checkStatus res >>
return ()
{-# LINE 146 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINEABLE execZ2D #-}
execZ2D :: (Handle)
-> (DevicePtr (Complex Double))
-> (DevicePtr Double)
-> IO ()
execZ2D a1 a2 a3 =
let {a1' = useHandle a1} in
let {a2' = useDevicePtr' a2} in
let {a3' = useDevicePtr' a3} in
execZ2D'_ a1' a2' a3' >>= \res ->
checkStatus res >>
return ()
{-# LINE 162 "./Foreign/CUDA/FFT/Execute.chs" #-}
{-# INLINE useDevicePtr' #-}
useDevicePtr' :: DevicePtr a -> Ptr b
useDevicePtr' = castPtr . useDevicePtr
foreign import ccall unsafe "Foreign/CUDA/FFT/Execute.chs.h cufftExecC2C"
cufftExecC2C'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))
foreign import ccall unsafe "Foreign/CUDA/FFT/Execute.chs.h cufftExecZ2Z"
cufftExecZ2Z'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))
foreign import ccall unsafe "Foreign/CUDA/FFT/Execute.chs.h cufftExecR2C"
execR2C'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))
foreign import ccall unsafe "Foreign/CUDA/FFT/Execute.chs.h cufftExecD2Z"
execD2Z'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))
foreign import ccall unsafe "Foreign/CUDA/FFT/Execute.chs.h cufftExecC2R"
execC2R'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (IO C2HSImp.CInt))))
foreign import ccall unsafe "Foreign/CUDA/FFT/Execute.chs.h cufftExecZ2D"
execZ2D'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (IO C2HSImp.CInt))))