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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/translate/translate-basis.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/translate/translate-basis.sml

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

revision 2357, Sun Apr 7 15:14:33 2013 UTC revision 2358, Sun Apr 7 15:17:59 2013 UTC
# Line 26  Line 26 
26      structure MV = MetaVar      structure MV = MetaVar
27      structure VTbl = Var.Tbl      structure VTbl = Var.Tbl
28    
29      fun pruneTy ty = (case TU.prune ty      fun pruneTy tv = (case TU.prune(MV.toType tv)
30             of (Ty.T_Var _) => raise Fail("unresolved type " ^ TU.toString ty)             of (ty as Ty.T_Var _) => raise Fail("unresolved type " ^ TU.toString ty)
31              | ty => TranslateTy.tr ty              | ty => TranslateTy.tr ty
32            (* end case *))            (* end case *))
33    
# Line 41  Line 41 
41              | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)              | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)
42            (* end case *))            (* end case *))
43    
44      fun dimVarToTensor dv = DstTy.tensorTy[pruneDim(MV.toDim dv)]      fun dimVarToInt dv = pruneDim(MV.toDim dv)
45        fun dimVarToTensor dv = DstTy.tensorTy[dimVarToInt dv]
46      fun dimVarToMatrix dv = let      fun dimVarToMatrix dv = let
47            val d = pruneDim(MV.toDim dv)            val d = dimVarToInt dv
48            in            in
49              DstTy.tensorTy[d, d]        (* square matrix type *)              DstTy.tensorTy[d, d]        (* square matrix type *)
50            end            end
# Line 106  Line 107 
107                  (BV.add_ii,             simpleOp(Op.Add DstTy.IntTy)),                  (BV.add_ii,             simpleOp(Op.Add DstTy.IntTy)),
108                  (BV.add_tt,             tensorOp Op.Add),                  (BV.add_tt,             tensorOp Op.Add),
109                  (BV.add_ff,             fn (y, _, [f, g]) => assign(y, Op.AddField, [f, g])),                  (BV.add_ff,             fn (y, _, [f, g]) => assign(y, Op.AddField, [f, g])),
110                    (BV.add_fr,             fn (y, _, [f, s]) => assign(y, Op.OffsetField, [f, s])),
111                    (BV.add_rf,             fn (y, _, [s, f]) => assign(y, Op.OffsetField, [f, s])),
112                  (BV.sub_ii,             simpleOp(Op.Sub DstTy.IntTy)),                  (BV.sub_ii,             simpleOp(Op.Sub DstTy.IntTy)),
113                  (BV.sub_tt,             tensorOp Op.Sub),                  (BV.sub_tt,             tensorOp Op.Sub),
114                  (BV.sub_ff,             fn (y, _, [f, g]) => assign(y, Op.SubField, [f, g])),                  (BV.sub_ff,             fn (y, _, [f, g]) => assign(y, Op.SubField, [f, g])),
115                    (BV.sub_fr,             fn (y, _, [f, s]) => let
116                                              val s' = IL.Var.copy s
117                                              in [
118                                                IL.ASSGN(s', IL.OP(Op.Neg DstTy.realTy, [s])),
119                                                IL.ASSGN(y, IL.OP(Op.OffsetField, [f, s']))
120                                              ] end),
121                    (BV.sub_rf,             fn (y, _, [s, f]) => let
122                                              val f' = IL.Var.copy f
123                                              in [
124                                                IL.ASSGN(f', IL.OP(Op.NegField, [f])),
125                                                IL.ASSGN(y, IL.OP(Op.OffsetField, [f', s]))
126                                              ] end),
127                  (BV.mul_ii,             simpleOp(Op.Mul DstTy.IntTy)),                  (BV.mul_ii,             simpleOp(Op.Mul DstTy.IntTy)),
128                  (BV.mul_rr,             simpleOp(Op.Mul(DstTy.realTy))),                  (BV.mul_rr,             simpleOp(Op.Mul(DstTy.realTy))),
129                  (BV.mul_rt,             tensorOp Op.Scale),                  (BV.mul_rt,             tensorOp Op.Scale),
# Line 135  Line 150 
150                                            ] end),                                            ] end),
151                  (BV.exp_ri,             simpleOp(Op.Power)),                  (BV.exp_ri,             simpleOp(Op.Power)),
152                  (BV.exp_rr,             basisFn MathFuns.pow),                  (BV.exp_rr,             basisFn MathFuns.pow),
153                    (BV.curl2D,             fn (y, _, xs) => assign(y, Op.CurlField 2, xs)),
154                    (BV.curl3D,             fn (y, _, xs) => assign(y, Op.CurlField 3, xs)),
155                  (BV.convolve_vk,        fn (y, [_, dv, _], xs) =>                  (BV.convolve_vk,        fn (y, [_, dv, _], xs) =>
156                                            assign(y, Op.Field(pruneDim(MV.toDim dv)), xs)),                                            assign(y, Op.Field(pruneDim(MV.toDim dv)), xs)),
157                  (BV.convolve_kv,        fn (y, [_, dv, _], [k, v]) =>                  (BV.convolve_kv,        fn (y, [_, dv, _], [k, v]) =>
# Line 166  Line 183 
183                                                    | ([d1], [d1', d2]) => Op.MulVecMat ty2                                                    | ([d1], [d1', d2]) => Op.MulVecMat ty2
184                                                    | ([d1, d2], [d2']) => Op.MulMatVec ty1                                                    | ([d1, d2], [d2']) => Op.MulMatVec ty1
185                                                    | ([d1, d2], [d2', d3]) => Op.MulMatMat(ty1, ty2)                                                    | ([d1, d2], [d2', d3]) => Op.MulMatMat(ty1, ty2)
186                                                    | _ => raise Fail "unsupported inner-product type"                                                    | ([d1], [d1', d2, d3]) => Op.MulVecTen3 ty2
187                                                      | ([d1, d2, d3], [d3']) => Op.MulTen3Vec ty1
188                                                      | _ => raise Fail(concat[
189                                                            "unsupported inner-product: ",
190                                                            DstTy.toString ty1, " * ", DstTy.toString ty2
191                                                          ])
192                                                  (* end case *))                                                  (* end case *))
193                                            in                                            in
194                                              assign (y, rator, xs)                                              assign (y, rator, xs)
195                                            end),                                            end),
196                    (BV.op_colon,           fn (y, [sh1, sh2, _], xs) => let
197                                              val ty1 as DstTy.TensorTy dd1 = pruneShape sh1
198                                              val ty2 as DstTy.TensorTy dd2 = pruneShape sh2
199                                              in
200                                                assign (y, Op.ColonMul(ty1, ty2), xs)
201                                              end),
202                  (BV.fn_inside,          fn (y, [_, dv, _], xs) =>                  (BV.fn_inside,          fn (y, [_, dv, _], xs) =>
203                                            assign(y, Op.Inside(pruneDim(MV.toDim dv)), xs)),                                            assign(y, Op.Inside(pruneDim(MV.toDim dv)), xs)),
204                  (BV.clamp_rrr,          simpleOp (Op.Clamp DstTy.realTy)),                  (BV.clamp_rrr,          simpleOp (Op.Clamp DstTy.realTy)),
# Line 196  Line 224 
224                  (BV.fn_normalize,       vectorOp Op.Normalize),                  (BV.fn_normalize,       vectorOp Op.Normalize),
225                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),
226                  (BV.fn_trace,           fn (y, [dv], xs) => assign(y, Op.Trace(dimVarToMatrix dv), xs)),                  (BV.fn_trace,           fn (y, [dv], xs) => assign(y, Op.Trace(dimVarToMatrix dv), xs)),
227                    (BV.fn_transpose,       fn (y, [dv1, dv2], xs) =>
228                                              assign(y, Op.Transpose(dimVarToInt dv1, dimVarToInt dv2), xs)),
229                  (BV.kn_bspln3,          kernel Kernel.bspln3),                  (BV.kn_bspln3,          kernel Kernel.bspln3),
230                  (BV.kn_bspln5,          kernel Kernel.bspln5),                  (BV.kn_bspln5,          kernel Kernel.bspln5),
231                  (BV.kn_ctmr,            kernel Kernel.ctmr),                  (BV.kn_ctmr,            kernel Kernel.ctmr),
232                  (BV.kn_c2ctmr,          kernel Kernel.ctmr),                  (BV.kn_c2ctmr,          kernel Kernel.ctmr),
233                    (BV.kn_c4hexic,         kernel Kernel.c4hexic),
234                  (BV.kn_tent,            kernel Kernel.tent),                  (BV.kn_tent,            kernel Kernel.tent),
235                  (BV.kn_c1tent,          kernel Kernel.tent),                  (BV.kn_c1tent,          kernel Kernel.tent),
236                  (BV.i2r,                simpleOp Op.IntToReal),                  (BV.i2r,                simpleOp Op.IntToReal),
# Line 209  Line 240 
240                                            assign(y, Op.Zero(shapeVarToTensor sv), [])),                                            assign(y, Op.Zero(shapeVarToTensor sv), [])),
241                  (BV.subscript,          fn (y, [tv, dv], args) =>                  (BV.subscript,          fn (y, [tv, dv], args) =>
242                                            assign(y,                                            assign(y,
243                                              Op.SeqSub(DstTy.SeqTy(pruneTy(MV.toType tv), pruneDim(MV.toDim dv))),                                              Op.SeqSub(DstTy.SeqTy(pruneTy tv, pruneDim(MV.toDim dv))),
244                                              args))                                              args))
245                ];                ];
246            (* add C math functions *)            (* add C math functions *)

Legend:
Removed from v.2357  
changed lines
  Added in v.2358

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