Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/c-util/gen-inputs.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/c-util/gen-inputs.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1803, Fri Apr 6 13:46:37 2012 UTC revision 1806, Sat Apr 7 00:02:25 2012 UTC
# Line 30  Line 30 
30    (* translate TreeIL types to CLang types *)    (* translate TreeIL types to CLang types *)
31      val trType = TreeTyToC.trType      val trType = TreeTyToC.trType
32    
33      (* an l-value expression for accessing a global variable *)
34        fun global name = CL.mkIndirect(CL.mkIndirect(CL.mkVar "wrld", "globals"), name)
35    
36    (* gather the input globals from the input initialization block *)    (* gather the input globals from the input initialization block *)
37      fun gatherInputs (IL.Block{body, ...}) = let      fun gatherInputs (IL.Block{body, ...}) = let
38            fun gather (IL.S_Input(x, name, desc, NONE)) = SOME(IL.Var.ty x, name, desc, false)            fun gather (IL.S_Input(x, name, desc, NONE)) = SOME(IL.Var.ty x, name, desc, false)
# Line 69  Line 72 
72                CL.mkBlock[])                CL.mkBlock[])
73            end            end
74    
75    (* FIXME: we need to translate from the C representation to the Diderot representation *)
76        fun copy (ty, dst, src) = let
77              fun assign () = CL.mkAssign(dst, src)
78              fun addrOf (CL.E_UnOp(CL.%*, x)) = x
79                | addrOf x = CL.mkUnOp(CL.%&, x)
80              fun memcpy () = CL.mkCall("memcpy", [addrOf dst, addrOf src, CL.mkSizeof(trType ty)])
81              in
82                case ty
83                 of Ty.BoolTy => assign()
84                  | Ty.StringTy => CL.mkCall("strcpy", [addrOf dst, addrOf src])
85                  | Ty.IntTy => assign()
86                  | Ty.TensorTy[] => assign()
87                  | Ty.TensorTy _ => memcpy()
88                  | Ty.SeqTy _ => memcpy()
89                  | Ty.DynSeqTy _ => raise Fail "dynamic sequence"
90                  | Ty.ImageTy _ => raise Fail "unexpected image copy"
91                  | _ => raise Fail(concat["bogus input type ", Ty.toString ty])
92                (* end case *)
93              end
94    
95    (* for each input variable we generate two or three top-level declaraions *)    (* for each input variable we generate two or three top-level declaraions *)
96      fun genInputFuns (tgt : target_desc, inputs) = let      fun genInputFuns (tgt : target_desc, inputs) = let
97            val prefix = #namespace tgt            val prefix = #namespace tgt
# Line 87  Line 110 
110                            ]                            ]
111                  val getDcl = if hasDflt                  val getDcl = if hasDflt
112                          then let                          then let
113                            val name = concat[prefix, name]                            val getName = concat[prefix, name]
114                          (* convert the input type to a by-reference C type *)                          (* convert the input type to a by-reference C type *)
115                            val outTy = (case ty                            val outTy = (case ty
116                                   of Ty.BoolTy => CL.T_Ptr(trType ty)                                   of Ty.BoolTy => CL.T_Ptr(trType ty)
# Line 101  Line 124 
124                                    | _ => raise Fail(concat["bogus input type ", Ty.toString ty])                                    | _ => raise Fail(concat["bogus input type ", Ty.toString ty])
125                                  (* end case *))                                  (* end case *))
126                            in [                            in [
127                              CL.D_Func([], CL.voidTy, name, [wrldParam, CL.PARAM([], outTy, "v")],                              CL.D_Func([], CL.voidTy, getName, [wrldParam, CL.PARAM([], outTy, "v")],
128                                CL.mkBlock[] (* FIXME *))                                CL.mkBlock[copy(ty, CL.mkUnOp(CL.%*, CL.mkVar "v"), global name)])
129                            ] end                            ] end
130                          else []                          else []
131                  val setDcl = (case ty                  val setDcl = (case ty
# Line 121  Line 144 
144                                CL.D_Func(                                CL.D_Func(
145                                  [], CL.voidTy, concat[prefix, "Set_", name],                                  [], CL.voidTy, concat[prefix, "Set_", name],
146                                  [wrldParam, CL.PARAM([], trType ty, "v")],                                  [wrldParam, CL.PARAM([], trType ty, "v")],
147                                  CL.mkBlock[] (* FIXME *))                                  CL.mkBlock[copy(ty, global name, CL.mkVar "v")])
148                              ]                              ]
149                        (* end case *))                        (* end case *))
150                  in                  in

Legend:
Removed from v.1803  
changed lines
  Added in v.1806

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0