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/gen-output.sml
ViewVC logotype

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

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

revision 1911, Tue Jun 5 13:51:17 2012 UTC revision 1912, Tue Jun 5 16:02:39 2012 UTC
# Line 106  Line 106 
106      val numStableV = CL.mkVar "numStable"      val numStableV = CL.mkVar "numStable"
107      val numElemsV = CL.mkVar "numElems"      val numElemsV = CL.mkVar "numElems"
108      val outSV = CL.mkVar "outS"      val outSV = CL.mkVar "outS"
109        val DIDEROT_DIE = CL.mkVar "DIDEROT_DIE"
110      val DIDEROT_STABLE = CL.mkVar "DIDEROT_STABLE"      val DIDEROT_STABLE = CL.mkVar "DIDEROT_STABLE"
111      val NRRD = CL.mkVar "NRRD"      val NRRD = CL.mkVar "NRRD"
112    
# Line 139  Line 140 
140            CL.mkBinOp(CL.mkSubscript(CL.mkIndirect(wrldV, "status"), iV), CL.#==, DIDEROT_STABLE),            CL.mkBinOp(CL.mkSubscript(CL.mkIndirect(wrldV, "status"), iV), CL.#==, DIDEROT_STABLE),
141            stm)            stm)
142    
143      (* code fragment to test for active strands in a loop; note that NEW strands are considered active.
144            if (wrld->status[i] != DIDEROT_DIE)
145                ...
146       *)
147        fun ifActive stm = CL.mkIfThen(
148              CL.mkBinOp(CL.mkSubscript(CL.mkIndirect(wrldV, "status"), iV), CL.#!=, DIDEROT_DIE),
149              stm)
150    
151    (* code fragment to allocate nrrd data and check for errors    (* code fragment to allocate nrrd data and check for errors
152          if (nrrdMaybeAlloc_nva(<nrrdVar>, <nrrdType>, <nDims>, sizes) != 0) {          if (nrrdMaybeAlloc_nva(<nrrdVar>, <nrrdType>, <nDims>, sizes) != 0) {
153              char *msg = biffGetDone(NRRD);              char *msg = biffGetDone(NRRD);
# Line 189  Line 198 
198     *    allocate nrrd for nData     *    allocate nrrd for nData
199     *    copy data from strands to nrrd     *    copy data from strands to nrrd
200     *)     *)
201      fun genDynOutput (tgt, nAxes, ty, name) = let      fun genDynOutput (tgt, snapshot, nAxes, ty, name) = let
202            val (elemCTy, nrrdType, axisKind, nElems) = infoOf (tgt, ty)            val (elemCTy, nrrdType, axisKind, nElems) = infoOf (tgt, ty)
203            val (isArray, nAxes) = (case nAxes of NONE => (false, 1) | SOME n => (true, n))            val (isArray, nAxes) = (case nAxes of NONE => (false, 1) | SOME n => (true, n))
204          (* declarations *)          (* declarations *)
# Line 204  Line 213 
213                          CL.mkComment["count number of elements"],                          CL.mkComment["count number of elements"],
214                          nElemsInit, forStrands cntElems                          nElemsInit, forStrands cntElems
215                        ]                        ]
216                      else [                      else let
217                          val cntBlk = CL.mkBlock[cntElems, CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))]
218                          val lpBody = if snapshot
219                                then ifActive cntBlk
220                                else ifStable cntBlk
221                          in [
222                          CL.mkComment["count number of output elements and stable strands"],                          CL.mkComment["count number of output elements and stable strands"],
223                          CL.mkDeclInit(CL.uint32, "numStable", CL.mkInt 0),                          CL.mkDeclInit(CL.uint32, "numStable", CL.mkInt 0),
224                          nElemsInit,                          nElemsInit,
225                          forStrands(ifStable(CL.mkBlock[cntElems, CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))]))                          forStrands lpBody
226                        ]                        ] end
227                  end                  end
228          (* generate code to allocate the nLengths nrrd *)          (* generate code to allocate the nLengths nrrd *)
229            val lengthsNrrd = let            val lengthsNrrd = let
# Line 252  Line 266 
266                        ]                        ]
267                  val copyStm = if isArray                  val copyStm = if isArray
268                        then copyBlk                        then copyBlk
269                          else if #snapshot tgt
270                            then ifActive copyBlk
271                        else ifStable copyBlk                        else ifStable copyBlk
272                  in                  in
273                    CL.mkComment["initialize nLengths nrrd"] ::                    CL.mkComment["initialize nLengths nrrd"] ::
# Line 268  Line 284 
284                        CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof(elemCTy)), cpV, stateVar name))                        CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof(elemCTy)), cpV, stateVar name))
285                  val copyStm = if isArray                  val copyStm = if isArray
286                        then copyStm                        then copyStm
287                          else if #snapshot tgt
288                            then ifActive copyStm
289                        else ifStable copyStm                        else ifStable copyStm
290                  in                  in
291                    CL.mkComment["initialize nLengths nrrd"] ::                    CL.mkComment["initialize nLengths nrrd"] ::
# Line 295  Line 313 
313     *    allocate nrrd nData     *    allocate nrrd nData
314     *    copy data from strands to nrrd     *    copy data from strands to nrrd
315     *)     *)
316      fun genFixedOutput (tgt, nAxes, ty, name) = let      fun genFixedOutput (tgt, snapshot, nAxes, ty, name) = let
317            val (elemCTy, nrrdType, axisKind, nElems) = infoOf (tgt, ty)            val (elemCTy, nrrdType, axisKind, nElems) = infoOf (tgt, ty)
318            val (isArray, nAxes) = (case nAxes of NONE => (false, 1) | SOME n => (true, n))            val (isArray, nAxes) = (case nAxes of NONE => (false, 1) | SOME n => (true, n))
319            val nDataAxes = if (axisKind = Nrrd.KindScalar) then 0 else 1            val nDataAxes = if (axisKind = Nrrd.KindScalar) then 0 else 1
# Line 313  Line 331 
331                      then dimSizes @                      then dimSizes @
332                        List.tabulate (nAxes, fn i =>                        List.tabulate (nAxes, fn i =>
333                          setSizes(i+nDataAxes, CL.mkSubscript(CL.mkIndirect(wrldV, "size"), mkInt(nAxes-i-1))))                          setSizes(i+nDataAxes, CL.mkSubscript(CL.mkIndirect(wrldV, "size"), mkInt(nAxes-i-1))))
334                      else                      else let
335                          val cntStm = CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))
336                          val lpBody = if snapshot
337                                then ifActive cntStm
338                                else ifStable cntStm
339                          in
340                        CL.mkDeclInit(sizeTy, "numStable", mkInt 0) ::                        CL.mkDeclInit(sizeTy, "numStable", mkInt 0) ::
341                        forStrands (ifStable(CL.S_Exp(CL.mkPostOp(numStableV, CL.^++)))) ::                          forStrands lpBody ::
342                        dimSizes @ [setSizes(nDataAxes, numStableV)]                        dimSizes @ [setSizes(nDataAxes, numStableV)]
343                  end                  end
344                    end
345          (* generate the copy code *)          (* generate the copy code *)
346            val copyCode = let            val copyCode = let
347                  val pDecl = CL.mkDeclInit(CL.charPtr, "cp",                  val pDecl = CL.mkDeclInit(CL.charPtr, "cp",
# Line 333  Line 357 
357                        ]                        ]
358                  val copyStm = if isArray                  val copyStm = if isArray
359                        then copyBlk                        then copyBlk
360                          else if #snapshot tgt
361                            then ifActive copyBlk
362                        else ifStable copyBlk                        else ifStable copyBlk
363                  in                  in
364                    pDecl :: forStrands copyStm :: initAxisKinds (nDataV, axisKind, nAxes)                    pDecl :: forStrands copyStm :: initAxisKinds (nDataV, axisKind, nAxes)
# Line 421  Line 447 
447            ] end            ] end
448    
449      fun gen (tgt : TargetUtil.target_desc, nAxes) = let      fun gen (tgt : TargetUtil.target_desc, nAxes) = let
450            fun getFn (ty, name) = let            fun getFn snapshot (ty, name) = let
451                  val funcName = N.outputGet(tgt, name)                  val funcName = if snapshot
452                          then N.snapshotGet(tgt, name)
453                          else N.outputGet(tgt, name)
454                  fun mkFunc (params, body) =                  fun mkFunc (params, body) =
455                        CL.D_Func([], CL.boolTy, funcName, CL.PARAM([], wrldPtr tgt, "wrld")::params, body)                        CL.D_Func([], CL.boolTy, funcName, CL.PARAM([], wrldPtr tgt, "wrld")::params, body)
456                  in                  in
457                    case ty                    case ty
458                     of Ty.DynSeqTy ty' => mkFunc (genDynOutput(tgt, nAxes, ty', name))                     of Ty.DynSeqTy ty' => mkFunc (genDynOutput(tgt, snapshot, nAxes, ty', name))
459                      | _ => mkFunc (genFixedOutput(tgt, nAxes, ty, name))                      | _ => mkFunc (genFixedOutput(tgt, snapshot, nAxes, ty, name))
460                    (* end case *)                    (* end case *)
461                  end                  end
462            fun gen' outputs = let            fun gen' outputs = let
463                  val getFns = List.map getFn outputs                  val getFns = List.map (getFn false) outputs
464                  in                  in
465                    if (#exec tgt)                    if (#exec tgt)
466                      then getFns @ genOutput(tgt, outputs)                      then getFns @ genOutput(tgt, outputs)
467                      else if (#snapshot tgt)
468                        then List.map (getFn true) outputs @ getFns
469                      else getFns                      else getFns
470                  end                  end
471            in            in

Legend:
Removed from v.1911  
changed lines
  Added in v.1912

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