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

sml/branches/SMLNJ/src/compiler/CodeGen/ppc/ppcCG.sml revision 469, Wed Nov 10 22:42:52 1999 UTC sml/trunk/src/compiler/CodeGen/ppc/ppcCG.sml revision 984, Wed Nov 21 19:00:08 2001 UTC
# Line 4  Line 4 
4  structure PPCCG =  structure PPCCG =
5    MachineGen    MachineGen
6    ( structure MachSpec   = PPCSpec    ( structure MachSpec   = PPCSpec
7        structure ClientPseudoOps = PPCClientPseudoOps
8      structure PseudoOps  = PPCPseudoOps      structure PseudoOps  = PPCPseudoOps
9        structure Ext        = SMLNJMLTreeExt(* generic extension *)
10      structure CpsRegs    = PPCCpsRegs      structure CpsRegs    = PPCCpsRegs
11      structure InsnProps  = PPCProps(PPCInstr)      structure InsnProps  = PPCProps
12      structure Asm        = PPCAsmEmitter      structure Asm        = PPCAsmEmitter
13        structure Shuffle    = PPCShuffle
14    
15        structure CCalls     = DummyCCallsFn (PPCMLTree)
16    
17        structure OmitFramePtr = struct
18          exception NotImplemented
19          structure CFG=PPCCFG
20          structure I=PPCInstr
21          val vfp = PPCCpsRegs.vfp
22          fun omitframeptr _ = raise NotImplemented
23        end
24    
25      structure MLTreeComp=      structure MLTreeComp=
26         PPC(structure PPCInstr = PPCInstr         PPC(structure PPCInstr = PPCInstr
27             structure PPCMLTree = PPCMLTree             structure PPCMLTree = PPCMLTree
28             structure PseudoInstrs=             structure PseudoInstrs=
29                 PPCPseudoInstr(structure Instr=PPCInstr)                 PPCPseudoInstr(structure Instr=PPCInstr)
30               structure ExtensionComp = SMLNJMLTreeExtComp
31                   (structure I = PPCInstr
32                    structure T = PPCMLTree
33                    structure CFG = PPCCFG
34                    structure TS = PPCMLTreeStream
35                   )
36             val bit64mode=false             val bit64mode=false
37             val multCost=ref 6 (* an estimate *)             val multCost=ref 6 (* an estimate *)
38           )           )
39    
40      structure PPCJumps =      structure Jumps =
41         PPCJumps(structure Instr=PPCInstr         PPCJumps(structure Instr=PPCInstr
42                    structure MLTreeEval=PPCMLTreeEval
43                  structure Shuffle=PPCShuffle)                  structure Shuffle=PPCShuffle)
44    
45      structure BackPatch =      structure BackPatch =
46         BBSched2(structure Flowgraph = PPCFlowGraph         BBSched2(structure CFG = PPCCFG
47                  structure Jumps = PPCJumps                  structure Placement = DefaultBlockPlacement(PPCCFG)
48                    structure Jumps = Jumps
49                  structure Emitter = PPCMCEmitter)                  structure Emitter = PPCMCEmitter)
50    
51      structure RA =      structure RA =
52         RegAlloc2         RISC_RA
53           (structure I         = PPCInstr           (structure I         = PPCInstr
54            structure MachSpec  = PPCSpec            structure Flowgraph = PPCCFG
           structure Flowgraph = PPCFlowGraph  
55            structure CpsRegs   = PPCCpsRegs            structure CpsRegs   = PPCCpsRegs
56            structure InsnProps = InsnProps            structure InsnProps = InsnProps
57            structure Rewrite   = PPCRewrite(PPCInstr)            structure Rewrite   = PPCRewrite(PPCInstr)
58            structure Asm       = PPCAsmEmitter            structure Asm       = PPCAsmEmitter
59              structure SpillHeur = ChaitinSpillHeur
60              structure Spill     = RASpill(structure InsnProps = InsnProps
61                                            structure Asm = PPCAsmEmitter)
62    
63              structure SpillTable = SpillTable(PPCSpec)
64    
65              val architecture = PPCSpec.architecture
66    
67              val beginRA = SpillTable.spillInit
68    
69            val sp = I.C.stackptrR            val sp = I.C.stackptrR
70            val stack = I.Region.stack            val spill = CPSRegions.spill
71    
72            fun pure _ = false            fun pure _ = false
73    
74              structure Int =
75              struct
76                 val avail     = PPCCpsRegs.availR
77                 val dedicated = PPCCpsRegs.dedicatedR
78    
79            (* make copy *)            (* make copy *)
80            fun copyR((rds as [_], rss as [_]), _) =               fun copy((rds as [_], rss as [_]), _) =
81                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
82              | copyR((rds, rss), I.COPY{tmp, ...}) =                 | copy((rds, rss), I.COPY{tmp, ...}) =
83                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}  
84    
85            (* spill copy temp *)            (* spill copy temp *)
86            fun spillCopyTmp(I.COPY{dst,src,tmp,impl},offset) =               fun spillCopyTmp(_, I.COPY{dst,src,tmp,impl},loc) =
87                I.COPY{dst=dst, src=src, impl=impl,                I.COPY{dst=dst, src=src, impl=impl,
88                       tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp offset})}                          tmp=SOME(I.Displace
89            fun spillFcopyTmp(I.FCOPY{dst,src,tmp,impl},offset) =                                     {base=sp,
90                I.FCOPY{dst=dst, src=src, impl=impl,                                      disp=I.ImmedOp(SpillTable.getRegLoc loc)})}
                      tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp offset})}  
