Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/MLRISC/ppc/instructions/ppcInstr.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/ppc/instructions/ppcInstr.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 410, Fri Sep 3 00:25:03 1999 UTC revision 411, Fri Sep 3 00:25:03 1999 UTC
# Line 1  Line 1 
1  functor PPCInstr  (*
2    (structure Const : CONSTANT   * This file was automatically generated by MDGen
3     structure Region : REGION) : PPCINSTR =   * from the machine description file "ppc/ppc.md".
4     *)
5    
6    
7    signature PPCINSTR =
8    sig
9       structure C : PPCCELLS
10       structure Constant: CONSTANT
11       structure Region : REGION
12       type gpr = int
13       type fpr = int
14       type ccr = int
15       type crf = int
16       datatype spr =
17         XER
18       | LR
19       | CTR
20       datatype operand =
21         RegOp of int
22       | ImmedOp of int
23       | LabelOp of LabelExp.labexp
24       | ConstOp of Constant.const
25       datatype ea =
26         Direct of int
27       | FDirect of int
28       | Displace of {base:int, disp:operand}
29       datatype load =
30         LBZ
31       | LBZE
32       | LHZ
33       | LHZE
34       | LHA
35       | LHAE
36       | LWZ
37       | LWZE
38       | LDE
39       datatype store =
40         STB
41       | STBE
42       | STH
43       | STHE
44       | STW
45       | STWE
46       | STDE
47       datatype fload =
48         LFS
49       | LFSE
50       | LFD
51       | LFDE
52       datatype fstore =
53         STFS
54       | STFSE
55       | STFD
56       | STFDE
57       datatype cmp =
58         CMP
59       | CMPL
60       datatype fcmp =
61         FCMPO
62       | FCMPU
63       datatype unary =
64         NEG
65       | EXTSB
66       | EXTSH
67       | EXTSW
68       | CNTLZW
69       | CNTLZD
70       datatype funary =
71         FMR
72       | FNEG
73       | FABS
74       | FNABS
75       | FSQRT
76       | FSQRTS
77       | FRSP
78       | FCTIW
79       | FCTIWZ
80       | FCTID
81       | FCTIDZ
82       | FCFID
83       datatype farith =
84         FADD
85       | FSUB
86       | FMUL
87       | FDIV
88       | FADDS
89       | FSUBS
90       | FMULS
91       | FDIVS
92       datatype farith3 =
93         FMADD
94       | FMADDS
95       | FMSUB
96       | FMSUBS
97       | FNMADD
98       | FNMADDS
99       | FNMSUB
100       | FNMSUBS
101       | FSEL
102       datatype bo =
103         TRUE
104       | FALSE
105       | ALWAYS
106       | COUNTER of {eqZero:bool, cond:bool option}
107       datatype arith =
108         ADD
109       | SUBF
110       | MULLW
111       | MULLD
112       | MULHW
113       | MULHWU
114       | DIVW
115       | DIVD
116       | DIVWU
117       | DIVDU
118       | AND
119       | OR
120       | XOR
121       | NAND
122       | NOR
123       | EQV
124       | ANDC
125       | ORC
126       | SLW
127       | SLD
128       | SRW
129       | SRD
130       | SRAW
131       | SRAD
132       datatype arithi =
133         ADDI
134       | ADDIS
135       | SUBFIC
136       | MULLI
137       | ANDI_Rc
138       | ANDIS_Rc
139       | ORI
140       | ORIS
141       | XORI
142       | XORIS
143       | SRAWI
144       | SRADI
145       datatype rotate =
146         RLWNM
147       | RLDCL
148       | RLDCR
149       datatype rotatei =
150         RLWINM
151       | RLWIMI
152       | RLDICL
153       | RLDICR
154       | RLDIC
155       | RLDIMI
156       datatype ccarith =
157         CRAND
158       | CROR
159       | CRXOR
160       | CRNAND
161       | CRNOR
162       | CREQV
163       | CRANDC
164       | CRORC
165       datatype bit =
166         LT
167       | GT
168       | EQ
169       | SO
170       | FL
171       | FG
172       | FE
173       | FU
174       | FX
175       | FEX
176       | VX
177       | OX
178       datatype xerbit =
179         SO64
180       | OV64
181       | CA64
182       | SO32
183       | OV32
184       | CA32
185       type cr_bit = (int * bit)
186       datatype instruction =
187         L of {ld:load, rt:int, ra:int, d:operand, mem:Region.region}
188       | LF of {ld:fload, ft:int, ra:int, d:operand, mem:Region.region}
189       | ST of {st:store, rs:int, ra:int, d:operand, mem:Region.region}
190       | STF of {st:fstore, fs:int, ra:int, d:operand, mem:Region.region}
191       | UNARY of {oper:unary, rt:int, ra:int, Rc:bool, OE:bool}
192       | ARITH of {oper:arith, rt:int, ra:int, rb:int, Rc:bool, OE:bool}
193       | ARITHI of {oper:arithi, rt:int, ra:int, im:operand}
194       | ROTATE of {oper:rotate, ra:int, rs:int, sh:int, mb:int, me:int option
195         }
196       | ROTATEI of {oper:rotatei, ra:int, rs:int, sh:operand, mb:int, me:int option
197         }
198       | COMPARE of {cmp:cmp, l:bool, bf:int, ra:int, rb:operand}
199       | FCOMPARE of {cmp:fcmp, bf:int, fa:int, fb:int}
200       | FUNARY of {oper:funary, ft:int, fb:int, Rc:bool}
201       | FARITH of {oper:farith, ft:int, fa:int, fb:int, Rc:bool}
202       | FARITH3 of {oper:farith3, ft:int, fa:int, fb:int, fc:int, Rc:bool
203         }
204       | CCARITH of {oper:ccarith, bt:cr_bit, ba:cr_bit, bb:cr_bit}
205       | MCRF of {bf:int, bfa:int}
206       | MTSPR of {rs:int, spr:int}
207       | MFSPR of {rt:int, spr:int}
208       | TW of {to:int, ra:int, si:operand}
209       | TD of {to:int, ra:int, si:operand}
210       | BC of {bo:bo, bf:int, bit:bit, addr:operand, LK:bool, fall:operand
211         }
212       | BCLR of {bo:bo, bf:int, bit:bit, LK:bool, labels:Label.label list
213         }
214       | B of {addr:operand, LK:bool}
215       | CALL of {def:C.cellset, use:C.cellset, mem:Region.region}
216       | COPY of {dst:int list, src:int list, impl:instruction list option ref
217         , tmp:ea option}
218       | FCOPY of {dst:int list, src:int list, impl:instruction list option ref
219         , tmp:ea option}
220       | ANNOTATION of {i:instruction, a:Annotations.annotation}
221       | GROUP of Annotations.annotation
222    end
223    
224    functor PPCInstr(structure Const : CONSTANT
225                     structure Region : REGION
226                    ) : PPCINSTR =
227  struct  struct
228    structure C = PPCCells    structure C = PPCCells
   structure Constant = Const  
