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 553, Fri Feb 18 19:18:47 2011 UTC revision 554, Mon Feb 21 15:50:21 2011 UTC
# Line 88  Line 88 
88      fun newProgram () = (      fun newProgram () = (
89            RN.initTargetSpec();            RN.initTargetSpec();
90            Prog{            Prog{
91                globals = ref [],                globals = ref [
92                    CL.D_Verbatim[
93                        if !Controls.doublePrecision
94                          then "#define DIDEROT_DOUBLE_PRECISION"
95                          else "#define DIDEROT_SINGLE_PRECISION",
96                        "#include \"Diderot/diderot.h\""
97                      ]],
98                topDecls = ref [],                topDecls = ref [],
99                strands = ref []                strands = ref []
100              })              })
# Line 109  Line 115 
115                state := (ty, name) :: !state;                state := (ty, name) :: !state;
116                (ty, name))                (ty, name))
117          fun var (ty, name) = (ty, name)          fun var (ty, name) = (ty, name)
118          fun tmp ty = raise Fail "FIXME: Var.tmp"          local
119              val count = ref 0
120              fun freshName prefix = let
121                    val n = !count
122                    in
123                      count := n+1;
124                      concat[prefix, "_", Int.toString n]
125                    end
126            in
127            fun tmp ty = (ty, freshName "tmp")
128            fun fresh prefix = freshName prefix
129            end (* local *)
130        end        end
131    
132    (* expression construction *)    (* expression construction *)
# Line 310  Line 327 
327          fun cons ((T_Vec n, x), args : exp list) =          fun cons ((T_Vec n, x), args : exp list) =
328                CL.mkAssign(CL.mkVar x, CL.mkApply(RN.mkVec n, List.map #1 args))                CL.mkAssign(CL.mkVar x, CL.mkApply(RN.mkVec n, List.map #1 args))
329            | cons _ = raise Fail "bogus cons"            | cons _ = raise Fail "bogus cons"
330          fun getImgData (lhs, n, e) = comment ["**** getImgData ****"] (* FIXME *)          fun getImgData ((T_Vec n, x), (e, T_Ptr rTy)) = let
331          fun loadImage (lhs : var, dim, name : exp) = let                val addr = Var.fresh "vp"
332                val sts = "sts"                fun mkLoad i = CL.mkSubscript(CL.mkVar addr, CL.mkInt(IntInf.fromInt i, CL.int32))
333                  in [
334                    CL.mkAssign(CL.mkVar addr, e),
335                    CL.mkAssign(CL.mkVar x, CL.mkApply(RN.mkVec n, List.tabulate (n, mkLoad)))
336                  ] end
337              | getImgData _ = raise Fail "bogus getImgData"
338            local
339              fun checkSts mkDecl = let
340                    val sts = Var.fresh "sts"
341                    in
342                      mkDecl sts @
343                      [CL.mkIfThen(
344                        CL.mkBinOp(CL.mkVar "DIDEROT_OK", CL.#!=, CL.mkVar sts),
345                        CL.mkCall("exit", [CL.mkInt(1, CL.int32)]))]
346                    end
347            in
348            fun loadImage (lhs : var, dim, name : exp) = checkSts (fn sts => let
349                val imgTy = CL.T_Named(RN.imageTy dim)                val imgTy = CL.T_Named(RN.imageTy dim)
350                val loadFn = RN.loadImage dim                val loadFn = RN.loadImage dim
351                in [                in [
352                  CL.S_Decl(                  CL.S_Decl(
353                    statusTy, sts,                    statusTy, sts,
354                    SOME(CL.E_Apply(loadFn, [#1 name, CL.mkUnOp(CL.%&, CL.E_Var(#2 lhs))])))                    SOME(CL.E_Apply(loadFn, [#1 name, CL.mkUnOp(CL.%&, CL.E_Var(#2 lhs))])))
355                ] end                ] end)
356          fun input (lhs : var, name, optDflt) = let          fun input (lhs : var, name, optDflt) = checkSts (fn sts => let
               val sts = "sts"  
357                val inputFn = RN.input(#1 lhs)                val inputFn = RN.input(#1 lhs)
358                val lhs = CL.E_Var(#2 lhs)                val lhs = CL.E_Var(#2 lhs)
359                val (initCode, hasDflt) = (case optDflt                val (initCode, hasDflt) = (case optDflt
# Line 337  Line 369 
369                      ]                      ]
370                in                in
371                  initCode @ code                  initCode @ code
372                end                end)
373            end (* local *)
374          fun die () = comment ["**** die ****"] (* FIXME *)          fun die () = comment ["**** die ****"] (* FIXME *)
375          fun stabilize () = comment ["**** stabilize ****"] (* FIXME *)          fun stabilize () = comment ["**** stabilize ****"] (* FIXME *)
376        end        end

Legend:
Removed from v.553  
changed lines
  Added in v.554

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