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-outputs.sml
ViewVC logotype

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

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

revision 3957, Sun Jun 12 16:49:42 2016 UTC revision 3958, Sun Jun 12 19:51:51 2016 UTC
# Line 40  Line 40 
40    
41  structure GenOutputs : sig  structure GenOutputs : sig
42    
43    (* gen (props, nAxes) outputs    (* gen (props, nAxes, outputs)
44     *    returns a list of function declarations for getting the output/snapshot nrrds from     *    returns a list of function declarations for getting the output/snapshot nrrds from
45     *    the program state.  The arguments are:     *    the program state.  The arguments are:
46     *        props       - the target information     *        props       - the target information
# Line 172  Line 172 
172                  val nElemsInit = CL.mkDeclInit(CL.uint32, "numElems", CL.mkInt 0)                  val nElemsInit = CL.mkDeclInit(CL.uint32, "numElems", CL.mkInt 0)
173                  val cntElems = CL.S_Exp(CL.mkAssignOp(numElemsV, CL.+=, seqLength(stateVar name)))                  val cntElems = CL.S_Exp(CL.mkAssignOp(numElemsV, CL.+=, seqLength(stateVar name)))
174                  in                  in
175                    if #isArray spec                    if #isGrid spec
176                      then [                      then [
177                          CL.mkComment["count number of elements"],                          CL.mkComment["count number of elements"],
178                          nElemsInit, forStrands cntElems                          nElemsInit, forStrands cntElems
# Line 190  Line 190 
190                        ] end                        ] end
191                  end                  end
192          (* code to check for zero outputs, which happens for collections with no active strands *)          (* code to check for zero outputs, which happens for collections with no active strands *)
193            val checkForNoStrands = if #isArray spec            val checkForNoStrands = if #isGrid spec
194                  then []                  then []
195                  else [                  else [
196                      CL.mkComment["check for no output"],                      CL.mkComment["check for no output"],
# Line 207  Line 207 
207                  val dimSizes = setSizes(0, CL.mkInt 2)  (* nLengths is 2-element vector *)                  val dimSizes = setSizes(0, CL.mkInt 2)  (* nLengths is 2-element vector *)
208                  in                  in
209                    CL.mkComment["allocate nLengths nrrd"] ::                    CL.mkComment["allocate nLengths nrrd"] ::
210                    (if #isArray spec                    (if #isGrid spec
211                      then dimSizes ::                      then dimSizes ::
212                        List.tabulate (nAxes, fn i =>                        List.tabulate (nAxes, fn i =>
213                          setSizes(i+1, CL.mkSubscript(CL.mkIndirect(wrldV, "size"), mkInt(nAxes-i-1)))) @                          setSizes(i+1, CL.mkSubscript(CL.mkIndirect(wrldV, "_size"), mkInt(nAxes-i-1)))) @
214                        [U.maybeAlloc (env, nLengthsV, Nrrd.tyToEnum Nrrd.TypeInt, nAxes+1)]                        [U.maybeAlloc (env, nLengthsV, Nrrd.tyToEnum Nrrd.TypeInt, nAxes+1)]
215                      else [                      else [
216                          dimSizes, setSizes(1, numStableV),                          dimSizes, setSizes(1, numStableV),
# Line 251  Line 251 
251                          CL.mkAssign(CL.mkUnOp(CL.%*, CL.mkPostOp(ipV, CL.^++)), nV),                          CL.mkAssign(CL.mkUnOp(CL.%*, CL.mkPostOp(ipV, CL.^++)), nV),
252                          CL.S_Exp(CL.mkAssignOp(offsetV, CL.+=, nV))                          CL.S_Exp(CL.mkAssignOp(offsetV, CL.+=, nV))
253                        ]                        ]
254                  val copyStm = if #isArray spec                  val copyStm = if #isGrid spec
255                        then copyBlk                        then copyBlk
256                        else if #snapshot spec                        else if #snapshot spec
257                          then ifActive copyBlk                          then ifActive copyBlk
# Line 269  Line 269 
269                        CL.mkReinterpretCast(CL.charPtr, CL.mkIndirect(nDataV, "data")))                        CL.mkReinterpretCast(CL.charPtr, CL.mkIndirect(nDataV, "data")))
270                  val copyStm = CL.mkAssign(cpV, seqCopy(                  val copyStm = CL.mkAssign(cpV, seqCopy(
271                        CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof(elemCTy)), cpV, stateVar name))                        CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof(elemCTy)), cpV, stateVar name))
272                  val copyStm = if #isArray spec                  val copyStm = if #isGrid spec
273                         then copyStm                         then copyStm
274                        else if #snapshot spec                        else if #snapshot spec
275                          then ifActive copyStm                          then ifActive copyStm
# Line 321  Line 321 
321                            else [dcl, setSizes(0, mkInt nElems)]                            else [dcl, setSizes(0, mkInt nElems)]
322                        end                        end
323                  in                  in
324                    if #isArray spec                    if #isGrid spec
325                      then dimSizes @                      then dimSizes @
326                        List.tabulate (nAxes, fn i =>                        List.tabulate (nAxes, fn i =>
327                          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))))
328                      else let                      else let
329                        val cntStm = CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))                        val cntStm = CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))
330                        val lpBody = if snapshot                        val lpBody = if snapshot
# Line 337  Line 337 
337                        end                        end
338                  end                  end
339          (* code to check for no data to output (i.e., no active strands) *)          (* code to check for no data to output (i.e., no active strands) *)
340            val checkForEmpty = if (#isArray spec)            val checkForEmpty = if (#isGrid spec)
341                  then []                  then []
342                  else [                  else [
343                      CL.mkComment["check for empty output"],                      CL.mkComment["check for empty output"],
# Line 361  Line 361 
361                          CL.mkExpStm(CL.mkAssignOp(cpV, CL.+=,                          CL.mkExpStm(CL.mkAssignOp(cpV, CL.+=,
362                            CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof elemCTy)))                            CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof elemCTy)))
363                        ]                        ]
364                  val copyStm = if #isArray spec                  val copyStm = if #isGrid spec
365                         then copyBlk                         then copyBlk
366                        else if snapshot                        else if snapshot
367                          then ifActive copyBlk                          then ifActive copyBlk

Legend:
Removed from v.3957  
changed lines
  Added in v.3958

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