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/sparc/sparcCG.sml
ViewVC logotype

Diff of /sml/trunk/src/compiler/CodeGen/sparc/sparcCG.sml

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

revision 1002, Fri Nov 30 17:11:33 2001 UTC revision 1003, Fri Dec 7 02:45:32 2001 UTC
# Line 77  Line 77 
77            val architecture = SparcSpec.architecture            val architecture = SparcSpec.architecture
78    
79            fun pure(I.ANNOTATION{i,...}) = pure i            fun pure(I.ANNOTATION{i,...}) = pure i
80              | pure(I.LOAD _) = true              | pure(I.INSTR(I.LOAD _)) = true
81              | pure(I.FLOAD _) = true              | pure(I.INSTR(I.FLOAD _)) = true
82              | pure(I.SETHI _) = true              | pure(I.INSTR(I.SETHI _)) = true
83              | pure(I.SHIFT _) = true              | pure(I.INSTR(I.SHIFT _)) = true
84              | pure(I.FPop1 _) = true              | pure(I.INSTR(I.FPop1 _)) = true
85              | pure(I.FPop2 _) = true              | pure(I.INSTR(I.FPop2 _)) = true
86              | pure _ = false              | pure _ = false
87    
88            (* make copy *)            (* make copy *)
# Line 92  Line 92 
92               val dedicated = SparcCpsRegs.dedicatedR               val dedicated = SparcCpsRegs.dedicatedR
93    
94               fun copy((rds as [_], rss as [_]), _) =               fun copy((rds as [_], rss as [_]), _) =
95                   I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                   I.copy{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
96                 | copy((rds, rss), I.COPY{tmp, ...}) =                 | copy((rds, rss), I.INSTR(I.COPY{tmp, ...})) =
97                   I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=tmp}                   I.copy{dst=rds, src=rss, impl=ref NONE, tmp=tmp}
98    
99    
100               (* spill copy temp *)               (* spill copy temp *)
101               fun spillCopyTmp(_, I.COPY{dst,src,tmp,impl},loc) =               fun spillCopyTmp(_, I.INSTR(I.COPY{dst,src,tmp,impl}),loc) =
102                   I.COPY{dst=dst, src=src, impl=impl,                   I.copy{dst=dst, src=src, impl=impl,
103                          tmp=SOME(I.Displace{base=fp,                          tmp=SOME(I.Displace{base=fp,
104                                              disp=SpillTable.getRegLoc loc })}                                              disp=SpillTable.getRegLoc loc })}
105    
106               (* spill register *)               (* spill register *)
107               fun spillInstr{src,spilledCell,an,spillLoc} =               fun spillInstr{src,spilledCell,an,spillLoc} =
108                   [I.STORE{s=I.ST,r=fp,                   [I.store{s=I.ST,r=fp,
109                            i=I.IMMED(SpillTable.getRegLoc spillLoc),                            i=I.IMMED(SpillTable.getRegLoc spillLoc),
110                            d=src, mem=spill}]                            d=src, mem=spill}]
111    
112               (* reload register *)               (* reload register *)
113               fun reloadInstr{dst,spilledCell,an,spillLoc} =               fun reloadInstr{dst,spilledCell,an,spillLoc} =
114                   [I.LOAD{l=I.LD, r=fp,                   [I.load{l=I.LD, r=fp,
115                           i=I.IMMED(SpillTable.getRegLoc spillLoc),                           i=I.IMMED(SpillTable.getRegLoc spillLoc),
116                           d=dst, mem=spill}                           d=dst, mem=spill}
117                   ]                   ]
# Line 125  Line 125 
125               val dedicated = SparcCpsRegs.dedicatedF               val dedicated = SparcCpsRegs.dedicatedF
126    
127               fun copy((fds as [_], fss as [_]), _) =               fun copy((fds as [_], fss as [_]), _) =
128                   I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}                   I.fcopy{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
129                 | copy((fds, fss), I.FCOPY{tmp, ...}) =                 | copy((fds, fss), I.INSTR(I.FCOPY{tmp, ...})) =
130                   I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}                   I.fcopy{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
131    
132               fun spillCopyTmp(_, I.FCOPY{dst,src,tmp,impl},loc) =               fun spillCopyTmp(_, I.INSTR(I.FCOPY{dst,src,tmp,impl}),loc) =
133                   I.FCOPY{dst=dst, src=src, impl=impl,                   I.fcopy{dst=dst, src=src, impl=impl,
134                          tmp=SOME(I.Displace{base=fp,                          tmp=SOME(I.Displace{base=fp,
135                                              disp=SpillTable.getFregLoc loc })}                                              disp=SpillTable.getFregLoc loc })}
136    
137               fun spillInstr(_, d,loc) =               fun spillInstr(_, d,loc) =
138                   [I.FSTORE{s=I.STDF, r=fp,                   [I.fstore{s=I.STDF, r=fp,
139                             i=I.IMMED(SpillTable.getFregLoc loc),                             i=I.IMMED(SpillTable.getFregLoc loc),
140                             d=d, mem=spill}]                             d=d, mem=spill}]
141    
142               fun reloadInstr(_, d,loc) =               fun reloadInstr(_, d,loc) =
143                   [I.FLOAD{l=I.LDDF, r=fp,                   [I.fload{l=I.LDDF, r=fp,
144                            i=I.IMMED(SpillTable.getFregLoc loc),                            i=I.IMMED(SpillTable.getFregLoc loc),
145                            d=d, mem=spill}                            d=d, mem=spill}
146                   ]                   ]

Legend:
Removed from v.1002  
changed lines
  Added in v.1003

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