229    structure Region = Region    structure Region = Region
230       structure Constant = Const
231    type gpr = int                        (* general purpose register *)     type gpr = int
232    type fpr = int                        (* floating point register *)     type fpr = int
233    type ccr = int                        (* condition code register *)     type ccr = int
234    type crf = int                        (* condition register field *)     type crf = int
235       datatype spr =
236         XER
237    datatype spr = XER | LR | CTR     | LR
238       | CTR
239    datatype operand =    datatype operand =
240        RegOp of int        RegOp of int
241      | ImmedOp of int      | ImmedOp of int
242      | LabelOp of LabelExp.labexp      | LabelOp of LabelExp.labexp
243      | ConstOp of Constant.const      | ConstOp of Constant.const
 (***  
     | HiLabelOp of LabelExp.labexp  
     | LoLabelOp of LabelExp.labexp  
 ***)  
   
244    datatype ea =    datatype ea =
245        Direct of int        Direct of int
246      | FDirect of int      | FDirect of int
247      | Displace of {base:int, disp:operand} (* RegOp illegal as operand *)     | Displace of {base:int, disp:operand}
248       datatype load =
249    datatype size = Byte | Half | Word | Long | Single | Double       LBZ
250       | LBZE
251    datatype cmp = CMP | CMPL     | LHZ
252    datatype fcmp = FCMPO (* ordered *) | FCMPU   (* unordered *)     | LHZE
253    datatype unary = NEG     | LHA
254    datatype funary = FMR | FABS | FNEG     | LHAE
255    datatype farith  = FADD | FSUB | FMUL | FDIV     | LWZ
256       | LWZE
257       | LDE
258       datatype store =
259         STB
260       | STBE
261       | STH
262       | STHE
263       | STW
264       | STWE
265       | STDE
266       datatype fload =
267         LFS
268       | LFSE
269       | LFD
270       | LFDE
271       datatype fstore =
272         STFS
273       | STFSE
274       | STFD
275       | STFDE
276       datatype cmp =
277         CMP
278       | CMPL
279       datatype fcmp =
280         FCMPO
281       | FCMPU
282       datatype unary =
283         NEG
284       | EXTSB
285       | EXTSH
286       | EXTSW
287       | CNTLZW
288       | CNTLZD
289       datatype funary =
290         FMR
291       | FNEG
292       | FABS
293       | FNABS
294       | FSQRT
295       | FSQRTS
296       | FRSP
297       | FCTIW
298       | FCTIWZ
299       | FCTID
300       | FCTIDZ
301       | FCFID
302       datatype farith =
303         FADD
304       | FSUB
305       | FMUL
306       | FDIV
307       | FADDS
308       | FSUBS
309       | FMULS
310       | FDIVS
311       datatype farith3 =
312         FMADD
313       | FMADDS
314       | FMSUB
315       | FMSUBS
316       | FNMADD
317       | FNMADDS
318       | FNMSUB
319       | FNMSUBS
320       | FSEL
321    datatype bo =    datatype bo =
322        TRUE                              (* 011zy *)       TRUE
323      | FALSE                             (* 001zy *)     | FALSE
324      | ALWAYS                            (* 1z1zz *)     | ALWAYS
325      | COUNTER of {eqZero:bool, cond:bool option}      | COUNTER of {eqZero:bool, cond:bool option}
326                          (* operation                    ARITH   ARITHI *)     datatype arith =
327    datatype arith =      (* ---------                    -----   ------ *)       ADD
328        ADD               (* add                          add     addi   *)     | SUBF
329      | ADDS              (* add-shifted                   -      addis  *)     | MULLW
330      | SUBF              (* subtract from                subf    subfic *)     | MULLD
331      | MULL              (* multiply                     mullw   mulli  *)     | MULHW
332      | DIVW              (* divide word                  divw      -    *)     | MULHWU
333      | DIVWU             (* divide word unsigned         divwu     -    *)     | DIVW
334      | AND               (* and                          and     andi   *)     | DIVD
335      | OR                (* or                           or      ori    *)     | DIVWU
336      | XOR               (* xor                          xor     xori   *)     | DIVDU
337      | XORS              (* xor shifted                   -      xoris  *)     | AND
338      | SLW               (* shift left word              slw     rlwinm *)     | OR
339      | SRW               (* shift right word             srw     rlwinm *)     | XOR
340      | SRAW              (* shift right algebrai word    sraw    srawi  *)     | NAND
341       | NOR
342       | EQV
343       | ANDC
344       | ORC
345       | SLW
346       | SLD
347       | SRW
348       | SRD
349       | SRAW
350       | SRAD
351       datatype arithi =
352         ADDI
353       | ADDIS
354       | SUBFIC
355       | MULLI
356       | ANDI_Rc
357       | ANDIS_Rc
358       | ORI
359       | ORIS
360       | XORI
361       | XORIS
362       | SRAWI
363       | SRADI
364    datatype rotate =    datatype rotate =
365        RLWNM             (* rotate left word AND mask    rlwnm   rlwinm *)       RLWNM
366       | RLDCL
367       | RLDCR
368       datatype rotatei =
369         RLWINM
370       | RLWIMI
371       | RLDICL
372       | RLDICR
373       | RLDIC
374       | RLDIMI
375    datatype ccarith =    datatype ccarith =
376        CRAND                             (* cond. reg. AND *)       CRAND
377      | CROR                              (* cond. reg. OR *)     | CROR
378      | CRXOR                             (* cond. reg. XOR *)     | CRXOR
379      | CRNAND                            (* cond. reg. NAND *)     | CRNAND
380      | CRNOR                             (* cond. reg. NOR *)     | CRNOR
381       | CREQV
382    (* bits in condition code *)     | CRANDC
383       | CRORC
384    datatype bit =    datatype bit =
385        LT | GT  | EQ | SO                (* cr0 *)       LT
386      | FL | FG  | FE | FU                (* cr1 *)     | GT
387      | FX | FEX | VX | OX     | EQ
388       | SO
389    type cr_bit = int * bit     | FL
390       | FG
391       | FE
392       | FU
393       | FX
394       | FEX
395       | VX
396       | OX
397       datatype xerbit =
398         SO64
399       | OV64
400       | CA64
401       | SO32
402       | OV32
403       | CA32
404       type cr_bit = (int * bit)
405    datatype instruction =    datatype instruction =
406        L of {sz:size, rt:int, ra:int, d:operand, mem:Region.region}       L of {ld:load, rt:int, ra:int, d:operand, mem:Region.region}
407      | ST of {sz:size, rs:int, ra:int, d:operand, mem:Region.region}     | LF of {ld:fload, ft:int, ra:int, d:operand, mem:Region.region}
408       | ST of {st:store, rs:int, ra:int, d:operand, mem:Region.region}
409       | STF of {st:fstore, fs:int, ra:int, d:operand, mem:Region.region}
410      | UNARY of {oper:unary, rt:int, ra:int, Rc:bool, OE:bool}      | UNARY of {oper:unary, rt:int, ra:int, Rc:bool, OE:bool}
411      | ARITH of {oper:arith, rt:int, ra:int, rb:int, Rc:bool, OE:bool}      | ARITH of {oper:arith, rt:int, ra:int, rb:int, Rc:bool, OE:bool}
412      | ARITHI of {oper:arith, rt:int, ra:int, im:operand}     | ARITHI of {oper:arithi, rt:int, ra:int, im:operand}
413      | ROTATE of {oper:rotate, ra:int, rs:int, sh:operand, mb:int, me: int}     | ROTATE of {oper:rotate, ra:int, rs:int, sh:int, mb:int, me:int option
414      | COMPARE of {cmp:cmp, bf: int, ra:int, rb:operand}       }
415       | ROTATEI of {oper:rotatei, ra:int, rs:int, sh:operand, mb:int, me:int option
416         }
417       | COMPARE of {cmp:cmp, l:bool, bf:int, ra:int, rb:operand}
418      | FCOMPARE of {cmp:fcmp, bf:int, fa:int, fb:int}      | FCOMPARE of {cmp:fcmp, bf:int, fa:int, fb:int}
   
