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

SCM Repository

[diderot] Annotation of /trunk/src/compiler/basis/basis.sml
ViewVC logotype

Annotation of /trunk/src/compiler/basis/basis.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 247 - (view) (download)

1 : jhr 47 (* basis.sml
2 :     *
3 :     * COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *
6 :     * Type definitions for Basis functions.
7 :     *)
8 :    
9 : jhr 78 structure Basis : sig
10 :    
11 :     val env : Env.env
12 :    
13 : jhr 79 (* find an operator by name; this returns a singleton list for regular operators (including
14 :     * type-index operators) and a list of variables for overloaded operators.
15 :     *)
16 :     val findOp : Atom.atom -> AST.var list
17 :    
18 : jhr 169 (* certain operations are restricted to only appear at global scope (i.e., not in an
19 :     * actor body). This function returns true for such operations.
20 :     *)
21 :     val isRestricted : AST.var -> bool
22 :    
23 : jhr 78 end = struct
24 : jhr 47
25 : jhr 79 structure N = BasisNames
26 :     structure BV = BasisVars
27 :     structure ATbl = AtomTable
28 : jhr 63
29 : jhr 68 (* non-overloaded operators, etc. *)
30 : jhr 169 val basisFunctions = [
31 : jhr 79 (* non-overloaded operators *)
32 :     BV.op_at,
33 : jhr 247 BV.op_convolve,
34 : jhr 79 BV.op_D,
35 :     BV.op_norm,
36 :     BV.op_not,
37 : jhr 86 BV.op_subscript,
38 : jhr 63 (* functions *)
39 : jhr 79 BV.fn_CL,
40 : jhr 247 BV.fn_convolve, (* depreciated *)
41 : jhr 79 BV.fn_cos,
42 :     BV.fn_dot,
43 :     BV.fn_inside,
44 :     BV.fn_load,
45 : jhr 143 BV.fn_max,
46 :     BV.fn_min,
47 : jhr 83 BV.fn_modulate,
48 : jhr 79 BV.fn_pow,
49 : jhr 91 BV.fn_principleEvec,
50 : jhr 169 BV.fn_sin
51 :     ]
52 :    
53 :     val basisVars = [
54 : jhr 63 (* kernels *)
55 : jhr 79 BV.kn_bspln3,
56 : jhr 169 BV.kn_bspln5,
57 :     BV.kn_ctmr,
58 : jhr 79 BV.kn_tent
59 : jhr 63 ]
60 :    
61 : jhr 78 (* seed the basis environment *)
62 :     val env = let
63 : jhr 169 fun insF (x, env) = Env.insertFunc(env, Atom.atom(Var.nameOf x), x)
64 :     fun insV (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x)
65 :     val env = List.foldl insF (Env.new()) basisFunctions
66 :     val env = List.foldl insV env basisVars
67 : jhr 78 in
68 : jhr 169 env
69 : jhr 78 end
70 :    
71 : jhr 79 (* overloaded operators *)
72 :     val overloads = [
73 :     (N.op_add, [BV.add_ii, BV.add_tt]),
74 :     (N.op_sub, [BV.sub_ii, BV.sub_tt]),
75 :     (N.op_mul, [BV.mul_ii, BV.mul_rr, BV.mul_rt, BV.mul_tr]),
76 :     (N.op_div, [BV.div_ii, BV.div_rr, BV.div_tr]),
77 :     (N.op_lt, [BV.lt_ii, BV.lt_rr]),
78 :     (N.op_lte, [BV.lte_ii, BV.lte_rr]),
79 :     (N.op_equ, [BV.equ_bb, BV.equ_ii, BV.equ_ss, BV.equ_rr]),
80 :     (N.op_neq, [BV.neq_bb, BV.neq_ii, BV.neq_ss, BV.neq_rr]),
81 :     (N.op_gte, [BV.gte_ii, BV.gte_rr]),
82 :     (N.op_gt, [BV.gt_ii, BV.gt_rr]),
83 :     (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f])
84 :     ]
85 :    
86 :     local
87 : jhr 86 val find = let
88 : jhr 79 val tbl = ATbl.mkTable(64, Fail "op table")
89 :     in
90 :     List.app (ATbl.insert tbl) overloads;
91 : jhr 86 ATbl.find tbl
92 : jhr 79 end
93 :     in
94 : jhr 169 fun findOp name = (case Env.findFunc(env, name)
95 : jhr 79 of SOME x => [x]
96 : jhr 86 | NONE => (case find name
97 :     of SOME xs => xs
98 :     | NONE => raise Fail("unknown operator "^Atom.toString name)
99 :     (* end case *))
100 : jhr 79 (* end case *))
101 : jhr 63 end (* local *)
102 : jhr 79
103 : jhr 169 local
104 :     val restricted = List.foldl Var.Set.add' Var.Set.empty [
105 :     BV.fn_load
106 :     ]
107 :     in
108 :     fun isRestricted x = Var.Set.member (restricted, x)
109 :     end (* local *)
110 :    
111 : jhr 47 end

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