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/hppa/hppaCG.sml
ViewVC logotype

Diff of /sml/trunk/src/compiler/CodeGen/hppa/hppaCG.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 85  Line 85 
85            fun low11(n)  = wtoi(Word.andb(itow n, 0wx7ff))            fun low11(n)  = wtoi(Word.andb(itow n, 0wx7ff))
86            fun high21(n) = wtoi(Word.~>>(itow n, 0w11))            fun high21(n) = wtoi(Word.~>>(itow n, 0w11))
87    
88            fun pure(I.LOAD _) = true            fun pure(I.INSTR(I.LOAD _)) = true
89              | pure(I.LOADI _) = true              | pure(I.INSTR(I.LOADI _)) = true
90              | pure(I.FLOAD _) = true              | pure(I.INSTR(I.FLOAD _)) = true
91              | pure(I.FLOADX _) = true              | pure(I.INSTR(I.FLOADX _)) = true
92              | pure(I.ARITH _) = true              | pure(I.INSTR(I.ARITH _)) = true
93              | pure(I.ARITHI _) = true              | pure(I.INSTR(I.ARITHI _)) = true
94              | pure(I.FARITH _) = true              | pure(I.INSTR(I.FARITH _)) = true
95              | pure(I.FUNARY _) = true              | pure(I.INSTR(I.FUNARY _)) = true
96              | pure(I.FCNV _) = true              | pure(I.INSTR(I.FCNV _)) = true
97              | pure(I.ANNOTATION{i,...}) = pure i              | pure(I.ANNOTATION{i,...}) = pure i
98              | pure _ = false              | pure _ = false
99    
# Line 104  Line 104 
104               val dedicated = HppaCpsRegs.dedicatedR               val dedicated = HppaCpsRegs.dedicatedR
105    
106               fun copy((rds as [_], rss as [_]), _) =               fun copy((rds as [_], rss as [_]), _) =
107                   I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=NONE}                   I.copy{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
108                 | copy((rds, rss), I.COPY{tmp, ...}) =                 | copy((rds, rss), I.INSTR(I.COPY{tmp, ...})) =
109                   I.COPY{dst=rds, src=rss, impl=ref NONE, tmp=tmp}                   I.copy{dst=rds, src=rss, impl=ref NONE, tmp=tmp}
110    
111               (* spill copy temp *)               (* spill copy temp *)
112               fun spillCopyTmp(_, I.COPY{dst,src,tmp,impl},loc) =               fun spillCopyTmp(_, I.INSTR(I.COPY{dst,src,tmp,impl}),loc) =
113                   I.COPY{dst=dst, src=src, impl=impl,                   I.copy{dst=dst, src=src, impl=impl,
114                          tmp=SOME(I.Displace{base=sp,                          tmp=SOME(I.Displace{base=sp,
115                                             disp= ~(SpillTable.getRegLoc loc)})}                                             disp= ~(SpillTable.getRegLoc loc)})}
116    
117               (* spill register *)               (* spill register *)
118               fun spillInstr{src,spilledCell,spillLoc,an} =               fun spillInstr{src,spilledCell,spillLoc,an} =
119                   [I.STORE{st=I.STW, b=sp,                   [I.store{st=I.STW, b=sp,
120                            d=I.IMMED(~(SpillTable.getRegLoc spillLoc)),                            d=I.IMMED(~(SpillTable.getRegLoc spillLoc)),
121                            r=src, mem=spill}]                            r=src, mem=spill}]
122    
123               (* reload register *)               (* reload register *)
124               fun reloadInstr{dst,spilledCell,spillLoc,an} =               fun reloadInstr{dst,spilledCell,spillLoc,an} =
125                   [I.LOADI{li=I.LDW,                   [I.loadi{li=I.LDW,
126                            i=I.IMMED(~(SpillTable.getRegLoc spillLoc)),                            i=I.IMMED(~(SpillTable.getRegLoc spillLoc)),
127                            r=sp, t=dst, mem=spill}                            r=sp, t=dst, mem=spill}
128                   ]                   ]
# Line 136  Line 136 
136               val dedicated = HppaCpsRegs.dedicatedF               val dedicated = HppaCpsRegs.dedicatedF
137    
138               fun copy((fds as [_], fss as [_]), _) =               fun copy((fds as [_], fss as [_]), _) =
139                   I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=NONE}                   I.fcopy{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
140                 | copy((fds, fss), I.FCOPY{tmp, ...}) =                 | copy((fds, fss), I.INSTR(I.FCOPY{tmp, ...})) =
141                   I.FCOPY{dst=fds, src=fss, impl=ref NONE, tmp=tmp}                   I.fcopy{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
142    
143               fun spillCopyTmp(_,I.FCOPY{dst,src,tmp,impl},loc) =               fun spillCopyTmp(_,I.INSTR(I.FCOPY{dst,src,tmp,impl}),loc) =
144                   I.FCOPY{dst=dst, src=src, impl=impl,                   I.fcopy{dst=dst, src=src, impl=impl,
145                          tmp=SOME(I.Displace{base=sp,                          tmp=SOME(I.Displace{base=sp,
146                                          disp= ~(SpillTable.getFregLoc loc)})}                                          disp= ~(SpillTable.getFregLoc loc)})}
147    
148               fun spillInstr(_,r,loc) =               fun spillInstr(_,r,loc) =
149               let val offset = SpillTable.getFregLoc loc               let val offset = SpillTable.getFregLoc loc
150               in  [I.LDIL{i=I.IMMED(high21(~offset)), t=tmpR},               in  [I.ldil{i=I.IMMED(high21(~offset)), t=tmpR},
151                    I.LDO{i=I.IMMED(low11(~offset)), b=tmpR, t=tmpR},                    I.ldo{i=I.IMMED(low11(~offset)), b=tmpR, t=tmpR},
152                    I.FSTOREX{fstx=I.FSTDX, b=sp, x=tmpR, r=r, mem=spill}                    I.fstorex{fstx=I.FSTDX, b=sp, x=tmpR, r=r, mem=spill}
153                   ]                   ]
154               end               end
155    
156               fun reloadInstr(_,t,loc) =               fun reloadInstr(_,t,loc) =
157               let val offset = SpillTable.getFregLoc loc               let val offset = SpillTable.getFregLoc loc
158               in  [I.LDIL{i=I.IMMED(high21(~offset)), t=tmpR},               in  [I.ldil{i=I.IMMED(high21(~offset)), t=tmpR},
159                    I.LDO{i=I.IMMED(low11(~offset)), b=tmpR, t=tmpR},                    I.ldo{i=I.IMMED(low11(~offset)), b=tmpR, t=tmpR},
160                    I.FLOADX{flx=I.FLDDX, b=sp, x=tmpR, t=t, mem=spill}                    I.floadx{flx=I.FLDDX, b=sp, x=tmpR, t=t, mem=spill}
161                   ]                   ]
162               end               end
163    

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