{-# 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