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 1714, Sat Mar 10 00:00:50 2012 UTC revision 1715, Sat Mar 10 14:42:07 2012 UTC
# Line 67  Line 67 
67      val sizesV = CL.mkVar "sizes"      val sizesV = CL.mkVar "sizes"
68      val iV = CL.mkVar "i"      val iV = CL.mkVar "i"
69      val nV = CL.mkVar "n"      val nV = CL.mkVar "n"
70      val pV = CL.mkVar "p"      val cpV = CL.mkVar "cp"
71        val ipV = CL.mkVar "ip"
72      val offsetV = CL.mkVar "offset"      val offsetV = CL.mkVar "offset"
73      val dataV = CL.mkVar "data"      val dataV = CL.mkVar "data"
74      val lengthsV = CL.mkVar "lengths"      val lengthsV = CL.mkVar "lengths"
# Line 144  Line 145 
145            val nElems = List.foldl Int.* 1 dims            val nElems = List.foldl Int.* 1 dims
146            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))
147          (* declarations *)          (* declarations *)
148            val decls = [            val sizesDecl = CL.mkDecl(CL.T_Array(sizeTy, SOME(nDims+nAxes)), "sizes", NONE)
                   CL.mkDecl(CL.T_Array(sizeTy, SOME(nDims+nAxes)), "sizes", NONE),  
                   CL.mkDecl(CL.charPtr, "p", NONE)  
                 ]  
