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

SCM Repository

[diderot] Annotation of /branches/pure-cfg/src/compiler/basis/basis.sml
ViewVC logotype

Annotation of /branches/pure-cfg/src/compiler/basis/basis.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1303 - (view) (download)

1 : jhr 47 (* basis.sml
2 :     *
3 : jhr 435 * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 : jhr 47 * 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 169 (* certain operations are restricted to only appear at global scope (i.e., not in an
14 : jhr 500 * strand body). This function returns true for such operations.
15 : jhr 169 *)
16 :     val isRestricted : AST.var -> bool
17 :    
18 : jhr 78 end = struct
19 : jhr 47
20 : jhr 79 structure N = BasisNames
21 :     structure BV = BasisVars
22 :     structure ATbl = AtomTable
23 : jhr 63
24 : jhr 68 (* non-overloaded operators, etc. *)
25 : jhr 169 val basisFunctions = [
26 : jhr 79 (* non-overloaded operators *)
27 :     BV.op_at,
28 : jhr 766 BV.op_cross,
29 : jhr 820 BV.op_outer,
30 : jhr 79 BV.op_D,
31 : jhr 1303 BV.op_Dotimes,
32 : jhr 79 BV.op_norm,
33 :     BV.op_not,
34 : jhr 63 (* functions *)
35 : jhr 695 BV.fn_atan2,
36 : jhr 79 BV.fn_CL,
37 : jhr 247 BV.fn_convolve, (* depreciated *)
38 : jhr 79 BV.fn_cos,
39 : jhr 766 BV.fn_cross, (* depreciated *)
40 : jhr 820 BV.fn_outer, (* depreciated *)
41 : jhr 766 BV.fn_dot, (* depreciated *)
42 : jhr 682 BV.fn_evals,
43 :     BV.fn_evecs,
44 : jhr 79 BV.fn_inside,
45 :     BV.fn_load,
46 : jhr 143 BV.fn_max,
47 :     BV.fn_min,
48 : jhr 83 BV.fn_modulate,
49 : jhr 717 BV.fn_normalize,
50 : jhr 79 BV.fn_pow,
51 : jhr 91 BV.fn_principleEvec,
52 : jhr 682 BV.fn_sin,
53 : jhr 695 BV.fn_sqrt,
54 :     BV.fn_tan,
55 : jhr 682 BV.fn_trace
56 : jhr 169 ]
57 :    
58 : jhr 754 val basisVars = [
59 : jhr 63 (* kernels *)
60 : jhr 79 BV.kn_bspln3,
61 : jhr 169 BV.kn_bspln5,
62 :     BV.kn_ctmr,
63 : glk 742 BV.kn_tent,
64 : glk 917 BV.kn_c1tent,
65 :     BV.kn_c2ctmr
66 : jhr 63 ]
67 :    
68 : jhr 754 (* overloaded operators and functions *)
69 : jhr 79 val overloads = [
70 : jhr 824 (N.op_lte, [BV.lte_ii, BV.lte_rr]),
71 :     (N.op_equ, [BV.equ_bb, BV.equ_ii, BV.equ_ss, BV.equ_rr]),
72 :     (N.op_neq, [BV.neq_bb, BV.neq_ii, BV.neq_ss, BV.neq_rr]),
73 :     (N.op_gte, [BV.gte_ii, BV.gte_rr]),
74 :     (N.op_gt, [BV.gt_ii, BV.gt_rr]),
75 : jhr 470 (N.op_add, [BV.add_ii, BV.add_tt, BV.add_ff]),
76 :     (N.op_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff]),
77 :     (N.op_mul, [BV.mul_ii, BV.mul_rr, BV.mul_rt, BV.mul_tr, BV.mul_rf, BV.mul_fr]),
78 :     (N.op_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr]),
79 : jhr 824 (N.op_exp, [BV.exp_ri, BV.exp_rr]),
80 : jhr 1069 (N.op_convolve, [BV.convolve_vk, BV.convolve_kv]),
81 : jhr 79 (N.op_lt, [BV.lt_ii, BV.lt_rr]),
82 : jhr 754 (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f]),
83 : jhr 1297 (N.fn_clamp, [BV.clamp_rrr, BV.clamp_vvv]),
84 :     (N.fn_lerp, [BV.lerp5, BV.lerp3]),
85 :     (* assignment operators are bound to the corresponding binary operator *)
86 :     (N.asgn_add, [BV.add_ii, BV.add_tt, BV.add_ff]),
87 :     (N.asgn_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff]),
88 :     (N.asgn_mul, [BV.mul_ii, BV.mul_rr, BV.mul_tr, BV.mul_fr]),
89 :     (N.asgn_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr])
90 : jhr 79 ]
91 :    
92 : jhr 754 (* seed the basis environment *)
93 :     val env = let
94 :     fun insF (x, env) = Env.insertFunc(env, Atom.atom(Var.nameOf x), [x])
95 :     fun insV (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x)
96 :     fun insOvld ((f, fns), env) = Env.insertFunc(env, f, fns)
97 :     val env = List.foldl insF (Env.new()) basisFunctions
98 :     val env = List.foldl insV env basisVars
99 :     val env = List.foldl insOvld env overloads
100 :     in
101 :     env
102 :     end
103 : jhr 79
104 : jhr 169 local
105 :     val restricted = List.foldl Var.Set.add' Var.Set.empty [
106 :     BV.fn_load
107 :     ]
108 :     in
109 :     fun isRestricted x = Var.Set.member (restricted, x)
110 :     end (* local *)
111 :    
112 : jhr 47 end

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