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 476 - (view) (download)

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

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