91    
92            (* spill register *)            (* spill register *)
93            fun spillInstrR(rs,offset) =               fun spillInstr{src,spilledCell,spillLoc,an} =
94                [I.ST{st=I.STW, ra=sp, d=I.ImmedOp offset, rs=rs, mem=stack}]                   [I.ST{st=I.STW, ra=sp,
95            fun spillInstrF(fs,offset) =                         d=I.ImmedOp(SpillTable.getRegLoc spillLoc),
96                [I.STF{st=I.STFD, ra=sp, d=I.ImmedOp offset, fs=fs, mem=stack}]                         rs=src, mem=spill}]
   
97            (* reload register *)            (* reload register *)
98            fun reloadInstrR(rt,offset,rest) =               fun reloadInstr{dst,spilledCell,spillLoc,an} =
99                I.L{ld=I.LWZ, ra=sp, d=I.ImmedOp offset, rt=rt, mem=stack}::rest                   [I.L{ld=I.LWZ, ra=sp,
100            fun reloadInstrF(ft,offset,rest) =                        d=I.ImmedOp(SpillTable.getRegLoc spillLoc),
101                I.LF{ld=I.LFD, ra=sp, d=I.ImmedOp offset, ft=ft, mem=stack}::rest                        rt=dst, mem=spill}]
102    
103                 val mode = RACore.NO_OPTIMIZATION
104             end
105             structure Float =
106             struct
107                 val avail     = PPCCpsRegs.availF
108                 val dedicated = PPCCpsRegs.dedicatedF
109    
110                 fun copy((fds as [_], fss as [_]), _) =
111                     I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
112                   | copy((fds, fss), I.FCOPY{tmp, ...}) =
113                     I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
114    
115                 fun spillCopyTmp(_, I.FCOPY{dst,src,tmp,impl},loc) =
116                     I.FCOPY{dst=dst, src=src, impl=impl,
117                            tmp=SOME(I.Displace
118                                       {base=sp,
119                                        disp=I.ImmedOp(SpillTable.getFregLoc loc)
120                                       })}
121    
122                 fun spillInstr(_, fs,loc) =
123                     [I.STF{st=I.STFD, ra=sp,
124                            d=I.ImmedOp(SpillTable.getFregLoc loc),
125                            fs=fs, mem=spill}]
126    
127                 fun reloadInstr(_, ft,loc) =
128                     [I.LF{ld=I.LFD, ra=sp, d=I.ImmedOp(SpillTable.getFregLoc loc),
129                           ft=ft, mem=spill}]
130    
131                 val mode = RACore.NO_OPTIMIZATION
132             end
133           )           )
134    )    )

Legend:
Removed from v.469  
changed lines
  Added in v.984

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