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/branches/idlbasis-devel/src/MLRISC/ppc/emit/ppcMC.sml
ViewVC logotype

Annotation of /sml/branches/idlbasis-devel/src/MLRISC/ppc/emit/ppcMC.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 624 - (view) (download)
Original Path: sml/trunk/src/MLRISC/ppc/emit/ppcMC.sml

1 : monnier 411 (*
2 : george 545 * This file was automatically generated by MDGen (v2.0)
3 : monnier 411 * from the machine description file "ppc/ppc.md".
4 : monnier 245 *)
5 :    
6 :    
7 : monnier 411 functor PPCMCEmitter(structure Instr : PPCINSTR
8 :     structure Stream : INSTRUCTION_STREAM
9 :     structure CodeString : CODE_STRING
10 :     ) : INSTRUCTION_EMITTER =
11 : monnier 245 struct
12 : monnier 411 structure I = Instr
13 :     structure S = Stream
14 :     structure C = I.C
15 :     structure Constant = I.Constant
16 : george 545 structure LabelExp = I.LabelExp
17 : monnier 411 structure P = S.P
18 :     structure W = Word32
19 :    
20 : george 545 (* PPC is big endian *)
21 : monnier 411
22 :     fun error msg = MLRiscErrorMsg.error("PPCMC",msg)
23 : monnier 429 fun makeStream _ =
24 : monnier 411 let infix && || << >> ~>>
25 :     val op << = W.<<
26 :     val op >> = W.>>
27 :     val op ~>> = W.~>>
28 :     val op || = W.orb
29 :     val op && = W.andb
30 :     val itow = W.fromInt
31 :     fun emit_bool false = 0w0 : W.word
32 :     | emit_bool true = 0w1 : W.word
33 :     val emit_int = itow
34 :     fun emit_word w = w
35 :     fun emit_label l = itow(Label.addrOf l)
36 :     fun emit_labexp le = itow(LabelExp.valueOf le)
37 :     fun emit_const c = itow(Constant.valueOf c)
38 :     val loc = ref 0
39 :    
40 :     (* emit a byte *)
41 :     fun eByte b =
42 :     let val i = !loc in loc := i + 1; CodeString.update(i,b) end
43 :    
44 :     (* emit the low order byte of a word *)
45 :     (* note: fromLargeWord strips the high order bits! *)
46 :     fun eByteW w =
47 :     let val i = !loc
48 :     in loc := i + 1; CodeString.update(i,Word8.fromLargeWord w) end
49 :    
50 :     fun doNothing _ = ()
51 :    
52 :     fun pseudoOp pOp = P.emitValue{pOp=pOp, loc= !loc,emit=eByte}
53 :    
54 :     fun init n = (CodeString.init n; loc := 0)
55 :    
56 :    
57 :     fun emitter regmap =
58 :     let
59 :     fun eWord32 w = let
60 :     val b8 = w
61 : george 545 val w = w >> 0wx8
62 : monnier 411 val b16 = w
63 : george 545 val w = w >> 0wx8
64 : monnier 411 val b24 = w
65 : george 545 val w = w >> 0wx8
66 : monnier 411 val b32 = w
67 :     in
68 : george 545 ( eByteW b32;
69 :     eByteW b24;
70 :     eByteW b16;
71 :     eByteW b8 )
72 : monnier 411 end
73 : monnier 245
74 : george 545 fun emit_GP r = itow (regmap r)
75 :     and emit_FP r = itow ((regmap r) - 32)
76 :     and emit_CC r = itow ((regmap r) - 64)
77 :     and emit_SPR r = itow ((regmap r) - 72)
78 :     and emit_MEM r = itow ((regmap r) - 104)
79 :     and emit_CTRL r = itow ((regmap r) - 104)
80 :     fun emit_operand (I.RegOp GP) = emit_GP GP
81 :     | emit_operand (I.ImmedOp int) = itow int
82 :     | emit_operand (I.LabelOp labexp) = itow (LabelExp.valueOf labexp)
83 :     and emit_fcmp (I.FCMPO) = (0wx20 : Word32.word)
84 :     | emit_fcmp (I.FCMPU) = (0wx0 : Word32.word)
85 :     and emit_unary (I.NEG) = (0wx68 : Word32.word)
86 : monnier 429 | emit_unary (I.EXTSB) = (0wx3ba : Word32.word)
87 :     | emit_unary (I.EXTSH) = (0wx39a : Word32.word)
88 :     | emit_unary (I.EXTSW) = (0wx3da : Word32.word)
89 :     | emit_unary (I.CNTLZW) = (0wx1a : Word32.word)
90 :     | emit_unary (I.CNTLZD) = (0wx3a : Word32.word)
91 :     and emit_funary (I.FMR) = (0wx3f, 0wx48)
92 :     | emit_funary (I.FNEG) = (0wx3f, 0wx28)
93 :     | emit_funary (I.FABS) = (0wx3f, 0wx108)
94 :     | emit_funary (I.FNABS) = (0wx3f, 0wx88)
95 :     | emit_funary (I.FSQRT) = (0wx3f, 0wx16)
96 :     | emit_funary (I.FSQRTS) = (0wx3b, 0wx16)
97 :     | emit_funary (I.FRSP) = (0wx3f, 0wxc)
98 :     | emit_funary (I.FCTIW) = (0wx3f, 0wxe)
99 :     | emit_funary (I.FCTIWZ) = (0wx3f, 0wxf)
100 :     | emit_funary (I.FCTID) = (0wx3f, 0wx32e)
101 :     | emit_funary (I.FCTIDZ) = (0wx3f, 0wx32f)
102 :     | emit_funary (I.FCFID) = (0wx3f, 0wx34e)
103 : george 545 and emit_farith (I.FADD) = (0wx3f, 0wx15)
104 :     | emit_farith (I.FSUB) = (0wx3f, 0wx14)
105 :     | emit_farith (I.FMUL) = (0wx3f, 0wx19)
106 :     | emit_farith (I.FDIV) = (0wx3f, 0wx12)
107 :     | emit_farith (I.FADDS) = (0wx3b, 0wx15)
108 :     | emit_farith (I.FSUBS) = (0wx3b, 0wx14)
109 :     | emit_farith (I.FMULS) = (0wx3b, 0wx19)
110 :     | emit_farith (I.FDIVS) = (0wx3b, 0wx12)
111 :     and emit_farith3 (I.FMADD) = (0wx3f, 0wx1d)
112 :     | emit_farith3 (I.FMADDS) = (0wx3b, 0wx1d)
113 :     | emit_farith3 (I.FMSUB) = (0wx3f, 0wx1c)
114 :     | emit_farith3 (I.FMSUBS) = (0wx3b, 0wx1c)
115 :     | emit_farith3 (I.FNMADD) = (0wx3f, 0wx1f)
116 :     | emit_farith3 (I.FNMADDS) = (0wx3b, 0wx1f)
117 :     | emit_farith3 (I.FNMSUB) = (0wx3f, 0wx1e)
118 :     | emit_farith3 (I.FNMSUBS) = (0wx3b, 0wx1e)
119 :     | emit_farith3 (I.FSEL) = (0wx3f, 0wx17)
120 : monnier 429 and emit_bo (I.TRUE) = (0wxc : Word32.word)
121 : monnier 411 | emit_bo (I.FALSE) = (0wx4 : Word32.word)
122 :     | emit_bo (I.ALWAYS) = (0wx14 : Word32.word)
123 :     | emit_bo (I.COUNTER{eqZero, cond}) =
124 :     (
125 :     case cond of
126 :     NONE => (if eqZero
127 :     then 0wx12
128 :     else 0wx10)
129 :     | SOME cc =>
130 :     (
131 :     case (eqZero, cc) of
132 :     (false, false) => 0wx0
133 :     | (false, true) => 0wx8
134 :     | (true, false) => 0wx2
135 :     | (true, true) => 0wxa
136 :     )
137 :     )
138 :     and emit_arith (I.ADD) = (0wx10a : Word32.word)
139 :     | emit_arith (I.SUBF) = (0wx28 : Word32.word)
140 :     | emit_arith (I.MULLW) = (0wxeb : Word32.word)
141 :     | emit_arith (I.MULLD) = (0wxe9 : Word32.word)
142 :     | emit_arith (I.MULHW) = (0wx4b : Word32.word)
143 :     | emit_arith (I.MULHWU) = (0wxb : Word32.word)
144 :     | emit_arith (I.DIVW) = (0wx1eb : Word32.word)
145 :     | emit_arith (I.DIVD) = (0wx1e9 : Word32.word)
146 :     | emit_arith (I.DIVWU) = (0wx1cb : Word32.word)
147 :     | emit_arith (I.DIVDU) = (0wx1c9 : Word32.word)
148 :     | emit_arith (I.AND) = (0wx1c : Word32.word)
149 :     | emit_arith (I.OR) = (0wx1bc : Word32.word)
150 :     | emit_arith (I.XOR) = (0wx13c : Word32.word)
151 :     | emit_arith (I.NAND) = (0wx1dc : Word32.word)
152 :     | emit_arith (I.NOR) = (0wx7c : Word32.word)
153 :     | emit_arith (I.EQV) = (0wx11c : Word32.word)
154 :     | emit_arith (I.ANDC) = (0wx3c : Word32.word)
155 :     | emit_arith (I.ORC) = (0wx19c : Word32.word)
156 :     | emit_arith (I.SLW) = (0wx18 : Word32.word)
157 :     | emit_arith (I.SLD) = (0wx1b : Word32.word)
158 :     | emit_arith (I.SRW) = (0wx218 : Word32.word)
159 :     | emit_arith (I.SRD) = (0wx21b : Word32.word)
160 :     | emit_arith (I.SRAW) = (0wx318 : Word32.word)
161 :     | emit_arith (I.SRAD) = (0wx31a : Word32.word)
162 : monnier 429 and emit_arithi (I.ADDI) = (0wxe : Word32.word)
163 :     | emit_arithi (I.ADDIS) = (0wxf : Word32.word)
164 :     | emit_arithi (I.SUBFIC) = (0wx8 : Word32.word)
165 :     | emit_arithi (I.MULLI) = (0wx7 : Word32.word)
166 :     | emit_arithi (I.ANDI_Rc) = (0wx1c : Word32.word)
167 :     | emit_arithi (I.ANDIS_Rc) = (0wx1d : Word32.word)
168 :     | emit_arithi (I.ORI) = (0wx18 : Word32.word)
169 :     | emit_arithi (I.ORIS) = (0wx19 : Word32.word)
170 :     | emit_arithi (I.XORI) = (0wx1a : Word32.word)
171 :     | emit_arithi (I.XORIS) = (0wx1b : Word32.word)
172 : george 545 | emit_arithi (I.SRAWI) = error "SRAWI"
173 :     | emit_arithi (I.SRADI) = error "SRADI"
174 :     and emit_ccarith (I.CRAND) = (0wx101 : Word32.word)
175 :     | emit_ccarith (I.CROR) = (0wx1c1 : Word32.word)
176 :     | emit_ccarith (I.CRXOR) = (0wxc1 : Word32.word)
177 :     | emit_ccarith (I.CRNAND) = (0wxe1 : Word32.word)
178 :     | emit_ccarith (I.CRNOR) = (0wx21 : Word32.word)
179 :     | emit_ccarith (I.CREQV) = (0wx121 : Word32.word)
180 :     | emit_ccarith (I.CRANDC) = (0wx81 : Word32.word)
181 :     | emit_ccarith (I.CRORC) = (0wx1a1 : Word32.word)
182 :     fun x_form {opcd, rt, ra, rb, xo, rc} = let
183 :     val rc = emit_bool rc
184 :     in eWord32 ((opcd << 0wx1a) + ((rt << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((xo << 0wx1) + rc)))))
185 : monnier 411 end
186 : monnier 245
187 : george 545 and xl_form {opcd, bt, ba, bb, xo, lk} = let
188 :     val lk = emit_bool lk
189 :     in eWord32 ((opcd << 0wx1a) + ((bt << 0wx15) + ((ba << 0wx10) + ((bb << 0wxb) + ((xo << 0wx1) + lk)))))
190 : monnier 411 end
191 : monnier 245
192 : george 545 and m_form {opcd, rs, ra, rb, mb, me, rc} = let
193 :     val rc = emit_bool rc
194 :     in eWord32 ((opcd << 0wx1a) + ((rs << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((mb << 0wx6) + ((me << 0wx1) + rc))))))
195 : monnier 411 end
196 : monnier 245
197 : george 545 and a_form {opcd, frt, fra, frb, frc, xo, rc} = let
198 :     val rc = emit_bool rc
199 :     in eWord32 ((opcd << 0wx1a) + ((frt << 0wx15) + ((fra << 0wx10) + ((frb << 0wxb) + ((frc << 0wx6) + ((xo << 0wx1) + rc))))))
200 : monnier 411 end
201 : monnier 245
202 : george 545 and loadx {rt, ra, rb, xop} = let
203 :     val rt = emit_GP rt
204 :     val ra = emit_GP ra
205 :     val rb = emit_GP rb
206 :     in eWord32 ((rt << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((xop << 0wx1) + 0wx7c000000))))
207 : monnier 411 end
208 : monnier 245
209 : george 545 and loadd {opcd, rt, ra, d} = let
210 :     val rt = emit_GP rt
211 :     val ra = emit_GP ra
212 :     val d = emit_operand d
213 :     in eWord32 ((opcd << 0wx1a) + ((rt << 0wx15) + ((ra << 0wx10) + (d && 0wxffff))))
214 : monnier 411 end
215 : monnier 245
216 : george 545 and loadde {opcd, rt, ra, de, xop} = let
217 :     val rt = emit_GP rt
218 :     val ra = emit_GP ra
219 :     val de = emit_operand de
220 :     in eWord32 ((opcd << 0wx1a) + ((rt << 0wx15) + ((ra << 0wx10) + (((de && 0wxfff) << 0wx4) + xop))))
221 : monnier 411 end
222 : monnier 245
223 : george 545 and load {ld, rt, ra, d} =
224 : monnier 411 (
225 : george 545 case (d, ld) of
226 :     (I.RegOp rb, I.LBZ) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx57}
227 :     | (I.RegOp rb, I.LBZE) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx5f}
228 :     | (I.RegOp rb, I.LHZ) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx117}
229 :     | (I.RegOp rb, I.LHZE) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx11f}
230 :     | (I.RegOp rb, I.LHA) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx157}
231 :     | (I.RegOp rb, I.LHAE) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx15f}
232 :     | (I.RegOp rb, I.LWZ) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx17}
233 :     | (I.RegOp rb, I.LWZE) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx1f}
234 :     | (I.RegOp rb, I.LDE) => loadx {rt=rt, ra=ra, rb=rb, xop=0wx31f}
235 :     | (d, I.LBZ) => loadd {opcd=0wx22, rt=rt, ra=ra, d=d}
236 :     | (de, I.LBZE) => loadde {opcd=0wx3a, rt=rt, ra=ra, de=de, xop=0wx0}
237 :     | (d, I.LHZ) => loadd {opcd=0wx28, rt=rt, ra=ra, d=d}
238 :     | (de, I.LHZE) => loadde {opcd=0wx3a, rt=rt, ra=ra, de=de, xop=0wx2}
239 :     | (d, I.LHA) => loadd {opcd=0wx2a, rt=rt, ra=ra, d=d}
240 :     | (de, I.LHAE) => loadde {opcd=0wx3a, rt=rt, ra=ra, de=de, xop=0wx4}
241 :     | (d, I.LWZ) => loadd {opcd=0wx20, rt=rt, ra=ra, d=d}
242 :     | (de, I.LWZE) => loadde {opcd=0wx3a, rt=rt, ra=ra, de=de, xop=0wx6}
243 :     | (de, I.LDE) => loadde {opcd=0wx3e, rt=rt, ra=ra, de=de, xop=0wx0}
244 : monnier 411 )
245 : george 545 and floadx {ft, ra, rb, xop} = let
246 :     val ft = emit_FP ft
247 :     val ra = emit_GP ra
248 :     val rb = emit_GP rb
249 :     in eWord32 ((ft << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((xop << 0wx1) + 0wx7c000000))))
250 : monnier 411 end
251 : monnier 245
252 : george 545 and floadd {opcd, ft, ra, d} = let
253 :     val ft = emit_FP ft
254 :     val ra = emit_GP ra
255 :     val d = emit_operand d
256 :     in eWord32 ((opcd << 0wx1a) + ((ft << 0wx15) + ((ra << 0wx10) + (d && 0wxffff))))
257 : monnier 429 end
258 :    
259 : george 545 and floadde {opcd, ft, ra, de, xop} = let
260 :     val ft = emit_FP ft
261 :     val ra = emit_GP ra
262 :     val de = emit_operand de
263 :     in eWord32 ((opcd << 0wx1a) + ((ft << 0wx15) + ((ra << 0wx10) + (((de && 0wxfff) << 0wx4) + xop))))
264 :     end
265 : monnier 245
266 : george 545 and fload {ld, ft, ra, d} =
267 :     (
268 :     case (d, ld) of
269 :     (I.RegOp rb, I.LFS) => floadx {ft=ft, ra=ra, rb=rb, xop=0wx217}
270 :     | (I.RegOp rb, I.LFSE) => floadx {ft=ft, ra=ra, rb=rb, xop=0wx21f}
271 :     | (I.RegOp rb, I.LFD) => floadx {ft=ft, ra=ra, rb=rb, xop=0wx257}
272 :     | (I.RegOp rb, I.LFDE) => floadx {ft=ft, ra=ra, rb=rb, xop=0wx25f}
273 :     | (d, I.LFS) => floadd {ft=ft, ra=ra, d=d, opcd=0wx30}
274 :     | (de, I.LFSE) => floadde {ft=ft, ra=ra, de=de, opcd=0wx3e, xop=0wx4}
275 :     | (d, I.LFD) => floadd {ft=ft, ra=ra, d=d, opcd=0wx32}
276 :     | (de, I.LFDE) => floadde {ft=ft, ra=ra, de=de, opcd=0wx3e, xop=0wx6}
277 :     )
278 :     and storex {rs, ra, rb, xop} = let
279 :     val rs = emit_GP rs
280 :     val ra = emit_GP ra
281 :     val rb = emit_GP rb
282 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((xop << 0wx1) + 0wx7c000000))))
283 : monnier 411 end
284 : monnier 245
285 : george 545 and stored {opcd, rs, ra, d} = let
286 :     val rs = emit_GP rs
287 :     val ra = emit_GP ra
288 :     val d = emit_operand d
289 :     in eWord32 ((opcd << 0wx1a) + ((rs << 0wx15) + ((ra << 0wx10) + (d && 0wxffff))))
290 : monnier 411 end
291 : monnier 245
292 : george 545 and storede {opcd, rs, ra, de, xop} = let
293 :     val rs = emit_GP rs
294 :     val ra = emit_GP ra
295 :     val de = emit_operand de
296 :     in eWord32 ((opcd << 0wx1a) + ((rs << 0wx15) + ((ra << 0wx10) + (((de && 0wxfff) << 0wx4) + xop))))
297 : monnier 429 end
298 :    
299 : george 545 and store {st, rs, ra, d} =
300 :     (
301 :     case (d, st) of
302 :     (I.RegOp rb, I.STB) => storex {rs=rs, ra=ra, rb=rb, xop=0wxd7}
303 :     | (I.RegOp rb, I.STBE) => storex {rs=rs, ra=ra, rb=rb, xop=0wxdf}
304 :     | (I.RegOp rb, I.STH) => storex {rs=rs, ra=ra, rb=rb, xop=0wx197}
305 :     | (I.RegOp rb, I.STHE) => storex {rs=rs, ra=ra, rb=rb, xop=0wx19f}
306 :     | (I.RegOp rb, I.STW) => storex {rs=rs, ra=ra, rb=rb, xop=0wx97}
307 :     | (I.RegOp rb, I.STWE) => storex {rs=rs, ra=ra, rb=rb, xop=0wx9f}
308 :     | (I.RegOp rb, I.STDE) => storex {rs=rs, ra=ra, rb=rb, xop=0wx39f}
309 :     | (d, I.STB) => stored {rs=rs, ra=ra, d=d, opcd=0wx26}
310 :     | (de, I.STBE) => storede {rs=rs, ra=ra, de=de, opcd=0wx3a, xop=0wx8}
311 :     | (d, I.STH) => stored {rs=rs, ra=ra, d=d, opcd=0wx2c}
312 :     | (de, I.STHE) => storede {rs=rs, ra=ra, de=de, opcd=0wx3a, xop=0wxa}
313 :     | (d, I.STW) => stored {rs=rs, ra=ra, d=d, opcd=0wx24}
314 :     | (de, I.STWE) => storede {rs=rs, ra=ra, de=de, opcd=0wx3a, xop=0wxe}
315 :     | (de, I.STDE) => storede {rs=rs, ra=ra, de=de, opcd=0wx3e, xop=0wx8}
316 :     )
317 :     and fstorex {fs, ra, rb, xop} = let
318 :     val fs = emit_FP fs
319 :     val ra = emit_GP ra
320 :     val rb = emit_GP rb
321 :     in eWord32 ((fs << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((xop << 0wx1) + 0wx7c000000))))
322 : monnier 411 end
323 : monnier 245
324 : george 545 and fstored {opcd, fs, ra, d} = let
325 :     val fs = emit_FP fs
326 :     val ra = emit_GP ra
327 :     val d = emit_operand d
328 :     in eWord32 ((opcd << 0wx1a) + ((fs << 0wx15) + ((ra << 0wx10) + (d && 0wxffff))))
329 : monnier 411 end
330 : monnier 245
331 : george 545 and fstorede {opcd, fs, ra, de, xop} = let
332 :     val fs = emit_FP fs
333 :     val ra = emit_GP ra
334 :     val de = emit_operand de
335 :     in eWord32 ((opcd << 0wx1a) + ((fs << 0wx15) + ((ra << 0wx10) + (((de && 0wxfff) << 0wx4) + xop))))
336 : monnier 411 end
337 : monnier 245
338 : george 545 and fstore {st, fs, ra, d} =
339 :     (
340 :     case (d, st) of
341 :     (I.RegOp rb, I.STFS) => fstorex {fs=fs, ra=ra, rb=rb, xop=0wx297}
342 :     | (I.RegOp rb, I.STFSE) => fstorex {fs=fs, ra=ra, rb=rb, xop=0wx29f}
343 :     | (I.RegOp rb, I.STFD) => fstorex {fs=fs, ra=ra, rb=rb, xop=0wx2d7}
344 :     | (I.RegOp rb, I.STFDE) => fstorex {fs=fs, ra=ra, rb=rb, xop=0wx2f7}
345 :     | (d, I.STFS) => fstored {fs=fs, ra=ra, d=d, opcd=0wx34}
346 :     | (de, I.STFSE) => fstorede {fs=fs, ra=ra, de=de, opcd=0wx3e, xop=0wxc}
347 :     | (d, I.STFD) => fstored {fs=fs, ra=ra, d=d, opcd=0wx36}
348 :     | (de, I.STFDE) => fstorede {fs=fs, ra=ra, de=de, opcd=0wx3e, xop=0wxe}
349 :     )
350 :     and unary' {ra, rt, OE, oper, Rc} = let
351 :     val ra = emit_GP ra
352 :     val rt = emit_GP rt
353 :     val OE = emit_bool OE
354 :     val oper = emit_unary oper
355 :     val Rc = emit_bool Rc
356 :     in eWord32 ((ra << 0wx15) + ((rt << 0wx10) + ((OE << 0wxa) + ((oper << 0wx1) + (Rc + 0wx7c000000)))))
357 : monnier 411 end
358 : monnier 245
359 : george 545 and unary {ra, rt, oper, OE, Rc} =
360 : monnier 411 (
361 : monnier 429 case oper of
362 : george 545 I.NEG => unary' {ra=rt, rt=ra, oper=oper, OE=OE, Rc=Rc}
363 :     | _ => unary' {ra=ra, rt=rt, oper=oper, OE=OE, Rc=Rc}
364 : monnier 411 )
365 : george 545 and arith' {rt, ra, rb, OE, oper, Rc} = let
366 :     val rt = emit_GP rt
367 :     val ra = emit_GP ra
368 :     val rb = emit_GP rb
369 :     val OE = emit_bool OE
370 :     val oper = emit_arith oper
371 :     val Rc = emit_bool Rc
372 :     in eWord32 ((rt << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + ((OE << 0wxa) + ((oper << 0wx1) + (Rc + 0wx7c000000))))))
373 : monnier 411 end
374 : monnier 245
375 : george 545 and arithi' {oper, rt, ra, im} = let
376 :     val oper = emit_arithi oper
377 :     val rt = emit_GP rt
378 :     val ra = emit_GP ra
379 :     val im = emit_operand im
380 :     in eWord32 ((oper << 0wx1a) + ((rt << 0wx15) + ((ra << 0wx10) + (im && 0wxffff))))
381 : monnier 411 end
382 : monnier 245
383 : george 545 and srawi {rs, ra, sh} = let
384 :     val rs = emit_GP rs
385 :     val ra = emit_GP ra
386 :     val sh = emit_operand sh
387 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + (((sh && 0wx1f) << 0wxb) + 0wx7c000670)))
388 : monnier 411 end
389 : monnier 245
390 : george 545 and sradi' {rs, ra, sh, sh2} = let
391 :     val rs = emit_GP rs
392 :     val ra = emit_GP ra
393 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((sh2 << 0wx1) + 0wx7c000674))))
394 : monnier 245 end
395 : monnier 411
396 : george 545 and sradi {rs, ra, sh} = let
397 :     val sh = emit_operand sh
398 :     in sradi' {rs=rs, ra=ra, sh=(sh && 0wx1f), sh2=((sh << 0wx5) && 0wx1)}
399 : monnier 245 end
400 : monnier 411
401 : george 545 and arith {oper, rt, ra, rb, OE, Rc} =
402 :     (
403 :     case oper of
404 :     (I.ADD | I.SUBF | I.MULLW | I.MULLD | I.MULHW | I.MULHWU | I.DIVW | I.DIVD | I.DIVWU | I.DIVDU) => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
405 :     | _ => arith' {oper=oper, rt=ra, ra=rt, rb=rb, OE=OE, Rc=Rc}
406 :     )
407 :     and arithi {oper, rt, ra, im} =
408 :     (
409 :     case oper of
410 :     (I.ADDI | I.ADDIS | I.SUBFIC | I.MULLI) => arithi' {oper=oper, rt=rt, ra=ra, im=im}
411 :     | I.SRAWI => srawi {rs=ra, ra=rt, sh=im}
412 :     | I.SRADI => sradi {rs=ra, ra=rt, sh=im}
413 :     | _ => arithi' {oper=oper, rt=ra, ra=rt, im=im}
414 :     )
415 :     and Cmpl {bf, l, ra, rb} = let
416 :     val bf = emit_CC bf
417 :     val l = emit_bool l
418 :     val ra = emit_GP ra
419 :     val rb = emit_GP rb
420 :     in eWord32 ((bf << 0wx17) + ((l << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + 0wx7c000040))))
421 : monnier 245 end
422 : monnier 411
423 : george 545 and Cmpli {bf, l, ra, ui} = let
424 :     val bf = emit_CC bf
425 :     val l = emit_bool l
426 :     val ra = emit_GP ra
427 :     val ui = emit_operand ui
428 :     in eWord32 ((bf << 0wx17) + ((l << 0wx15) + ((ra << 0wx10) + ((ui && 0wxffff) + 0wx28000000))))
429 : monnier 245 end
430 : monnier 411
431 : george 545 and Cmp {bf, l, ra, rb} = let
432 :     val bf = emit_CC bf
433 :     val l = emit_bool l
434 :     val ra = emit_GP ra
435 :     val rb = emit_GP rb
436 :     in eWord32 ((bf << 0wx17) + ((l << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + 0wx7c000000))))
437 : monnier 429 end
438 : monnier 411
439 : george 545 and Cmpi {bf, l, ra, si} = let
440 :     val bf = emit_CC bf
441 :     val l = emit_bool l
442 :     val ra = emit_GP ra
443 :     val si = emit_operand si
444 :     in eWord32 ((bf << 0wx17) + ((l << 0wx15) + ((ra << 0wx10) + ((si && 0wxffff) + 0wx2c000000))))
445 : monnier 245 end
446 : monnier 411
447 : monnier 429 and compare {cmp, bf, l, ra, rb} =
448 :     (
449 :     case (cmp, rb) of
450 : george 545 (I.CMP, I.RegOp rb) => Cmp {bf=bf, l=l, ra=ra, rb=rb}
451 :     | (I.CMPL, I.RegOp rb) => Cmpl {bf=bf, l=l, ra=ra, rb=rb}
452 :     | (I.CMP, si) => Cmpi {bf=bf, l=l, ra=ra, si=si}
453 :     | (I.CMPL, ui) => Cmpli {bf=bf, l=l, ra=ra, ui=ui}
454 : monnier 429 )
455 : george 545 and fcmp {bf, fa, fb, cmp} = let
456 :     val bf = emit_CC bf
457 :     val fa = emit_FP fa
458 :     val fb = emit_FP fb
459 :     val cmp = emit_fcmp cmp
460 :     in eWord32 ((bf << 0wx17) + ((fa << 0wx10) + ((fb << 0wxb) + ((cmp << 0wx1) + 0wxfc000000))))
461 : monnier 429 end
462 :    
463 : george 545 and funary {oper, ft, fb, Rc} = let
464 :     val oper = emit_funary oper
465 :     val ft = emit_FP ft
466 :     val fb = emit_FP fb
467 :     in let
468 : monnier 429
469 : george 545 (*#line 431.12 "ppc/ppc.md"*)
470 :     val (opcd, xo) = oper
471 :     in x_form {opcd=opcd, rt=ft, ra=0wx0, rb=fb, xo=xo, rc=Rc}
472 :     end
473 : monnier 429
474 : monnier 245 end
475 : monnier 411
476 : george 545 and farith {oper, ft, fa, fb, Rc} = let
477 :     val ft = emit_FP ft
478 :     val fa = emit_FP fa
479 :     val fb = emit_FP fb
480 :     in let
481 : monnier 411
482 : george 545 (*#line 437.12 "ppc/ppc.md"*)
483 :     val (opcd, xo) = emit_farith oper
484 :     in
485 :     (
486 :     case oper of
487 :     (I.FMUL | I.FMULS) => a_form {opcd=opcd, frt=ft, fra=fa, frb=0wx0, frc=fb, xo=xo, rc=Rc}
488 :     | _ => a_form {opcd=opcd, frt=ft, fra=fa, frb=fb, frc=0wx0, xo=xo, rc=Rc}
489 :     )
490 :     end
491 : monnier 411
492 : monnier 429 end
493 :    
494 : george 545 and farith3 {oper, ft, fa, fc, fb, Rc} = let
495 :     val oper = emit_farith3 oper
496 :     val ft = emit_FP ft
497 :     val fa = emit_FP fa
498 :     val fc = emit_FP fc
499 :     val fb = emit_FP fb
500 :     in let
501 : monnier 429
502 : george 545 (*#line 446.12 "ppc/ppc.md"*)
503 :     val (opcd, xo) = oper
504 :     in a_form {opcd=opcd, frt=ft, fra=fa, frb=fb, frc=fc, xo=xo, rc=Rc}
505 :     end
506 :    
507 : monnier 245 end
508 :    
509 : george 545 and cr_bit {cc} = let
510 :    
511 :     (*#line 451.12 "ppc/ppc.md"*)
512 :     val (cr, bit) = cc
513 :     in ((emit_CC cr) << 0wx2) + (itow
514 :     (
515 :     case bit of
516 :     I.LT => 0
517 :     | I.GT => 1
518 :     | I.EQ => 2
519 :     | I.SO => 3
520 :     | I.FL => 0
521 :     | I.FG => 1
522 :     | I.FE => 2
523 :     | I.FU => 3
524 :     | I.FX => 0
525 :     | I.FEX => 1
526 :     | I.VX => 2
527 :     | I.OX => 3
528 :     ))
529 : monnier 429 end
530 :    
531 : george 545 and ccarith {oper, bt, ba, bb} = let
532 :     val oper = emit_ccarith oper
533 :     in xl_form {opcd=0wx13, bt=cr_bit {cc=bt}, ba=cr_bit {cc=ba}, bb=cr_bit {cc=bb}, xo=oper, lk=false}
534 : monnier 429 end
535 :    
536 : george 545 and twr {to, ra, rb} = let
537 :     val to = emit_int to
538 :     val ra = emit_GP ra
539 :     val rb = emit_GP rb
540 :     in eWord32 ((to << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + 0wx7c000008)))
541 : monnier 411 end
542 : monnier 245
543 : george 545 and twi {to, ra, si} = let
544 :     val to = emit_int to
545 :     val ra = emit_GP ra
546 :     val si = emit_operand si
547 :     in eWord32 ((to << 0wx15) + ((ra << 0wx10) + ((si && 0wxffff) + 0wxc000000)))
548 : monnier 411 end
549 : monnier 245
550 : george 545 and tw {to, ra, si} =
551 :     (
552 :     case si of
553 :     I.RegOp rb => twr {to=to, ra=ra, rb=rb}
554 :     | _ => twi {to=to, ra=ra, si=si}
555 :     )
556 :     and tdr {to, ra, rb} = let
557 :     val to = emit_int to
558 :     val ra = emit_GP ra
559 :     val rb = emit_GP rb
560 :     in eWord32 ((to << 0wx15) + ((ra << 0wx10) + ((rb << 0wxb) + 0wx7c000088)))
561 : monnier 411 end
562 :    
563 : george 545 and tdi {to, ra, si} = let
564 :     val to = emit_int to
565 :     val ra = emit_GP ra
566 :     val si = emit_operand si
567 :     in eWord32 ((to << 0wx15) + ((ra << 0wx10) + ((si && 0wxffff) + 0wx8000000)))
568 : monnier 411 end
569 :    
570 : george 545 and td {to, ra, si} =
571 : monnier 429 (
572 : george 545 case si of
573 :     I.RegOp rb => tdr {to=to, ra=ra, rb=rb}
574 :     | _ => tdi {to=to, ra=ra, si=si}
575 : monnier 429 )
576 : george 545 and mcrf {bf, bfa} = let
577 :     val bf = emit_CC bf
578 :     val bfa = emit_CC bfa
579 :     in eWord32 ((bf << 0wx17) + ((bfa << 0wx12) + 0wx4c000000))
580 :     end
581 : monnier 411
582 : george 545 and mtspr' {rs, spr} = let
583 :     val rs = emit_GP rs
584 :     in eWord32 ((rs << 0wx15) + ((spr << 0wxb) + 0wx7c0003a6))
585 :     end
586 : monnier 411
587 : george 545 and mtspr {rs, spr} = let
588 :     val spr = emit_SPR spr
589 :     in mtspr' {rs=rs, spr=((spr && 0wx1f) << 0wx5) + ((spr << 0wx5) && 0wx1f)}
590 : monnier 411 end
591 :    
592 : george 545 and mfspr' {rt, spr} = let
593 :     val rt = emit_GP rt
594 :     in eWord32 ((rt << 0wx15) + ((spr << 0wxb) + 0wx7c0002a6))
595 : monnier 411 end
596 :    
597 : george 545 and mfspr {rt, spr} = let
598 :     val spr = emit_SPR spr
599 :     in mfspr' {rt=rt, spr=((spr && 0wx1f) << 0wx5) + ((spr << 0wx5) && 0wx1f)}
600 : monnier 411 end
601 :    
602 : george 545 and b {li, aa, lk} = let
603 :     val aa = emit_bool aa
604 :     val lk = emit_bool lk
605 :     in eWord32 (((li && 0wxffffff) << 0wx2) + ((aa << 0wx1) + (lk + 0wx48000000)))
606 : monnier 411 end
607 :    
608 : george 545 and be {li, aa, lk} = let
609 :     val aa = emit_bool aa
610 :     val lk = emit_bool lk
611 :     in eWord32 (((li && 0wxffffff) << 0wx2) + ((aa << 0wx1) + (lk + 0wx58000000)))
612 : monnier 411 end
613 :    
614 : george 545 and bc {bo, bi, bd, aa, lk} = let
615 :     val bo = emit_bo bo
616 :     val aa = emit_bool aa
617 :     val lk = emit_bool lk
618 :     in eWord32 ((bo << 0wx15) + ((bi << 0wx10) + (((bd && 0wx3fff) << 0wx2) + ((aa << 0wx1) + (lk + 0wx40000000)))))
619 : monnier 411 end
620 :    
621 : george 545 and bce {bo, bi, bd, aa, lk} = let
622 :     val bo = emit_bo bo
623 :     val aa = emit_bool aa
624 :     val lk = emit_bool lk
625 :     in eWord32 ((bo << 0wx15) + ((bi << 0wx10) + (((bd && 0wx3fff) << 0wx2) + ((aa << 0wx1) + (lk + 0wx40000000)))))
626 : monnier 411 end
627 :    
628 : george 545 and bclr {bo, bi, lk} = let
629 :     val bo = emit_bo bo
630 :     val lk = emit_bool lk
631 :     in eWord32 ((bo << 0wx15) + ((bi << 0wx10) + (lk + 0wx4c000020)))
632 : monnier 411 end
633 :    
634 : george 545 and bclre {bo, bi, lk} = let
635 :     val bo = emit_bo bo
636 :     val lk = emit_bool lk
637 :     in eWord32 ((bo << 0wx15) + ((bi << 0wx10) + (lk + 0wx4c000022)))
638 :     end
639 : monnier 429
640 : george 545 and bcctr {bo, bi, lk} = let
641 :     val bo = emit_bo bo
642 :     val lk = emit_bool lk
643 :     in eWord32 ((bo << 0wx15) + ((bi << 0wx10) + (lk + 0wx4c000420)))
644 : monnier 411 end
645 :    
646 : george 545 and bcctre {bo, bi, lk} = let
647 :     val bo = emit_bo bo
648 :     val lk = emit_bool lk
649 :     in eWord32 ((bo << 0wx15) + ((bi << 0wx10) + (lk + 0wx4c000422)))
650 : monnier 411 end
651 :    
652 : george 545 and rlwnm {rs, ra, sh, mb, me} = let
653 :     val rs = emit_GP rs
654 :     val ra = emit_GP ra
655 :     val sh = emit_GP sh
656 :     val mb = emit_int mb
657 :     val me = emit_int me
658 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((me << 0wx1) + 0wx5c000000)))))
659 :     end
660 : monnier 411
661 : george 545 and rlwinm {rs, ra, sh, mb, me} = let
662 :     val rs = emit_GP rs
663 :     val ra = emit_GP ra
664 :     val mb = emit_int mb
665 :     val me = emit_int me
666 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((me << 0wx1) + 0wx54000000)))))
667 :     end
668 : monnier 411
669 : george 545 and rldcl {rs, ra, sh, mb} = let
670 :     val rs = emit_GP rs
671 :     val ra = emit_GP ra
672 :     val sh = emit_GP sh
673 :     val mb = emit_int mb
674 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + 0wx78000010))))
675 : monnier 411 end
676 :    
677 : george 545 and rldicl {rs, ra, sh, mb, sh2} = let
678 :     val rs = emit_GP rs
679 :     val ra = emit_GP ra
680 :     val mb = emit_int mb
681 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((sh2 << 0wx1) + 0wx78000000)))))
682 : monnier 429 end
683 :    
684 : george 545 and rldcr {rs, ra, sh, mb} = let
685 :     val rs = emit_GP rs
686 :     val ra = emit_GP ra
687 :     val sh = emit_GP sh
688 :     val mb = emit_int mb
689 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + 0wx78000012))))
690 : monnier 429 end
691 :    
692 : george 545 and rldicr {rs, ra, sh, mb, sh2} = let
693 :     val rs = emit_GP rs
694 :     val ra = emit_GP ra
695 :     val mb = emit_int mb
696 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((sh2 << 0wx1) + 0wx78000004)))))
697 : monnier 411 end
698 :    
699 : george 545 and rldic {rs, ra, sh, mb, sh2} = let
700 :     val rs = emit_GP rs
701 :     val ra = emit_GP ra
702 :     val mb = emit_int mb
703 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((sh2 << 0wx1) + 0wx78000008)))))
704 : monnier 429 end
705 :    
706 : george 545 and rlwimi {rs, ra, sh, mb, me} = let
707 :     val rs = emit_GP rs
708 :     val ra = emit_GP ra
709 :     val mb = emit_int mb
710 :     val me = emit_int me
711 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((me << 0wx1) + 0wx50000000)))))
712 : monnier 429 end
713 :    
714 : george 545 and rldimi {rs, ra, sh, mb, sh2} = let
715 :     val rs = emit_GP rs
716 :     val ra = emit_GP ra
717 :     val mb = emit_int mb
718 :     in eWord32 ((rs << 0wx15) + ((ra << 0wx10) + ((sh << 0wxb) + ((mb << 0wx6) + ((sh2 << 0wx1) + 0wx7800000c)))))
719 : monnier 429 end
720 :    
721 : george 545 and rotate {oper, ra, rs, sh, mb, me} =
722 : monnier 411 (
723 : george 545 case (oper, me) of
724 :     (I.RLWNM, SOME me) => rlwnm {ra=ra, rs=rs, sh=sh, mb=mb, me=me}
725 :     | (I.RLDCL, _) => rldcl {ra=ra, rs=rs, sh=sh, mb=mb}
726 :     | (I.RLDCR, _) => rldcr {ra=ra, rs=rs, sh=sh, mb=mb}
727 : monnier 411 )
728 : george 545 and rotatei {oper, ra, rs, sh, mb, me} = let
729 :     val sh = emit_operand sh
730 :     in
731 :     (
732 :     case (oper, me) of
733 :     (I.RLWINM, SOME me) => rlwinm {ra=ra, rs=rs, sh=sh, mb=mb, me=me}
734 :     | (I.RLWIMI, SOME me) => rlwimi {ra=ra, rs=rs, sh=sh, mb=mb, me=me}
735 :     | (I.RLDICL, _) => rldicl {ra=ra, rs=rs, sh=(sh && 0wx1f), sh2=((sh << 0wx5) && 0wx1), mb=mb}
736 :     | (I.RLDICR, _) => rldicr {ra=ra, rs=rs, sh=(sh && 0wx1f), sh2=((sh << 0wx5) && 0wx1), mb=mb}
737 :     | (I.RLDIC, _) => rldic {ra=ra, rs=rs, sh=(sh && 0wx1f), sh2=((sh << 0wx5) && 0wx1), mb=mb}
738 :     | (I.RLDIMI, _) => rldimi {ra=ra, rs=rs, sh=(sh && 0wx1f), sh2=((sh << 0wx5) && 0wx1), mb=mb}
739 :     )
740 :     end
741 : monnier 411
742 :    
743 : george 545 (*#line 541.7 "ppc/ppc.md"*)
744 :     fun relative (I.LabelOp lexp) = (itow ((LabelExp.valueOf lexp) - ( ! loc))) ~>> 0wx2
745 :     | relative _ = error "relative"
746 :     fun emitInstr (I.L{ld, rt, ra, d, mem}) = load {ld=ld, rt=rt, ra=ra, d=d}
747 :     | emitInstr (I.LF{ld, ft, ra, d, mem}) = fload {ld=ld, ft=ft, ra=ra, d=d}
748 :     | emitInstr (I.ST{st, rs, ra, d, mem}) = store {st=st, rs=rs, ra=ra, d=d}
749 :     | emitInstr (I.STF{st, fs, ra, d, mem}) = fstore {st=st, fs=fs, ra=ra, d=d}
750 :     | emitInstr (I.UNARY{oper, rt, ra, Rc, OE}) = unary {oper=oper, rt=rt, ra=ra, OE=OE, Rc=Rc}
751 :     | emitInstr (I.ARITH{oper, rt, ra, rb, Rc, OE}) = arith {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
752 :     | emitInstr (I.ARITHI{oper, rt, ra, im}) = arithi {oper=oper, rt=rt, ra=ra, im=im}
753 :     | emitInstr (I.ROTATE{oper, ra, rs, sh, mb, me}) = rotate {oper=oper, ra=ra, rs=rs, sh=sh, mb=mb, me=me}
754 :     | emitInstr (I.ROTATEI{oper, ra, rs, sh, mb, me}) = rotatei {oper=oper, ra=ra, rs=rs, sh=sh, mb=mb, me=me}
755 :     | emitInstr (I.COMPARE{cmp, l, bf, ra, rb}) = compare {cmp=cmp, bf=bf, l=l, ra=ra, rb=rb}
756 :     | emitInstr (I.FCOMPARE{cmp, bf, fa, fb}) = fcmp {cmp=cmp, bf=bf, fa=fa, fb=fb}
757 :     | emitInstr (I.FUNARY{oper, ft, fb, Rc}) = funary {oper=oper, ft=ft, fb=fb, Rc=Rc}
758 :     | emitInstr (I.FARITH{oper, ft, fa, fb, Rc}) = farith {oper=oper, ft=ft, fa=fa, fb=fb, Rc=Rc}
759 :     | emitInstr (I.FARITH3{oper, ft, fa, fb, fc, Rc}) = farith3 {oper=oper, ft=ft, fa=fa, fb=fb, fc=fc, Rc=Rc}
760 :     | emitInstr (I.CCARITH{oper, bt, ba, bb}) = ccarith {oper=oper, bt=bt, ba=ba, bb=bb}
761 :     | emitInstr (I.MCRF{bf, bfa}) = mcrf {bf=bf, bfa=bfa}
762 :     | emitInstr (I.MTSPR{rs, spr}) = mtspr {rs=rs, spr=spr}
763 :     | emitInstr (I.MFSPR{rt, spr}) = mfspr {rt=rt, spr=spr}
764 :     | emitInstr (I.TW{to, ra, si}) = tw {to=to, ra=ra, si=si}
765 :     | emitInstr (I.TD{to, ra, si}) = td {to=to, ra=ra, si=si}
766 :     | emitInstr (I.BC{bo, bf, bit, addr, LK, fall}) = bc {bo=bo, bi=cr_bit {cc=(bf, bit)}, bd=relative addr, aa=false, lk=LK}
767 :     | emitInstr (I.BCLR{bo, bf, bit, LK, labels}) = bclr {bo=bo, bi=cr_bit {cc=(bf, bit)}, lk=LK}
768 :     | emitInstr (I.B{addr, LK}) = b {li=relative addr, aa=false, lk=LK}
769 :     | emitInstr (I.CALL{def, use, mem}) = bclr {bo=I.ALWAYS, bi=0wx0, lk=true}
770 :     | emitInstr (I.COPY{dst, src, impl, tmp}) = error "COPY"
771 :     | emitInstr (I.FCOPY{dst, src, impl, tmp}) = error "FCOPY"
772 :     | emitInstr (I.ANNOTATION{i, a}) = emitInstr i
773 : leunga 624 | emitInstr (I.SOURCE{}) = ()
774 :     | emitInstr (I.SINK{}) = ()
775 :     | emitInstr (I.PHI{}) = ()
776 : monnier 411 in
777 :     emitInstr
778 :     end
779 :    
780 : monnier 429 in S.STREAM{beginCluster=init,
781 : monnier 411 pseudoOp=pseudoOp,
782 :     emit=emitter,
783 : monnier 429 endCluster=doNothing,
784 : monnier 411 defineLabel=doNothing,
785 :     entryLabel=doNothing,
786 :     comment=doNothing,
787 :     exitBlock=doNothing,
788 : monnier 429 annotation=doNothing,
789 :     phi=doNothing,
790 :     alias=doNothing
791 : monnier 411 }
792 :     end
793 :     end
794 :    

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