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/alpha32/alpha32CG.sml
ViewVC logotype

Diff of /sml/trunk/src/compiler/CodeGen/alpha32/alpha32CG.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1009, Wed Jan 9 19:44:22 2002 UTC revision 1033, Thu Jan 24 05:45:18 2002 UTC
# Line 4  Line 4 
4  structure Alpha32CG =  structure Alpha32CG =
5    MachineGen    MachineGen
6    ( structure I          = Alpha32Instr    ( structure I          = Alpha32Instr
7        structure T          = Alpha32MLTree
8      structure MachSpec   = Alpha32Spec      structure MachSpec   = Alpha32Spec
9      structure ClientPseudoOps = Alpha32ClientPseudoOps      structure ClientPseudoOps = Alpha32ClientPseudoOps
10      structure PseudoOps  = Alpha32PseudoOps      structure PseudoOps  = Alpha32PseudoOps
# Line 55  Line 56 
56      structure RA =      structure RA =
57         RISC_RA         RISC_RA
58           (structure I         = Alpha32Instr           (structure I         = Alpha32Instr
59            structure Flowgraph = Alpha32CFG            structure CFG       = Alpha32CFG
60            structure InsnProps = InsnProps            structure InsnProps = InsnProps
61            structure Rewrite   = AlphaRewrite(Alpha32Instr)            structure Rewrite   = AlphaRewrite(Alpha32Instr)
62              structure SpillInstr= AlphaSpillInstr(Alpha32Instr)
63            structure Asm       = Alpha32AsmEmitter            structure Asm       = Alpha32AsmEmitter
64            structure SpillHeur = ChaitinSpillHeur            structure SpillHeur = ChaitinSpillHeur
65            structure Spill     = RASpill(structure InsnProps = InsnProps            structure Spill     = RASpill(structure InsnProps = InsnProps
# Line 70  Line 72 
72    
73            val architecture = Alpha32Spec.architecture            val architecture = Alpha32Spec.architecture
74    
75            val beginRA = SpillTable.spillInit            datatype spillOperandKind = SPILL_LOC | CONST_VAL
76              type spill_info = unit
77    
78              fun beforeRA _ = SpillTable.spillInit()
79    
80            fun pure _ = false            fun pure _ = false
81    
# Line 80  Line 85 
85                val avail     = Alpha32CpsRegs.availR                val avail     = Alpha32CpsRegs.availR
86                val dedicated = Alpha32CpsRegs.dedicatedR                val dedicated = Alpha32CpsRegs.dedicatedR
87    
88                fun copy((rds, rss), I.COPY{k=CB.GP, sz, tmp, ...}) = let                fun mkDisp loc = T.LI(T.I.fromInt (32, SpillTable.getRegLoc loc))
                 val tmp = (case (rds, rss) of ([_], [_]) => NONE | _ => tmp)  
               in I.COPY{k=CB.GP, sz=sz, dst=rds, src=rss, tmp=tmp}  
               end  
89    
90                (* spill copy temp *)                fun spillLoc{info, an, cell, id} =
91                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},
92                    I.COPY{k=CB.GP, sz=sz,  dst=dst,src=src,                     kind=SPILL_LOC}
                          tmp=SOME(I.Displace{base=sp,  
                                              disp=SpillTable.getRegLoc loc})}  
   
               (* spill register *)  
               fun spillInstr{src,spilledCell,spillLoc,an} =  
                   [I.store{stOp=I.STL, b=sp,  
                            d=I.IMMop(SpillTable.getRegLoc spillLoc),  
                            r=src, mem=spill}]  
   
               (* reload register *)  
               fun reloadInstr{dst,spilledCell,spillLoc,an} =  
                   [I.load{ldOp=I.LDL, b=sp,  
                           d=I.IMMop(SpillTable.getRegLoc spillLoc),  
                           r=dst, mem=spill}]  
93    
94                val mode = RACore.NO_OPTIMIZATION                val mode = RACore.NO_OPTIMIZATION
95            end            end
# Line 111  Line 99 
99                val avail     = Alpha32CpsRegs.availF                val avail     = Alpha32CpsRegs.availF
100                val dedicated = Alpha32CpsRegs.dedicatedF                val dedicated = Alpha32CpsRegs.dedicatedF
101    
102                fun copy((fds, fss), I.COPY{k=CB.FP, sz, tmp, ...}) = let                fun mkDisp loc = T.LI(T.I.fromInt (32, SpillTable.getFregLoc loc))
103                  val tmp =(case (fds, fss) of ([_],[_]) => NONE | _ => tmp)                fun spillLoc(S, an, loc) =
104                in I.COPY{k=CB.FP, sz=sz, dst=fds, src=fss, tmp=tmp}                  I.Displace{base=sp, disp=mkDisp(RAGraph.FRAME loc), mem=spill}
               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=SpillTable.getFregLoc loc})}  
   
   
               fun spillInstr(_, r,loc) =  
                   [I.fstore{stOp=I.STT, b=sp,  
                             d=I.IMMop(SpillTable.getFregLoc loc),  
                             r=r, mem=spill}]  
   
               fun reloadInstr(_, r,loc) =  
                   [I.fload{ldOp=I.LDT, b=sp,  
                            d=I.IMMop(SpillTable.getFregLoc loc),  
                            r=r, mem=spill}]  
105    
106                val mode = RACore.NO_OPTIMIZATION                val mode = RACore.NO_OPTIMIZATION
107            end            end

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

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