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

SCM Repository

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

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

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

revision 3482, Sat Dec 5 14:43:53 2015 UTC revision 3483, Sat Dec 5 15:02:33 2015 UTC
# Line 173  Line 173 
173                  (BV.div_ss,             fn (y, [_, Ty.DIM d], xs) =>                  (BV.div_ss,             fn (y, [_, Ty.DIM d], xs) =>
174                                            [assignEin(y, Mk.divSS d, xs)]),                                            [assignEin(y, Mk.divSS d, xs)]),
175                  (BV.pow_ri,             simpleOp Op.Power),                  (BV.pow_ri,             simpleOp Op.Power),
176                  (BV.pow_rr,             basisFn MathFuns.pow),  (* FIXME: BV.pos_rr *)
177                    (BV.pow_si,             fn (y, [_, Ty.DIM d1], [f, n]) => let
178                                              fun getN x  = (case IR.Var.binding x
179                                                     of IR.VB_RHS(IR.LIT(Literal.Int n)) => IntInf.toInt n
180                                                      | vb => raise Fail (String.concat[
181    (* FIXME: should catch this earlier, where we can generate an error message! *)
182                                                            "Not a constant integer, ", IR.Var.toString x,
183                                                            " found ", IR.vbToString vb, "\n"
184                                                          ])
185                                                    (* end case *))
186                                              in
187                                                [assignEin(y, Mk.powF(d1, getN n), [f])]
188                                              end),
189                  (BV.curl2D,             simpleEOp Mk.curl2d),                  (BV.curl2D,             simpleEOp Mk.curl2d),
190                  (BV.curl3D,             simpleEOp Mk.curl3d),                  (BV.curl3D,             simpleEOp Mk.curl3d),
191                  (BV.convolve_vk,        fn (y, [_, Ty.DIM d, Ty.SHAPE dd], xs) =>                  (BV.convolve_vk,        fn (y, [_, Ty.DIM d, Ty.SHAPE dd], xs) =>
# Line 198  Line 210 
210                                            [assignEin(y, Mk.dotimes(d1, dd@[d2]), xs)]),                                            [assignEin(y, Mk.dotimes(d1, dd@[d2]), xs)]),
211                  (BV.op_Ddot,            fn (y, [_, Ty.DIM d1,  Ty.SHAPE dd, Ty.DIM d2], xs) =>                  (BV.op_Ddot,            fn (y, [_, Ty.DIM d1,  Ty.SHAPE dd, Ty.DIM d2], xs) =>
212                                            [assignEin(y, Mk.divergence(d1, dd), xs)] ),                                            [assignEin(y, Mk.divergence(d1, dd), xs)] ),
213    (* FIXME: should scalar norm be an op or an EIN?
214                  (BV.op_norm_t,          fn (y, [sv], xs) =>  assign(y, Op.Norm(shapeVarToTensor sv), xs)),                  (BV.op_norm_t,          fn (y, [sv], xs) =>  assign(y, Op.Norm(shapeVarToTensor sv), xs)),
215    *)
216                  (BV.op_norm_f,          fn (y, [ _, Ty.DIM d1, Ty.SHAPE dd], xs) =>                  (BV.op_norm_f,          fn (y, [ _, Ty.DIM d1, Ty.SHAPE dd], xs) =>
217                                            [assignEin(y, Mk.magnitudeFF(d1, dd), xs@xs)]),                                            [assignEin(y, Mk.magnitudeFF(d1, dd), xs@xs)]),
218                  (BV.op_not,             simpleOp Op.Not),                  (BV.op_not,             simpleOp Op.Not),
# Line 247  Line 261 
261                  (*  modulate is vector * vector pointwise multiplication *)                  (*  modulate is vector * vector pointwise multiplication *)
262                  (BV.fn_modulate,        fn (y, [Ty.DIM dd1], xs) =>                  (BV.fn_modulate,        fn (y, [Ty.DIM dd1], xs) =>
263                                            [assignEin(y, (Mk.modulate dd1), xs)]),                                            [assignEin(y, (Mk.modulate dd1), xs)]),
264    (* FIXME: should scalar normormalize be an op or an EIN?
265                  (BV.fn_normalize_t,     fn (y, [shp], xs) => let                  (BV.fn_normalize_t,     fn (y, [shp], xs) => let
266                                            val DstTy.TensorTy dd1 = shapeVarToTensor shp                                            val DstTy.TensorTy dd1 = shapeVarToTensor shp
267                                            in                                            in
# Line 256  Line 271 
271                                                | _ => [assignEin(y, Mk.normalizeTT dd1, xs@xs)]                                                | _ => [assignEin(y, Mk.normalizeTT dd1, xs@xs)]
272                                              (* end case *)                                              (* end case *)
273                                            end),                                            end),
274    *)
275                  (BV.fn_normalize_f,     fn (y, [ _, Ty.DIM d1, Ty.SHAPE dd], xs) => (case dd                  (BV.fn_normalize_f,     fn (y, [ _, Ty.DIM d1, Ty.SHAPE dd], xs) => (case dd
276                                             of [] => [assignEin(y, Mk.normalizeFF(d1, []), xs)]                                             of [] => [assignEin(y, Mk.normalizeFF(d1, []), xs)]
277                                              | _ => [assignEin(y, Mk.normalizeFF(d1, dd), xs@xs)]                                              | _ => [assignEin(y, Mk.normalizeFF(d1, dd), xs@xs)]
# Line 272  Line 288 
288                  (BV.fn_det3_t,          simpleEOp (Mk.det3T)),                  (BV.fn_det3_t,          simpleEOp (Mk.det3T)),
289                  (BV.fn_det2_f,          simpleEOp (Mk.det2F)),                  (BV.fn_det2_f,          simpleEOp (Mk.det2F)),
290                  (BV.fn_det3_f,          simpleEOp (Mk.det3F)),                  (BV.fn_det3_f,          simpleEOp (Mk.det3F)),
291                  (BV.fn_sqrt_f,          fn (y, [_, Ty.DIM d1], xs) =>  (* FIXME: BV.fn_sqrt_r *)
292                    (BV.fn_sqrt_s,          fn (y, [_, Ty.DIM d1], xs) =>
293                                            [assignEin(y, Mk.sqrtF d1, xs)]),                                            [assignEin(y, Mk.sqrtF d1, xs)]),
294                  (BV.fn_sqrt_t,          fn (y, _, xs) =>  (* FIXME: BV.fn_cos_r *)
295                                            assign(y, Op.Sqrt, xs)),                  (BV.fn_cos_s,           fn (y, [_, Ty.DIM d1], xs) =>
                 (BV.fn_cos_f,           fn (y, [_, Ty.DIM d1], xs) =>  
296                                            [assignEin(y, Mk.cosF d1, xs)]),                                            [assignEin(y, Mk.cosF d1, xs)]),
297                  (BV.fn_acos_f,          fn (y, [_, Ty.DIM d1], xs) =>  (* FIXME: BV.fn_acos_r *)
298                    (BV.fn_acos_s,          fn (y, [_, Ty.DIM d1], xs) =>
299                                            [assignEin(y, Mk.acosF d1, xs)]),                                            [assignEin(y, Mk.acosF d1, xs)]),
300                  (BV.fn_sin_f,           fn (y, [_, Ty.DIM d1], xs) =>  (* FIXME: BV.fn_sin_r *)
301                    (BV.fn_sin_s,           fn (y, [_, Ty.DIM d1], xs) =>
302                                            [assignEin(y, Mk.sinF d1, xs)]),                                            [assignEin(y, Mk.sinF d1, xs)]),
303                  (BV.fn_asin_f,          fn (y, [_, Ty.DIM d1], xs) =>  (* FIXME: BV.fn_asin_r *)
304                    (BV.fn_asin_s,          fn (y, [_, Ty.DIM d1], xs) =>
305                                            [assignEin(y, Mk.asinF d1, xs)]),                                            [assignEin(y, Mk.asinF d1, xs)]),
306                  (BV.fn_tan_f,           fn (y, [_, Ty.DIM d1], xs) =>  (* FIXME: BV.fn_tan_r *)
307                    (BV.fn_tan_s,           fn (y, [_, Ty.DIM d1], xs) =>
308                                            [assignEin(y, Mk.tanF d1, xs)]),                                            [assignEin(y, Mk.tanF d1, xs)]),
309                  (BV.fn_atan_f,          fn (y, [_, Ty.DIM d1], xs) =>  (* FIXME: BV.fn_atan_r *)
310                    (BV.fn_atan_s,          fn (y, [_, Ty.DIM d1], xs) =>
311                                            [assignEin(y, Mk.atanF d1, xs)]),                                            [assignEin(y, Mk.atanF d1, xs)]),
312                  (BV.fn_exp_f,           fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_exp_r,           fn (y, _, xs) =>
                                           [assignEin(y, Mk.expF d1, xs)]),  
                 (BV.fn_exp_t,           fn (y, _, xs) =>  
313                                            [assignEin(y, Mk.expT, xs)]),                                            [assignEin(y, Mk.expT, xs)]),
314                  (BV.fn_pow_fi,          fn (y, [_, Ty.DIM d1], [f, n]) => let                  (BV.fn_exp_s,           fn (y, [_, Ty.DIM d1], xs) =>
315                                            fun getN x  = (case IR.Var.binding x                                            [assignEin(y, Mk.expF d1, xs)]),
                                                  of IR.VB_RHS(IR.LIT(Literal.Int n)) => IntInf.toInt n  
                                                   | vb => raise Fail (String.concat[  
 (* FIXME: should catch this earlier, where we can generate an error message! *)  
                                                         "Not an Int, ", IR.Var.toString x,  
                                                         " found ", IR.vbToString vb, "\n"  
                                                       ])  
                                                 (* end case *))  
                                           in  
                                             [assignEin(y, Mk.powF(d1, getN n), [f])]  
                                           end),  
316                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),
317                  (BV.fn_inside,          fn (y, [_, Ty.DIM d, _], xs) => assign(y, Op.Inside d, xs)),                  (BV.fn_inside,          fn (y, [_, Ty.DIM d, _], xs) => assign(y, Op.Inside d, xs)),
318                  (BV.clamp_rrr,          simpleOp (Op.Clamp DstTy.realTy)),                  (BV.clamp_rrr,          simpleOp (Op.Clamp DstTy.realTy)),
# Line 324  Line 333 
333                  (BV.evecs2x2,           eigenVec (Op.Eigen2x2, 2)),                  (BV.evecs2x2,           eigenVec (Op.Eigen2x2, 2)),
334                  (BV.evecs3x3,           eigenVec (Op.Eigen3x3, 3)),                  (BV.evecs3x3,           eigenVec (Op.Eigen3x3, 3)),
335                  (BV.fn_length,          fn (y, [tv], [s]) => assign(y, Op.Length(trType tv), [s])),                  (BV.fn_length,          fn (y, [tv], [s]) => assign(y, Op.Length(trType tv), [s])),
336                  (BV.fn_max,             simpleOp Op.Max),                  (BV.fn_abs_i,           simpleOp (Op.Abs DstTy.IntTy)),
337                  (BV.fn_min,             simpleOp Op.Min),                  (BV.fn_abs_r,           simpleOp (Op.Abs DstTy.realTy)),
338                    (BV.fn_max_i,           simpleOp (Op.Max DstTy.IntTy)),
339                    (BV.fn_max_r,           simpleOp (Op.Max DstTy.realTy)),
340                    (BV.fn_min_i,           simpleOp (Op.Min DstTy.IntTy)),
341                    (BV.fn_min_r,           simpleOp (Op.Min DstTy.realTy)),
342                  (BV.kn_bspln3,          kernel Kernel.bspln3),                  (BV.kn_bspln3,          kernel Kernel.bspln3),
343                  (BV.kn_bspln5,          kernel Kernel.bspln5),                  (BV.kn_bspln5,          kernel Kernel.bspln5),
344                  (BV.kn_ctmr,            kernel Kernel.ctmr),                  (BV.kn_ctmr,            kernel Kernel.ctmr),
# Line 389  Line 402 
402                                              assign(y, Op.BorderCtlWrap info, args)                                              assign(y, Op.BorderCtlWrap info, args)
403                                            end)                                            end)
404                ];                ];
           (* add C math functions *)  
             List.app (fn (n, x) => insert(x, basisFn n)) BV.mathFns;  
405              tbl              tbl
406            end            end
407    

Legend:
Removed from v.3482  
changed lines
  Added in v.3483

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