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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/c-target/c-target.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/c-target/c-target.sml

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

revision 533, Mon Feb 14 22:56:45 2011 UTC revision 534, Tue Feb 15 03:40:00 2011 UTC
# Line 13  Line 13 
13    
14      datatype ty      datatype ty
15        = T_Bool        = T_Bool
16          | T_String
17        | T_Int                   (* default float type *)        | T_Int                   (* default float type *)
18        | T_Real                  (* default real type *)        | T_Real                  (* default real type *)
19        | T_Vec of int        | T_Vec of int
# Line 70  Line 71 
71            then raise Size            then raise Size
72            else T_IVec n            else T_IVec n
73      fun imageTy dim = T_Image dim      fun imageTy dim = T_Image dim
74      val stringTy = T_Data CL.charPtr      val stringTy = T_String
75    
76        val statusTy = CL.T_Named "Status_t"
77    
78    (* convert target types to CLang types *)    (* convert target types to CLang types *)
79      fun cvtTy T_Bool = CLang.T_Named "bool"      fun cvtTy T_Bool = CLang.T_Named "bool"
80          | cvtTy T_String = CL.charPtr
81        | cvtTy T_Int = !gIntTy        | cvtTy T_Int = !gIntTy
82        | cvtTy T_Real = !gRealTy        | cvtTy T_Real = !gRealTy
83        | cvtTy (T_Vec n) = CLang.T_Named(concat["Diderot_vec", Int.toString n, "D_t"])        | cvtTy (T_Vec n) = CLang.T_Named(concat["Diderot_vec", Int.toString n, "D_t"])
# Line 274  Line 278 
278          val block = CL.mkBlock          val block = CL.mkBlock
279          fun ifthen ((e, T_Bool), s1) = CL.mkIfThen(e, s1)          fun ifthen ((e, T_Bool), s1) = CL.mkIfThen(e, s1)
280          fun ifthenelse ((e, T_Bool), s1, s2) = CL.mkIfThenElse(e, s1, s2)          fun ifthenelse ((e, T_Bool), s1, s2) = CL.mkIfThenElse(e, s1, s2)
281          fun die () = comment ["**** die ****"] (* FIXME *)        (* special Diderot forms *)
282          fun stabilize () = comment ["**** stabilize ****"] (* FIXME *)          fun cons (lhs, args) = comment ["**** cons ****"] (* FIXME *)
283  (*          fun loadImage (lhs : var, dim, name : exp) = let
             | IL.S_Cons(lhs, args) => []  (* FIXME *)  
             | IL.S_LoadImage(lhs, dim, name) => let  
                 val stsTy = CL.Named "Status_t"  
284                  val sts = "sts"                  val sts = "sts"
285                  val imgTy = CL.Named(concat["Diderot_image", Int.toString dim, "D_t"])                val imgTy = CL.T_Named(concat["Diderot_image", Int.toString dim, "D_t"])
286                  val loadFn = concat["Diderot_LoadImage", Int.toString dim, "D"]                  val loadFn = concat["Diderot_LoadImage", Int.toString dim, "D"]
287                  in [                  in [
288                    CL.S_Decl(                    CL.S_Decl(
289                      stsTy, sts,                    statusTy, sts,
290                      SOME(CL.E_Apply(loadFn, [name, CL.mkUnOp(CL.%&, lhs)])))                    SOME(CL.E_Apply(loadFn, [#1 name, CL.mkUnOp(CL.%&, CL.E_Var(#2 lhs))])))
291                  ] end                  ] end
292              | IL.S_Input(lhs, name, optDflt) => let          fun input (lhs : var, name, optDflt) = let
293                  val inputFn = (case TreeIL.Var.ty lhs                val sts = "sts"
294                         of Ty.StringTy => "Diderot_InputString"                val inputFn = (case #1 lhs
295                          | Ty.Ty.VecTy 1 => "Diderot_InputReal"                       of T_String => "Diderot_InputString"
296                          | Ty.Ty.VecTy 3 => "Diderot_InputVec3"                        | T_Vec 1 => "Diderot_InputReal"
297                          | T_Vec 3 => "Diderot_InputVec3"
298                          | _ => raise Fail "unsupported input type"                          | _ => raise Fail "unsupported input type"
299                        (* end case *))                        (* end case *))
300                  val lhs = CL.E_Var(#2 lhs)
301                  val (initCode, hasDflt) = (case optDflt                  val (initCode, hasDflt) = (case optDflt
302                         of SOME e => ([CL.S_Assign(lhs, e)], true)                       of SOME(e, _) => ([CL.S_Assign(lhs, e)], true)
303                          | NONE => ([], false)                          | NONE => ([], false)
304                        (* end case *))                        (* end case *))
305                  val code = [                  val code = [
306                        CL.S_Decl(                        CL.S_Decl(
307                          stsTy, sts,                        statusTy, sts,
308                          SOME(CL.E_Apply(inputFn, [                          SOME(CL.E_Apply(inputFn, [
309                              name, CL.mkUnOp(CL.%&, lhs), CL.mkBool hasDflt                            CL.E_Str name, CL.mkUnOp(CL.%&, lhs), CL.mkBool hasDflt
310                            ])))                            ])))
311                        ]                        ]
312                  in                  in
313                    initCode @ code                    initCode @ code
314                  end                  end
315  *)          fun die () = comment ["**** die ****"] (* FIXME *)
316            fun stabilize () = comment ["**** stabilize ****"] (* FIXME *)
317        end        end
318    
319      fun generate (baseName, Prog{globals, topDecls, strands}) = let      fun generate (baseName, Prog{globals, topDecls, strands}) = let

Legend:
Removed from v.533  
changed lines
  Added in v.534

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