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 743, Thu Dec 7 15:31:24 2000 UTC revision 744, Fri Dec 8 04:11:42 2000 UTC
# Line 36  Line 36 
36                  structure Emitter = Alpha32MCEmitter)                  structure Emitter = Alpha32MCEmitter)
37    
38      structure RA =      structure RA =
39         RegAlloc         RISC_RA
40           (structure I         = Alpha32Instr           (structure I         = Alpha32Instr
           structure MachSpec  = Alpha32Spec  
41            structure Flowgraph = Alpha32FlowGraph            structure Flowgraph = Alpha32FlowGraph
           structure CpsRegs   = Alpha32CpsRegs  
42            structure InsnProps = InsnProps            structure InsnProps = InsnProps
43            structure Rewrite   = AlphaRewrite(Alpha32Instr)            structure Rewrite   = AlphaRewrite(Alpha32Instr)
44            structure Asm       = Alpha32AsmEmitter            structure Asm       = Alpha32AsmEmitter
45              structure SpillHeur = ChaitinSpillHeur
46              structure Spill     = RASpill(structure InsnProps = InsnProps
47                                            structure Asm = Alpha32AsmEmitter)
48    
49            val sp = I.C.stackptrR            val sp = I.C.stackptrR
50            val spill = CPSRegions.spill            val spill = CPSRegions.spill
51    
52              structure SpillTable = SpillTable(Alpha32Spec)
53    
54              val architecture = Alpha32Spec.architecture
55    
56              val beginRA = SpillTable.spillInit
57    
58            fun pure _ = false            fun pure _ = false
59    
60            (* make copies *)            (* make copies *)
61            fun copyR((rds as [_], rss as [_]), _) =            structure Int =
62              struct
63                  val avail     = Alpha32CpsRegs.availR
64                  val dedicated = Alpha32CpsRegs.dedicatedR
65    
66                  fun copy((rds as [_], rss as [_]), _) =
67                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
68              | copyR((rds, rss), I.COPY{tmp, ...}) =                  | copy((rds, rss), I.COPY{tmp, ...}) =
69                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}  
70    
71            (* spill copy temp *)            (* spill copy temp *)
72            fun spillCopyTmp(I.COPY{tmp,dst,src,impl},loc) =                fun spillCopyTmp(an, I.COPY{tmp,dst,src,impl},loc) =
73                I.COPY{tmp=SOME(I.Displace{base=sp, disp=loc}),                    I.COPY{tmp=SOME(I.Displace{base=sp,
74                       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}),  
75                        dst=dst,src=src,impl=impl}                        dst=dst,src=src,impl=impl}
76    
77            (* spill register *)            (* spill register *)
78            fun spillInstrR(r,offset) =                fun spillInstr(_, r,loc) =
79                [I.STORE{stOp=I.STL, b=sp, d=I.IMMop offset, r=r, mem=spill}]                    [I.STORE{stOp=I.STL, b=sp,
80            fun spillInstrF(r,offset) =                             d=I.IMMop(SpillTable.getRegLoc loc),
81                [I.FSTORE{stOp=I.STT, b=sp, d=I.IMMop offset, r=r, mem=spill}]                             r=r, mem=spill}]
82    
83            (* reload register *)            (* reload register *)
84            fun reloadInstrR(r,offset,rest) =                fun reloadInstr(_, r,loc) =
85                I.LOAD{ldOp=I.LDL, b=sp, d=I.IMMop offset, r=r, mem=spill}::rest                    [I.LOAD{ldOp=I.LDL, b=sp,
86            fun reloadInstrF(r,offset,rest) =                            d=I.IMMop(SpillTable.getRegLoc loc),
87                I.FLOAD{ldOp=I.LDT, b=sp, d=I.IMMop offset, r=r, mem=spill}::rest                            r=r, mem=spill}]
88              end
89    
90              structure Float =
91              struct
92                  val avail     = Alpha32CpsRegs.availF
93                  val dedicated = Alpha32CpsRegs.dedicatedF
94    
95                  fun copy((fds as [_], fss as [_]), _) =
96                      I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
97                    | copy((fds, fss), I.FCOPY{tmp, ...}) =
98                      I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
99    
100                  fun spillCopyTmp(an, I.FCOPY{tmp,dst,src,impl},loc) =
101                      I.FCOPY{tmp=SOME(I.Displace{base=sp,
102                                              disp=SpillTable.getFregLoc loc}),
103                              dst=dst,src=src,impl=impl}
104    
105                  fun spillInstr(_, r,loc) =
106                      [I.FSTORE{stOp=I.STT, b=sp,
107                                d=I.IMMop(SpillTable.getFregLoc loc),
108                                r=r, mem=spill}]
109    
110                  fun reloadInstr(_, r,loc) =
111                      [I.FLOAD{ldOp=I.LDT, b=sp,
112                               d=I.IMMop(SpillTable.getFregLoc loc),
113                               r=r, mem=spill}]
114              end
115           )           )
116    )    )

Legend:
Removed from v.743  
changed lines
  Added in v.744

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