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

SCM Repository

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

Annotation of /branches/pure-cfg/src/compiler/codegen/target-sig.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 623 - (view) (download)

1 : jhr 433 (* target-sig.sml
2 :     *
3 : jhr 435 * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 : jhr 433 * All rights reserved.
5 :     *
6 :     * Support for generating C-like code (e.g., C, OpenCL, or CUDA)
7 :     *)
8 :    
9 :     signature TARGET =
10 :     sig
11 :    
12 : jhr 451 type program
13 : jhr 499 type strand
14 : jhr 514 type var
15 : jhr 454 type exp
16 :     type stm
17 : jhr 518 type ty
18 : jhr 451
19 : jhr 518 (* the maximum width of a vector of reals on the target. This value takes into
20 :     * account the actual size of reals (i.e., 32 or 64 bits).
21 :     *)
22 :     val vectorWidth : unit -> int
23 :    
24 :     (* target types *)
25 :     val boolTy : ty
26 :     val intTy : ty
27 :     val realTy : ty
28 :     val vecTy : int -> ty
29 :     val ivecTy : int -> ty
30 : jhr 533 val stringTy : ty
31 : jhr 548 val imageTy : ImageInfo.info -> ty
32 :     val imageDataTy : ImageInfo.info -> ty
33 : jhr 518
34 : jhr 527 val newProgram : unit -> program
35 :    
36 :     (* output the code to a file. The string is the basename of the file, the extension
37 :     * is provided by the target.
38 :     *)
39 :     val generate : string * program -> unit
40 :    
41 : jhr 533 (* register the global initialization part of a program *)
42 :     val globalInit : program * stm -> unit
43 :    
44 : jhr 618 (* register the initially code for a program *)
45 : jhr 623 val initially : {
46 :     prog : program,
47 :     isArray : bool,
48 :     iterPrefix : stm list,
49 :     iters : (var * exp * exp) list,
50 :     createPrefix : stm list,
51 :     strand : strand,
52 :     args : exp list
53 :     } -> unit
54 : jhr 618
55 : jhr 514 structure Var : sig
56 : jhr 518 val global : program * ty * string -> var
57 : jhr 544 val param : ty * string -> var
58 : jhr 518 val state : strand * ty * string -> var
59 : jhr 544 val var : ty * string -> var
60 : jhr 518 val tmp : ty -> var
61 : jhr 514 end
62 :    
63 : jhr 451 (* expression construction *)
64 :     structure Expr : sig
65 : jhr 549 (* return true if the given expression from is allowed as a subexpression *)
66 :     val allowedInline : exp -> bool
67 : jhr 451 (* variable references *)
68 : jhr 514 val global : var -> exp
69 :     val getState : var -> exp
70 :     val param : var -> exp
71 :     val var : var -> exp
72 : jhr 451 (* literals *)
73 : jhr 455 val intLit : IntegerLit.integer -> exp
74 :     val floatLit : FloatLit.float -> exp
75 : jhr 454 val stringLit : string -> exp
76 :     val boolLit : bool -> exp
77 : jhr 451 (* select from a vector *)
78 : jhr 514 val select : int * exp -> exp
79 : jhr 451 (* vector (and scalar) arithmetic *)
80 : jhr 454 val add : exp * exp -> exp
81 :     val mul : exp * exp -> exp
82 :     val sub : exp * exp -> exp
83 :     val divide : exp * exp -> exp
84 :     val neg : exp -> exp
85 :     val abs : exp -> exp
86 : jhr 514 val dot : exp * exp -> exp (* dot product *)
87 : jhr 454 val cross : exp * exp -> exp (* cross product *)
88 :     val length : exp -> exp (* vector length *)
89 :     val normalize : exp -> exp (* normalize vector *)
90 : jhr 451 (* comparisons *)
91 : jhr 518 val lt : exp * exp -> exp
92 :     val lte : exp * exp -> exp
93 :     val equ : exp * exp -> exp
94 :     val neq : exp * exp -> exp
95 :     val gte : exp * exp -> exp
96 :     val gt : exp * exp -> exp
97 :     (* logical connectives *)
98 :     val not : exp -> exp
99 :     val && : exp * exp -> exp
100 :     val || : exp * exp -> exp
101 :     (* misc functions *)
102 : jhr 454 val min : exp * exp -> exp
103 :     val max : exp * exp -> exp
104 : jhr 451 (* math functions *)
105 : jhr 454 val pow : exp * exp -> exp
106 :     val sin : exp -> exp
107 :     val cos : exp -> exp
108 :     val sqrt : exp -> exp
109 : jhr 514 (* rounding *)
110 : jhr 525 val trunc : exp -> exp (* truncate real to integral real *)
111 : jhr 514 val round : exp -> exp (* round real to integral real *)
112 : jhr 525 val floor : exp -> exp (* real to integral real floor *)
113 :     val ceil : exp -> exp (* real to integral real ceiling *)
114 : jhr 451 (* conversions *)
115 : jhr 565 val toInt : exp -> exp (* real to integer *)
116 : jhr 454 val toReal : exp -> exp (* integer to real *)
117 : jhr 518 (* runtime system hooks *)
118 :     val imageAddr : exp -> exp (* based address of image data *)
119 : jhr 548 val getImgData : exp -> exp (* fetch a data value from the *)
120 :     (* specified address and convert to *)
121 :     (* a real *)
122 :     val posToImgSpace : exp * exp -> exp (* map world-space pos to image-space *)
123 :     val inside : exp * exp * int -> exp (* inside image domain test, *)
124 : jhr 547 (* where params are: dim, pos, *)
125 :     (* img , and border width *)
126 : jhr 451 end
127 :    
128 :     (* statement construction *)
129 :     structure Stmt : sig
130 : jhr 513 val comment : string list -> stm
131 : jhr 514 val assignState : var * exp -> stm
132 : jhr 528 val decl : var * exp option -> stm (* local variable declaration *)
133 : jhr 514 val assign : var * exp -> stm
134 : jhr 454 val block : stm list -> stm
135 : jhr 532 val ifthen : exp * stm -> stm
136 : jhr 518 val ifthenelse : exp * stm * stm -> stm
137 : jhr 617 val for : var * exp * exp * stm -> stm
138 : jhr 533 (* special Diderot forms *)
139 :     val cons : var * exp list -> stm
140 : jhr 554 val getImgData : var * exp -> stm list (* load a vector of data from the *)
141 : jhr 548 (* specified address and convert to *)
142 :     (* a vector *)
143 : jhr 533 val loadImage : var * int * exp -> stm list
144 :     val input : var * string * exp option -> stm list
145 : jhr 564 val exit : unit -> stm
146 : jhr 562 (* update method exits *)
147 : jhr 564 val active : unit -> stm
148 :     val stabilize : unit -> stm
149 : jhr 513 val die : unit -> stm
150 : jhr 451 end
151 :    
152 : jhr 544 (* strands *)
153 :     structure Strand : sig
154 :     (* define a strand with the given name *)
155 :     val define : program * string -> strand
156 :     (* register the strand-state initialization code. The variables are the strand
157 :     * parameters.
158 :     *)
159 :     val init : strand * var list * stm -> unit
160 : jhr 547 (* register a strand method *)
161 :     val method : strand * string * stm -> unit
162 : jhr 544 end
163 :    
164 : jhr 433 end

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