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

SCM Repository

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

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

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

revision 2662, Fri May 30 16:55:05 2014 UTC revision 2664, Sun Jun 1 16:18:37 2014 UTC
# Line 47  Line 47 
47      structure Op = IL.Op      structure Op = IL.Op
48      structure Ty = IL.Ty      structure Ty = IL.Ty
49      structure V = IL.Var      structure V = IL.Var
50      (*structure gT=getTypes  
     structure Opr=OprToClang  
  *)  
51      datatype var = datatype CLang.typed_var      datatype var = datatype CLang.typed_var
52      type env = CLang.typed_var TreeIL.Var.Map.map      type env = CLang.typed_var TreeIL.Var.Map.map
53    
# Line 148  Line 146 
146              | (Op.IMul , [a, b]) => CL.mkBinOp(a, CL.#*, b)              | (Op.IMul , [a, b]) => CL.mkBinOp(a, CL.#*, b)
147              | (Op.IDiv , [a, b]) => CL.mkBinOp(a, CL.#/, b)              | (Op.IDiv , [a, b]) => CL.mkBinOp(a, CL.#/, b)
148              | (Op.INeg , [a]) => CL.mkUnOp(CL.%-, a)              | (Op.INeg , [a]) => CL.mkUnOp(CL.%-, a)
   
             (*Scalar operators*)  
149              | (Op.addSca,[a,b])      => CL.mkBinOp(a, CL.#+, b)              | (Op.addSca,[a,b])      => CL.mkBinOp(a, CL.#+, b)
150              | (Op.subSca, [a, b])    => CL.mkBinOp(a, CL.#-, b)              | (Op.subSca, [a, b])    => CL.mkBinOp(a, CL.#-, b)
151              | (Op.prodSca, [a, b])   => CL.mkBinOp(a, CL.#*, b)              | (Op.prodSca, [a, b])   => CL.mkBinOp(a, CL.#*, b)
152              | (Op.divSca, [a, b])    => CL.mkBinOp(a, CL.#/, b)              | (Op.divSca, [a, b])    => CL.mkBinOp(a, CL.#/, b)
   
             (*Do the same here? *)  
153              | (Op.subVec n,[a,b])    =>  CL.mkBinOp(a, CL.#-, b)              | (Op.subVec n,[a,b])    =>  CL.mkBinOp(a, CL.#-, b)
154              | (Op.addVec n,[a,b])    => CL.mkBinOp(a, CL.#+, b)              | (Op.addVec n,[a,b])    => CL.mkBinOp(a, CL.#+, b)
155                | (Op.prodVec n,[a, b])   => CL.mkBinOp(a, CL.#*, b)
156    
157              (*Vector operators*)               (*Vector functions*)
158              | (Op.prodVec 2, args)   => CL.E_Apply(N.prod 2, args)              | (Op.prodScaV d,args)   => CL.E_Apply(N.NameScaV d, args)
159              | (Op.prodVec 3, args)   => CL.E_Apply(N.prod 3, args)              | (Op.sumVec d,args)     => CL.E_Apply(N.NameSumV d, args)
             | (Op.prodVec 4, args)   => CL.E_Apply(N.prod 4, args)  
             | (Op.prodVec _, _)      => CL.E_Apply(N.prod 4, args)  
             | (Op.prodScaV 2,args)   => CL.E_Apply(N.scale 2, args)  
             | (Op.prodScaV 3,args)   => CL.E_Apply(N.scale 3, args)  
             | (Op.prodScaV 4,args)   => CL.E_Apply(N.scale 4, args)  
             | (Op.prodScaV _,_)      =>  CL.E_Apply(N.scale 4, args)  
             | (Op.sumVec 2,args)     => CL.E_Apply(N.sum 2, args)  
             | (Op.sumVec 3,args)     => CL.E_Apply(N.sum 3, args)  
             | (Op.sumVec 4,args)     => CL.E_Apply(N.sum 4, args)  
             | (Op.sumVec _,_)        => CL.E_Apply(N.sum 4, args)  
160              | (Op.IndexTensor(_,_, Ty.indexTy indexAt, resultTy),args)=> CL.E_Apply(N.indexVec(2,indexAt) ,args)              | (Op.IndexTensor(_,_, Ty.indexTy indexAt, resultTy),args)=> CL.E_Apply(N.indexVec(2,indexAt) ,args)
161    
162    
# Line 267  Line 252 
252                  ])                  ])
253            (* end case *))            (* end case *))
254    
255      fun trExp (env, e) = (case e      fun trExp (env, e) = let
256             val CLExp=(case e
257             of IL.E_State x => VarToC.rvalueStateVar x             of IL.E_State x => VarToC.rvalueStateVar x
258              | IL.E_Var x => VarToC.rvalueVar (env, x)              | IL.E_Var x => VarToC.rvalueVar (env, x)
259              | IL.E_Lit(Literal.Int n) => CL.mkIntTy(n, !N.gIntTy)              | IL.E_Lit(Literal.Int n) => CL.mkIntTy(n, !N.gIntTy)
# Line 276  Line 262 
262              | IL.E_Lit(Literal.String s) => CL.mkStr s              | IL.E_Lit(Literal.String s) => CL.mkStr s
263              | IL.E_Op(rator, args) => trOp (rator, trExps(env, args))              | IL.E_Op(rator, args) => trOp (rator, trExps(env, args))
264              | IL.E_Apply(f, args) => trApply(f, trExps(env, args))              | IL.E_Apply(f, args) => trApply(f, trExps(env, args))
265              | 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.NameConsVec n, trExps(env, args))
266              | IL.E_Cons(Ty.TensorTy e, args) => CL.mkApply(N.tenTy e,trExps(env, args))              | IL.E_Cons(Ty.TensorTy e, args) => CL.mkApply(N.tenTy e,trExps(env, args))
267              | 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"])
268              | IL.E_mkVec( n, orig,_,args) =>              | IL.E_mkVec( _, orig,_,args) =>
269                            CL.mkApply(N.mkVecfn(n,orig), trExps(env, args))                            CL.mkApply(N.NameMkVec orig, trExps(env, args))
270              | IL.E_LoadVec(n, orig, _,arg) =>              | IL.E_LoadVec(n, orig, _,arg) =>
271                      CL.mkApply(N.ldVecfn(n, orig), trExps(env, [arg]))                      CL.mkApply(N.NameLdVec(n, orig), trExps(env, [arg]))
   
                     (*  
             | IL.E_FillVec(n,orig,_,arg)  =>  
                     CL.mkApply(N.ldVecfn(n, orig), trExps(env, [arg]))  
             | IL.E_SliceVec(n,orig,_,arg)  =>  
                     CL.mkApply(N.ldVecfn(n, orig), trExps(env, [arg]))  
   
                     *)  
272            (* end case *))            (* end case *))
273            val _=print(CL.expToString CLExp)
274            in
275                CLExp
276            end
277    
278    
279      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps
280    

Legend:
Removed from v.2662  
changed lines
  Added in v.2664

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