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 1032, Tue Jan 22 16:59:16 2002 UTC revision 1033, Thu Jan 24 05:45:18 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      structure CB         = CellsBasis
9      structure ClientPseudoOps = PPCClientPseudoOps      structure ClientPseudoOps = PPCClientPseudoOps
10      structure PseudoOps  = PPCPseudoOps      structure PseudoOps  = PPCPseudoOps
# Line 52  Line 53 
53      structure RA =      structure RA =
54         RISC_RA         RISC_RA
55           (structure I         = PPCInstr           (structure I         = PPCInstr
56            structure Flowgraph = PPCCFG            structure CFG       = PPCCFG
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            structure SpillHeur = ChaitinSpillHeur
63            structure Spill     = RASpill(structure InsnProps = InsnProps            structure Spill     = RASpill(structure InsnProps = InsnProps
# Line 65  Line 67 
67    
68            val architecture = PPCSpec.architecture            val architecture = PPCSpec.architecture
69    
70            val beginRA = SpillTable.spillInit            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
# Line 77  Line 82 
82               val avail     = PPCCpsRegs.availR               val avail     = PPCCpsRegs.availR
83               val dedicated = PPCCpsRegs.dedicatedR               val dedicated = PPCCpsRegs.dedicatedR
84    
85               (* make copy *)               fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getRegLoc loc))
               fun copy((rds, rss), I.COPY{k=CB.GP, sz, tmp, ...}) = let  
                 val tmp = (case (rds, rss) of ([_], [_]) => NONE | _ => tmp)  
               in I.COPY{k=CB.GP, sz=sz, dst=rds, src=rss, tmp=tmp}  
               end  
86    
87                (* spill copy temp *)               fun spillLoc{info, an, cell, id} =
88                fun spillCopyTmp(an, I.COPY{k=CB.GP, sz, tmp,dst,src, ...},loc) =                    {opnd=I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME id), mem=spill},
89                    I.COPY{k=CB.GP, sz=sz,  dst=dst, src=src,                     kind=SPILL_LOC}
                          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}]  
90    
91               val mode = RACore.NO_OPTIMIZATION               val mode = RACore.NO_OPTIMIZATION
92           end           end
# Line 108  Line 95 
95               val avail     = PPCCpsRegs.availF               val avail     = PPCCpsRegs.availF
96               val dedicated = PPCCpsRegs.dedicatedF               val dedicated = PPCCpsRegs.dedicatedF
97    
98               fun copy((fds, fss), I.COPY{k=CB.FP, sz, tmp, ...}) = let               fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getFregLoc loc))
                val tmp =(case (fds, fss) of ([_],[_]) => NONE | _ => tmp)  
              in I.COPY{k=CB.FP, sz=sz, dst=fds, src=fss, tmp=tmp}  
              end  
   
              fun spillCopyTmp(an, I.COPY{k=CB.FP, sz, tmp,dst,src},loc) =  
                  I.COPY{k=CB.FP, sz=sz, dst=dst,src=src,  
                         tmp=SOME(I.Displace{base=sp, disp=I.ImmedOp(SpillTable.getFregLoc loc)})}  
   
99    
100               fun spillInstr(_, fs,loc) =               fun spillLoc(S, an, loc) =
101                   [I.stf{st=I.STFD, ra=sp,                  I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME loc), mem=spill}
                         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}]  
102    
103               val mode = RACore.NO_OPTIMIZATION               val mode = RACore.NO_OPTIMIZATION
104           end           end

Legend:
Removed from v.1032  
changed lines
  Added in v.1033

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