{-# LANGUAGE BangPatterns          #-}
{-# LANGUAGE ConstraintKinds       #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE GADTs                 #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- |
-- Module      : Data.Array.Accelerate.LLVM.Native.Execute.Marshal
-- Copyright   : [2014..2020] The Accelerate Team
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <trevor.mcdonell@gmail.com>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--

module Data.Array.Accelerate.LLVM.Native.Execute.Marshal ( module M )
  where

-- accelerate
import Data.Array.Accelerate.LLVM.Execute.Marshal               as M
import Data.Array.Accelerate.Array.Unique

import Data.Array.Accelerate.LLVM.Native.Execute.Async          () -- instance Async Native
import Data.Array.Accelerate.LLVM.Native.Target

-- libraries
import qualified Data.DList                                     as DL
import qualified Foreign.LibFFI                                 as FFI

instance Marshal Native where
  type ArgR Native = FFI.Arg

  marshalInt :: Int -> ArgR Native
marshalInt = Int -> ArgR Native
Int -> Arg
FFI.argInt
  marshalScalarData' :: SingleType e
-> ScalarArrayData e -> Par Native (DList (ArgR Native))
marshalScalarData' SingleType e
_ = DList Arg -> Par Native (DList Arg)
forall (m :: * -> *) a. Monad m => a -> m a
return (DList Arg -> Par Native (DList Arg))
-> (ScalarArrayData e -> DList Arg)
-> ScalarArrayData e
-> Par Native (DList Arg)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Arg -> DList Arg
forall a. a -> DList a
DL.singleton (Arg -> DList Arg)
-> (ScalarArrayData e -> Arg) -> ScalarArrayData e -> DList Arg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ScalarArrayDataR e) -> Arg
forall a. Ptr a -> Arg
FFI.argPtr (Ptr (ScalarArrayDataR e) -> Arg)
-> (ScalarArrayData e -> Ptr (ScalarArrayDataR e))
-> ScalarArrayData e
-> Arg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ScalarArrayData e -> Ptr (ScalarArrayDataR e)
forall a. UniqueArray a -> Ptr a
unsafeUniqueArrayPtr