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 498, Tue Dec 7 15:44:50 1999 UTC sml/trunk/src/compiler/CodeGen/ppc/ppcCG.sml revision 1124, Thu Mar 7 19:49:22 2002 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
10      structure PseudoOps  = PPCPseudoOps      structure PseudoOps  = PPCPseudoOps
11        structure Ext        = SMLNJMLTreeExt(* generic extension *)
12      structure CpsRegs    = PPCCpsRegs      structure CpsRegs    = PPCCpsRegs
13      structure InsnProps  = PPCProps      structure InsnProps  = PPCProps
14      structure Asm        = PPCAsmEmitter      structure Asm        = PPCAsmEmitter
15        structure Shuffle    = PPCShuffle
16    
17        structure CCalls     = DummyCCallsFn (PPCMLTree)
18    
19        structure OmitFramePtr = struct
20          exception NotImplemented
21          structure CFG=PPCCFG
22          structure I=PPCInstr
23          val vfp = PPCCpsRegs.vfp
24          fun omitframeptr _ = raise NotImplemented
25        end
26    
27      structure MLTreeComp=      structure MLTreeComp=
28         PPC(structure PPCInstr = PPCInstr         PPC(structure PPCInstr = PPCInstr
29             structure PPCMLTree = PPCMLTree             structure PPCMLTree = PPCMLTree
30             structure PseudoInstrs=             structure PseudoInstrs=
31                 PPCPseudoInstr(structure Instr=PPCInstr)                 PPCPseudoInstr(structure Instr=PPCInstr)
32               structure ExtensionComp = SMLNJMLTreeExtComp
33                   (structure I = PPCInstr
34                    structure T = PPCMLTree
35                    structure CFG = PPCCFG
36                    structure TS = PPCMLTreeStream
37                   )
38             val bit64mode=false             val bit64mode=false
39             val multCost=ref 6 (* an estimate *)             val multCost=ref 6 (* an estimate *)
40           )           )
41    
42      structure PPCJumps =      structure Jumps =
43         PPCJumps(structure Instr=PPCInstr         PPCJumps(structure Instr=PPCInstr
44                    structure MLTreeEval=PPCMLTreeEval
45                  structure Shuffle=PPCShuffle)                  structure Shuffle=PPCShuffle)
46    
47      structure BackPatch =      structure BackPatch =
48         BBSched2(structure Flowgraph = PPCFlowGraph         BBSched2(structure CFG = PPCCFG
49                  structure Jumps = PPCJumps                  structure Jumps = Jumps
50                    structure Props = PPCProps
51                  structure Emitter = PPCMCEmitter)                  structure Emitter = PPCMCEmitter)
52    
53      structure RA =      structure RA =
54         RegAlloc         RISC_RA
55           (structure I         = PPCInstr           (structure I         = PPCInstr
56            structure MachSpec  = PPCSpec            structure CFG       = PPCCFG
           structure Flowgraph = PPCFlowGraph  
57            structure CpsRegs   = PPCCpsRegs            structure CpsRegs   = PPCCpsRegs
58            structure InsnProps = InsnProps            structure InsnProps = InsnProps
59            structure Rewrite   = PPCRewrite(PPCInstr)            structure Rewrite   = PPCRewrite(PPCInstr)
60              structure SpillInstr= PPCSpillInstr(PPCInstr)
61            structure Asm       = PPCAsmEmitter            structure Asm       = PPCAsmEmitter
62              structure SpillHeur = ChaitinSpillHeur
63              structure Spill     = RASpill(structure InsnProps = InsnProps
64                                            structure Asm = PPCAsmEmitter)
65    
66              structure SpillTable = SpillTable(PPCSpec)
67    
68              val architecture = PPCSpec.architecture
69    
70              datatype spillOperandKind = SPILL_LOC | CONST_VAL
71              type spill_info = unit
72    
73              fun beforeRA _ = SpillTable.spillInit()
74    
75            val sp = I.C.stackptrR            val sp = I.C.stackptrR
76            val spill = CPSRegions.spill            val spill = CPSRegions.spill
77    
78            fun pure _ = false            fun pure _ = false
79    
80            (* make copy *)            structure Int =
81            fun copyR((rds as [_], rss as [_]), _) =            struct
82                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}               val avail     = PPCCpsRegs.availR
83              | copyR((rds, rss), I.COPY{tmp, ...}) =               val dedicated = PPCCpsRegs.dedicatedR
84                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=tmp}  
85            fun copyF((fds as [_], fss as [_]), _) =               fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getRegLoc loc))
86                I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}  
87              | copyF((fds, fss), I.FCOPY{tmp, ...}) =               fun spillLoc{info, an, cell, id} =
88                I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}                    {opnd=I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME id), mem=spill},
89                       kind=SPILL_LOC}
90            (* spill copy temp *)  
91            fun spillCopyTmp(I.COPY{dst,src,tmp,impl},offset) =               val mode = RACore.NO_OPTIMIZATION
92                I.COPY{dst=dst, src=src, impl=impl,           end
93                       tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp offset})}           structure Float =
94            fun spillFcopyTmp(I.FCOPY{dst,src,tmp,impl},offset) =           struct
95                I.FCOPY{dst=dst, src=src, impl=impl,               val avail     = PPCCpsRegs.availF
96                       tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp offset})}               val dedicated = PPCCpsRegs.dedicatedF
97    
98            (* spill register *)               fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getFregLoc loc))
99            fun spillInstrR(rs,offset) =  
100                [I.ST{st=I.STW, ra=sp, d=I.ImmedOp offset, rs=rs, mem=spill}]               fun spillLoc(S, an, loc) =
101            fun spillInstrF(fs,offset) =                  I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME loc), mem=spill}
102                [I.STF{st=I.STFD, ra=sp, d=I.ImmedOp offset, fs=fs, mem=spill}]  
103                 val mode = RACore.NO_OPTIMIZATION
104            (* reload register *)           end
           fun reloadInstrR(rt,offset,rest) =  
               I.L{ld=I.LWZ, ra=sp, d=I.ImmedOp offset, rt=rt, mem=spill}::rest  
           fun reloadInstrF(ft,offset,rest) =  
               I.LF{ld=I.LFD, ra=sp, d=I.ImmedOp offset, ft=ft, mem=spill}::rest  
105           )           )
106    )    )

Legend:
Removed from v.498  
changed lines
  Added in v.1124

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