Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/Doc/mltree.html
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/Doc/mltree.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 410 - (view) (download) (as text)
Original Path: sml/branches/SMLNJ/src/MLRISC/Doc/mltree.html

1 : monnier 409 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 :     <HTML>
3 :     <HEAD>
4 :     <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
5 :     <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.7 i686) [Netscape]">
6 :     </HEAD>
7 :     <BODY bgcolor="#FFFFFF">
8 :    
9 :     <CENTER>
10 :     <H1>
11 :     <FONT COLOR="#aa0000">The MLTREE Language</FONT></H1></CENTER>
12 :    
13 :     <h2> Introduction </h2>
14 :     <font color="#ff0000"> MLTree </font>
15 :     is the RTL-like intermediate language used to communicate
16 :     between the MLRISC system and the compiler front-end.
17 :     <p>
18 :     In order to allow the client to specify operations that operate on operands
19 :     of various widths, all integer and floating point operators in MLTREE now
20 :     takes an additional width paramater.
21 :     <p>
22 :     For example,
23 :     <small>
24 :     <pre>
25 :     MV(32,t,
26 :     ADDT(32,MULT(32,REG(32,b),REG(32,b)),
27 :     MULT(32,MULT(32,LI(4),REG(32,a)),REG(32,c))))
28 :     </pre>
29 :     </small>
30 :     <pre>
31 :     computes <tt>t := b*b + 4*a*c</tt>, all in 32-bit precision; while
32 :     <small>
33 :     <pre>
34 :     MV(32,t,
35 :     ADD(32,CVTI2I(32,SIGN_EXTEND,
36 :     LOAD(8,ADD(32,REG(32,a),REG(32,i))))))
37 :     </pre>
38 :     </small>
39 :     loads the byte in address <tt>a+i</tt> and sign extend it to a 32-bit
40 :     value.
41 :    
42 :     <h3> The Details </h3>
43 :     <a href="../mltree/mltree-basis.sig" target=code> MLTREE_BASIS </a>
44 :     <small>
45 :     <pre>
46 :     signature MLTREE_BASIS =
47 :     sig
48 :    
49 :     datatype cond = LT | LTU | LE | LEU | EQ | NE | GE | GEU | GT | GTU
50 :    
51 :     datatype fcond = ? | !<=> | == | ?= | !<> | !?>= | < | ?< | !>= | !?> |
52 :     <= | ?<= | !> | !?<= | > | ?> | !<= | !?< | >= | ?>= |
53 :     !< | !?= | <> | != | !? | <=> | ?<>
54 :    
55 :     datatype ext = SIGN_EXTEND | ZERO_EXTEND
56 :    
57 :     datatype rounding_mode = TO_NEAREST | TO_NEGINF | TO_POSINF | TO_ZERO
58 :    
59 :     type attribs = word
60 :    
61 :     type misc_op = {ty:int,name:string,attribs:attribs,hash:word}
62 :    
63 :     (* Should be datatypes, but FLINT does not optimize them well *)
64 :     type ty = int
65 :     type fty = int
66 :    
67 :     end
68 :     </pre>
69 :     </small>
70 :    
71 :    
72 :     <a href="../mltree/mltree.sig" target=code> MLTREE </a>
73 :     <small>
74 :     <pre>
75 :     signature MLTREE = sig
76 :     structure Constant : <a href="constants.html">CONSTANT</a>
77 :     structure PseudoOp : <a href="pseudo-ops.html">PSEUDO_OPS</a>
78 :     structure Region : <a href="region.html">REGION</a>
79 :     structure BNames : <a href="block-names.html">BLOCK_NAMES</a>
80 :    
81 :     include MLTREE_BASIS
82 :    
83 :     type rextension
84 :     type fextension
85 :    
86 :     type var = int (* variable *)
87 :     type src = var (* source variable *)
88 :     type dst = var (* destination variable *)
89 :     type reg = var (* physical register *)
90 :    
91 :     (* phi-functions for SSA form *)
92 :     datatype phi =
93 :     PHI of ty * dst * src list
94 :     | FPHI of fty * dst * src list
95 :     | CCPHI of dst * src list
96 :    
97 :     (* aliasing declarations
98 :     * These are used to define physical register bindings for SSA names
99 :     *)
100 :     datatype alias = ALIAS of ty * var * reg
101 :     | FALIAS of fty * var * reg
102 :     | CCALIAS of var * reg
103 :    
104 :     (* statements *)
105 :     datatype stm =
106 :     MV of ty * dst * rexp
107 :     | CCMV of dst * ccexp
108 :     | FMV of fty * dst * fexp
109 :     | COPY of ty * dst list * src list
110 :     | FCOPY of fty * dst list * src list
111 :     | JMP of rexp * Label.label list
112 :     | CALL of rexp * mlrisc list * mlrisc list * Region.region
113 :     | RET
114 :    
115 :     | STORE of ty * rexp * rexp * Region.region (* address, data *)
116 :     | STORE_UNALIGNED of ty * rexp * rexp * Region.region
117 :     | FSTORE of fty * rexp * fexp * Region.region (* address, data *)
118 :     | FSTORE_UNALIGNED of fty * rexp * fexp * Region.region
119 :     | BCC of cond * ccexp * Label.label
120 :     | FBCC of fcond * ccexp * Label.label
121 :     | ANNOTATION of stm * Annotations.annotation
122 :    
123 :     (* The following are used internally by SSA optimizations;
124 :     * The frontend should not generate these.
125 :     *)
126 :     | RTL of word ref * word * stm (* a RTL that has been cached *)
127 :     | RTLPHI of int (* a phi-function at block id *)
128 :     | RTLPINNED of stm (* pinned statement *)
129 :     | RTLPAR of stm list (* parallel execution *)
130 :    
131 :     and rexp =
132 :     REG of ty * src
133 :    
134 :     (* sizes of constants are inferred by context *)
135 :     | LI of int
136 :     | LI32 of Word32.word
137 :     | LI64 of Word64.word
138 :     | LABEL of LabelExp.labexp
139 :     | CONST of Constant.const
140 :    
141 :     | ADD of ty * rexp * rexp
142 :     | SUB of ty * rexp * rexp
143 :    
144 :     (* signed multiplication etc. *)
145 :     | MULS of ty * rexp * rexp
146 :     | DIVS of ty * rexp * rexp
147 :     | REMS of ty * rexp * rexp
148 :    
149 :     (* unsigned multiplication etc. *)
150 :     | MULU of ty * rexp * rexp
151 :     | DIVU of ty * rexp * rexp
152 :     | REMU of ty * rexp * rexp
153 :    
154 :     (* trapping versions of above. These are all signed *)
155 :     | ADDT of ty * rexp * rexp
156 :     | SUBT of ty * rexp * rexp
157 :     | MULT of ty * rexp * rexp
158 :     | DIVT of ty * rexp * rexp
159 :     | REMT of ty * rexp * rexp
160 :    
161 :     | ANDB of ty * rexp * rexp
162 :     | ORB of ty * rexp * rexp
163 :     | XORB of ty * rexp * rexp
164 :     | NOTB of ty * rexp
165 :    
166 :     | SRA of ty * rexp * rexp (* value, shift *)
167 :     | SRL of ty * rexp * rexp
168 :     | SLL of ty * rexp * rexp
169 :    
170 :     (* type promotion *)
171 :     | CVTI2I of ty * ext * rexp
172 :     | CVTF2I of ty * rounding_mode * fexp
173 :    
174 :     (*
175 :     * COND(ty,cc,e1,e2):
176 :     * Evaluate into either e1 or e2, depending on cc.
177 :     * Both e1 and e2 can be evaluated eagerly.
178 :     *)
179 :     | COND of ty * ccexp * rexp * rexp
180 :    
181 :     (* integer load *)
182 :     | LOAD of ty * rexp * Region.region
183 :     | LOAD_UNALIGNED of ty * rexp * Region.region
184 :    
185 :     | SEQ of stm * rexp
186 :    
187 :     | EXTENSION of rextension * rexp list
188 :    
189 :     | MARK of rexp * Annotations.annotation
190 :    
191 :     (* Used in RTL *)
192 :     | RTLPC (* the program counter; used for describing relative addressing *)
193 :     | RTLMISC of misc_op ref * rexp list
194 :    
195 :     and fexp =
196 :     FREG of fty * src
197 :     | FLOAD of fty * rexp * Region.region
198 :     | FLOAD_UNALIGNED of fty * rexp * Region.region
199 :    
200 :     | FADD of fty * fexp * fexp
201 :     | FMUL of fty * fexp * fexp
202 :     | FSUB of fty * fexp * fexp
203 :     | FDIV of fty * fexp * fexp
204 :     | FABS of fty * fexp
205 :     | FNEG of fty * fexp
206 :     | FSQRT of fty * fexp
207 :    
208 :     | CVTI2F of fty * ext * rexp
209 :     | CVTF2F of fty * rounding_mode * fexp
210 :     | FSEQ of stm * fexp
211 :    
212 :     | FEXTENSION of fextension * fexp list
213 :    
214 :     | FMARK of fexp * Annotations.annotation
215 :    
216 :     (* used in RTL *)
217 :     | RTLFMISC of misc_op ref * fexp list
218 :    
219 :     and ccexp =
220 :     CC of src
221 :     | CMP of ty * cond * rexp * rexp
222 :     | FCMP of fty * fcond * fexp * fexp
223 :     | CCMARK of ccexp * Annotations.annotation
224 :     | RTLCCMISC of misc_op ref * ccexp list
225 :    
226 :     and mlrisc = CCR of ccexp | GPR of rexp | FPR of fexp
227 :    
228 :     datatype mltree =
229 :     BEGINCLUSTER
230 :     | PSEUDO_OP of PseudoOp.pseudo_op
231 :     | DEFINELABEL of Label.label
232 :     | ENTRYLABEL of Label.label
233 :     | CODE of stm list
234 :     | ALIASDECLS of alias list
235 :     | PHIFUNS of phi list
236 :     | BLOCK_NAME of BNames.name
237 :     | BLOCK_ANNOTATION of Annotations.annotation
238 :     | ESCAPEBLOCK of mlrisc list
239 :     | ENDCLUSTER of int Intmap.intmap * Annotations.annotations
240 :    
241 :     exception Unsupported of string * rexp
242 :    
243 :     end (* MLTREE *)
244 :    
245 :     </pre>
246 :     </small>
247 :    
248 :     <HR>
249 :     <FONT SIZE="-2">
250 :     <ADDRESS>
251 :     <A HREF="mailto:leunga@cs.nyu.edu">Allen Leung</A></ADDRESS>
252 :     <BR>
253 :    
254 :     </BODY>
255 :     </HTML>

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