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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/cl-target/tree-to-cl.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/cl-target/tree-to-cl.sml

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

revision 1663, Tue Nov 29 09:48:33 2011 UTC revision 1664, Tue Nov 29 10:43:54 2011 UTC
# Line 59  Line 59 
59              | Ty.TensorTy[n, m] => CL.T_Named(RN.matTy(n,m))              | Ty.TensorTy[n, m] => CL.T_Named(RN.matTy(n,m))
60              | Ty.SeqTy(Ty.IntTy, n) => CL.T_Named(RN.ivecTy n)              | Ty.SeqTy(Ty.IntTy, n) => CL.T_Named(RN.ivecTy n)
61              | Ty.SeqTy(Ty.TensorTy[] , n) => CL.T_Named(RN.vecTy n)              | Ty.SeqTy(Ty.TensorTy[] , n) => CL.T_Named(RN.vecTy n)
62                | Ty.SeqTy(ty, n) => CL.T_Array(trType ty, SOME n)
63              | Ty.AddrTy(ImageInfo.ImgInfo{ty=(_, rTy), ...}) => imageDataPtrTy rTy              | Ty.AddrTy(ImageInfo.ImgInfo{ty=(_, rTy), ...}) => imageDataPtrTy rTy
64              | Ty.ImageTy(ImageInfo.ImgInfo{dim, ...}) => CL.T_Named(RN.imageTy dim)              | Ty.ImageTy(ImageInfo.ImgInfo{dim, ...}) => CL.T_Named(RN.imageTy dim)
65              | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])              | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])
# Line 103  Line 104 
104    
105    (* matrix indexing *)    (* matrix indexing *)
106      fun matIndex (m, ix, jx) =      fun matIndex (m, ix, jx) =
107            CL.mkSubscript(CL.mkVar(concat["s",ix]), jx)                CL.mkSelect(CL.mkSubscript(m, ix), concat["s",jx])
108    
109    (* translate a state-variable use *)    (* translate a state-variable use *)
110      fun trStateVar (IL.SV{name, ...}) = CL.mkIndirect(CL.mkVar "selfIn", name)      fun trStateVar (IL.SV{name, ...}) = CL.mkIndirect(CL.mkVar "selfIn", name)
# Line 303  Line 304 
304                  val (m, stms) = expToVar (env, CL.T_Named(RN.matTy(2,2)), "m", m)                  val (m, stms) = expToVar (env, CL.T_Named(RN.matTy(2,2)), "m", m)
305                  in                  in
306                    stms @ [CL.mkCall(RN.evals2x2, [                    stms @ [CL.mkCall(RN.evals2x2, [
307                        lhs,                        CL.mkUnOp(CL.%&,lhs),
308                        matIndex (m,  "0", CL.mkInt 0),                        matIndex (m, CL.mkInt 0,  "0"),
309                        matIndex (m,"0", CL.mkInt 1),                        matIndex (m, CL.mkInt 0, "1"),
310                        matIndex (m, "1", CL.mkInt 1)                        matIndex (m, CL.mkInt 1, "1")
311                      ])]                      ])]
312                  end                  end
313              | IL.E_Op(Op.EigenVals3x3, [m]) => let              | IL.E_Op(Op.EigenVals3x3, [m]) => let
314                  val (m, stms) = expToVar (env, CL.T_Named(RN.matTy(3,3)), "m", m)                  val (m, stms) = expToVar (env, CL.T_Named(RN.matTy(3,3)), "m", m)
315                  in                  in
316                    stms @ [CL.mkCall(RN.evals3x3, [                    stms @ [CL.mkCall(RN.evals3x3, [
317                        lhs,                        CL.mkUnOp(CL.%&,lhs),
318                        matIndex (m, "0", CL.mkInt 0),                        matIndex (m, CL.mkInt 0, "0"),
319                        matIndex (m, "0", CL.mkInt 1),                        matIndex (m, CL.mkInt 0, "1"),
320                        matIndex (m,"0", CL.mkInt 2),                        matIndex (m, CL.mkInt 0, "2"),
321                        matIndex (m, "1", CL.mkInt 1),                        matIndex (m, CL.mkInt 1, "1"),
322                        matIndex (m, "1", CL.mkInt 2),                        matIndex (m, CL.mkInt 1, "2"),
323                        matIndex (m, "2", CL.mkInt 2)                        matIndex (m, CL.mkInt 2, "2")
324                      ])]                      ])]
325                  end                  end
326    
# Line 341  Line 342 
342    
343      fun trAssign (env, lhs, rhs) = trSet (env, trLHSVar (env, lhs), rhs)      fun trAssign (env, lhs, rhs) = trSet (env, trLHSVar (env, lhs), rhs)
344    
345    
346        fun trMultiAssign (env, lhs, IL.E_Op(rator, args)) = (case (lhs, rator, args)
347               of ([vals, vecs], Op.EigenVecs2x2, [m]) => let
348                    val (m, stms) = expToVar (env, CL.T_Named(RN.matTy(2,2)), "m", m)
349                    in
350                      stms @ [CL.mkCall(RN.evecs2x2, [
351                          CL.mkUnOp(CL.%&,vals), vecs,
352                          matIndex (m, CL.mkInt 0, "0"),
353                          matIndex (m, CL.mkInt 0, "1"),
354                          matIndex (m, CL.mkInt 1, "1")
355                        ])]
356                    end
357                | ([vals, vecs], Op.EigenVecs3x3, [m]) => let
358                    val (m, stms) = expToVar (env, CL.T_Named(RN.matTy(3,3)), "m", m)
359                    in
360                      stms @ [CL.mkCall(RN.evecs3x3, [
361                          CL.mkUnOp(CL.%&,vals), vecs,
362                          matIndex (m, CL.mkInt 0, "0"),
363                          matIndex (m, CL.mkInt 0, "1"),
364                          matIndex (m, CL.mkInt 0, "2"),
365                          matIndex (m, CL.mkInt 1, "1"),
366                          matIndex (m, CL.mkInt 1, "2"),
367                          matIndex (m, CL.mkInt 2, "2")
368                        ])]
369                    end
370                | _ => raise Fail "bogus multi-assignment"
371              (* end case *))
372          | trMultiAssign (env, lhs, rhs) = raise Fail "bogus multi-assignment"
373    
374      fun trLocals (env : env, locals) =      fun trLocals (env : env, locals) =
375            List.foldl            List.foldl
376              (fn (x, env) => V.Map.insert(env, x, V(trType(V.ty x), V.name x)))              (fn (x, env) => V.Map.insert(env, x, V(trType(V.ty x), V.name x)))
# Line 360  Line 390 
390            fun trStmt (env, stm) = (case stm            fun trStmt (env, stm) = (case stm
391               of IL.S_Comment text => [CL.mkComment text]               of IL.S_Comment text => [CL.mkComment text]
392                | IL.S_Assign([x], exp) => trAssign (env, x, exp)                | IL.S_Assign([x], exp) => trAssign (env, x, exp)
393                  | IL.S_Assign(xs, exp) =>
394                          trMultiAssign (env, List.map (fn x => trVar (env, x)) xs, exp)
395                | IL.S_IfThen(cond, thenBlk) =>                | IL.S_IfThen(cond, thenBlk) =>
396                    [CL.mkIfThen(trExp(env, cond), trBlk(env, thenBlk))]                    [CL.mkIfThen(trExp(env, cond), trBlk(env, thenBlk))]
397                | IL.S_IfThenElse(cond, thenBlk, elseBlk) =>                | IL.S_IfThenElse(cond, thenBlk, elseBlk) =>

Legend:
Removed from v.1663  
changed lines
  Added in v.1664

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