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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 129 - (view) (download)

1 : monnier 129 (* 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 P : INSN_PROPERTIES
12 :     structure F : FLOWGRAPH
13 :     structure I : INSTRUCTIONS where C = SparcCells
14 :     structure Asm : EMITTER_NEW
15 :     sharing Asm.F = F
16 :     sharing P.I = F.I = Asm.I = I) :
17 :     sig
18 :     functor IntRa (structure RaUser : RA_USER_PARAMS
19 :     where type I.operand = I.operand
20 :     and type I.instruction = I.instruction
21 :     and type B.name = F.B.name) : sig
22 :     datatype mode = REGISTER_ALLOCATION | COPY_PROPAGATION
23 :     val ra : mode -> F.cluster -> F.cluster
24 :     end
25 :     functor FloatRa (structure RaUser : RA_USER_PARAMS
26 :     where type I.operand = I.operand
27 :     and type I.instruction = I.instruction
28 :     and type B.name = F.B.name) : sig
29 :     datatype mode = REGISTER_ALLOCATION | COPY_PROPAGATION
30 :     val ra : mode -> F.cluster -> F.cluster
31 :     end
32 :     end=
33 :     struct
34 :    
35 :     structure C=I.C
36 :    
37 :     (* liveness analysis for general purpose registers *)
38 :     structure RegLiveness =
39 :     Liveness(structure Flowgraph=F
40 :     structure Instruction=I
41 :     val defUse = P.defUse C.GP
42 :     fun regSet c = #1 (c:SparcCells.cellset)
43 :     fun cellset((_,f),r) = (r,f))
44 :    
45 :    
46 :     functor IntRa =
47 :     RegAllocator
48 :     (structure RaArch = struct
49 :     structure InsnProps = P
50 :     structure AsmEmitter = Asm
51 :     structure I = I
52 :     structure Liveness=RegLiveness
53 :    
54 :     val defUse = P.defUse C.GP
55 :     val firstPseudoR = 32
56 :     val maxPseudoR = SparcCells.maxCell
57 :     val numRegs = SparcCells.numCell SparcCells.GP
58 :     fun regSet c = #1 (c:SparcCells.cellset)
59 :     end)
60 :    
61 :     (* liveness analysis for floating point registers *)
62 :     structure FregLiveness =
63 :     Liveness(structure Flowgraph=F
64 :     structure Instruction=I
65 :     val defUse = P.defUse C.FP
66 :     fun regSet c = #2 (c:SparcCells.cellset)
67 :     fun cellset((r,_),f) = (r,f))
68 :    
69 :     functor FloatRa =
70 :     RegAllocator
71 :     (structure RaArch = struct
72 :     structure InsnProps = P
73 :     structure AsmEmitter = Asm
74 :     structure I = I
75 :     structure Liveness=FregLiveness
76 :    
77 :     val defUse = P.defUse C.FP
78 :     val firstPseudoR = 32
79 :     val maxPseudoR = SparcCells.maxCell
80 :     val numRegs = SparcCells.numCell SparcCells.FP
81 :     fun regSet c = #2 (c:SparcCells.cellset)
82 :     end)
83 :     end
84 :    
85 :     (*
86 :     * $Log$
87 :     *)

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