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

SCM Repository

[diderot] Diff of /branches/vis12-cl/src/compiler/c-util/tree-to-c.sml
ViewVC logotype

Diff of /branches/vis12-cl/src/compiler/c-util/tree-to-c.sml

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

revision 3094, Wed Mar 18 04:45:43 2015 UTC revision 3095, Wed Mar 18 13:12:57 2015 UTC
# Line 132  Line 132 
132    
133    (* vector indexing support.  Arguments are: vector, arity, index *)    (* vector indexing support.  Arguments are: vector, arity, index *)
134      fun ivecIndex (v, n, ix) = let      fun ivecIndex (v, n, ix) = let
135            val e1 = CL.mkCast(CL.T_Named(CTyN.iunionTy n), v)            val e1 = CL.mkCast(CTyN.iunionTy n, v)
136            val e2 = CL.mkSelect(e1, "i")            val e2 = CL.mkSelect(e1, "i")
137            in            in
138              CL.mkSubscript(e2, intExp ix)              CL.mkSubscript(e2, intExp ix)
139            end            end
140    
141      fun vecIndex (v, n, ix) = let      fun vecIndex (v, n, ix) = let
142            val e1 = CL.mkCast(CL.T_Named(CTyN.unionTy n), v)            val e1 = CL.mkCast(CTyN.unionTy n, v)
143            val e2 = CL.mkSelect(e1, "r")            val e2 = CL.mkSelect(e1, "r")
144            in            in
145              CL.mkSubscript(e2, intExp ix)              CL.mkSubscript(e2, intExp ix)
# Line 205  Line 205 
205              | (Op.Index(Ty.SeqTy(Ty.IntTy, n), i), [a]) => ivecIndex (a, n, i)              | (Op.Index(Ty.SeqTy(Ty.IntTy, n), i), [a]) => ivecIndex (a, n, i)
206              | (Op.Index(Ty.TensorTy[n], i), [a]) => vecIndex (a, n, i)              | (Op.Index(Ty.TensorTy[n], i), [a]) => vecIndex (a, n, i)
207              | (Op.Subscript(Ty.SeqTy(Ty.IntTy, n)), [v, ix]) => let              | (Op.Subscript(Ty.SeqTy(Ty.IntTy, n)), [v, ix]) => let
208                  val unionTy = CL.T_Named(CTyN.iunionTy n)                  val vecExp = CL.mkSelect(CL.mkCast(CTyN.iunionTy n, v), "i")
                 val vecExp = CL.mkSelect(CL.mkCast(unionTy, v), "i")  
209                  in                  in
210                    CL.mkSubscript(vecExp, ix)                    CL.mkSubscript(vecExp, ix)
211                  end                  end
# Line 227  Line 226 
226                        CL.mkApply("Diderot_DynSeqAddr", [sizeOf, v, ix])))                        CL.mkApply("Diderot_DynSeqAddr", [sizeOf, v, ix])))
227                  end                  end
228              | (Op.Subscript(Ty.TensorTy[n]), [v, ix]) => let              | (Op.Subscript(Ty.TensorTy[n]), [v, ix]) => let
229                  val unionTy = CL.T_Named(CTyN.unionTy n)                  val vecExp = CL.mkSelect(CL.mkCast(CTyN.iunionTy n, v), "r")
                 val vecExp = CL.mkSelect(CL.mkCast(unionTy, v), "r")  
230                  in                  in
231                    CL.mkSubscript(vecExp, ix)                    CL.mkSubscript(vecExp, ix)
232                  end                  end
# Line 418  Line 416 
416                    then [CL.mkCall(MathN.colonMul(dd1, dd2), lhs :: trExps(env, args))]                    then [CL.mkCall(MathN.colonMul(dd1, dd2), lhs :: trExps(env, args))]
417                    else [CL.mkAssign(lhs, trExp(env, rhs))]                    else [CL.mkAssign(lhs, trExp(env, rhs))]
418              | IL.E_Op(Op.EigenVals2x2, [m]) => let              | IL.E_Op(Op.EigenVals2x2, [m]) => let
419                  val (m, stms) = expToVar (env, CL.T_Named(CTyN.matTy(2,2)), "m", m)                  val (m, stms) = expToVar (env, CTyN.matTy(2,2), "m", m)
420                  in                  in
421                    stms @ [CL.mkCall(MathN.evals2x2, [                    stms @ [CL.mkCall(MathN.evals2x2, [
422                        lhs,                        lhs,
# Line 428  Line 426 
426                      ])]                      ])]
427                  end                  end
428              | IL.E_Op(Op.EigenVals3x3, [m]) => let              | IL.E_Op(Op.EigenVals3x3, [m]) => let
429                  val (m, stms) = expToVar (env, CL.T_Named(CTyN.matTy(3,3)), "m", m)                  val (m, stms) = expToVar (env, CTyN.matTy(3,3), "m", m)
430                  in                  in
431                    stms @ [CL.mkCall(MathN.evals3x3, [                    stms @ [CL.mkCall(MathN.evals3x3, [
432                        lhs,                        lhs,
# Line 514  Line 512 
512    
513      fun trMultiAssign (env, lhs, IL.E_Op(rator, args)) = (case (lhs, rator, args)      fun trMultiAssign (env, lhs, IL.E_Op(rator, args)) = (case (lhs, rator, args)
514             of ([vals, vecs], Op.EigenVecs2x2, [m]) => let             of ([vals, vecs], Op.EigenVecs2x2, [m]) => let
515                  val (m, stms) = expToVar (env, CL.T_Named(CTyN.matTy(2,2)), "m", m)                  val (m, stms) = expToVar (env, CTyN.matTy(2,2), "m", m)
516                  in                  in
517                    stms @ [CL.mkCall(MathN.evecs2x2, [                    stms @ [CL.mkCall(MathN.evecs2x2, [
518                        vals, vecs,                        vals, vecs,
# Line 524  Line 522 
522                      ])]                      ])]
523                  end                  end
524              | ([vals, vecs], Op.EigenVecs3x3, [m]) => let              | ([vals, vecs], Op.EigenVecs3x3, [m]) => let
525                  val (m, stms) = expToVar (env, CL.T_Named(CTyN.matTy(3,3)), "m", m)                  val (m, stms) = expToVar (env, CTyN.matTy(3,3), "m", m)
526                  in                  in
527                    stms @ [CL.mkCall(MathN.evecs3x3, [                    stms @ [CL.mkCall(MathN.evecs3x3, [
528                        vals, vecs,                        vals, vecs,

Legend:
Removed from v.3094  
changed lines
  Added in v.3095

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