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 2377, Mon Jun 3 19:41:56 2013 UTC revision 2525, Tue Jan 21 19:14:22 2014 UTC
# Line 128  Line 128 
128    
129    (* Translate a TreeIL operator application to a CLang expression *)    (* Translate a TreeIL operator application to a CLang expression *)
130      fun trOp (rator, args) = (case (rator, args)      fun trOp (rator, args) = (case (rator, args)
131             of (Op.Add ty, [a, b]) => CL.mkBinOp(a, CL.#+, b)             of (Op.IAdd , [a, b]) => CL.mkBinOp(a, CL.#+, b)
132              | (Op.Sub ty, [a, b]) => CL.mkBinOp(a, CL.#-, b)              | (Op.ISub , [a, b]) => CL.mkBinOp(a, CL.#-, b)
133              | (Op.Mul ty, [a, b]) => CL.mkBinOp(a, CL.#*, b)              | (Op.IMul , [a, b]) => CL.mkBinOp(a, CL.#*, b)
134              | (Op.Div ty, [a, b]) => CL.mkBinOp(a, CL.#/, b)              | (Op.IDiv , [a, b]) => CL.mkBinOp(a, CL.#/, b)
135              | (Op.Neg ty, [a]) => CL.mkUnOp(CL.%-, a)              | (Op.INeg , [a]) => CL.mkUnOp(CL.%-, a)
136              | (Op.Abs(Ty.IntTy), args) => CL.mkApply("abs", args)              | (Op.Abs(Ty.IntTy), args) => CL.mkApply("abs", args)
137              | (Op.Abs(Ty.TensorTy[]), args) => CL.mkApply(N.fabs(), args)              | (Op.Abs(Ty.TensorTy[]), args) => CL.mkApply(N.fabs(), args)
138              | (Op.Abs ty, [a]) => raise Fail(concat["Abs<", Ty.toString ty, ">"])              | (Op.Abs ty, [a]) => raise Fail(concat["Abs<", Ty.toString ty, ">"])
# Line 154  Line 154 
154                          "lerp<", Ty.toString ty, "> not supported"                          "lerp<", Ty.toString ty, "> not supported"
155                        ])                        ])
156                  (* end case *))                  (* end case *))
157              | (Op.Dot d, args) => CL.E_Apply(N.dot d, args)  
158              | (Op.MulVecMat(m, n), args) =>  
                 if (1 < m) andalso (m < 4) andalso (m = n)  
                   then CL.E_Apply(N.mulVecMat(m,n), args)  
                   else raise Fail "unsupported vector-matrix multiply"  
             | (Op.MulMatVec(m, n), args) =>  
                 if (1 < m) andalso (m < 4) andalso (m = n)  
                   then CL.E_Apply(N.mulMatVec(m,n), args)  
                   else raise Fail "unsupported matrix-vector multiply"  
             | (Op.MulMatMat(m, n, p), args) =>  
                 if (1 < m) andalso (m < 4) andalso (m = n) andalso (n = p)  
                   then CL.E_Apply(N.mulMatMat(m,n,p), args)  
                   else raise Fail "unsupported matrix-matrix multiply"  
             | (Op.Cross, args) => CL.E_Apply(N.cross(), args)  
