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

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