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

SCM Repository

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

Diff of /branches/vis12/src/compiler/c-target/c-target.sml

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

revision 1712, Fri Mar 9 21:36:38 2012 UTC revision 1713, Fri Mar 9 21:37:19 2012 UTC
# Line 50  Line 50 
50          globals : CL.decl list ref,          globals : CL.decl list ref,
51          topDecls : CL.decl list ref,          topDecls : CL.decl list ref,
52          strands : strand AtomTable.hash_table,          strands : strand AtomTable.hash_table,
53            nAxes : int option ref,         (* number of axes in initial grid (NONE means collection) *)
54          initially : CL.decl ref          initially : CL.decl ref
55        }        }
56    
# Line 160  Line 161 
161                        ],                        ],
162                      topDecls = ref [],                      topDecls = ref [],
163                      strands = AtomTable.mkTable (16, Fail "strand table"),                      strands = AtomTable.mkTable (16, Fail "strand table"),
164                        nAxes = ref(SOME ~1),
165                      initially = ref(CL.D_Comment["missing initially"])                      initially = ref(CL.D_Comment["missing initially"])
166                    }                    }
167                  end                  end
# Line 184  Line 186 
186                end                end
187        (* create and register the initially function for a program *)        (* create and register the initially function for a program *)
188          fun initially {          fun initially {
189                prog = Prog{strands, initially, ...},                prog = Prog{strands, nAxes, initially, ...},
190                isArray : bool,                isArray : bool,
191                iterPrefix : stm list,                iterPrefix : stm list,
192                iters : (var * exp * exp) list,                iters : (var * exp * exp) list,
# Line 254  Line 256 
256                      [CL.mkReturn(SOME(CL.E_Var "wrld"))])                      [CL.mkReturn(SOME(CL.E_Var "wrld"))])
257                val initFn = CL.D_Func([], worldTy, N.initially, [], body)                val initFn = CL.D_Func([], worldTy, N.initially, [], body)
258                in                in
259                    nAxes := (if isArray then SOME nDims else NONE);
260                  initially := initFn                  initially := initFn
261                end                end
262    
# Line 351  Line 354 
354                    SOME(CL.I_Array(genInits (0, strands)))))                    SOME(CL.I_Array(genInits (0, strands)))))
355                end                end
356    
357          fun genSrc (baseName, prog) = let          fun genExecSrc (baseName, prog) = let
358                val Prog{globals, topDecls, strands, initially, ...} = prog                val Prog{globals, topDecls, strands, initially, ...} = prog
359                val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}                val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}
360                val outS = TextIO.openOut fileName                val outS = TextIO.openOut fileName
# Line 389  Line 392 
392                val ldOpts = rtLib :: extraLibs                val ldOpts = rtLib :: extraLibs
393                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}
394                in                in
395                  genSrc (basename, prog);                  genExecSrc (basename, prog);
396                  RunCC.compile (basename, cflags);                  RunCC.compile (basename, cflags);
397                  RunCC.link (basename, ldOpts)                  RunCC.link (basename, ldOpts)
398                end                end
399    
400            fun genLibSrc (baseName, Prog{tgt, strands, nAxes, ...}) = let
401                  val [Strand{state, output, ...}] = AtomTable.listItems strands
402                  val outputs = List.map (GenOutput.gen (tgt, !nAxes)) [output]
403                (* output to C file *)
404                  val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}
405                  val outS = TextIO.openOut fileName
406                  val ppStrm = PrintAsC.new outS
407                  fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)
408                  in
409                    List.app ppDecl outputs
410                  end
411    
412          fun generateLib (prog as Prog{tgt, strands, ...}) = let          fun generateLib (prog as Prog{tgt, strands, ...}) = let
413                val {outDir, outBase, exec, double, parallel, debug, ...} = tgt                val {outDir, outBase, exec, double, parallel, debug, ...} = tgt
414                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}
415                val [Strand{state, output, ...}] = AtomTable.listItems strands                val [Strand{state, output, ...}] = AtomTable.listItems strands
416                in                in
417                  (* generate the library .h file *)
418                  GenLibraryInterface.gen {                  GenLibraryInterface.gen {
419                      tgt = tgt,                      tgt = tgt,
420                      inputs = [], (* FIXME *)                      inputs = [], (* FIXME *)
421                      outputs = [output]                      outputs = [output]
422                    }                    };
423                  (* *)
424                    genLibSrc (basename, prog)
425    (* FIXME: compile and link *)
426                end                end
427    
428          fun generate (prog as Prog{tgt, ...}) = if #exec tgt          fun generate (prog as Prog{tgt, ...}) = if #exec tgt

Legend:
Removed from v.1712  
changed lines
  Added in v.1713

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