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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/mid-to-low/mid-to-low.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/mid-to-low/mid-to-low.sml

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

revision 467, Fri Oct 29 13:34:08 2010 UTC revision 511, Tue Feb 8 17:01:43 2011 UTC
# Line 81  Line 81 
81                  end                  end
82            (* end case *))            (* end case *))
83    
84        fun imul (r, a, b) = (r, DstIL.OP(DstOp.Mul DstTy.intTy, [a, b]))
85        fun iadd (r, a, b) = (r, DstIL.OP(DstOp.Add DstTy.intTy, [a, b]))
86    
87    (* expand the EvalKernel operations into vector operations.  The parameters    (* expand the EvalKernel operations into vector operations.  The parameters
88     * are     * are
89     *    result  -- the lhs variable to store the result     *    result  -- the lhs variable to store the result
# Line 178  Line 181 
181     *    szb     -- image-element size in bytes     *    szb     -- image-element size in bytes
182     *    N_i     -- size of ith axis in elements     *    N_i     -- size of ith axis in elements
183     *)     *)
184      fun expandVoxelAddress (result, info, indices) = raise Fail "unimplemented"      fun expandVoxelAddress (result, info, indices) = let
185              val ImageInfo.ImgInfo{ty=(d, rTy), sizes=_::sizes, ...} = info
186            (* generate the address computation code in reverse order *)
187              fun gen (d, [n], [ix]) = let
188                    val n' = DstIL.Var.new ("n" ^ Int.toString d, DstTy.intTy)
189                    val t = DstIL.Var.new ("t", DstTy.intTy)
190                    val code = [
191                            imul(t, n', ix),
192                            (n', DstIL.LIT(Literal.Int(IntInf.fromInt n)))
193                          ]
194                    in
195                      (t, code)
196                    end
197                | gen (d, n::ns, ix::ixs) = let
198                    val n' = DstIL.Var.new ("n" ^ Int.toString d, DstTy.intTy)
199                    val t1 = DstIL.Var.new ("t1", DstTy.intTy)
200                    val t2 = DstIL.Var.new ("t2", DstTy.intTy)
201                    val (t, code) = gen (d+1, ns, ixs)
202                    val code =
203                          imul(t2, n', t1) ::
204                          (n', DstIL.LIT(Literal.Int(IntInf.fromInt n))) ::
205                          iadd(t1, ix, t) :: code
206                    in
207                      (t2, code)
208                    end
209              val voxSzb = List.foldl Int.* (RawTypes.sizeb rTy) d
210              val (offset, code) = gen (0, voxSzb :: sizes, indices)
211              val base = DstIL.Var.new ("imgBaseAddr", DstTy.AddrTy)
212              val code = (result, DstIL.OP(DstOp.Add DstTy.AddrTy, [base, offset])) ::
213                    (base, DstIL.OP(DstOp.ImageAddress info, [])) ::
214                    code
215              in
216                List.rev code
217              end
218    
219      fun expandOp (env, y, rator, args) = let      fun expandOp (env, y, rator, args) = let
220            val args' = renameList(env, args)            val args' = renameList(env, args)
# Line 253  Line 289 
289          val expand = expand          val expand = expand
290        end)        end)
291    
292      fun translate (SrcIL.Program{globals, globalInit, actors}) = let      fun translate (SrcIL.Program{globals, globalInit, strands}) = let
293            val env = VTbl.mkTable (256, Fail "env")            val env = VTbl.mkTable (256, Fail "env")
294            fun transMethod (SrcIL.Method{name, stateIn, stateOut, body}) =            fun transMethod (SrcIL.Method{name, stateIn, stateOut, body}) =
295                  DstIL.Method{                  DstIL.Method{
# Line 262  Line 298 
298                      stateOut = renameList (env, stateOut),                      stateOut = renameList (env, stateOut),
299                      body = Trans.translate (env, body)                      body = Trans.translate (env, body)
300                    }                    }
301            fun transActor (SrcIL.Actor{name, params, state, stateInit, methods}) =            fun transStrand (SrcIL.Strand{name, params, state, stateInit, methods}) =
302                  DstIL.Actor{                  DstIL.Strand{
303                      name = name,                      name = name,
304                      params = renameList (env, params),                      params = renameList (env, params),
305                      state = renameList (env, state),                      state = renameList (env, state),
# Line 274  Line 310 
310              DstIL.Program{              DstIL.Program{
311                  globals = renameList (env, globals),                  globals = renameList (env, globals),
312                  globalInit = Trans.translate (env, globalInit),                  globalInit = Trans.translate (env, globalInit),
313                  actors = List.map transActor actors                  strands = List.map transStrand strands
314                }                }
315            end            end
316    

Legend:
Removed from v.467  
changed lines
  Added in v.511

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