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 /MLRISC/trunk/amd64/ra/amd64SpillInstr.sml
ViewVC logotype

Diff of /MLRISC/trunk/amd64/ra/amd64SpillInstr.sml

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

revision 2804, Mon Oct 22 04:20:02 2007 UTC revision 2805, Mon Oct 22 07:33:14 2007 UTC
# Line 235  Line 235 
235                                    I.move{mvOp=I.MOVQ, src=tmpOpnd64, dst=spillLoc}]}                                    I.move{mvOp=I.MOVQ, src=tmpOpnd64, dst=spillLoc}]}
236                             end                             end
237                      (* end case *))                      (* end case *))
238                   | I.CMPXCHG{lock,sz=isz,src,dst} =>                   | I.XADD{lock,sz=isz,src as I.Direct (_, srcR),dst} =>
239                        if immedOrReg src                     if CB.sameColor (r, srcR)
240                          then {proh=[], newReg=NONE,                        then raise Fail "cannot spill src for XADD"
                            code=[mark(I.CMPXCHG{lock=lock,sz=isz,src=src,  
                                 dst=spillLoc},an)]}  
241                        else let                        else let
242                          val (tmpR, tmpOpnd, tmpOpnd64) = freshTmp ()                          val (tmpR, tmpOpnd, tmpOpnd64) = freshTmp ()
243                          in                          in {proh=[tmpR],
244                            {proh=[], newReg=NONE,                              newReg=SOME tmpR,
245                                code=[mark (I.XADD{lock=lock,sz=isz,src=src,dst=spillLoc}, an)]}
246                            end
247                     | I.CMPXCHG{lock,sz=isz,src,dst} =>
248                       if immedOrReg src then
249                           {proh=[],
250                            code=[mark(I.CMPXCHG{lock=lock,sz=isz,src=src,dst=spillLoc},an)],
251                            newReg=NONE
252                           }
253                       else
254                           let val (tmpR, tmpOpnd, tmpOpnd64) = freshTmp()
255                           in {proh=[tmpR],
256                            code=[I.move{mvOp=I.MOVQ, src=src, dst=tmpOpnd64},                            code=[I.move{mvOp=I.MOVQ, src=src, dst=tmpOpnd64},
257                                  mark(I.CMPXCHG{lock=lock,sz=isz,src=tmpOpnd,                                   mark(I.CMPXCHG{lock=lock,sz=isz,src=tmpOpnd,dst=spillLoc},an)],
258                                                 dst=spillLoc},an)]}                             newReg=SOME tmpR
259                              }
260                          end                          end
261                   | I.MULTDIV _ => error "spill: MULTDIV"                   | I.MULTDIV _ => error "spill: MULTDIV"
262                   | I.MUL3 {src1, src2, dst} => let                   | I.MUL3 {src1, src2, dst} => let
# Line 489  Line 499 
499                     I.CMPXCHG{lock=lock, sz=sz,                     I.CMPXCHG{lock=lock, sz=sz,
500                               src=operand(src, tmpR),                               src=operand(src, tmpR),
501                               dst=operand(dst, tmpR)})                               dst=operand(dst, tmpR)})
502                     | I.XADD{lock,sz,src,dst} => withTmp(fn tmpR =>
503                       I.XADD {lock=lock,sz=sz,
504                               src=operand(src, tmpR),
505                               dst=operand(dst, tmpR)})
506                   | I.MULTDIV{multDivOp, src as I.Direct _} =>                   | I.MULTDIV{multDivOp, src as I.Direct _} =>
507                     done (I.MULTDIV{multDivOp=multDivOp, src=replace src}, an)                     done (I.MULTDIV{multDivOp=multDivOp, src=replace src}, an)
508                   | I.MULTDIV{multDivOp, src} => withTmp(fn tmpR =>                   | I.MULTDIV{multDivOp, src} => withTmp(fn tmpR =>

Legend:
Removed from v.2804  
changed lines
  Added in v.2805

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