419      | FUNARY of {oper:funary, ft:int, fb:int, Rc:bool}      | FUNARY of {oper:funary, ft:int, fb:int, Rc:bool}
420      | FARITH of {oper:farith, ft:int, fa:int, fb:int, Rc:bool}      | FARITH of {oper:farith, ft:int, fa:int, fb:int, Rc:bool}
421       | FARITH3 of {oper:farith3, ft:int, fa:int, fb:int, fc:int, Rc:bool
422         }
423      | CCARITH of {oper:ccarith, bt:cr_bit, ba:cr_bit, bb:cr_bit}      | CCARITH of {oper:ccarith, bt:cr_bit, ba:cr_bit, bb:cr_bit}
424      | MCRF of {bf:int, bfa:int}      | MCRF of {bf:int, bfa:int}
   
     (* Special Purpose Registers *)  
425      | MTSPR of {rs:int, spr:int}      | MTSPR of {rs:int, spr:int}
426      | MFSPR of {rt:int, spr:int}      | MFSPR of {rt:int, spr:int}
427       | TW of {to:int, ra:int, si:operand}
428      (* Trapping Instructions *)     | TD of {to:int, ra:int, si:operand}
429      | TWI of {to:int, ra:int, si:operand}     | BC of {bo:bo, bf:int, bit:bit, addr:operand, LK:bool, fall:operand
430         }
431      (* Control Instructions -  AA is always assumed to be 0 *)     | BCLR of {bo:bo, bf:int, bit:bit, LK:bool, labels:Label.label list
432      | BC   of {bo:bo, bf:int, bit:bit, addr:operand, LK:bool, fall:operand}       }
     | BCLR of {bo:bo, bf:int, bit:bit, LK:bool, labels:Label.label list}  
433      | B    of {addr:operand, LK:bool}      | B    of {addr:operand, LK:bool}
434       | CALL of {def:C.cellset, use:C.cellset, mem:Region.region}
435      (* CALL = BCLR {bo=ALWAYS, bf=0, bit=0, LK=true, labels=[] *)     | COPY of {dst:int list, src:int list, impl:instruction list option ref
436      | CALL of {def:C.cellset, use:C.cellset}       , tmp:ea option}
437       | FCOPY of {dst:int list, src:int list, impl:instruction list option ref
438      | COPY of {dst:int list, src: int list, impl:instruction list option ref,       , tmp:ea option}
439                 tmp: ea option}     | ANNOTATION of {i:instruction, a:Annotations.annotation}
440      | FCOPY of {dst: int list, src: int list, impl:instruction list option ref,     | GROUP of Annotations.annotation
                 tmp: ea option}  
   
   fun mtlr r = MTSPR{rs=r, spr=8}  
   fun mflr r = MFSPR{rt=r, spr=8}  
   fun ret() = BCLR{bo=ALWAYS, bf=0, bit=LT, LK=false, labels=[]}  
441  end  end
442    

Legend:
Removed from v.410  
changed lines
  Added in v.411

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