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

SCM Repository

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

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

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

revision 1690, Wed Jan 25 21:09:26 2012 UTC revision 1691, Thu Jan 26 19:36:51 2012 UTC
# Line 55  Line 55 
55    (* integer literal expression *)    (* integer literal expression *)
56      fun intExp (i : int) = CL.mkInt(IntInf.fromInt i)      fun intExp (i : int) = CL.mkInt(IntInf.fromInt i)
57    
58        fun addrOf e = CL.mkUnOp(CL.%&, e)
59    
60    (* translate TreeIL types to CLang types *)    (* translate TreeIL types to CLang types *)
61      fun trType ty = (case ty      fun trType ty = (case ty
62             of Ty.BoolTy => CLang.T_Named "bool"             of Ty.BoolTy => CLang.T_Named "bool"
# Line 65  Line 67 
67              | Ty.TensorTy[n, m] => CL.T_Named(N.matTy(n,m))              | Ty.TensorTy[n, m] => CL.T_Named(N.matTy(n,m))
68              | Ty.SeqTy(Ty.IntTy, n) => CL.T_Named(N.ivecTy n)              | Ty.SeqTy(Ty.IntTy, n) => CL.T_Named(N.ivecTy n)
69              | Ty.SeqTy(ty, n) => CL.T_Array(trType ty, SOME n)              | Ty.SeqTy(ty, n) => CL.T_Array(trType ty, SOME n)
70              | Ty.DynSeqTy _ => CL.T_Named N.dynSeqTy              | Ty.DynSeqTy _ => CL.T_Ptr(CL.T_Named N.dynSeqTy)
71              | Ty.AddrTy(ImageInfo.ImgInfo{ty=(_, rTy), ...}) => CL.T_Ptr(CL.T_Num rTy)              | Ty.AddrTy(ImageInfo.ImgInfo{ty=(_, rTy), ...}) => CL.T_Ptr(CL.T_Num rTy)
72              | Ty.ImageTy(ImageInfo.ImgInfo{dim, ...}) => CL.T_Ptr(CL.T_Named(N.imageTy dim))              | Ty.ImageTy(ImageInfo.ImgInfo{dim, ...}) => CL.T_Ptr(CL.T_Named(N.imageTy dim))
73              | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])              | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])
# Line 191  Line 193 
193              | (Op.Subscript(Ty.TensorTy[_,_]), [m, ix, jx]) => matIndex (m, ix, jx)              | (Op.Subscript(Ty.TensorTy[_,_]), [m, ix, jx]) => matIndex (m, ix, jx)
194              | (Op.Subscript ty, t::(ixs as _::_)) =>              | (Op.Subscript ty, t::(ixs as _::_)) =>
195                  raise Fail(concat["Subscript<", Ty.toString ty, "> unsupported"])                  raise Fail(concat["Subscript<", Ty.toString ty, "> unsupported"])
196              | (Op.MkDynamic(ty, n), [seq]) => CL.mkApply("DYNSEQ_MK(", [              | (Op.MkDynamic(ty, n), [seq]) => CL.mkApply("Diderot_DynSeqMk", [
197                    CL.mkSizeof(trType ty), CL.mkInt(IntInf.fromInt n), seq                    CL.mkSizeof(trType ty), CL.mkInt(IntInf.fromInt n),
198                      addrOf (CL.mkSubscript(seq, intExp 0))
199                  ])                  ])
200              | (Op.Append ty, [seq, x]) => CL.mkApply("DYNSEQ_APPEND(", [              | (Op.Append ty, [seq, x]) => CL.mkApply("Diderot_DynSeqAppend", [
201                    CL.mkSizeof(trType ty), seq, x                    CL.mkSizeof(trType ty), seq, addrOf x
202                  ])                  ])
203              | (Op.Prepend ty, [x, seq]) => CL.mkApply("DYNSEQ_PREPEND(", [              | (Op.Prepend ty, [x, seq]) => CL.mkApply("Diderot_DynSeqPrepend", [
204                    CL.mkSizeof(trType ty), x, seq                    CL.mkSizeof(trType ty), addrOf x, seq
205                  ])                  ])
206              | (Op.Concat ty, [seq1, seq2]) => CL.mkApply("DYNSEQ_CONCAT(", [              | (Op.Concat ty, [seq1, seq2]) => CL.mkApply("Diderot_DynSeqConcat", [
207                    CL.mkSizeof(trType ty), seq1, seq2                    CL.mkSizeof(trType ty), seq1, seq2
208                  ])                  ])
209              | (Op.Ceiling d, args) => CL.mkApply(N.addTySuffix("ceil", d), args)              | (Op.Ceiling d, args) => CL.mkApply(N.addTySuffix("ceil", d), args)
# Line 253  Line 256 
256              | IL.E_Op(rator, args) => trOp (rator, trExps(env, args))              | IL.E_Op(rator, args) => trOp (rator, trExps(env, args))
257              | IL.E_Apply(f, args) => trApply(f, trExps(env, args))              | IL.E_Apply(f, args) => trApply(f, trExps(env, args))
258              | IL.E_Cons(Ty.TensorTy[n], args) => CL.mkApply(N.mkVec n, trExps(env, args))              | IL.E_Cons(Ty.TensorTy[n], args) => CL.mkApply(N.mkVec n, trExps(env, args))
             | IL.E_Cons(Ty.SeqTy(ty, n), args) => CL.mkApply("Diderot_MkSeq",  
                 CL.mkSizeof(trType ty) :: CL.mkInt(IntInf.fromInt n) :: trExps(env, args))  
