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/hppa/emit/hppaMC.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/hppa/emit/hppaMC.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 984 - (view) (download)

1 : monnier 411 (*
2 : leunga 744 * WARNING: This file was automatically generated by MDLGen (v3.0)
3 :     * from the machine description file "hppa/hppa.mdl".
4 :     * DO NOT EDIT this file directly
5 : monnier 245 *)
6 :    
7 :    
8 : monnier 411 functor HppaMCEmitter(structure Instr : HPPAINSTR
9 : george 984 structure MLTreeEval : MLTREE_EVAL where T = Instr.T
10 :     structure Stream : INSTRUCTION_STREAM
11 : monnier 411 structure CodeString : CODE_STRING
12 :     ) : INSTRUCTION_EMITTER =
13 : monnier 245 struct
14 : monnier 411 structure I = Instr
15 :     structure C = I.C
16 :     structure Constant = I.Constant
17 : leunga 775 structure T = I.T
18 : george 984 structure S = Stream
19 : monnier 411 structure P = S.P
20 :     structure W = Word32
21 :    
22 : george 545 (* Hppa is big endian *)
23 : monnier 411
24 :     fun error msg = MLRiscErrorMsg.error("HppaMC",msg)
25 : monnier 429 fun makeStream _ =
26 : monnier 411 let infix && || << >> ~>>
27 :     val op << = W.<<
28 :     val op >> = W.>>
29 :     val op ~>> = W.~>>
30 :     val op || = W.orb
31 :     val op && = W.andb
32 :     val itow = W.fromInt
33 :     fun emit_bool false = 0w0 : W.word
34 :     | emit_bool true = 0w1 : W.word
35 :     val emit_int = itow
36 :     fun emit_word w = w
37 :     fun emit_label l = itow(Label.addrOf l)
38 : george 984 fun emit_labexp le = itow(MLTreeEval.valueOf le)
39 : monnier 411 fun emit_const c = itow(Constant.valueOf c)
40 :     val loc = ref 0
41 :    
42 :     (* emit a byte *)
43 :     fun eByte b =
44 :     let val i = !loc in loc := i + 1; CodeString.update(i,b) end
45 :    
46 :     (* emit the low order byte of a word *)
47 :     (* note: fromLargeWord strips the high order bits! *)
48 :     fun eByteW w =
49 :     let val i = !loc
50 :     in loc := i + 1; CodeString.update(i,Word8.fromLargeWord w) end
51 :    
52 :     fun doNothing _ = ()
53 : george 909 fun fail _ = raise Fail "MCEmitter"
54 : leunga 815 fun getAnnotations () = error "getAnnotations"
55 : monnier 411
56 :     fun pseudoOp pOp = P.emitValue{pOp=pOp, loc= !loc,emit=eByte}
57 :    
58 :     fun init n = (CodeString.init n; loc := 0)
59 :    
60 :    
61 : leunga 744 fun eWord32 w =
62 :     let val b8 = w
63 :     val w = w >> 0wx8
64 :     val b16 = w
65 :     val w = w >> 0wx8
66 :     val b24 = w
67 :     val w = w >> 0wx8
68 :     val b32 = w
69 : monnier 411 in
70 : george 545 ( eByteW b32;
71 : leunga 744 eByteW b24;
72 :     eByteW b16;
73 :     eByteW b8 )
74 : monnier 411 end
75 : george 889 fun emit_GP r = itow (CellsBasis.physicalRegisterNum r)
76 :     and emit_FP r = itow (CellsBasis.physicalRegisterNum r)
77 :     and emit_CR r = itow (CellsBasis.physicalRegisterNum r)
78 :     and emit_CC r = itow (CellsBasis.physicalRegisterNum r)
79 :     and emit_MEM r = itow (CellsBasis.physicalRegisterNum r)
80 :     and emit_CTRL r = itow (CellsBasis.physicalRegisterNum r)
81 :     and emit_CELLSET r = itow (CellsBasis.physicalRegisterNum r)
82 : george 545 fun emit_fmt (I.SGL) = (0wx0 : Word32.word)
83 :     | emit_fmt (I.DBL) = (0wx1 : Word32.word)
84 :     | emit_fmt (I.QUAD) = (0wx3 : Word32.word)
85 :     and emit_loadi (I.LDW) = (0wx12 : Word32.word)
86 :     | emit_loadi (I.LDH) = (0wx11 : Word32.word)
87 :     | emit_loadi (I.LDB) = (0wx10 : Word32.word)
88 :     and emit_store (I.STW) = (0wx1a : Word32.word)
89 :     | emit_store (I.STH) = (0wx19 : Word32.word)
90 :     | emit_store (I.STB) = (0wx18 : Word32.word)
91 :     and emit_load (I.LDWX) = (0wx2, 0wx0, 0wx0)
92 :     | emit_load (I.LDWX_S) = (0wx2, 0wx1, 0wx0)
93 :     | emit_load (I.LDWX_M) = (0wx2, 0wx0, 0wx1)
94 :     | emit_load (I.LDWX_SM) = (0wx2, 0wx1, 0wx1)
95 :     | emit_load (I.LDHX) = (0wx1, 0wx0, 0wx0)
96 :     | emit_load (I.LDHX_S) = (0wx1, 0wx1, 0wx0)
97 :     | emit_load (I.LDHX_M) = (0wx1, 0wx0, 0wx1)
98 :     | emit_load (I.LDHX_SM) = (0wx1, 0wx1, 0wx1)
99 :     | emit_load (I.LDBX) = (0wx0, 0wx0, 0wx0)
100 :     | emit_load (I.LDBX_M) = (0wx0, 0wx0, 0wx1)
101 :     and emit_cmp (I.COMBT) = (0wx20 : Word32.word)
102 :     | emit_cmp (I.COMBF) = (0wx22 : Word32.word)
103 :     and emit_cmpi (I.COMIBT) = (0wx21 : Word32.word)
104 :     | emit_cmpi (I.COMIBF) = (0wx23 : Word32.word)
105 :     and emit_arith (I.ADD) = (0wx18 : Word32.word)
106 :     | emit_arith (I.ADDL) = (0wx28 : Word32.word)
107 :     | emit_arith (I.ADDO) = (0wx38 : Word32.word)
108 :     | emit_arith (I.SH1ADD) = (0wx19 : Word32.word)
109 :     | emit_arith (I.SH1ADDL) = (0wx29 : Word32.word)
110 :     | emit_arith (I.SH1ADDO) = (0wx39 : Word32.word)
111 :     | emit_arith (I.SH2ADD) = (0wx1a : Word32.word)
112 :     | emit_arith (I.SH2ADDL) = (0wx2a : Word32.word)
113 :     | emit_arith (I.SH2ADDO) = (0wx3a : Word32.word)
114 :     | emit_arith (I.SH3ADD) = (0wx1b : Word32.word)
115 :     | emit_arith (I.SH3ADDL) = (0wx2b : Word32.word)
116 :     | emit_arith (I.SH3ADDO) = (0wx3b : Word32.word)
117 :     | emit_arith (I.SUB) = (0wx10 : Word32.word)
118 :     | emit_arith (I.SUBO) = (0wx30 : Word32.word)
119 :     | emit_arith (I.OR) = (0wx9 : Word32.word)
120 :     | emit_arith (I.XOR) = (0wxa : Word32.word)
121 :     | emit_arith (I.AND) = (0wx8 : Word32.word)
122 :     | emit_arith (I.ANDCM) = (0wx0 : Word32.word)
123 :     and emit_arithi (I.ADDI) = (0wx2d, 0wx0)
124 :     | emit_arithi (I.ADDIO) = (0wx2d, 0wx1)
125 :     | emit_arithi (I.ADDIL) = error "ADDIL"
126 :     | emit_arithi (I.SUBI) = (0wx25, 0wx0)
127 :     | emit_arithi (I.SUBIO) = (0wx25, 0wx1)
128 :     and emit_farith (I.FADD_S) = (0wx0, 0wx0)
129 : monnier 429 | emit_farith (I.FADD_D) = (0wx0, 0wx1)
130 :     | emit_farith (I.FADD_Q) = (0wx0, 0wx3)
131 :     | emit_farith (I.FSUB_S) = (0wx1, 0wx0)
132 :     | emit_farith (I.FSUB_D) = (0wx1, 0wx1)
133 :     | emit_farith (I.FSUB_Q) = (0wx1, 0wx3)
134 :     | emit_farith (I.FMPY_S) = (0wx2, 0wx0)
135 :     | emit_farith (I.FMPY_D) = (0wx2, 0wx1)
136 :     | emit_farith (I.FMPY_Q) = (0wx2, 0wx3)
137 :     | emit_farith (I.FDIV_S) = (0wx3, 0wx0)
138 :     | emit_farith (I.FDIV_D) = (0wx3, 0wx1)
139 :     | emit_farith (I.FDIV_Q) = (0wx3, 0wx3)
140 : george 545 | emit_farith (I.XMPYU) = error "XMPYU"
141 :     and emit_funary (I.FCPY_S) = (0wx2, 0wx0)
142 :     | emit_funary (I.FCPY_D) = (0wx2, 0wx1)
143 :     | emit_funary (I.FCPY_Q) = (0wx2, 0wx3)
144 :     | emit_funary (I.FABS_S) = (0wx3, 0wx0)
145 :     | emit_funary (I.FABS_D) = (0wx3, 0wx1)
146 :     | emit_funary (I.FABS_Q) = (0wx3, 0wx3)
147 :     | emit_funary (I.FSQRT_S) = (0wx4, 0wx0)
148 :     | emit_funary (I.FSQRT_D) = (0wx4, 0wx1)
149 :     | emit_funary (I.FSQRT_Q) = (0wx4, 0wx3)
150 :     | emit_funary (I.FRND_S) = (0wx5, 0wx0)
151 :     | emit_funary (I.FRND_D) = (0wx5, 0wx1)
152 :     | emit_funary (I.FRND_Q) = (0wx5, 0wx3)
153 :     and emit_fcnv (I.FCNVFF_SD) = (0wx0, 0wx0, 0wx1)
154 :     | emit_fcnv (I.FCNVFF_SQ) = (0wx0, 0wx0, 0wx3)
155 :     | emit_fcnv (I.FCNVFF_DS) = (0wx0, 0wx1, 0wx0)
156 :     | emit_fcnv (I.FCNVFF_DQ) = (0wx0, 0wx1, 0wx3)
157 :     | emit_fcnv (I.FCNVFF_QS) = (0wx0, 0wx3, 0wx0)
158 :     | emit_fcnv (I.FCNVFF_QD) = (0wx0, 0wx3, 0wx1)
159 :     | emit_fcnv (I.FCNVXF_S) = (0wx1, 0wx0, 0wx0)
160 :     | emit_fcnv (I.FCNVXF_D) = (0wx1, 0wx0, 0wx1)
161 :     | emit_fcnv (I.FCNVXF_Q) = (0wx1, 0wx0, 0wx3)
162 :     | emit_fcnv (I.FCNVFX_S) = (0wx2, 0wx0, 0wx0)
163 :     | emit_fcnv (I.FCNVFX_D) = (0wx2, 0wx1, 0wx0)
164 :     | emit_fcnv (I.FCNVFX_Q) = (0wx2, 0wx3, 0wx0)
165 :     | emit_fcnv (I.FCNVFXT_S) = (0wx3, 0wx0, 0wx0)
166 :     | emit_fcnv (I.FCNVFXT_D) = (0wx3, 0wx1, 0wx0)
167 :     | emit_fcnv (I.FCNVFXT_Q) = (0wx3, 0wx3, 0wx0)
168 :     and emit_fstorex (I.FSTDX) = (0wxb, 0wx0, 0wx0, 0wx0)
169 :     | emit_fstorex (I.FSTDX_S) = (0wxb, 0wx0, 0wx1, 0wx0)
170 :     | emit_fstorex (I.FSTDX_M) = (0wxb, 0wx0, 0wx0, 0wx1)
171 :     | emit_fstorex (I.FSTDX_SM) = (0wxb, 0wx0, 0wx1, 0wx1)
172 :     | emit_fstorex (I.FSTWX) = (0wx9, 0wx1, 0wx0, 0wx0)
173 :     | emit_fstorex (I.FSTWX_S) = (0wx9, 0wx1, 0wx1, 0wx0)
174 :     | emit_fstorex (I.FSTWX_M) = (0wx9, 0wx1, 0wx0, 0wx1)
175 :     | emit_fstorex (I.FSTWX_SM) = (0wx9, 0wx1, 0wx1, 0wx1)
176 : monnier 429 and emit_floadx (I.FLDDX) = (0wxb, 0wx0, 0wx0, 0wx0)
177 :     | emit_floadx (I.FLDDX_S) = (0wxb, 0wx0, 0wx1, 0wx0)
178 :     | emit_floadx (I.FLDDX_M) = (0wxb, 0wx0, 0wx0, 0wx1)
179 :     | emit_floadx (I.FLDDX_SM) = (0wxb, 0wx0, 0wx1, 0wx1)
180 :     | emit_floadx (I.FLDWX) = (0wx9, 0wx1, 0wx0, 0wx0)
181 :     | emit_floadx (I.FLDWX_S) = (0wx9, 0wx1, 0wx1, 0wx0)
182 :     | emit_floadx (I.FLDWX_M) = (0wx9, 0wx1, 0wx0, 0wx1)
183 :     | emit_floadx (I.FLDWX_SM) = (0wx9, 0wx1, 0wx1, 0wx1)
184 : george 545 and emit_bcond (I.EQ) = (0wx1 : Word32.word)
185 :     | emit_bcond (I.LT) = (0wx2 : Word32.word)
186 :     | emit_bcond (I.LE) = (0wx3 : Word32.word)
187 :     | emit_bcond (I.LTU) = (0wx4 : Word32.word)
188 :     | emit_bcond (I.LEU) = (0wx5 : Word32.word)
189 :     | emit_bcond (I.NE) = error "NE"
190 :     | emit_bcond (I.GE) = error "GE"
191 :     | emit_bcond (I.GT) = error "GT"
192 :     | emit_bcond (I.GTU) = error "GTU"
193 :     | emit_bcond (I.GEU) = error "GEU"
194 :     and emit_bitcond (I.BSET) = (0wx2 : Word32.word)
195 :     | emit_bitcond (I.BCLR) = (0wx6 : Word32.word)
196 : monnier 411 and emit_fcond (I.False_) = (0wx0 : Word32.word)
197 :     | emit_fcond (I.False) = (0wx1 : Word32.word)
198 :     | emit_fcond (I.?) = (0wx2 : Word32.word)
199 :     | emit_fcond (I.!<=>) = (0wx3 : Word32.word)
200 :     | emit_fcond (I.==) = (0wx4 : Word32.word)
201 :     | emit_fcond (I.EQT) = (0wx5 : Word32.word)
202 :     | emit_fcond (I.?=) = (0wx6 : Word32.word)
203 :     | emit_fcond (I.!<>) = (0wx7 : Word32.word)
204 :     | emit_fcond (I.!?>=) = (0wx8 : Word32.word)
205 :     | emit_fcond (I.<) = (0wx9 : Word32.word)
206 :     | emit_fcond (I.?<) = (0wxa : Word32.word)
207 :     | emit_fcond (I.!>=) = (0wxb : Word32.word)
208 :     | emit_fcond (I.!?>) = (0wxc : Word32.word)
209 :     | emit_fcond (I.<=) = (0wxd : Word32.word)
210 :     | emit_fcond (I.?<=) = (0wxe : Word32.word)
211 :     | emit_fcond (I.!>) = (0wxf : Word32.word)
212 :     | emit_fcond (I.!?<=) = (0wx10 : Word32.word)
213 :     | emit_fcond (I.>) = (0wx11 : Word32.word)
214 :     | emit_fcond (I.?>) = (0wx12 : Word32.word)
215 :     | emit_fcond (I.!<=) = (0wx13 : Word32.word)
216 :     | emit_fcond (I.!?<) = (0wx14 : Word32.word)
217 :     | emit_fcond (I.>=) = (0wx15 : Word32.word)
218 :     | emit_fcond (I.?>=) = (0wx16 : Word32.word)
219 :     | emit_fcond (I.!<) = (0wx17 : Word32.word)
220 :     | emit_fcond (I.!?=) = (0wx18 : Word32.word)
221 :     | emit_fcond (I.<>) = (0wx19 : Word32.word)
222 :     | emit_fcond (I.!=) = (0wx1a : Word32.word)
223 :     | emit_fcond (I.NET) = (0wx1b : Word32.word)
224 :     | emit_fcond (I.!?) = (0wx1c : Word32.word)
225 :     | emit_fcond (I.<=>) = (0wx1d : Word32.word)
226 :     | emit_fcond (I.True_) = (0wx1e : Word32.word)
227 :     | emit_fcond (I.True) = (0wx1f : Word32.word)
228 : leunga 744 fun Load {Op, b, t, im14} =
229 :     let val b = emit_GP b
230 :     val t = emit_GP t
231 : george 545 in eWord32 ((Op << 0wx1a) + ((b << 0wx15) + ((t << 0wx10) + (im14 && 0wx3fff))))
232 : monnier 411 end
233 : leunga 744 and Store {st, b, r, im14} =
234 :     let val st = emit_store st
235 :     val b = emit_GP b
236 :     val r = emit_GP r
237 : george 545 in eWord32 ((st << 0wx1a) + ((b << 0wx15) + ((r << 0wx10) + (im14 && 0wx3fff))))
238 : monnier 411 end
239 : leunga 744 and IndexedLoad {Op, b, x, u, ext4, m, t} =
240 :     let val b = emit_GP b
241 :     val x = emit_GP x
242 :     val t = emit_GP t
243 : george 545 in eWord32 ((Op << 0wx1a) + ((b << 0wx15) + ((x << 0wx10) + ((u << 0wxd) + ((ext4 << 0wx6) + ((m << 0wx5) + (t + 0wxc000)))))))
244 : monnier 411 end
245 : leunga 744 and ShortDispLoad {Op, b, im5, s, a, cc, ext4, m, t} =
246 :     let val b = emit_GP b
247 :     val t = emit_GP t
248 : george 545 in eWord32 ((Op << 0wx1a) + ((b << 0wx15) + (((im5 && 0wx1f) << 0wx10) + ((s << 0wxe) + ((a << 0wxd) + ((cc << 0wxa) + ((ext4 << 0wx6) + ((m << 0wx5) + (t + 0wx1000)))))))))
249 : monnier 411 end
250 : george 545 and ShoftDispShort {Op, b, r, s, a, cc, ext4, m, im5} = eWord32 ((Op << 0wx1a) + ((b << 0wx15) + ((r << 0wx10) + ((s << 0wxe) + ((a << 0wxd) + ((cc << 0wxa) + ((ext4 << 0wx6) + ((m << 0wx5) + ((im5 && 0wx1f) + 0wx1000)))))))))
251 : leunga 744 and LongImmed {Op, r, im21} =
252 :     let val r = emit_GP r
253 : george 545 in eWord32 ((Op << 0wx1a) + ((r << 0wx15) + (im21 && 0wx1fffff)))
254 : monnier 429 end
255 : leunga 744 and Arith {r2, r1, a, t} =
256 :     let val r2 = emit_GP r2
257 :     val r1 = emit_GP r1
258 :     val a = emit_arith a
259 :     val t = emit_GP t
260 : george 545 in eWord32 ((r2 << 0wx15) + ((r1 << 0wx10) + ((a << 0wx6) + (t + 0wx8000000))))
261 : monnier 411 end
262 : leunga 744 and Arithi {Op, r, t, e, im11} =
263 :     let val r = emit_GP r
264 :     val t = emit_GP t
265 : george 545 in eWord32 ((Op << 0wx1a) + ((r << 0wx15) + ((t << 0wx10) + ((e << 0wxb) + (im11 && 0wx7ff)))))
266 : monnier 429 end
267 : leunga 744 and Extract {Op, r, t, ext3, p, clen} =
268 :     let val r = emit_GP r
269 :     val t = emit_GP t
270 :     val p = emit_int p
271 :     val clen = emit_int clen
272 : george 545 in eWord32 ((Op << 0wx1a) + ((r << 0wx15) + ((t << 0wx10) + ((ext3 << 0wxa) + ((p << 0wx5) + clen)))))
273 : monnier 411 end
274 : leunga 744 and Deposit {Op, t, r, ext3, cp, clen} =
275 :     let val t = emit_GP t
276 :     val r = emit_GP r
277 :     val cp = emit_int cp
278 :     val clen = emit_int clen
279 : george 545 in eWord32 ((Op << 0wx1a) + ((t << 0wx15) + ((r << 0wx10) + ((ext3 << 0wxa) + ((cp << 0wx5) + clen)))))
280 : monnier 429 end
281 : leunga 744 and Shift {Op, r2, r1, ext3, cp, t} =
282 :     let val r2 = emit_GP r2
283 :     val r1 = emit_GP r1
284 :     val t = emit_GP t
285 : george 545 in eWord32 ((Op << 0wx1a) + ((r2 << 0wx15) + ((r1 << 0wx10) + ((ext3 << 0wxa) + ((cp << 0wx5) + t)))))
286 : monnier 411 end
287 : leunga 744 and ConditionalBranch {Op, r2, r1, c, w1, n, w} =
288 :     let val r2 = emit_GP r2
289 :     val r1 = emit_GP r1
290 :     val c = emit_bcond c
291 :     val n = emit_bool n
292 : george 545 in eWord32 ((Op << 0wx1a) + ((r2 << 0wx15) + ((r1 << 0wx10) + ((c << 0wxd) + ((w1 << 0wx2) + ((n << 0wx1) + w))))))
293 : monnier 429 end
294 : leunga 744 and ConditionalBranchi {Op, r2, im5, c, w1, n, w} =
295 :     let val r2 = emit_GP r2
296 :     val c = emit_bcond c
297 :     val n = emit_bool n
298 : george 545 in eWord32 ((Op << 0wx1a) + ((r2 << 0wx15) + ((im5 << 0wx10) + ((c << 0wxd) + ((w1 << 0wx2) + ((n << 0wx1) + w))))))
299 : monnier 411 end
300 : leunga 744 and BranchExternal {Op, b, w1, s, w2, n, w} =
301 :     let val b = emit_GP b
302 :     val n = emit_bool n
303 : george 545 in eWord32 ((Op << 0wx1a) + ((b << 0wx15) + ((w1 << 0wx10) + ((s << 0wxd) + ((w2 << 0wx2) + ((n << 0wx1) + w))))))
304 : monnier 411 end
305 : leunga 744 and BranchAndLink {Op, t, w1, ext3, w2, n, w} =
306 :     let val t = emit_GP t
307 :     val n = emit_bool n
308 : george 545 in eWord32 ((Op << 0wx1a) + ((t << 0wx15) + ((w1 << 0wx10) + ((ext3 << 0wxd) + ((w2 << 0wx2) + ((n << 0wx1) + w))))))
309 : monnier 411 end
310 : leunga 744 and BranchVectored {Op, t, x, ext3, n} =
311 :     let val t = emit_GP t
312 :     val x = emit_GP x
313 :     val n = emit_bool n
314 : george 545 in eWord32 ((Op << 0wx1a) + ((t << 0wx15) + ((x << 0wx10) + ((ext3 << 0wxd) + (n << 0wx1)))))
315 : monnier 411 end
316 : george 545 and Break {Op, im13, ext8, im5} = eWord32 ((Op << 0wx1a) + (((im13 && 0wx1fff) << 0wxd) + ((ext8 << 0wx5) + (im5 && 0wx1f))))
317 : leunga 744 and BranchOnBit {p, r, c, w1, n, w} =
318 :     let val p = emit_int p
319 :     val r = emit_GP r
320 :     val n = emit_bool n
321 : george 545 in eWord32 ((p << 0wx15) + ((r << 0wx10) + ((c << 0wxd) + ((w1 << 0wx2) + ((n << 0wx1) + (w + 0wxc4000000))))))
322 : monnier 411 end
323 : leunga 744 and MoveToControlReg {Op, t, r, rv, ext8} =
324 :     let val t = emit_CR t
325 :     val r = emit_GP r
326 : george 545 in eWord32 ((Op << 0wx1a) + ((t << 0wx15) + ((r << 0wx10) + ((rv << 0wxd) + (ext8 << 0wx5)))))
327 : monnier 411 end
328 : leunga 744 and CompareClear {r2, r1, c, f, ext, t} =
329 :     let val r2 = emit_GP r2
330 :     val r1 = emit_GP r1
331 :     val t = emit_GP t
332 : george 545 in eWord32 ((r2 << 0wx15) + ((r1 << 0wx10) + ((c << 0wxd) + ((f << 0wxc) + ((ext << 0wx6) + (t + 0wx8000000))))))
333 : monnier 411 end
334 : leunga 744 and CompareImmClear {r, t, c, f, im11} =
335 :     let val r = emit_GP r
336 :     val t = emit_GP t
337 : george 555 in eWord32 ((r << 0wx15) + ((t << 0wx10) + ((c << 0wxd) + ((f << 0wxc) + ((im11 && 0wx7ff) + 0wx90000000)))))
338 :     end
339 : leunga 744 and CoProcShort {Op, b, im5, s, a, ls, uid, rt} =
340 :     let val b = emit_GP b
341 :     val rt = emit_FP rt
342 : george 545 in eWord32 ((Op << 0wx1a) + ((b << 0wx15) + ((im5 << 0wx10) + ((s << 0wxe) + ((a << 0wxd) + ((ls << 0wx9) + ((uid << 0wx6) + (rt + 0wx1000))))))))
343 : monnier 411 end
344 : leunga 744 and CoProcIndexed {Op, b, x, s, u, ls, uid, m, rt} =
345 :     let val b = emit_GP b
346 :     val x = emit_GP x
347 :     val rt = emit_FP rt
348 : george 545 in eWord32 ((Op << 0wx1a) + ((b << 0wx15) + ((x << 0wx10) + ((s << 0wxe) + ((u << 0wxd) + ((ls << 0wx9) + ((uid << 0wx6) + ((m << 0wx5) + rt))))))))
349 : monnier 411 end
350 : george 545 and NOP {} = eWord32 0wx8000240
351 :     and Nop {nop} = (if nop
352 :     then (NOP {})
353 :     else ())
354 : leunga 744 and FloatOp0Maj0C {r, sop, fmt, t} =
355 :     let val r = emit_FP r
356 :     val t = emit_FP t
357 : george 545 in eWord32 ((r << 0wx15) + ((sop << 0wxd) + ((fmt << 0wxb) + (t + 0wx30000000))))
358 : monnier 411 end
359 : leunga 744 and FloatOp1Maj0C {r, sop, df, sf, t} =
360 :     let val r = emit_FP r
361 :     val t = emit_FP t
362 : george 545 in eWord32 ((r << 0wx15) + ((sop << 0wxf) + ((df << 0wxd) + ((sf << 0wxb) + (t + 0wx30000200)))))
363 : monnier 411 end
364 : leunga 744 and FloatOp2Maj0C {r1, r2, sop, fmt, n, c} =
365 :     let val r1 = emit_FP r1
366 :     val r2 = emit_FP r2
367 : george 545 in eWord32 ((r1 << 0wx15) + ((r2 << 0wx10) + ((sop << 0wxd) + ((fmt << 0wxb) + ((n << 0wx5) + (c + 0wx30000400))))))
368 : monnier 411 end
369 : leunga 744 and FloatOp3Maj0C {r1, r2, sop, fmt, n, t} =
370 :     let val r1 = emit_FP r1
371 :     val r2 = emit_FP r2
372 :     val t = emit_FP t
373 : george 545 in eWord32 ((r1 << 0wx15) + ((r2 << 0wx10) + ((sop << 0wxd) + ((fmt << 0wxb) + ((n << 0wx5) + (t + 0wx30000600))))))
374 : monnier 429 end
375 : leunga 744 and FloatOp0Maj0E {r, sop, fmt, r2, t2, t} =
376 :     let val r = emit_FP r
377 :     val t = emit_FP t
378 : george 545 in eWord32 ((r << 0wx15) + ((sop << 0wxd) + ((fmt << 0wxb) + ((r2 << 0wx7) + ((t2 << 0wx6) + (t + 0wx38000000))))))
379 : monnier 411 end
380 : leunga 744 and FloatOp1Maj0E {r, sop, df, sf, r2, t2, t} =
381 :     let val r = emit_FP r
382 :     val t = emit_FP t
383 : george 545 in eWord32 ((r << 0wx15) + ((sop << 0wxf) + ((df << 0wxd) + ((sf << 0wxb) + ((r2 << 0wx7) + ((t2 << 0wx6) + (t + 0wx38000200)))))))
384 : monnier 411 end
385 : leunga 744 and FloatOp2Maj0E {r1, r2, sop, r22, f, r11, c} =
386 :     let val r1 = emit_FP r1
387 :     val r2 = emit_FP r2
388 : george 545 in eWord32 ((r1 << 0wx15) + ((r2 << 0wx10) + ((sop << 0wxd) + ((r22 << 0wxc) + ((f << 0wxb) + ((r11 << 0wx7) + (c + 0wx38000400)))))))
389 : monnier 411 end
390 : leunga 744 and FloatOp3Maj0E {r1, r2, sop, r22, f, r11, t} =
391 :     let val r1 = emit_FP r1
392 :     val r2 = emit_FP r2
393 :     val t = emit_FP t
394 : george 545 in eWord32 ((r1 << 0wx15) + ((r2 << 0wx10) + ((sop << 0wxd) + ((r22 << 0wxc) + ((f << 0wxb) + ((r11 << 0wx7) + (t + 0wx38000600)))))))
395 : monnier 411 end
396 : george 545 and FloatMultiOp {rm1, rm2, ta, ra, f, tm} = eWord32 ((rm1 << 0wx15) + ((rm2 << 0wx10) + ((ta << 0wxb) + ((ra << 0wx6) + ((f << 0wx5) + (tm + 0wx38000000))))))
397 :     and FTest {} = eWord32 0wx30002420
398 : monnier 245
399 : leunga 744 (*#line 646.7 "hppa/hppa.mdl"*)
400 : george 889 val zeroR = Option.valOf (C.zeroReg CellsBasis.GP)
401 : monnier 411
402 : leunga 744 (*#line 647.7 "hppa/hppa.mdl"*)
403 :     fun opn opnd =
404 :     let
405 :     (*#line 648.11 "hppa/hppa.mdl"*)
406 :     fun hi21 n = (itow n) >> 0wxb
407 : monnier 411
408 : leunga 744 (*#line 649.11 "hppa/hppa.mdl"*)
409 :     fun hi21X n = (itow n) ~>> 0wxb
410 : monnier 411
411 : leunga 744 (*#line 650.11 "hppa/hppa.mdl"*)
412 :     fun lo11 n = (itow n) && 0wx7ff
413 : monnier 411 in
414 : leunga 744 (case opnd of
415 : george 984 I.HILabExp(lexp, _) => hi21X (MLTreeEval.valueOf lexp)
416 :     | I.LOLabExp(lexp, _) => lo11 (MLTreeEval.valueOf lexp)
417 :     | I.LabExp(lexp, _) => itow (MLTreeEval.valueOf lexp)
418 : leunga 744 | I.IMMED i => itow i
419 :     | I.REG _ => error "REG"
420 : monnier 411 )
421 :     end
422 :    
423 : leunga 744 (*#line 661.6 "hppa/hppa.mdl"*)
424 : george 545 fun disp lab = (itow (((Label.addrOf lab) - ( ! loc)) - 8)) ~>> 0wx2
425 : monnier 411
426 : leunga 744 (*#line 662.6 "hppa/hppa.mdl"*)
427 : george 545 fun low_sign_ext_im14 n = ((n && 0wx1fff) << 0wx1) || ((n && 0wx2000) >> 0wxd)
428 : monnier 411
429 : leunga 744 (*#line 663.6 "hppa/hppa.mdl"*)
430 : george 545 fun low_sign_ext_im11 n = ((n && 0wx3ff) << 0wx1) || ((n && 0wx400) >> 0wxa)
431 : monnier 411
432 : leunga 744 (*#line 664.6 "hppa/hppa.mdl"*)
433 : george 545 fun low_sign_ext_im5 n = ((n && 0wxf) << 0wx1) || ((n && 0wx10) >> 0wx4)
434 : monnier 411
435 : leunga 744 (*#line 666.6 "hppa/hppa.mdl"*)
436 :     fun assemble_3 n =
437 :     let
438 :     (*#line 667.10 "hppa/hppa.mdl"*)
439 :     val w1 = (n && 0wx4) >> 0wx2
440 : monnier 411
441 : leunga 744 (*#line 668.10 "hppa/hppa.mdl"*)
442 :     val w2 = (n && 0wx3) << 0wx1
443 : george 545 in w1 || w2
444 : monnier 411 end
445 :    
446 : leunga 744 (*#line 671.6 "hppa/hppa.mdl"*)
447 :     fun assemble_12 n =
448 :     let
449 :     (*#line 672.10 "hppa/hppa.mdl"*)
450 :     val w = (n && 0wx800) >> 0wxb
451 : monnier 411
452 : leunga 744 (*#line 673.10 "hppa/hppa.mdl"*)
453 :     val w1 = ((n && 0wx3ff) << 0wx1) || ((n && 0wx400) >> 0wxa)
454 : monnier 411 in (w1, w)
455 :     end
456 :    
457 : leunga 744 (*#line 676.6 "hppa/hppa.mdl"*)
458 :     fun assemble_17 n =
459 :     let
460 :     (*#line 677.10 "hppa/hppa.mdl"*)
461 :     val w = (n && 0wx10000) >> 0wx10
462 : monnier 411
463 : leunga 744 (*#line 678.10 "hppa/hppa.mdl"*)
464 :     val w1 = (n && 0wxf800) >> 0wxb
465 : monnier 411
466 : leunga 744 (*#line 679.10 "hppa/hppa.mdl"*)
467 :     val w2 = ((n && 0wx3ff) << 0wx1) || ((n && 0wx400) >> 0wxa)
468 : monnier 411 in (w, w1, w2)
469 :     end
470 :    
471 : leunga 744 (*#line 682.6 "hppa/hppa.mdl"*)
472 :     fun assemble_21 disp =
473 :     let
474 :     (*#line 683.10 "hppa/hppa.mdl"*)
475 :     val w = (((((disp && 0wx3) << 0wxc) || ((disp && 0wx7c) << 0wxe)) || ((disp && 0wx180) << 0wx7)) || ((disp && 0wxffe00) >> 0wx8)) || ((disp && 0wx100000) >> 0wx14)
476 : monnier 411 in w
477 :     end
478 :    
479 : leunga 744 (*#line 691.6 "hppa/hppa.mdl"*)
480 :     fun branchLink (Op, t, lab, ext3, n) =
481 :     let
482 :     (*#line 692.10 "hppa/hppa.mdl"*)
483 :     val (w, w1, w2) = assemble_17 (disp lab)
484 : george 545 in BranchAndLink {Op=Op, t=t, w1=w1, w2=w2, w=w, ext3=ext3, n=n}
485 : monnier 411 end
486 :    
487 : leunga 744 (*#line 695.6 "hppa/hppa.mdl"*)
488 :     fun bcond (cmp, bc, r1, r2, n, t, nop) =
489 :     let
490 :     (*#line 696.10 "hppa/hppa.mdl"*)
491 :     val (w1, w) = assemble_12 (disp t)
492 :     in ConditionalBranch {Op=emit_cmp cmp, c=bc, r1=r1, r2=r2, n=n, w=w,
493 :     w1=w1};
494 : george 545 Nop {nop=nop}
495 : monnier 411 end
496 :    
497 : leunga 744 (*#line 699.6 "hppa/hppa.mdl"*)
498 :     fun bcondi (cmpi, bc, i, r2, n, t, nop) =
499 :     let
500 :     (*#line 700.10 "hppa/hppa.mdl"*)
501 :     val (w1, w) = assemble_12 (disp t)
502 :     in ConditionalBranchi {Op=emit_cmpi cmpi, c=bc, im5=low_sign_ext_im5 (itow i),
503 :     r2=r2, n=n, w=w, w1=w1};
504 : george 545 Nop {nop=nop}
505 : monnier 411 end
506 :    
507 : leunga 744 (*#line 704.6 "hppa/hppa.mdl"*)
508 :     fun branchOnBit (bc, r, p, n, t, nop) =
509 :     let
510 :     (*#line 705.10 "hppa/hppa.mdl"*)
511 :     val (w1, w) = assemble_12 (disp t)
512 : george 545 in BranchOnBit {p=p, r=r, c=emit_bitcond bc, w1=w1, n=n, w=w};
513 :     Nop {nop=nop}
514 : monnier 411 end
515 :    
516 : leunga 744 (*#line 709.6 "hppa/hppa.mdl"*)
517 : monnier 411 fun cmpCond cond =
518 : leunga 744 (case cond of
519 :     I.EQ => (0wx1, 0wx0)
520 :     | I.LT => (0wx2, 0wx0)
521 :     | I.LE => (0wx3, 0wx0)
522 :     | I.LTU => (0wx4, 0wx0)
523 :     | I.LEU => (0wx5, 0wx0)
524 :     | I.NE => (0wx1, 0wx1)
525 :     | I.GE => (0wx2, 0wx1)
526 :     | I.GT => (0wx3, 0wx1)
527 :     | I.GTU => (0wx4, 0wx1)
528 :     | I.GEU => (0wx5, 0wx1)
529 : monnier 411 )
530 : leunga 744 fun emitter instr =
531 :     let
532 :     fun emitInstr (I.LOADI{li, r, i, t, mem}) = Load {Op=emit_loadi li, b=r,
533 :     im14=low_sign_ext_im14 (opn i), t=t}
534 :     | emitInstr (I.LOAD{l, r1, r2, t, mem}) =
535 :     let
536 :     (*#line 809.18 "hppa/hppa.mdl"*)
537 :     val (ext4, u, m) = emit_load l
538 : george 545 in IndexedLoad {Op=0wx3, b=r1, x=r2, ext4=ext4, u=u, t=t, m=m}
539 : monnier 411 end
540 : leunga 744 | emitInstr (I.STORE{st, b, d, r, mem}) = Store {st=st, b=b, im14=low_sign_ext_im14 (opn d),
541 :     r=r}
542 : george 545 | emitInstr (I.ARITH{a, r1, r2, t}) = Arith {a=a, r1=r1, r2=r2, t=t}
543 : monnier 411 | emitInstr (I.ARITHI{ai, i, r, t}) =
544 : leunga 744 (case ai of
545 :     I.ADDIL => LongImmed {Op=0wxa, r=r, im21=assemble_21 (opn i)}
546 :     | _ =>
547 :     let
548 :     (*#line 833.26 "hppa/hppa.mdl"*)
549 :     val (Op, e) = emit_arithi ai
550 :     in Arithi {Op=Op, r=r, t=t, im11=low_sign_ext_im11 (opn i), e=e}
551 :     end
552 : monnier 411 )
553 : leunga 744 | emitInstr (I.COMCLR_LDO{cc, r1, r2, t1, i, b, t2}) =
554 :     let
555 :     (*#line 852.17 "hppa/hppa.mdl"*)
556 :     val (c, f) = cmpCond cc
557 : george 555 in CompareClear {r1=r1, r2=r2, t=t1, c=c, f=f, ext=0wx22};
558 : george 545 Load {Op=0wxd, b=b, im14=low_sign_ext_im14 (itow i), t=t2}
559 : monnier 411 end
560 : leunga 744 | emitInstr (I.COMICLR_LDO{cc, i1, r2, t1, i2, b, t2}) =
561 :     let
562 :     (*#line 867.17 "hppa/hppa.mdl"*)
563 :     val (c, f) = cmpCond cc
564 : leunga 579 in CompareImmClear {r=r2, t=t1, c=c, f=f, im11=low_sign_ext_im11 (opn i1)};
565 : george 555 Load {Op=0wxd, b=b, im14=low_sign_ext_im14 (itow i2), t=t2}
566 :     end
567 : monnier 411 | emitInstr (I.SHIFTV{sv, r, len, t}) =
568 : leunga 744 (case sv of
569 :     I.VEXTRU => Extract {Op=0wx34, r=r, t=t, ext3=0wx4, p=0, clen=32 - len}
570 :     | I.VEXTRS => Extract {Op=0wx34, r=r, t=t, ext3=0wx5, p=0, clen=32 - len}
571 :     | I.ZVDEP => Deposit {Op=0wx35, t=t, r=r, ext3=0wx0, cp=0, clen=32 - len}
572 : monnier 411 )
573 :     | emitInstr (I.SHIFT{s, r, p, len, t}) =
574 : leunga 744 (case s of
575 :     I.EXTRU => Extract {Op=0wx34, r=r, t=t, ext3=0wx6, p=p, clen=32 - len}
576 :     | I.EXTRS => Extract {Op=0wx34, r=r, t=t, ext3=0wx7, p=p, clen=32 - len}
577 :     | I.ZDEP => Deposit {Op=0wx35, t=t, r=r, ext3=0wx2, cp=31 - p, clen=32 - len}
578 : monnier 411 )
579 : leunga 744 | emitInstr (I.BCOND{cmp, bc, r1, r2, n, nop, t, f}) = bcond (cmp, bc,
580 :     r1, r2, n, t, nop)
581 :     | emitInstr (I.BCONDI{cmpi, bc, i, r2, n, nop, t, f}) = bcondi (cmpi,
582 :     bc, i, r2, n, t, nop)
583 :     | emitInstr (I.BB{bc, r, p, n, nop, t, f}) = branchOnBit (bc, r, p, n,
584 :     t, nop)
585 :     | emitInstr (I.B{lab, n}) = branchLink (0wx3a, zeroR, lab, 0wx0, n)
586 :     | emitInstr (I.LONGJUMP{lab, n, tmp, tmpLab}) =
587 :     let
588 :     (*#line 965.18 "hppa/hppa.mdl"*)
589 : leunga 775 val offset = T.SUB (32, T.LABEL lab, T.ADD (32, T.LABEL tmpLab,
590 :     T.LI (IntInf.fromInt 4)))
591 : leunga 585 in Label.setAddr (tmpLab, ( ! loc) + 4);
592 :     branchLink (0wx3a, tmp, tmpLab, 0wx0, n);
593 : george 984 LongImmed {Op=0wxa, r=tmp, im21=assemble_21 (itow (MLTreeEval.valueOf offset))};
594 : leunga 744 BranchVectored {Op=0wx3a, t=tmp, x=zeroR, ext3=0wx6, n=n}
595 : leunga 585 end
596 : leunga 744 | emitInstr (I.BE{b, d, sr, n, labs}) =
597 :     let
598 :     (*#line 982.18 "hppa/hppa.mdl"*)
599 :     val (w, w1, w2) = assemble_17 (opn d)
600 :     in BranchExternal {Op=0wx38, b=b, w1=w1, s=assemble_3 (itow sr), w2=w2,
601 :     n=n, w=w}
602 : monnier 429 end
603 : leunga 744 | emitInstr (I.BV{x, b, labs, n}) = BranchVectored {Op=0wx3a, t=b, x=x,
604 :     ext3=0wx6, n=n}
605 :     | emitInstr (I.BLR{x, t, labs, n}) = BranchVectored {Op=0wx3a, t=t, x=x,
606 :     ext3=0wx2, n=n}
607 : leunga 796 | emitInstr (I.BL{lab, t, defs, uses, cutsTo, mem, n}) = branchLink (0wx3a,
608 :     t, lab, 0wx0, n)
609 :     | emitInstr (I.BLE{d, b, sr, t, defs, uses, cutsTo, mem}) =
610 : george 889 (case (d, CellsBasis.registerId t) of
611 : leunga 744 (I.IMMED 0, 31) => BranchExternal {Op=0wx39, b=b, w1=0wx0, s=assemble_3 (itow sr),
612 :     w2=0wx0, n=true, w=0wx0}
613 :     | _ => error "BLE: not implemented"
614 : monnier 411 )
615 : george 545 | emitInstr (I.LDIL{i, t}) = LongImmed {Op=0wx8, r=t, im21=assemble_21 (opn i)}
616 : leunga 744 | emitInstr (I.LDO{i, b, t}) = Load {Op=0wxd, b=b, im14=low_sign_ext_im14 (opn i),
617 :     t=t}
618 :     | emitInstr (I.MTCTL{r, t}) = MoveToControlReg {Op=0wx0, t=t, r=r, rv=0wx0,
619 :     ext8=0wxc2}
620 : monnier 411 | emitInstr (I.FSTORE{fst, b, d, r, mem}) =
621 : leunga 744 (case fst of
622 :     I.FSTDS => CoProcShort {Op=0wxb, b=b, im5=low_sign_ext_im5 (itow d),
623 :     s=0wx0, a=0wx0, ls=0wx1, uid=0wx0, rt=r}
624 :     | I.FSTWS => CoProcShort {Op=0wx9, b=b, im5=low_sign_ext_im5 (itow d),
625 :     s=0wx0, a=0wx0, ls=0wx1, uid=0wx1, rt=r}
626 : monnier 411 )
627 : leunga 744 | emitInstr (I.FSTOREX{fstx, b, x, r, mem}) =
628 :     let
629 : leunga 796 (*#line 1066.18 "hppa/hppa.mdl"*)
630 : leunga 744 val (Op, uid, u, m) = emit_fstorex fstx
631 :     in CoProcIndexed {Op=Op, b=b, x=x, s=0wx0, u=u, m=m, ls=0wx1, uid=uid,
632 :     rt=r}
633 : monnier 411 end
634 :     | emitInstr (I.FLOAD{fl, b, d, t, mem}) =
635 : leunga 744 (case fl of
636 :     I.FLDDS => CoProcShort {Op=0wxb, b=b, im5=low_sign_ext_im5 (itow d),
637 :     s=0wx0, a=0wx0, ls=0wx0, uid=0wx0, rt=t}
638 :     | I.FLDWS => CoProcShort {Op=0wx9, b=b, im5=low_sign_ext_im5 (itow d),
639 :     s=0wx0, a=0wx0, ls=0wx0, uid=0wx1, rt=t}
640 : monnier 411 )
641 : leunga 744 | emitInstr (I.FLOADX{flx, b, x, t, mem}) =
642 :     let
643 : leunga 796 (*#line 1086.18 "hppa/hppa.mdl"*)
644 : leunga 744 val (Op, uid, u, m) = emit_floadx flx
645 :     in CoProcIndexed {Op=Op, b=b, x=x, s=0wx0, u=u, m=m, ls=0wx0, uid=uid,
646 :     rt=t}
647 : monnier 411 end
648 :     | emitInstr (I.FARITH{fa, r1, r2, t}) =
649 : leunga 744 (case fa of
650 :     I.XMPYU => FloatOp3Maj0E {sop=0wx2, f=0wx1, r1=r1, r2=r2, t=t, r11=0wx0,
651 :     r22=0wx0}
652 :     | _ =>
653 :     let
654 : leunga 796 (*#line 1097.25 "hppa/hppa.mdl"*)
655 : leunga 744 val (sop, fmt) = emit_farith fa
656 :     in FloatOp3Maj0C {sop=sop, r1=r1, r2=r2, t=t, n=0wx0, fmt=fmt}
657 :     end
658 : monnier 411 )
659 : leunga 744 | emitInstr (I.FUNARY{fu, f, t}) =
660 :     let
661 : leunga 796 (*#line 1114.18 "hppa/hppa.mdl"*)
662 : leunga 744 val (sop, fmt) = emit_funary fu
663 : george 545 in FloatOp0Maj0C {r=f, t=t, sop=sop, fmt=fmt}
664 : monnier 411 end
665 : leunga 744 | emitInstr (I.FCNV{fcnv, f, t}) =
666 :     let
667 : leunga 796 (*#line 1123.18 "hppa/hppa.mdl"*)
668 : leunga 744 val (sop, sf, df) = emit_fcnv fcnv
669 : george 545 in FloatOp1Maj0E {r=f, t=t, sop=sop, sf=sf, df=df, r2=0wx1, t2=0wx0}
670 : monnier 411 end
671 :     | emitInstr (I.FBRANCH{cc, fmt, f1, f2, t, f, n, long}) =
672 : george 545 ( FloatOp2Maj0C {r1=f1, r2=f2, sop=0wx0, fmt=emit_fmt fmt, n=0wx0, c=emit_fcond cc};
673 : leunga 744 FTest {};
674 :     branchLink (0wx3a, zeroR, t, 0wx0, n))
675 : george 545 | emitInstr (I.BREAK{code1, code2}) = error "BREAK"
676 :     | emitInstr (I.NOP) = NOP {}
677 :     | emitInstr (I.COPY{dst, src, impl, tmp}) = error "COPY"
678 :     | emitInstr (I.FCOPY{dst, src, impl, tmp}) = error "FCOPY"
679 :     | emitInstr (I.ANNOTATION{i, a}) = emitInstr i
680 : leunga 624 | emitInstr (I.SOURCE{}) = ()
681 :     | emitInstr (I.SINK{}) = ()
682 :     | emitInstr (I.PHI{}) = ()
683 : monnier 411 in
684 : leunga 744 emitInstr instr
685 : monnier 411 end
686 :    
687 : monnier 429 in S.STREAM{beginCluster=init,
688 : monnier 411 pseudoOp=pseudoOp,
689 :     emit=emitter,
690 : george 909 endCluster=fail,
691 : monnier 411 defineLabel=doNothing,
692 :     entryLabel=doNothing,
693 :     comment=doNothing,
694 :     exitBlock=doNothing,
695 : leunga 815 annotation=doNothing,
696 :     getAnnotations=getAnnotations
697 : monnier 411 }
698 :     end
699 : monnier 245 end
700 :    

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