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 2829, Wed Nov 12 23:24:38 2014 UTC revision 2830, Tue Nov 18 17:48:05 2014 UTC
# Line 136  Line 136 
136    
137    (* vector indexing support.  Arguments are: vector, arity, index *)    (* vector indexing support.  Arguments are: vector, arity, index *)
138      fun ivecIndex (v, n, ix) = let      fun ivecIndex (v, n, ix) = let
139            val unionTy = CL.T_Named(concat["kittenunion", Int.toString n, !N.gIntSuffix, "_t"])            val unionTy = CL.T_Named(concat["Diderot_",!N.gIntSuffix,"union", Int.toString n, "_t"])
140            val e1 = CL.mkCast(unionTy, v)            val e1 = CL.mkCast(unionTy, v)
141            val e2 = CL.mkSelect(e1, "i")            val e2 = CL.mkSelect(e1, "i")
142            in            in
# Line 177  Line 177 
177              | (Op.subVec _ ,[a,b])    =>  CL.mkBinOp(a, CL.#-, b)              | (Op.subVec _ ,[a,b])    =>  CL.mkBinOp(a, CL.#-, b)
178              | (Op.addVec _ ,[a,b])    => CL.mkBinOp(a, CL.#+, b)              | (Op.addVec _ ,[a,b])    => CL.mkBinOp(a, CL.#+, b)
179              | (Op.prodVec _ ,[a, b])  => CL.mkBinOp(a, CL.#*, b)              | (Op.prodVec _ ,[a, b])  => CL.mkBinOp(a, CL.#*, b)
180                | (Op.clampVec n, args) => CL.mkApply(N.NameClampV n, args)
181                | (Op.lerpVec n, args) =>  CL.mkApply(N.NameLerpV n, args)
182              | (Op.Sqrt,[a])         =>       CL.E_Sqrt a              | (Op.Sqrt,[a])         =>       CL.E_Sqrt a
                     (*Vector functions*)  
183              | (Op.prodScaV d,args)   => CL.E_Apply(N.NameScaV d, args)              | (Op.prodScaV d,args)   => CL.E_Apply(N.NameScaV d, args)
184              | (Op.sumVec (nSize,oSize),args)     => CL.E_Apply(N.NameSumV oSize, args)              | (Op.sumVec (nSize,oSize),args)     => CL.E_Apply(N.NameSumV oSize, args)
185              | (Op.dotVec d,args)     => CL.E_Apply(N.NameDotV d, args)  
186                      (*Index Tensor*)              | (Op.IndexTensor(true,Ty.indexTy [i],Ty.TensorTy[n]),[a])=> vecIndex (a,n,i) (*Index Local Vector*)
187              | (Op.IndexTensor(true,i,n),[a])=> vecIndex (a,n,i) (*cast from vector*)              | (Op.IndexTensor(false,Ty.indexTy [i],Ty.TensorTy[_]),[a])=>prntArr(a,i)   (*Index Global Vector*)
188              | (Op.IndexTensor(false,i,n),[a])=> prntArr(a,i) (*arg as an array*)              | (Op.IndexTensor(_,Ty.indexTy[i,j] ,Ty.TensorTy[_,m]),[a])=>prntArr(a,m*i+j)
189                | (Op.IndexTensor(_,Ty.indexTy [i],Ty.SeqTy (_,n)),[a])=> ivecIndex (a,n,i)
190    
191                  (*Image related operators*)                  (*Image related operators*)
192               | (Op.baseAddr(ImageInfo.ImgInfo{ty=(_,rTy), ...}) ,[a])=>               | (Op.baseAddr(ImageInfo.ImgInfo{ty=(_,rTy), ...}) ,[a])=>
# Line 212  Line 214 
214              | (Op.Max, args) => CL.mkApply(N.max(), args)              | (Op.Max, args) => CL.mkApply(N.max(), args)
215              | (Op.Min, args) => CL.mkApply(N.min(), args)              | (Op.Min, args) => CL.mkApply(N.min(), args)
216              | (Op.Clamp(Ty.TensorTy[]), args) => CL.mkApply(N.clamp 1, args)              | (Op.Clamp(Ty.TensorTy[]), args) => CL.mkApply(N.clamp 1, args)
217              | (Op.Clamp(Ty.TensorTy[n]), args) => CL.mkApply(N.clamp n, args)              | (Op.Clamp ty, args) =>raise Fail(concat["Clamp<", Ty.toString ty, "> not supported"])
218              | (Op.Lerp ty, args) => (case ty              | (Op.Lerp (Ty.TensorTy[]) , args) => CL.mkApply(N.lerp 1, args)
219                   of Ty.TensorTy[] => CL.mkApply(N.lerp 1, args)              | (Op.Lerp ty , args) => raise Fail(concat["lerp<", Ty.toString ty, "> not supported" ])
                   | Ty.TensorTy[n] => CL.mkApply(N.lerp n, args)  
                   | _ => raise Fail(concat[  
                         "lerp<", Ty.toString ty, "> not supported"  
                       ])  
                 (* end case *))  
   
220              | (Op.PrincipleEvec ty, _) => raise Fail "PrincipleEvec unimplemented"              | (Op.PrincipleEvec ty, _) => raise Fail "PrincipleEvec unimplemented"
221              | (Op.Select(Ty.TupleTy tys, i), [a]) => raise Fail "Select unimplemented"              | (Op.Select(Ty.TupleTy tys, i), [a]) => raise Fail "Select unimplemented"
222              | (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)
# Line 270  Line 266 
266              | (Op.InputWithDefault(ty, desc, name), [a]) =>              | (Op.InputWithDefault(ty, desc, name), [a]) =>
267                  raise Fail("impossible " ^ Op.toString rator)                  raise Fail("impossible " ^ Op.toString rator)
268              | _ => raise Fail(concat[              | _ => raise Fail(concat[
269                    "---yyy--unknown or incorrect operator ", Op.toString rator                    "--unknown or incorrect operator ", Op.toString rator
270                  ])                  ])
271            (* end case *))            (* end case *))
272    

Legend:
Removed from v.2829  
changed lines
  Added in v.2830

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