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 1279, Mon Jun 6 17:09:33 2011 UTC revision 1280, Mon Jun 6 17:34:42 2011 UTC
# Line 141  Line 141 
141                Prog{                Prog{
142                    name = name,                    name = name,
143                    double = double, parallel = parallel, debug = debug,                    double = double, parallel = parallel, debug = debug,
144                    globals = ref [                    globals = ref [ (* NOTE: in reverse order! *)
145                          CL.D_Var(["static"], CL.charPtr, "ProgramName",
146                            SOME(CL.I_Exp(CL.mkStr name))),
147                      CL.D_Verbatim[                      CL.D_Verbatim[
148                          if double                          if double
149                            then "#define DIDEROT_DOUBLE_PRECISION"                            then "#define DIDEROT_DOUBLE_PRECISION"
150                            else "#define DIDEROT_SINGLE_PRECISION",                            else "#define DIDEROT_SINGLE_PRECISION",
151                              if parallel
152                                then "#define DIDEROT_TARGET_PARALLEL"
153                                else "#define DIDEROT_TARGET_C",
154                          "#include \"Diderot/diderot.h\""                          "#include \"Diderot/diderot.h\""
155                        ]],                          ]
156                        ],
157                    topDecls = ref [],                    topDecls = ref [],
158                    strands = AtomTable.mkTable (16, Fail "strand table"),                    strands = AtomTable.mkTable (16, Fail "strand table"),
159                    initially = ref(CL.D_Comment["missing initially"])                    initially = ref(CL.D_Comment["missing initially"])
# Line 173  Line 179 
179                end                end
180        (* create and register the initially function for a program *)        (* create and register the initially function for a program *)
181          fun initially {          fun initially {
182                prog = Prog{strands, initially, ...},                prog = Prog{name=progName, strands, initially, ...},
183                isArray : bool,                isArray : bool,
184                iterPrefix : stm list,                iterPrefix : stm list,
185                iters : (var * exp * exp) list,                iters : (var * exp * exp) list,
# Line 195  Line 201 
201                      (fn (i, (ToC.V(ty, _), lo, hi)) =>                      (fn (i, (ToC.V(ty, _), lo, hi)) =>
202                          (i, CL.I_Exp(CL.mkBinOp(CL.mkBinOp(hi, CL.#-, lo), CL.#+, CL.E_Int(1, ty))))                          (i, CL.I_Exp(CL.mkBinOp(CL.mkBinOp(hi, CL.#-, lo), CL.#+, CL.E_Int(1, ty))))
203                      ) iters                      ) iters
204                (* code to allocate the world and initial strands *)
205                  val wrld = "wrld"
206                val allocCode = [                val allocCode = [
207                        CL.mkComment["allocate initial block of strands"],                        CL.mkComment["allocate initial block of strands"],
208                        CL.mkDecl(CL.T_Array(CL.int32, SOME nDims), "base", SOME(CL.I_Array baseInit)),                        CL.mkDecl(CL.T_Array(CL.int32, SOME nDims), "base", SOME(CL.I_Array baseInit)),
209                        CL.mkDecl(CL.T_Array(CL.uint32, SOME nDims), "size", SOME(CL.I_Array sizeInit)),                        CL.mkDecl(CL.T_Array(CL.uint32, SOME nDims), "size", SOME(CL.I_Array sizeInit)),
210                        CL.mkDecl(worldTy, "wrld",                        CL.mkDecl(worldTy, wrld,
211                          SOME(CL.I_Exp(CL.E_Apply(N.allocInitially, [                          SOME(CL.I_Exp(CL.E_Apply(N.allocInitially, [
212                                CL.mkVar "ProgramName",
213                              CL.mkUnOp(CL.%&, CL.E_Var(N.strandDesc name)),                              CL.mkUnOp(CL.%&, CL.E_Var(N.strandDesc name)),
214                              CL.E_Bool isArray,                              CL.E_Bool isArray,
215                              CL.E_Int(IntInf.fromInt nDims, CL.int32),                              CL.E_Int(IntInf.fromInt nDims, CL.int32),
# Line 233  Line 242 
242                        CL.mkDecl(CL.uint32, indexVar, SOME(CL.I_Exp(CL.E_Int(0, CL.uint32)))),                        CL.mkDecl(CL.uint32, indexVar, SOME(CL.I_Exp(CL.E_Int(0, CL.uint32)))),
243                        mkLoopNest iters                        mkLoopNest iters
244                      ]                      ]
245                val body = CL.mkBlock(iterPrefix @ allocCode @ iterCode @ [CL.mkReturn(SOME(CL.E_Var "wrld"))])                val body = CL.mkBlock(
246                        iterPrefix @
247                        allocCode @
248                        iterCode @
249                        [CL.mkReturn(SOME(CL.E_Var "wrld"))])
250                val initFn = CL.D_Func([], worldTy, N.initially, [], body)                val initFn = CL.D_Func([], worldTy, N.initially, [], body)
251                in                in
252                  initially := initFn                  initially := initFn
# Line 319  Line 332 
332                fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)                fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)
333                val strands = AtomTable.listItems strands                val strands = AtomTable.listItems strands
334                in                in
                 ppDecl (  
                   CL.D_Var(["static"], CL.charPtr, "ProgramName",  
                   SOME(CL.I_Exp(CL.mkStr name))));  
335                  List.app ppDecl (List.rev (!globals));                  List.app ppDecl (List.rev (!globals));
336                  List.app ppDecl (List.rev (!topDecls));                  List.app ppDecl (List.rev (!topDecls));
337                  List.app (fn strand => List.app ppDecl (genStrand strand)) strands;                  List.app (fn strand => List.app ppDecl (genStrand strand)) strands;

Legend:
Removed from v.1279  
changed lines
  Added in v.1280

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