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 583, Thu Mar 23 21:52:30 2000 UTC revision 773, Mon Jan 8 16:18:37 2001 UTC
# Line 6  Line 6 
6    ( structure I          = Alpha32Instr    ( structure I          = Alpha32Instr
7      structure MachSpec   = Alpha32Spec      structure MachSpec   = Alpha32Spec
8      structure PseudoOps  = Alpha32PseudoOps      structure PseudoOps  = Alpha32PseudoOps
9        structure Ext        = SMLNJMLTreeExt(* generic extension *)
10      structure CpsRegs    = Alpha32CpsRegs      structure CpsRegs    = Alpha32CpsRegs
11      structure InsnProps  = Alpha32Props      structure InsnProps  = Alpha32Props
12      structure Asm        = Alpha32AsmEmitter      structure Asm        = Alpha32AsmEmitter
13      structure Shuffle    = Alpha32Shuffle      structure Shuffle    = Alpha32Shuffle
14    
15        structure CCalls     = DummyCCallsFn (Alpha32MLTree)
16    
17      structure MLTreeComp=      structure MLTreeComp=
18         Alpha(structure AlphaInstr = Alpha32Instr         Alpha(structure AlphaInstr = Alpha32Instr
19               structure AlphaMLTree = Alpha32MLTree               structure AlphaMLTree = Alpha32MLTree
# Line 26  Line 29 
29               val SMLNJfloatingPoint = true (* must be true for SML/NJ *)               val SMLNJfloatingPoint = true (* must be true for SML/NJ *)
30              )              )
31    
32      structure Alpha32Jumps =      structure Jumps =
33         AlphaJumps(structure Instr=Alpha32Instr         AlphaJumps(structure Instr=Alpha32Instr
34                    structure Shuffle=Alpha32Shuffle)                    structure Shuffle=Alpha32Shuffle)
35    
36      structure BackPatch =      structure BackPatch =
37         BBSched2(structure Flowgraph = Alpha32FlowGraph         BBSched2(structure Flowgraph = Alpha32FlowGraph
38                  structure Jumps = Alpha32Jumps                  structure Jumps = Jumps
39                  structure Emitter = Alpha32MCEmitter)                  structure Emitter = Alpha32MCEmitter)
40    
41      structure RA =      structure RA =
42         RegAlloc         RISC_RA
43           (structure I         = Alpha32Instr           (structure I         = Alpha32Instr
           structure MachSpec  = Alpha32Spec  
44            structure Flowgraph = Alpha32FlowGraph            structure Flowgraph = Alpha32FlowGraph
           structure CpsRegs   = Alpha32CpsRegs  
45            structure InsnProps = InsnProps            structure InsnProps = InsnProps
46            structure Rewrite   = AlphaRewrite(Alpha32Instr)            structure Rewrite   = AlphaRewrite(Alpha32Instr)
47            structure Asm       = Alpha32AsmEmitter            structure Asm       = Alpha32AsmEmitter
48              structure SpillHeur = ChaitinSpillHeur
49              structure Spill     = RASpill(structure InsnProps = InsnProps
50                                            structure Asm = Alpha32AsmEmitter)
51    
52            val sp = I.C.stackptrR            val sp = I.C.stackptrR
53            val spill = CPSRegions.spill            val spill = CPSRegions.spill
54    
55              structure SpillTable = SpillTable(Alpha32Spec)
56    
57              val architecture = Alpha32Spec.architecture
58    
59              val beginRA = SpillTable.spillInit
60    
61            fun pure _ = false            fun pure _ = false
62    
63            (* make copies *)            (* make copies *)
64            fun copyR((rds as [_], rss as [_]), _) =            structure Int =
65              struct
66                  val avail     = Alpha32CpsRegs.availR
67                  val dedicated = Alpha32CpsRegs.dedicatedR
68    
69                  fun copy((rds as [_], rss as [_]), _) =
70                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
71              | copyR((rds, rss), I.COPY{tmp, ...}) =                  | copy((rds, rss), I.COPY{tmp, ...}) =
72                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}  
73    
74            (* spill copy temp *)            (* spill copy temp *)
75            fun spillCopyTmp(I.COPY{tmp,dst,src,impl},loc) =                fun spillCopyTmp(an, I.COPY{tmp,dst,src,impl},loc) =
76                I.COPY{tmp=SOME(I.Displace{base=sp, disp=loc}),                    I.COPY{tmp=SOME(I.Displace{base=sp,
77                       dst=dst,src=src,impl=impl}                                               disp=SpillTable.getRegLoc loc}),
           fun spillFcopyTmp(I.FCOPY{tmp,dst,src,impl},loc) =  
               I.FCOPY{tmp=SOME(I.Displace{base=sp, disp=loc}),  
78                        dst=dst,src=src,impl=impl}                        dst=dst,src=src,impl=impl}
79    
80            (* spill register *)            (* spill register *)
81            fun spillInstrR(r,offset) =                fun spillInstr(_, r,loc) =
82                [I.STORE{stOp=I.STL, b=sp, d=I.IMMop offset, r=r, mem=spill}]                    [I.STORE{stOp=I.STL, b=sp,
83            fun spillInstrF(r,offset) =                             d=I.IMMop(SpillTable.getRegLoc loc),
84                [I.FSTORE{stOp=I.STT, b=sp, d=I.IMMop offset, r=r, mem=spill}]                             r=r, mem=spill}]
85    
86            (* reload register *)            (* reload register *)
87            fun reloadInstrR(r,offset,rest) =                fun reloadInstr(_, r,loc) =
88                I.LOAD{ldOp=I.LDL, b=sp, d=I.IMMop offset, r=r, mem=spill}::rest                    [I.LOAD{ldOp=I.LDL, b=sp,
89            fun reloadInstrF(r,offset,rest) =                            d=I.IMMop(SpillTable.getRegLoc loc),
90                I.FLOAD{ldOp=I.LDT, b=sp, d=I.IMMop offset, r=r, mem=spill}::rest                            r=r, mem=spill}]
91              end
92    
93              structure Float =
94              struct
95                  val avail     = Alpha32CpsRegs.availF
96                  val dedicated = Alpha32CpsRegs.dedicatedF
97    
98                  fun copy((fds as [_], fss as [_]), _) =
99                      I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
100                    | copy((fds, fss), I.FCOPY{tmp, ...}) =
101                      I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
102    
103                  fun spillCopyTmp(an, I.FCOPY{tmp,dst,src,impl},loc) =
104                      I.FCOPY{tmp=SOME(I.Displace{base=sp,
105                                              disp=SpillTable.getFregLoc loc}),
106                              dst=dst,src=src,impl=impl}
107    
108                  fun spillInstr(_, r,loc) =
109                      [I.FSTORE{stOp=I.STT, b=sp,
110                                d=I.IMMop(SpillTable.getFregLoc loc),
111                                r=r, mem=spill}]
112    
113                  fun reloadInstr(_, r,loc) =
114                      [I.FLOAD{ldOp=I.LDT, b=sp,
115                               d=I.IMMop(SpillTable.getFregLoc loc),
116                               r=r, mem=spill}]
117              end
118           )           )
119    )    )

Legend:
Removed from v.583  
changed lines
  Added in v.773

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