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/sparc/ra/sparcRegAlloc.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/sparc/ra/sparcRegAlloc.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 247 - (view) (download)
Original Path: sml/branches/SMLNJ/src/MLRISC/sparc/ra/sparcRegAlloc.sml

1 : monnier 247 (* sparcRegAlloc.sml --- sparc integer and floating register allocator
2 :     *
3 :     * COPYRIGHT (c) 1996 AT&T Bell Laboratories.
4 :     *
5 :     *)
6 :    
7 :     (* Integer and floating register allocators are a partial application
8 :     * of a curried functor.
9 :     *)
10 :    
11 :     functor SparcRegAlloc(structure I : INSTRUCTIONS where C = SparcCells
12 :     structure P : INSN_PROPERTIES where I = I
13 :     structure F : FLOWGRAPH where I = I
14 :     structure Asm : EMITTER_NEW where I = I and P=F.P
15 :     ) :
16 :     sig
17 :     functor IntRa (structure RaUser : RA_USER_PARAMS
18 :     where type I.operand = I.operand
19 :     and type I.instruction = I.instruction
20 :     and type B.name = F.B.name) : RA
21 :    
22 :     functor FloatRa (structure RaUser : RA_USER_PARAMS
23 :     where type I.operand = I.operand
24 :     and type I.instruction = I.instruction
25 :     and type B.name = F.B.name) : RA
26 :     end =
27 :     struct
28 :    
29 :     structure C=I.C
30 :    
31 :     (* liveness analysis for general purpose registers *)
32 :     structure RegLiveness =
33 :     Liveness(structure Flowgraph=F
34 :     structure Instruction=I
35 :     val defUse = P.defUse C.GP
36 :     fun regSet c = #1 (c:SparcCells.cellset)
37 :     fun cellset((_,f),r) = (r,f))
38 :    
39 :    
40 :     functor IntRa =
41 :     RegAllocator
42 :     (structure RaArch = struct
43 :     structure InsnProps = P
44 :     structure AsmEmitter = Asm
45 :     structure I = I
46 :     structure Liveness=RegLiveness
47 :    
48 :     val defUse = P.defUse C.GP
49 :     val firstPseudoR = 32
50 :     val maxPseudoR = SparcCells.maxCell
51 :     val numRegs = SparcCells.numCell SparcCells.GP
52 :     fun regSet c = #1 (c:SparcCells.cellset)
53 :     end)
54 :    
55 :     (* liveness analysis for floating point registers *)
56 :     structure FregLiveness =
57 :     Liveness(structure Flowgraph=F
58 :     structure Instruction=I
59 :     val defUse = P.defUse C.FP
60 :     fun regSet c = #2 (c:SparcCells.cellset)
61 :     fun cellset((r,_),f) = (r,f))
62 :    
63 :     functor FloatRa =
64 :     RegAllocator
65 :     (structure RaArch = struct
66 :     structure InsnProps = P
67 :     structure AsmEmitter = Asm
68 :     structure I = I
69 :     structure Liveness=FregLiveness
70 :    
71 :     val defUse = P.defUse C.FP
72 :     val firstPseudoR = 32
73 :     val maxPseudoR = SparcCells.maxCell
74 :     val numRegs = SparcCells.numCell SparcCells.FP
75 :     fun regSet c = #2 (c:SparcCells.cellset)
76 :     end)
77 :     end
78 :    
79 :     (*
80 :     * $Log: sparcRegAlloc.sml,v $
81 :     * Revision 1.1.1.1 1999/01/04 21:56:27 george
82 :     * Version 110.12
83 :     *
84 :     * Revision 1.3 1998/10/06 14:06:27 george
85 :     * fixed up some machine description problems. [leunga]
86 :     *
87 :     * Revision 1.2 1998/09/30 19:38:39 dbm
88 :     * fixing sharing/defspec conflict
89 :     *
90 :     * Revision 1.1.1.1 1998/08/05 19:38:49 george
91 :     * Release 110.7.4
92 :     *
93 :     *)

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