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

Diff of /sml/trunk/src/compiler/CodeGen/ppc/ppcCG.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 33  Line 33 
33                  structure Emitter = PPCMCEmitter)                  structure Emitter = PPCMCEmitter)
34    
35      structure RA =      structure RA =
36         RegAlloc         RISC_RA
37           (structure I         = PPCInstr           (structure I         = PPCInstr
           structure MachSpec  = PPCSpec  
38            structure Flowgraph = PPCFlowGraph            structure Flowgraph = PPCFlowGraph
39            structure CpsRegs   = PPCCpsRegs            structure CpsRegs   = PPCCpsRegs
40            structure InsnProps = InsnProps            structure InsnProps = InsnProps
41            structure Rewrite   = PPCRewrite(PPCInstr)            structure Rewrite   = PPCRewrite(PPCInstr)
42            structure Asm       = PPCAsmEmitter            structure Asm       = PPCAsmEmitter
43              structure SpillHeur = ChaitinSpillHeur
44              structure Spill     = RASpill(structure InsnProps = InsnProps
45                                            structure Asm = PPCAsmEmitter)
46    
47              structure SpillTable = SpillTable(PPCSpec)
48    
49              val architecture = PPCSpec.architecture
50    
51              val beginRA = SpillTable.spillInit
52    
53            val sp = I.C.stackptrR            val sp = I.C.stackptrR
54            val spill = CPSRegions.spill            val spill = CPSRegions.spill
55    
56            fun pure _ = false            fun pure _ = false
57    
58              structure Int =
59              struct
60                 val avail     = PPCCpsRegs.availR
61                 val dedicated = PPCCpsRegs.dedicatedR
62    
63            (* make copy *)            (* make copy *)
64            fun copyR((rds as [_], rss as [_]), _) =               fun copy((rds as [_], rss as [_]), _) =
65                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
66              | copyR((rds, rss), I.COPY{tmp, ...}) =                 | copy((rds, rss), I.COPY{tmp, ...}) =
67                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}  
68    
69            (* spill copy temp *)            (* spill copy temp *)
70            fun spillCopyTmp(I.COPY{dst,src,tmp,impl},offset) =               fun spillCopyTmp(_, I.COPY{dst,src,tmp,impl},loc) =
71                I.COPY{dst=dst, src=src, impl=impl,                I.COPY{dst=dst, src=src, impl=impl,
72                       tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp offset})}                          tmp=SOME(I.Displace
73            fun spillFcopyTmp(I.FCOPY{dst,src,tmp,impl},offset) =                                     {base=sp,
74                I.FCOPY{dst=dst, src=src, impl=impl,                                      disp=I.ImmedOp(SpillTable.getRegLoc loc)})}
                      tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp offset})}  
75    
76            (* spill register *)            (* spill register *)
77            fun spillInstrR(rs,offset) =               fun spillInstr(_, rs,loc) =
78                [I.ST{st=I.STW, ra=sp, d=I.ImmedOp offset, rs=rs, mem=spill}]                   [I.ST{st=I.STW, ra=sp, d=I.ImmedOp(SpillTable.getRegLoc loc),
79            fun spillInstrF(fs,offset) =                         rs=rs, mem=spill}]
               [I.STF{st=I.STFD, ra=sp, d=I.ImmedOp offset, fs=fs, mem=spill}]  
   
80            (* reload register *)            (* reload register *)
81            fun reloadInstrR(rt,offset,rest) =               fun reloadInstr(_, rt,loc) =
82                I.L{ld=I.LWZ, ra=sp, d=I.ImmedOp offset, rt=rt, mem=spill}::rest                   [I.L{ld=I.LWZ, ra=sp, d=I.ImmedOp(SpillTable.getRegLoc loc),
83            fun reloadInstrF(ft,offset,rest) =                       rt=rt, mem=spill}]
84                I.LF{ld=I.LFD, ra=sp, d=I.ImmedOp offset, ft=ft, mem=spill}::rest  
85             end
86             structure Float =
87             struct
88                 val avail     = PPCCpsRegs.availF
89                 val dedicated = PPCCpsRegs.dedicatedF
90    
91                 fun copy((fds as [_], fss as [_]), _) =
92                     I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
93                   | copy((fds, fss), I.FCOPY{tmp, ...}) =
94                     I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
95    
96                 fun spillCopyTmp(_, I.FCOPY{dst,src,tmp,impl},loc) =
97                     I.FCOPY{dst=dst, src=src, impl=impl,
98                            tmp=SOME(I.Displace
99                                       {base=sp,
100                                        disp=I.ImmedOp(SpillTable.getFregLoc loc)
101                                       })}
102    
103                 fun spillInstr(_, fs,loc) =
104                     [I.STF{st=I.STFD, ra=sp,
105                            d=I.ImmedOp(SpillTable.getFregLoc loc),
106                            fs=fs, mem=spill}]
107    
108                 fun reloadInstr(_, ft,loc) =
109                     [I.LF{ld=I.LFD, ra=sp, d=I.ImmedOp(SpillTable.getFregLoc loc),
110                           ft=ft, mem=spill}]
111             end
112           )           )
113    )    )

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