259              | IL.E_Cons(ty, _) => raise Fail(concat["E_Cons(", Ty.toString ty, ", _) in expression"])              | IL.E_Cons(ty, _) => raise Fail(concat["E_Cons(", Ty.toString ty, ", _) in expression"])
260            (* end case *))            (* end case *))
261    
# Line 414  Line 415 
415                  in                  in
416                    doRows (0, trExps(env, args))                    doRows (0, trExps(env, args))
417                  end                  end
418                | IL.E_Cons(Ty.SeqTy(ty, n), args) => let
419                    fun doAssign (_, []) = []
420                      | doAssign (i, arg::args) =
421                          CL.mkAssign(CL.mkSubscript(lhs, intExp i), arg) :: doAssign(i+1, args)
422                    in
423                      doAssign (0, trExps(env, args))
424                    end
425              | IL.E_Var x => (case IL.Var.ty x              | IL.E_Var x => (case IL.Var.ty x
426                   of Ty.TensorTy[n,m] => [CL.mkCall(N.copyMat(n,m), [lhs, VarToC.rvalueVar(env, x)])]                   of Ty.TensorTy[n,m] => [CL.mkCall(N.copyMat(n,m), [lhs, VarToC.rvalueVar(env, x)])]
427                    | _ => [CL.mkAssign(lhs, VarToC.rvalueVar(env, x))]                    | _ => [CL.mkAssign(lhs, VarToC.rvalueVar(env, x))]
# Line 489  Line 497 
497                        in [                        in [
498                          CL.mkDecl(                          CL.mkDecl(
499                            CL.T_Named N.statusTy, sts,                            CL.T_Named N.statusTy, sts,
500                            SOME(CL.I_Exp(CL.E_Apply(loadFn, [name, CL.mkUnOp(CL.%&, lhs)]))))                            SOME(CL.I_Exp(CL.E_Apply(loadFn, [name, addrOf lhs]))))
501                        ] end)                        ] end)
502                    | IL.S_Input(lhs, name, desc, optDflt) => let                    | IL.S_Input(lhs, name, desc, optDflt) => let
503                        val inputFn = N.input(V.ty lhs)                        val inputFn = N.input(V.ty lhs)
# Line 502  Line 510 
510                                CL.mkVar "opts",                                CL.mkVar "opts",
511                                CL.mkStr name,                                CL.mkStr name,
512                                CL.mkStr desc,                                CL.mkStr desc,
513                                CL.mkUnOp(CL.%&, lhs),                                addrOf lhs,
514                                CL.mkBool hasDflt])]                                CL.mkBool hasDflt])]
515                        in                        in
516                          initCode @ code                          initCode @ code

Legend:
Removed from v.1690  
changed lines
  Added in v.1691

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