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 544 - (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 518
33 : jhr 527 val newProgram : unit -> program
34 :    
35 :     (* output the code to a file. The string is the basename of the file, the extension
36 :     * is provided by the target.
37 :     *)
38 :     val generate : string * program -> unit
39 :    
40 : jhr 533 (* register the global initialization part of a program *)
41 :     val globalInit : program * stm -> unit
42 :    
43 : jhr 514 structure Var : sig
44 : jhr 518 val global : program * ty * string -> var
45 : jhr 544 val param : ty * string -> var
46 : jhr 518 val state : strand * ty * string -> var
47 : jhr 544 val var : ty * string -> var
48 : jhr 518 val tmp : ty -> var
49 : jhr 514 end
50 :    
51 : jhr 451 (* expression construction *)
52 :     structure Expr : sig
53 :     (* variable references *)
54 : jhr 514 val global : var -> exp
55 :     val getState : var -> exp
56 :     val param : var -> exp
57 :     val var : var -> exp
58 : jhr 451 (* literals *)
59 : jhr 455 val intLit : IntegerLit.integer -> exp
60 :     val floatLit : FloatLit.float -> exp
61 : jhr 454 val stringLit : string -> exp
62 :     val boolLit : bool -> exp
63 : jhr 451 (* select from a vector *)
64 : jhr 514 val select : int * exp -> exp
65 : jhr 451 (* vector (and scalar) arithmetic *)
66 : jhr 454 val add : exp * exp -> exp
67 :     val mul : exp * exp -> exp
68 :     val sub : exp * exp -> exp
69 :     val divide : exp * exp -> exp
70 :     val neg : exp -> exp
71 :     val abs : exp -> exp
72 : jhr 514 val dot : exp * exp -> exp (* dot product *)
73 : jhr 454 val cross : exp * exp -> exp (* cross product *)
74 :     val length : exp -> exp (* vector length *)
75 :     val normalize : exp -> exp (* normalize vector *)
76 : jhr 451 (* comparisons *)
77 : jhr 518 val lt : exp * exp -> exp
78 :     val lte : exp * exp -> exp
79 :     val equ : exp * exp -> exp
80 :     val neq : exp * exp -> exp
81 :     val gte : exp * exp -> exp
82 :     val gt : exp * exp -> exp
83 :     (* logical connectives *)
84 :     val not : exp -> exp
85 :     val && : exp * exp -> exp
86 :     val || : exp * exp -> exp
87 :     (* misc functions *)
88 : jhr 454 val min : exp * exp -> exp
89 :     val max : exp * exp -> exp
90 : jhr 451 (* math functions *)
91 : jhr 454 val pow : exp * exp -> exp
92 :     val sin : exp -> exp
93 :     val cos : exp -> exp
94 :     val sqrt : exp -> exp
95 : jhr 514 (* rounding *)
96 : jhr 525 val trunc : exp -> exp (* truncate real to integral real *)
97 : jhr 514 val round : exp -> exp (* round real to integral real *)
98 : jhr 525 val floor : exp -> exp (* real to integral real floor *)
99 :     val ceil : exp -> exp (* real to integral real ceiling *)
100 : jhr 451 (* conversions *)
101 : jhr 454 val toReal : exp -> exp (* integer to real *)
102 : jhr 525 val truncToInt : exp -> exp (* truncate real to inte *)
103 : jhr 454 val roundToInt : exp -> exp (* round real to int *)
104 :     val ceilToInt : exp -> exp (* ceiling of real to int *)
105 :     val floorToInt : exp -> exp (* floor of real to int *)
106 : jhr 518 (* runtime system hooks *)
107 :     val imageAddr : exp -> exp (* based address of image data *)
108 : jhr 451 end
109 :    
110 :     (* statement construction *)
111 :     structure Stmt : sig
112 : jhr 513 val comment : string list -> stm
113 : jhr 514 val assignState : var * exp -> stm
114 : jhr 528 val decl : var * exp option -> stm (* local variable declaration *)
115 : jhr 514 val assign : var * exp -> stm
116 : jhr 454 val block : stm list -> stm
117 : jhr 532 val ifthen : exp * stm -> stm
118 : jhr 518 val ifthenelse : exp * stm * stm -> stm
119 : jhr 533 (* special Diderot forms *)
120 :     val cons : var * exp list -> stm
121 :     val loadImage : var * int * exp -> stm list
122 :     val input : var * string * exp option -> stm list
123 : jhr 513 val die : unit -> stm
124 :     val stabilize : unit -> stm
125 : jhr 451 end
126 :    
127 : jhr 544 (* strands *)
128 :     structure Strand : sig
129 :     (* define a strand with the given name *)
130 :     val define : program * string -> strand
131 :    
132 :     (* register the strand-state initialization code. The variables are the strand
133 :     * parameters.
134 :     *)
135 :     val init : strand * var list * stm -> unit
136 :     end
137 :    
138 : jhr 433 end

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