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 2718, Tue Sep 23 17:51:35 2014 UTC revision 2719, Tue Sep 23 17:51:53 2014 UTC
# Line 435  Line 435 
435                CL.D_StructDef(NONE, globals, SOME(#namespace props ^ "Globals_t"))                CL.D_StructDef(NONE, globals, SOME(#namespace props ^ "Globals_t"))
436    
437        (* generate the struct declaration for the world representation *)        (* generate the struct declaration for the world representation *)
438          fun genWorldStruct (props, Strand{tyName, ...}) = let          fun genWorldStruct (Prog{props, globals, ...}, Strand{tyName, ...}) = let
439                val extras = if Properties.dualState props                val extras = if Properties.dualState props
440                      then [                      then [
441                          (CL.T_Ptr(CL.T_Ptr(CL.T_Named tyName)), "inState"),                          (CL.T_Ptr(CL.T_Ptr(CL.T_Named tyName)), "inState"),
# Line 444  Line 444 
444                      else [                      else [
445                          (CL.T_Ptr(CL.T_Named tyName),           "state")                          (CL.T_Ptr(CL.T_Named tyName),           "state")
446                        ]                        ]
447                val extras = [                val extras = if null(!globals)
448                      (* target-specific world components *)                      then extras
449                        (CL.T_Ptr(CL.T_Named(N.globalsTy props)), "globals"),                      else (CL.T_Ptr(CL.T_Named(N.globalsTy props)), "globals") :: extras
450                        (CL.T_Ptr CL.uint8,                       "status")                val extras = (CL.T_Ptr CL.uint8, "status") :: extras
                     ] @ extras  
451                val extras = if #exec props                val extras = if #exec props
452                      then extras                      then extras
453                      else (CL.T_Named(N.definedInpTy props), "definedInp") :: extras                      else (CL.T_Named(N.definedInpTy props), "definedInp") :: extras
# Line 475  Line 474 
474                    SOME(CL.I_Array(genInits (0, strands)))))                    SOME(CL.I_Array(genInits (0, strands)))))
475                end                end
476    
477          fun outputLibSrc (baseName, Prog{          fun outputLibSrc (baseName, prog as Prog{
478                  props, inputs, globals, topDecls, strands, nAxes, initially, ...                  props, inputs, globals, topDecls, strands, nAxes, initially, ...
479                }) = let                }) = let
480              (* does the program require barrier synchronization to implement BSP semantics? *)              (* does the program require barrier synchronization to implement BSP semantics? *)
# Line 497  Line 496 
496                    then ppDecl (CL.D_Verbatim ["#define DIDEROT_DUAL_STATE\n"])                    then ppDecl (CL.D_Verbatim ["#define DIDEROT_DUAL_STATE\n"])
497                    else ();                    else ();
498                  ppDecl (GenInputs.genDefinedInpStruct (props, !inputs));                  ppDecl (GenInputs.genDefinedInpStruct (props, !inputs));
499                  ppDecl (genGlobalStruct (props, List.rev(!globals)));                  ppDecl (genGlobalStruct (props, !globals));
500                  ppDecl (genWorldStruct(props, strand));                  ppDecl (genWorldStruct(prog, strand));
501                  List.app ppDecl (GenInputs.genInputFuns(props, !inputs));                  List.app ppDecl (GenInputs.genInputFuns(props, !inputs));
502                  List.app ppDecl (List.rev (!topDecls));                  List.app ppDecl (!topDecls);
503                  List.app ppDecl (genStrand strand);                  List.app ppDecl (genStrand strand);
504                  List.app ppDecl outputs;                  List.app ppDecl outputs;
505                  ppStrandTable (ppStrm, [strand]);                  ppStrandTable (ppStrm, [strand]);
# Line 560  Line 559 
559                  if Properties.dualState props                  if Properties.dualState props
560                    then ppDecl (CL.D_Verbatim ["#define DIDEROT_DUAL_STATE\n"])                    then ppDecl (CL.D_Verbatim ["#define DIDEROT_DUAL_STATE\n"])
561                    else ();                    else ();
562                  ppDecl (genGlobalStruct (props, List.rev(!globals)));                  ppDecl (genGlobalStruct (props, !globals));
563                  ppDecl (genWorldStruct(props, strand));                  ppDecl (genWorldStruct(prog, strand));
564                  ppDecl (GenInputs.genInputsStruct (props, !inputs));                  ppDecl (GenInputs.genInputsStruct (props, !inputs));
565                  List.app ppDecl (List.rev (!topDecls));                  List.app ppDecl (!topDecls);
566                  List.app ppDecl (GenInputs.genExecInputFuns (props, !inputs));                  List.app ppDecl (GenInputs.genExecInputFuns (props, !inputs));
567                  List.app ppDecl (genStrand strand);                  List.app ppDecl (genStrand strand);
568                  List.app ppDecl outputs;                  List.app ppDecl outputs;
# Line 590  Line 589 
589                  RunCC.linkExec (basename, ldFlags props)                  RunCC.linkExec (basename, ldFlags props)
590                end                end
591    
592          fun generate (prog as Prog{props, ...}) = if #exec props          fun generate (prog as Prog{props, globals, topDecls, ...}) = (
593                  globals := List.rev (!globals);
594                  topDecls := List.rev (!topDecls);
595                  if #exec props
596                then generateExec prog                then generateExec prog
597                else generateLib prog                  else generateLib prog)
598    
599        end        end
600    

Legend:
Removed from v.2718  
changed lines
  Added in v.2719

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