149          (* count number of elements (and stable strands) *)          (* count number of elements (and stable strands) *)
150            val countElems = let            val countElems = let
151                  val nElemsInit = CL.mkAssign(numElemsV, CL.mkInt 0)                  val nElemsInit = CL.mkDeclInit(CL.uint32, "numElems", CL.mkInt 0)
152                  val cntElems = CL.S_Exp(CL.mkAssignOp(numElemsV, CL.+=, seqLength(stateVar name)))                  val cntElems = CL.S_Exp(CL.mkAssignOp(numElemsV, CL.+=, seqLength(stateVar name)))
153                  in                  in
154                    if isArray                    if isArray
# Line 160  Line 158 
158                        ]                        ]
159                      else [                      else [
160                          CL.mkComment["count number of output elements and stable strands"],                          CL.mkComment["count number of output elements and stable strands"],
161                          CL.mkAssign(numStableV, CL.mkInt 0), nElemsInit,                          CL.mkDeclInit(CL.uint32, "numStable", CL.mkInt 0),
162                            nElemsInit,
163                          forStrands(ifStable(CL.mkBlock[cntElems, CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))]))                          forStrands(ifStable(CL.mkBlock[cntElems, CL.S_Exp(CL.mkPostOp(numStableV, CL.^++))]))
164                        ]                        ]
165                  end                  end
# Line 192  Line 191 
191                  end                  end
192          (* generate the lengths copy code *)          (* generate the lengths copy code *)
193            val copyLengths = let            val copyLengths = let
194                  val pInit = CL.mkAssign(pV,                  val pInit = CL.mkDeclInit(CL.T_Ptr CL.uint32, "ip",
195                        CL.mkCast(CL.T_Ptr(CL.uint32), CL.mkIndirect(lengthsV, "data")))                        CL.mkCast(CL.T_Ptr(CL.uint32), CL.mkIndirect(lengthsV, "data")))
196                  val offsetDecl = CL.mkDecl(CL.uint32, "offset", SOME(CL.I_Exp(CL.mkInt 0)))                  val offsetDecl = CL.mkDeclInit(CL.uint32, "offset", CL.mkInt 0)
197                  val copyBlk = CL.mkBlock[                  val copyBlk = CL.mkBlock[
198                          CL.mkDecl(CL.uint32, "n", SOME(CL.I_Exp(seqLength(stateVar name)))),                          CL.mkDeclInit(CL.uint32, "n", seqLength(stateVar name)),
199                          CL.mkAssign(CL.mkPostOp(pV, CL.^++), offsetV),                          CL.mkAssign(CL.mkUnOp(CL.%*, CL.mkPostOp(ipV, CL.^++)), offsetV),
200                          CL.mkAssign(CL.mkPostOp(pV, CL.^++), nV),                          CL.mkAssign(CL.mkUnOp(CL.%*, CL.mkPostOp(ipV, CL.^++)), nV),
201                          CL.S_Exp(CL.mkAssignOp(offsetV, CL.+=, nV))                          CL.S_Exp(CL.mkAssignOp(offsetV, CL.+=, nV))
202                        ]                        ]
203                  val copyStm = if isArray                  val copyStm = if isArray
204                        then copyBlk                        then copyBlk
205                        else ifStable copyBlk                        else ifStable copyBlk
206                  in                  in
207                    [CL.mkComment["initialize lengths nrrd"], pInit, offsetDecl, copyStm]                    [CL.mkComment["initialize data nrrd"], pInit, offsetDecl, forStrands copyStm]
208                  end                  end
209          (* generate the data copy code *)          (* generate the data copy code *)
210            val copyData = let            val copyData = let
211                  val pInit = CL.mkAssign(pV, CL.mkCast(CL.charPtr, CL.mkIndirect(dataV, "data")))                  val pInit = CL.mkDeclInit(CL.charPtr, "cp",
212                  val copyStm = CL.mkAssign(pV, seqCopy(                        CL.mkCast(CL.charPtr, CL.mkIndirect(dataV, "data")))
213                        CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof(elemCTy)), pV, stateVar name))                  val copyStm = CL.mkAssign(cpV, seqCopy(
214                          CL.mkBinOp(mkInt nElems, CL.#*, CL.mkSizeof(elemCTy)), cpV, stateVar name))
215                  val copyStm = if isArray                  val copyStm = if isArray
216                        then copyStm                        then copyStm
217                        else ifStable copyStm                        else ifStable copyStm
# Line 220  Line 220 
220                  end                  end
221          (* the function body *)          (* the function body *)
222            val stms =            val stms =
223                  decls @                  sizesDecl ::
224                  countElems @                  countElems @
225                  lengthsNrrd @                  lengthsNrrd @
226                  dataNrrd @                  dataNrrd @
# Line 253  Line 253 
253                        List.tabulate (nAxes, fn i =>                        List.tabulate (nAxes, fn i =>
254                          setSizes(nDims+i, CL.mkSubscript(CL.mkIndirect(wrldV, "sizes"), mkInt(nAxes-i-1))))                          setSizes(nDims+i, CL.mkSubscript(CL.mkIndirect(wrldV, "sizes"), mkInt(nAxes-i-1))))
255                      else                      else
256                        CL.mkDecl(sizeTy, "numStable", SOME(CL.I_Exp(mkInt 0))) ::                        CL.mkDeclInit(sizeTy, "numStable", mkInt 0) ::
257                        forStrands (ifStable(CL.S_Exp(CL.mkPostOp(numStableV, CL.^++)))) ::                        forStrands (ifStable(CL.S_Exp(CL.mkPostOp(numStableV, CL.^++)))) ::
258                        dimSizes @ [setSizes(nDims, numStableV)]                        dimSizes @ [setSizes(nDims, numStableV)]
259                  end                  end
260          (* generate the copy code *)          (* generate the copy code *)
261            val copyCode = let            val copyCode = let
262                  val pDecl = CL.mkDecl(CL.charPtr, "p", SOME(CL.I_Exp(                  val pDecl = CL.mkDeclInit(CL.charPtr, "cp",
263                          CL.mkCast(CL.charPtr, CL.mkIndirect(dataV, "data")))))                        CL.mkCast(CL.charPtr, CL.mkIndirect(dataV, "data")))
264                  val copyBlk = CL.mkBlock[                  val copyBlk = CL.mkBlock[
265                          CL.mkCall("memcpy", [                          CL.mkCall("memcpy", [
266                              pV,                              cpV,
267                              CL.mkUnOp(CL.%&, stateVar name),                              CL.mkUnOp(CL.%&, stateVar name),
268                              CL.mkBinOp(mkInt nDims, CL.#*, CL.mkSizeof elemCTy)                              CL.mkBinOp(mkInt nDims, CL.#*, CL.mkSizeof elemCTy)
269                            ]),                            ]),
270                          CL.mkExpStm(CL.mkAssignOp(pV, CL.+=, CL.mkSizeof elemCTy))                          CL.mkExpStm(CL.mkAssignOp(cpV, CL.+=, CL.mkSizeof elemCTy))
271                        ]                        ]
272                  val copyStm = if isArray                  val copyStm = if isArray
273                        then copyBlk                        then copyBlk

Legend:
Removed from v.1714  
changed lines
  Added in v.1715

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