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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/target-cpu/gen-world.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/target-cpu/gen-world.sml

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

revision 3925, Fri Jun 3 17:30:49 2016 UTC revision 3926, Sat Jun 4 05:01:29 2016 UTC
# Line 17  Line 17 
17      structure CL = CLang      structure CL = CLang
18      structure RN = CxxNames      structure RN = CxxNames
19      structure Env = CodeGenEnv      structure Env = CodeGenEnv
20        structure ToCxx = TreeToCxx
21    
22    (* generate the struct declaration for the world representation *)    (* generate the struct declaration for the world representation *)
23      fun genStruct (spec : TargetSpec.t, strandName, nAxes) = let      fun genStruct (spec : TargetSpec.t, strandName, nAxes) = let
# Line 68  Line 69 
69            val nLoops = List.length loops            val nLoops = List.length loops
70            fun tr env = let            fun tr env = let
71                  val prefixCode = TreeToCxx.trStms (env, prefix)                  val prefixCode = TreeToCxx.trStms (env, prefix)
72                    val loVars = List.tabulate(nLoops, fn i => CodeGenUtil.freshVar ("lo"^Int.toString i))
73                    val hiVars = List.tabulate(nLoops, fn i => CodeGenUtil.freshVar ("hi"^Int.toString i))
74                    val allocStm =
75                          CL.mkIfThen(CL.mkIndirectDispatch(CL.mkVar "this", "alloc", [
76                              CL.E_Var "base",
77                              CL.E_Var "size"
78                            ]),
79                          (* then *)
80                            CL.mkBlock [
81                                CL.mkReturn(SOME(CL.mkVar "true"))
82                              ])
83                          (* endif *)
84                    fun mkArrDcl (name, dim, init) = CL.mkDecl(
85                          CL.T_Array(CL.uint32, SOME dim), name,
86                          SOME(CL.I_Exps(List.map CL.I_Exp init)))
87                (* code to allocate strands *)                (* code to allocate strands *)
88                  val allocCode = (case dim                  val allocCode = (case dim
89                         of NONE => []                         of NONE => let
90                                val (sz1::szs) = ListPair.map
91                                      (fn (hi, lo) =>
92                                          CL.mkBinOp(
93                                            CL.mkBinOp(CL.mkVar hi, CL.#-, CL.mkVar lo),
94                                            CL.#+,
95                                            CL.mkInt 1))
96                                        (loVars, hiVars)
97                                val sizeExp =
98                                      List.foldl (fn (sz, lhs) => CL.mkBinOp(lhs, CL.#+, sz)) sz1 szs
99                                in [
100                                  mkArrDcl("base", 1, [CL.mkInt 0]),
101                                  mkArrDcl("size", 1, [sizeExp]),
102                                  allocStm
103                                ] end
104                          | SOME d => []                          | SOME d => []
105                        (* end case *))                        (* end case *))
106                  val loopCode = []                  val loopCode = []

Legend:
Removed from v.3925  
changed lines
  Added in v.3926

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