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/compiler/CodeGen/alpha32/alpha32CG.sml
ViewVC logotype

Diff of /sml/trunk/src/compiler/CodeGen/alpha32/alpha32CG.sml

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

revision 657, Fri Jun 9 05:20:54 2000 UTC revision 796, Tue Mar 6 00:04:33 2001 UTC
# Line 6  Line 6 
6    ( structure I          = Alpha32Instr    ( structure I          = Alpha32Instr
7      structure MachSpec   = Alpha32Spec      structure MachSpec   = Alpha32Spec
8      structure PseudoOps  = Alpha32PseudoOps      structure PseudoOps  = Alpha32PseudoOps
9        structure Ext        = SMLNJMLTreeExt(* generic extension *)
10      structure CpsRegs    = Alpha32CpsRegs      structure CpsRegs    = Alpha32CpsRegs
11      structure InsnProps  = Alpha32Props      structure InsnProps  = Alpha32Props
12      structure Asm        = Alpha32AsmEmitter      structure Asm        = Alpha32AsmEmitter
13      structure Shuffle    = Alpha32Shuffle      structure Shuffle    = Alpha32Shuffle
14    
15        structure CCalls     = DummyCCallsFn (Alpha32MLTree)
16    
17      structure MLTreeComp=      structure MLTreeComp=
18         Alpha(structure AlphaInstr = Alpha32Instr         Alpha(structure AlphaInstr = Alpha32Instr
19               structure AlphaMLTree = Alpha32MLTree               structure AlphaMLTree = Alpha32MLTree
# Line 36  Line 39 
39                  structure Emitter = Alpha32MCEmitter)                  structure Emitter = Alpha32MCEmitter)
40    
41      structure RA =      structure RA =
42         RegAlloc         RISC_RA
43           (structure I         = Alpha32Instr           (structure I         = Alpha32Instr
           structure MachSpec  = Alpha32Spec  
44            structure Flowgraph = Alpha32FlowGraph            structure Flowgraph = Alpha32FlowGraph
           structure CpsRegs   = Alpha32CpsRegs  
45            structure InsnProps = InsnProps            structure InsnProps = InsnProps
46            structure Rewrite   = AlphaRewrite(Alpha32Instr)            structure Rewrite   = AlphaRewrite(Alpha32Instr)
47            structure Asm       = Alpha32AsmEmitter            structure Asm       = Alpha32AsmEmitter
48              structure SpillHeur = ChaitinSpillHeur
49              structure Spill     = RASpill(structure InsnProps = InsnProps
50                                            structure Asm = Alpha32AsmEmitter)
51    
52            val sp = I.C.stackptrR            val sp = I.C.stackptrR
53            val spill = CPSRegions.spill            val spill = CPSRegions.spill
54    
55              structure SpillTable = SpillTable(Alpha32Spec)
56    
57              val architecture = Alpha32Spec.architecture
58    
59              val beginRA = SpillTable.spillInit
60    
61            fun pure _ = false            fun pure _ = false
62    
63            (* make copies *)            (* make copies *)
64            fun copyR((rds as [_], rss as [_]), _) =            structure Int =
65              struct
66                  val avail     = Alpha32CpsRegs.availR
67                  val dedicated = Alpha32CpsRegs.dedicatedR
68    
69                  fun copy((rds as [_], rss as [_]), _) =
70                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
71              | copyR((rds, rss), I.COPY{tmp, ...}) =                  | copy((rds, rss), I.COPY{tmp, ...}) =
72                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=tmp}                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=tmp}
           fun copyF((fds as [_], fss as [_]), _) =  
               I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}  
             | copyF((fds, fss), I.FCOPY{tmp, ...}) =  
               I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}  
73    
74            (* spill copy temp *)            (* spill copy temp *)
75            fun spillCopyTmp(I.COPY{tmp,dst,src,impl},loc) =                fun spillCopyTmp(an, I.COPY{tmp,dst,src,impl},loc) =
76                I.COPY{tmp=SOME(I.Displace{base=sp, disp=loc}),                    I.COPY{tmp=SOME(I.Displace{base=sp,
77                       dst=dst,src=src,impl=impl}                                               disp=SpillTable.getRegLoc loc}),
           fun spillFcopyTmp(I.FCOPY{tmp,dst,src,impl},loc) =  
               I.FCOPY{tmp=SOME(I.Displace{base=sp, disp=loc}),  
78                        dst=dst,src=src,impl=impl}                        dst=dst,src=src,impl=impl}
79    
80            (* spill register *)            (* spill register *)
81            fun spillInstrR(r,offset) =                fun spillInstr{src,spilledCell,spillLoc,an} =
82                [I.STORE{stOp=I.STL, b=sp, d=I.IMMop offset, r=r, mem=spill}]                    [I.STORE{stOp=I.STL, b=sp,
83            fun spillInstrF(r,offset) =                             d=I.IMMop(SpillTable.getRegLoc spillLoc),
84                [I.FSTORE{stOp=I.STT, b=sp, d=I.IMMop offset, r=r, mem=spill}]                             r=src, mem=spill}]
85    
86            (* reload register *)            (* reload register *)
87            fun reloadInstrR(r,offset,rest) =                fun reloadInstr{dst,spilledCell,spillLoc,an} =
88                I.LOAD{ldOp=I.LDL, b=sp, d=I.IMMop offset, r=r, mem=spill}::rest                    [I.LOAD{ldOp=I.LDL, b=sp,
89            fun reloadInstrF(r,offset,rest) =                            d=I.IMMop(SpillTable.getRegLoc spillLoc),
90                I.FLOAD{ldOp=I.LDT, b=sp, d=I.IMMop offset, r=r, mem=spill}::rest                            r=dst, mem=spill}]
91    
92                  val mode = RACore.NO_OPTIMIZATION
93              end
94    
95              structure Float =
96              struct
97                  val avail     = Alpha32CpsRegs.availF
98                  val dedicated = Alpha32CpsRegs.dedicatedF
99    
100                  fun copy((fds as [_], fss as [_]), _) =
101                      I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
102                    | copy((fds, fss), I.FCOPY{tmp, ...}) =
103                      I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
104    
105                  fun spillCopyTmp(an, I.FCOPY{tmp,dst,src,impl},loc) =
106                      I.FCOPY{tmp=SOME(I.Displace{base=sp,
107                                              disp=SpillTable.getFregLoc loc}),
108                              dst=dst,src=src,impl=impl}
109    
110                  fun spillInstr(_, r,loc) =
111                      [I.FSTORE{stOp=I.STT, b=sp,
112                                d=I.IMMop(SpillTable.getFregLoc loc),
113                                r=r, mem=spill}]
114    
115                  fun reloadInstr(_, r,loc) =
116                      [I.FLOAD{ldOp=I.LDT, b=sp,
117                               d=I.IMMop(SpillTable.getFregLoc loc),
118                               r=r, mem=spill}]
119    
120                  val mode = RACore.NO_OPTIMIZATION
121              end
122           )           )
123    )    )

Legend:
Removed from v.657  
changed lines
  Added in v.796

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