packages feed

futhark-0.15.8: src/Futhark/CodeGen/Backends/SequentialCSharp.hs

module Futhark.CodeGen.Backends.SequentialCSharp
     ( compileProg
     ) where

import Control.Monad

import Futhark.IR.SeqMem
import qualified Futhark.CodeGen.ImpCode.Sequential as Imp
import qualified Futhark.CodeGen.ImpGen.Sequential as ImpGen
import qualified Futhark.CodeGen.Backends.GenericCSharp as CS
import Futhark.CodeGen.Backends.GenericCSharp.AST ()
import Futhark.MonadFreshNames

compileProg :: MonadFreshNames m =>
               Maybe String -> Prog SeqMem -> m String
compileProg module_name =
  ImpGen.compileProg >=>
  CS.compileProg
  module_name
  CS.emptyConstructor
  []
  []
  operations
  ()
  empty
  []
  []
  []
  where operations :: CS.Operations Imp.Sequential ()
        operations = CS.defaultOperations
                     { CS.opsCompiler = const $ return ()
                     , CS.opsCopy = copySequentialMemory
                     }
        empty = return ()

copySequentialMemory :: CS.Copy Imp.Sequential ()
copySequentialMemory destmem destidx DefaultSpace srcmem srcidx DefaultSpace nbytes _bt =
  CS.copyMemoryDefaultSpace destmem destidx srcmem srcidx nbytes
copySequentialMemory _ _ destspace _ _ srcspace _ _ =
  error $ "Cannot copy to " ++ show destspace ++ " from " ++ show srcspace