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/mltree/mltree.sml
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 469 - (view) (download)
Original Path: sml/branches/SMLNJ/src/MLRISC/mltree/mltree.sml

1 : monnier 245 (* mltree.sml
2 :     *
3 :     * COPYRIGHT (c) 1994 AT&T Bell Laboratories.
4 :     *
5 :     *)
6 :    
7 :     functor MLTreeF(structure Const : CONSTANT
8 :     structure R : REGION
9 : monnier 429 structure S : INSTRUCTION_STREAM
10 : monnier 411 type rextension
11 :     type fextension
12 :     ) : MLTREE =
13 : monnier 245 struct
14 :     structure Constant = Const
15 : monnier 429 structure PseudoOp = S.P
16 :     structure Stream = S
17 : monnier 245 structure Region = R
18 :    
19 : monnier 411 open MLTreeBasis
20 : monnier 245
21 : monnier 411 type rextension = rextension
22 :     type fextension = rextension
23 : monnier 245
24 : monnier 411 type var = int (* variable *)
25 :     type src = var (* source variable *)
26 :     type dst = var (* destination variable *)
27 :     type reg = var (* physical register *)
28 : monnier 245
29 : monnier 411 (* phi-functions for SSA form *)
30 :     datatype phi =
31 :     PHI of ty * dst * src list
32 :     | FPHI of fty * dst * src list
33 :     | CCPHI of dst * src list
34 :    
35 :     (* aliasing declarations
36 :     * These are used to define physical register bindings for SSA names
37 :     *)
38 : monnier 429 type alias = var * reg
39 : monnier 411
40 :     (* statements *)
41 :     datatype stm =
42 :     MV of ty * dst * rexp
43 :     | CCMV of dst * ccexp
44 :     | FMV of fty * dst * fexp
45 :     | COPY of ty * dst list * src list
46 :     | FCOPY of fty * dst list * src list
47 :     | JMP of rexp * Label.label list
48 :     | CALL of rexp * mlrisc list * mlrisc list * Region.region
49 : monnier 245 | RET
50 :    
51 : monnier 411 | STORE of ty * rexp * rexp * Region.region (* address, data *)
52 :     | STORE_UNALIGNED of ty * rexp * rexp * Region.region
53 :     | FSTORE of fty * rexp * fexp * Region.region (* address, data *)
54 :     | FSTORE_UNALIGNED of fty * rexp * fexp * Region.region
55 : monnier 245 | BCC of cond * ccexp * Label.label
56 :     | FBCC of fcond * ccexp * Label.label
57 : monnier 411 | ANNOTATION of stm * Annotations.annotation
58 : monnier 245
59 : monnier 411 (* The following are used internally by SSA optimizations;
60 :     * The frontend should not generate these.
61 :     *)
62 :     | RTL of word ref * word * stm (* an RTL *)
63 :     | RTLPHI of int (* a phi-function at block id *)
64 :     | RTLPINNED of stm (* pinned statement *)
65 :     | RTLPAR of stm list (* parallel execution *)
66 :    
67 : monnier 245 and rexp =
68 : monnier 411 REG of ty * src
69 :    
70 :     (* sizes of constants are inferred by context *)
71 :     | LI of int
72 : monnier 245 | LI32 of Word32.word
73 : monnier 411 | LI64 of Word64.word
74 : monnier 245 | LABEL of LabelExp.labexp
75 :     | CONST of Constant.const
76 :    
77 : monnier 411 | ADD of ty * rexp * rexp
78 :     | SUB of ty * rexp * rexp
79 : monnier 245
80 : monnier 411 (* signed multiplication etc. *)
81 :     | MULS of ty * rexp * rexp
82 :     | DIVS of ty * rexp * rexp
83 :     | REMS of ty * rexp * rexp
84 : monnier 245
85 : monnier 411 (* unsigned multiplication etc. *)
86 :     | MULU of ty * rexp * rexp
87 :     | DIVU of ty * rexp * rexp
88 :     | REMU of ty * rexp * rexp
89 : monnier 245
90 : monnier 411 (* trapping versions of above. These are all signed *)
91 :     | ADDT of ty * rexp * rexp
92 :     | SUBT of ty * rexp * rexp
93 :     | MULT of ty * rexp * rexp
94 :     | DIVT of ty * rexp * rexp
95 :     | REMT of ty * rexp * rexp
96 : monnier 245
97 : monnier 411 | ANDB of ty * rexp * rexp
98 :     | ORB of ty * rexp * rexp
99 :     | XORB of ty * rexp * rexp
100 :     | NOTB of ty * rexp
101 : monnier 245
102 : monnier 411 | SRA of ty * rexp * rexp (* value, shift *)
103 :     | SRL of ty * rexp * rexp
104 :     | SLL of ty * rexp * rexp
105 :    
106 :     (* type promotion *)
107 :     | CVTI2I of ty * ext * rexp
108 :     | CVTF2I of ty * rounding_mode * fexp
109 :    
110 :     (* conditional (eager) evaluation *)
111 :     | COND of ty * ccexp * rexp * rexp
112 :    
113 :     (* integer load *)
114 :     | LOAD of ty * rexp * Region.region
115 :     | LOAD_UNALIGNED of ty * rexp * Region.region
116 :    
117 : monnier 245 | SEQ of stm * rexp
118 :    
119 : monnier 429 | EXTENSION of ty * rextension * rexp list
120 : monnier 411
121 :     | MARK of rexp * Annotations.annotation
122 :    
123 :     (* Used in RTL *)
124 :     | RTLPC (* the program counter; used for describing relative addressing *)
125 :     | RTLMISC of misc_op ref * rexp list
126 :    
127 : monnier 245 and fexp =
128 : monnier 411 FREG of fty * src
129 :     | FLOAD of fty * rexp * Region.region
130 :     | FLOAD_UNALIGNED of fty * rexp * Region.region
131 : monnier 245
132 : monnier 411 | FADD of fty * fexp * fexp
133 :     | FMUL of fty * fexp * fexp
134 :     | FSUB of fty * fexp * fexp
135 :     | FDIV of fty * fexp * fexp
136 :     | FABS of fty * fexp
137 :     | FNEG of fty * fexp
138 :     | FSQRT of fty * fexp
139 : monnier 245
140 : monnier 411 | CVTI2F of fty * ext * rexp
141 :     | CVTF2F of fty * rounding_mode * fexp
142 : monnier 245 | FSEQ of stm * fexp
143 :    
144 : monnier 429 | FEXTENSION of fty * fextension * fexp list
145 : monnier 411
146 :     | FMARK of fexp * Annotations.annotation
147 :    
148 :     (* used in RTL *)
149 :     | RTLFMISC of misc_op ref * fexp list
150 :    
151 : monnier 245 and ccexp =
152 : monnier 411 CC of src
153 :     | CMP of ty * cond * rexp * rexp
154 :     | FCMP of fty * fcond * fexp * fexp
155 :     | CCMARK of ccexp * Annotations.annotation
156 :     | RTLCCMISC of misc_op ref * ccexp list
157 : monnier 245
158 :     and mlrisc = CCR of ccexp | GPR of rexp | FPR of fexp
159 :    
160 : monnier 411 exception Unsupported of string * rexp
161 :    
162 : monnier 429 type ('i,'regmap) stream =
163 :     ('i -> unit,'regmap,Annotations.annotations,
164 :     mlrisc list, alias, phi) Stream.stream
165 :    
166 : monnier 411 end (* MLTREE *)

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