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 984, Wed Nov 21 19:00:08 2001 UTC revision 1532, Tue Jul 13 03:49:10 2004 UTC
# Line 4  Line 4 
4  structure PPCCG =  structure PPCCG =
5    MachineGen    MachineGen
6    ( structure MachSpec   = PPCSpec    ( structure MachSpec   = PPCSpec
7        structure T          = PPCMLTree
8        structure CB         = CellsBasis
9      structure ClientPseudoOps = PPCClientPseudoOps      structure ClientPseudoOps = PPCClientPseudoOps
10      structure PseudoOps  = PPCPseudoOps      structure PseudoOps  = PPCPseudoOps
11      structure Ext        = SMLNJMLTreeExt(* generic extension *)      structure Ext        = SMLNJMLTreeExt(* generic extension *)
# Line 12  Line 14 
14      structure Asm        = PPCAsmEmitter      structure Asm        = PPCAsmEmitter
15      structure Shuffle    = PPCShuffle      structure Shuffle    = PPCShuffle
16    
17      structure CCalls     = DummyCCallsFn (PPCMLTree)      structure CCalls     =
18          PPCMacOSX_CCalls (structure T = PPCMLTree  fun ix x = x)
19          (* DummyCCallsFn (PPCMLTree) *)
20    
21      structure OmitFramePtr = struct      structure OmitFramePtr = struct
       exception NotImplemented  
22        structure CFG=PPCCFG        structure CFG=PPCCFG
23        structure I=PPCInstr        structure I=PPCInstr
24        val vfp = PPCCpsRegs.vfp        val vfp = PPCCpsRegs.vfp
25        fun omitframeptr _ = raise NotImplemented        (* no rewriting necessary, backend does not change sp *)
26          fun omitframeptr _ = ()
27      end      end
28    
29      structure MLTreeComp=      structure MLTreeComp=
# Line 44  Line 48 
48    
49      structure BackPatch =      structure BackPatch =
50         BBSched2(structure CFG = PPCCFG         BBSched2(structure CFG = PPCCFG
                 structure Placement = DefaultBlockPlacement(PPCCFG)  
51                  structure Jumps = Jumps                  structure Jumps = Jumps
52                    structure Props = PPCProps
53                  structure Emitter = PPCMCEmitter)                  structure Emitter = PPCMCEmitter)
54    
55      structure RA =      structure RA =
56         RISC_RA         RISC_RA
57           (structure I         = PPCInstr           (structure I         = PPCInstr
58            structure Flowgraph = PPCCFG            structure CFG       = PPCCFG
59            structure CpsRegs   = PPCCpsRegs            structure CpsRegs   = PPCCpsRegs
60            structure InsnProps = InsnProps            structure InsnProps = InsnProps
61            structure Rewrite   = PPCRewrite(PPCInstr)            structure Rewrite   = PPCRewrite(PPCInstr)
62              structure SpillInstr= PPCSpillInstr(PPCInstr)
63            structure Asm       = PPCAsmEmitter            structure Asm       = PPCAsmEmitter
64            structure SpillHeur = ChaitinSpillHeur            structure SpillHeur = ChaitinSpillHeur
65            structure Spill     = RASpill(structure InsnProps = InsnProps            structure Spill     = RASpill(structure InsnProps = InsnProps
# Line 64  Line 69 
69    
70            val architecture = PPCSpec.architecture            val architecture = PPCSpec.architecture
71    
72            val beginRA = SpillTable.spillInit            datatype spillOperandKind = SPILL_LOC | CONST_VAL
73              type spill_info = unit
74    
75              fun beforeRA _ = SpillTable.spillInit()
76    
77            val sp = I.C.stackptrR            val sp = I.C.stackptrR
78            val spill = CPSRegions.spill            val spill = CPSRegions.spill
# Line 76  Line 84 
84               val avail     = PPCCpsRegs.availR               val avail     = PPCCpsRegs.availR
85               val dedicated = PPCCpsRegs.dedicatedR               val dedicated = PPCCpsRegs.dedicatedR
86    
87               (* make copy *)               fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getRegLoc loc))
88               fun copy((rds as [_], rss as [_]), _) =  
89                   I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}               fun spillLoc{info, an, cell, id} =
90                 | copy((rds, rss), I.COPY{tmp, ...}) =                    {opnd=I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME id), mem=spill},
91                   I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=tmp}                     kind=SPILL_LOC}
   
              (* spill copy temp *)  
              fun spillCopyTmp(_, I.COPY{dst,src,tmp,impl},loc) =  
                  I.COPY{dst=dst, src=src, impl=impl,  
                         tmp=SOME(I.Displace  
                                    {base=sp,  
                                     disp=I.ImmedOp(SpillTable.getRegLoc loc)})}  
   
               (* spill register *)  
              fun spillInstr{src,spilledCell,spillLoc,an} =  
                  [I.ST{st=I.STW, ra=sp,  
                        d=I.ImmedOp(SpillTable.getRegLoc spillLoc),  
                        rs=src, mem=spill}]  
              (* reload register *)  
              fun reloadInstr{dst,spilledCell,spillLoc,an} =  
                  [I.L{ld=I.LWZ, ra=sp,  
                       d=I.ImmedOp(SpillTable.getRegLoc spillLoc),  
                       rt=dst, mem=spill}]  
92    
93               val mode = RACore.NO_OPTIMIZATION               val mode = RACore.NO_OPTIMIZATION
94           end           end
# Line 107  Line 97 
97               val avail     = PPCCpsRegs.availF               val avail     = PPCCpsRegs.availF
98               val dedicated = PPCCpsRegs.dedicatedF               val dedicated = PPCCpsRegs.dedicatedF
99    
100               fun copy((fds as [_], fss as [_]), _) =               fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getFregLoc loc))
101                   I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}  
102                 | copy((fds, fss), I.FCOPY{tmp, ...}) =               fun spillLoc(S, an, loc) =
103                   I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}                  I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME loc), mem=spill}
   
              fun spillCopyTmp(_, I.FCOPY{dst,src,tmp,impl},loc) =  
                  I.FCOPY{dst=dst, src=src, impl=impl,  
                         tmp=SOME(I.Displace  
                                    {base=sp,  
                                     disp=I.ImmedOp(SpillTable.getFregLoc loc)  
                                    })}  
   
              fun spillInstr(_, fs,loc) =  
                  [I.STF{st=I.STFD, ra=sp,  
                         d=I.ImmedOp(SpillTable.getFregLoc loc),  
                         fs=fs, mem=spill}]  
   
              fun reloadInstr(_, ft,loc) =  
                  [I.LF{ld=I.LFD, ra=sp, d=I.ImmedOp(SpillTable.getFregLoc loc),  
                        ft=ft, mem=spill}]  
104    
105               val mode = RACore.NO_OPTIMIZATION               val mode = RACore.NO_OPTIMIZATION
106           end           end

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

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