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

SCM Repository

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

Diff of /trunk/src/compiler/translate/translate-basis.sml

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

revision 194, Mon Aug 2 16:40:29 2010 UTC revision 197, Mon Aug 2 20:51:47 2010 UTC
# Line 29  Line 29 
29    
30      fun simpleOp rator (y, [], xs) = assign (y, rator, xs)      fun simpleOp rator (y, [], xs) = assign (y, rator, xs)
31    
32        fun pruneDim d = (case TU.pruneDim d
33               of (Ty.DimConst n) => n
34                | d => raise Fail("unresolved dimension " ^ TU.dimToString d)
35              (* end case *))
36    
37      fun tensorOp rator (y, [sv], xs) = (case TU.pruneShape(MV.toShape sv)      fun tensorOp rator (y, [sv], xs) = (case TU.pruneShape(MV.toShape sv)
38             of Ty.Shape dd => assign (y, rator(Op.TensorTy dd), xs)             of Ty.Shape dd =>
39                    assign (y, rator(Op.TensorTy(List.map pruneDim dd)), xs)
40              | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)              | shp => raise Fail("unresolved shape " ^ TU.shapeToString shp)
41            (* end case *))            (* end case *))
42    
43        fun vectorOp rator (y, [dv], xs) =
44              assign (y, rator(Op.TensorTy[pruneDim(MV.toDim dv)]), xs)
45    
46        fun kernel h (y, [], []) = assign(y, Op.Kernel h, [])
47    
48    (* build a table that maps Basis variables to their translation functions *)    (* build a table that maps Basis variables to their translation functions *)
49      val tbl = let      val tbl : ((IL.var * Ty.meta_var list * IL.var list) -> IL.assign list) VTbl.hash_table = let
50            val tbl = VTbl.mkTable (128, Fail "Translate table")            val tbl = VTbl.mkTable (128, Fail "Translate table")
51            in            in
52              List.app (VTbl.insert tbl) [              List.app (VTbl.insert tbl) [
# Line 68  Line 79 
79                  (BV.neq_rr,             simpleOp(Op.NEQ(Op.TensorTy[]))),                  (BV.neq_rr,             simpleOp(Op.NEQ(Op.TensorTy[]))),
80                  (BV.neg_i,              simpleOp(Op.Neg Op.IntTy)),                  (BV.neg_i,              simpleOp(Op.Neg Op.IntTy)),
81                  (BV.neg_t,              tensorOp Op.Neg),                  (BV.neg_t,              tensorOp Op.Neg),
82                  (BV.neg_f,              fn (y, [DK, NK, SK], xs) => ??), (*FIXME*)                  (BV.neg_f,              fn (y, _, xs) => assign(y, Op.NegField, xs)),
83                  (BV.op_at,              fn (y, [DK, NK, SK], xs) => ??), (*FIXME*)                  (BV.op_at,              fn (y, _, xs) => assign(y, Op.Probe, xs)),
84                  (BV.op_D,               fn (y, [DK, NK, SK], xs) => ??), (*FIXME*)                  (BV.op_D,               fn (y, _, xs) => assign(y, Op.DiffField, xs)),
85                  (BV.op_norm,            tensorOp Op.Norm),                  (BV.op_norm,            tensorOp Op.Norm),
86                  (BV.op_not,             simpleOp Op.Not),                  (BV.op_not,             simpleOp Op.Not),
87    (*
88                  (BV.op_subscript,       fn (y, [SK, NK], xs) => ??), (*FIXME*)                  (BV.op_subscript,       fn (y, [SK, NK], xs) => ??), (*FIXME*)
89                  (BV.fn_CL,              fn (y, [N3, N3], xs) => ??), (*FIXME*)  *)
90                  (BV.fn_convolve,        fn (y, [DK, NK, SK], xs) => ??), (*FIXME*)                  (BV.fn_CL,              fn (y, _, xs) => assign(y, Op.CL, xs)),
91                    (BV.fn_convolve,        fn (y, _, xs) => assign(y, Op.Convolve, xs)),
92                  (BV.fn_cos,             simpleOp Op.Cos),                  (BV.fn_cos,             simpleOp Op.Cos),
93                  (BV.fn_dot,             fn (y, [dv], xs) => (case TU.pruneDim(MV.toDim dv)                  (BV.fn_dot,             vectorOp Op.Dot),
94                                             of Ty.DimConst d => assign (y, Op.Dot(Op.TensorTy[d]), xs)                  (BV.fn_inside,          fn (y, _, xs) => assign(y, Op.Inside, xs)),
95                                              | dim => raise Fail("unresolved dimension "^TU.dimToString dim)  (*
                                           (* end case *))),  
                 (BV.fn_inside,          fn (y, [DK, NK, SK], xs) => ??), (*FIXME*)  
96                  (BV.fn_load,            fn (y, [NK, SK], xs) => ??), (*FIXME*)                  (BV.fn_load,            fn (y, [NK, SK], xs) => ??), (*FIXME*)
97    *)
98                  (BV.fn_max,             simpleOp Op.Min),                  (BV.fn_max,             simpleOp Op.Min),
99                  (BV.fn_min,             simpleOp Op.Max),                  (BV.fn_min,             simpleOp Op.Max),
100                  (BV.fn_modulate,        fn (y, [NK], xs) => ??), (*FIXME*)                  (BV.fn_modulate,        vectorOp Op.Mul),
101                  (BV.fn_pow,             simpleOp Op.Pow),                  (BV.fn_pow,             simpleOp Op.Pow),
102                  (BV.fn_principleEvec,   fn (y, [NK], xs) => ??), (*FIXME*)                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),
103                  (BV.fn_sin,             simpleOp Op.Sin),                  (BV.fn_sin,             simpleOp Op.Sin),
104                  (BV.kn_bspln3,          fn (y, [], xs) => ??), (*FIXME*)                  (BV.kn_bspln3,          kernel Kernel.bspln3),
105                  (BV.kn_bspln5,          fn (y, [], xs) => ??), (*FIXME*)                  (BV.kn_bspln5,          kernel Kernel.bspln5),
106                  (BV.kn_ctmr,            fn (y, [], xs) => ??), (*FIXME*)                  (BV.kn_ctmr,            kernel Kernel.ctmr),
107                  (BV.kn_tent,            fn (y, [], xs) => ??), (*FIXME*)                  (BV.kn_tent,            kernel Kernel.tent),
108                  (BV.i2r,                simpleOp Op.IntToReal),                  (BV.i2r,                simpleOp Op.IntToReal)(*,
109                  (BV.input,              fn (y, [TK], xs) => ??) (*FIXME*)                  (BV.input,              fn (y, [TK], xs) => ??), (*FIXME*)
110                    (BV.optInput,           fn (y, [TK], xs) => ??) (*FIXME*)
111    *)
112                ];                ];
113              tbl              tbl
114            end            end
115    
116      fun translate (y, f, mvs, xs) = (case VTbl.find tbl f      fun translate (y, f, mvs, xs) = (case VTbl.find tbl f
117             of SOME transFn => transFn(mvs, xs)             of SOME transFn => transFn(y, mvs, xs)
118              | NONE => raise Fail("TranslateBasis.translate: unknown function " ^ Var.nameOf f)              | NONE => raise Fail("TranslateBasis.translate: unknown function " ^ Var.nameOf f)
119            (* end case *))            (* end case *))
120    

Legend:
Removed from v.194  
changed lines
  Added in v.197

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