159              | (Op.Norm(Ty.TensorTy[n]), args) => CL.E_Apply(N.length n, args)              | (Op.Norm(Ty.TensorTy[n]), args) => CL.E_Apply(N.length n, args)
160              | (Op.Norm(Ty.TensorTy[m,n]), args) => CL.E_Apply(N.normMat(m,n), args)              | (Op.Norm(Ty.TensorTy[m,n]), args) => CL.E_Apply(N.normMat(m,n), args)
161              | (Op.Normalize d, args) => CL.E_Apply(N.normalize d, args)              | (Op.Normalize d, args) => CL.E_Apply(N.normalize d, args)
162              | (Op.Scale(Ty.TensorTy[n]), args) => CL.E_Apply(N.scale n, args)  
163              | (Op.PrincipleEvec ty, _) => raise Fail "PrincipleEvec unimplemented"              | (Op.PrincipleEvec ty, _) => raise Fail "PrincipleEvec unimplemented"
164              | (Op.Select(Ty.TupleTy tys, i), [a]) => raise Fail "Select unimplemented"              | (Op.Select(Ty.TupleTy tys, i), [a]) => raise Fail "Select unimplemented"
165              | (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 215  Line 203 
203                  end                  end
204              | (Op.LoadVoxels _, [a]) =>              | (Op.LoadVoxels _, [a]) =>
205                  raise Fail("impossible " ^ Op.toString rator)                  raise Fail("impossible " ^ Op.toString rator)
206              | (Op.PosToImgSpace(ImageInfo.ImgInfo{dim, ...}), [img, pos]) =>  
                 CL.mkApply(N.toImageSpace dim, [img, pos])  
             | (Op.TensorToWorldSpace(info, ty), [v, x]) =>  
                 CL.mkApply(N.toWorldSpace ty, [v, x])  
207              | (Op.LoadImage info, [a]) =>              | (Op.LoadImage info, [a]) =>
208                  raise Fail("impossible " ^ Op.toString rator)                  raise Fail("impossible " ^ Op.toString rator)
209              | (Op.Inside(ImageInfo.ImgInfo{dim, ...}, s), [pos, img]) =>              | (Op.Inside(ImageInfo.ImgInfo{dim, ...}, s), [pos, img]) =>
# Line 329  Line 314 
314            in            in
315              List.rev (stm :: stms)              List.rev (stm :: stms)
316            end            end
317    (*Removed IADD, ISUB, INED, scale, MULT  since they now only work on intergers*)
318      fun trAssign (env, lhs, rhs) = (      fun trAssign (env, lhs, rhs) = (
319          (* certain rhs forms, such as those that return a matrix,          (* certain rhs forms, such as those that return a matrix,
320           * require a function call instead of an assignment           * require a function call instead of an assignment
321           *)           *)
322            case rhs            case rhs
323             of IL.E_Op(Op.Add(Ty.TensorTy[m,n]), args) =>             of IL.E_Op(Op.EigenVals2x2, [m]) => let
                 [CL.mkCall(N.addMat(m,n),  lhs :: trExps(env, args))]  
             | IL.E_Op(Op.Sub(Ty.TensorTy[m,n]), args) =>  
                 [CL.mkCall(N.subMat(m,n),  lhs :: trExps(env, args))]  
             | IL.E_Op(Op.Neg(Ty.TensorTy[m,n]), args) =>  
                 [CL.mkCall(N.scaleMat(m,n),  lhs :: intExp ~1 :: trExps(env, args))]  
             | IL.E_Op(Op.Scale(Ty.TensorTy[m,n]), args) =>  
                 [CL.mkCall(N.scaleMat(m,n),  lhs :: trExps(env, args))]  
             | IL.E_Op(Op.MulMatMat(m,n,p), args) =>  
                 [CL.mkCall(N.mulMatMat(m,n,p), lhs :: trExps(env, args))]  
             | IL.E_Op(Op.EigenVals2x2, [m]) => let  
324                  val (m, stms) = expToVar (env, CL.T_Named(N.matTy(2,2)), "m", m)                  val (m, stms) = expToVar (env, CL.T_Named(N.matTy(2,2)), "m", m)
325                  in                  in
326                    stms @ [CL.mkCall(N.evals2x2, [                    stms @ [CL.mkCall(N.evals2x2, [
# Line 368  Line 343 
343                        matIndex (m, CL.mkInt 2, CL.mkInt 2)                        matIndex (m, CL.mkInt 2, CL.mkInt 2)
344                      ])]                      ])]
345                  end                  end
346              | IL.E_Op(Op.Identity n, args) =>              (*| IL.E_Op(Op.Zero(Ty.TensorTy[m,n]), args) =>
347                  [CL.mkCall(N.identityMat n, [lhs])]                  [CL.mkCall(N.zeroMat(m,n), [lhs])]*)
             | IL.E_Op(Op.Zero(Ty.TensorTy[m,n]), args) =>  
                 [CL.mkCall(N.zeroMat(m,n), [lhs])]  
             | IL.E_Op(Op.TensorToWorldSpace(info, ty as Ty.TensorTy[_,_]), args) =>  
                 [CL.mkCall(N.toWorldSpace ty, lhs :: trExps(env, args))]  
348              | IL.E_Op(Op.LoadVoxels(info, n), [a]) =>              | IL.E_Op(Op.LoadVoxels(info, n), [a]) =>
349                  if (n > 1)                  if (n > 1)
350                    then let                    then let

Legend:
Removed from v.2377  
changed lines
  Added in v.2525

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