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

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