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
 [smlnj] / sml / trunk / src / compiler / CodeGen / hppa / hppaCG.sml

# Diff of /sml/trunk/src/compiler/CodeGen/hppa/hppaCG.sml

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
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 [_]), _) =
108                 | copy((rds, rss), I.COPY{tmp, ...}) =                 | copy((rds, rss), I.INSTR(I.COPY{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
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