packages feed

ivory-examples-0.1.0.0: examples/AddrOfRegression.hs

{-# OPTIONS_GHC  -fno-warn-orphans #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}

module AddrOfRegression where

import Ivory.Language

[ivory|
struct param_info
  { param_requested :: Stored Uint8
  ; other           :: Stored Uint16
  }
|]

test1 :: ModuleDef
test1 = do
  defMemArea param_info_area
  incl t1
  where
  param_info_area :: MemArea (Array 512 (Struct "param_info"))
  param_info_area = area "g_param_info" Nothing

  param_info_ref :: Ref Global (Array 512 (Struct "param_info"))
  param_info_ref = addrOf param_info_area

  t1 :: Def ('[]:->())
  t1 = proc "t1" $ body $ do
    arrayMap $ \ix ->
      store ((param_info_ref ! ix) ~> param_requested) 1

test1_noarray :: ModuleDef
test1_noarray = do
  defMemArea param_info_area
  incl t1
  where
  param_info_area :: MemArea (Struct "param_info")
  param_info_area = area "single_param_info" Nothing

  param_info_ref :: Ref Global (Struct "param_info")
  param_info_ref = addrOf param_info_area

  t1 :: Def ('[]:->())
  t1 = proc "t1_noarray" $ body $ do
    store (param_info_ref ~> param_requested) 1

test2 :: ModuleDef
test2 = do
  defMemArea atom_array_area
  incl t2
  where
  atom_array_area :: MemArea (Array 512 (Stored IFloat))
  atom_array_area = area "atom_array" Nothing

  atom_array_ref :: Ref Global (Array 512 (Stored IFloat))
  atom_array_ref = addrOf atom_array_area

  t2 :: Def ('[]:->())
  t2 = proc "t2" $ body $ do
    arrayMap $ \ix ->
      store (atom_array_ref ! ix) 1

test3 :: ModuleDef
test3 = do
  incl t3
  where
  t3 :: Def ('[]:->())
  t3 = proc "t3" $ body $ do
    (stack_array :: Ref (Stack s) (Array 512 (Stored IFloat))) <- local izero
    arrayMap $ \ix ->
      store (stack_array ! ix) 1


cmodule :: Module
cmodule = package "AddrOfRegression" $ do
  defStruct (Proxy :: Proxy "param_info")
  test1
  test1_noarray
  test2
  test3