Changeset 15542


Ignore:
Timestamp:
Dec 17, 2012, 8:52:54 AM (7 years ago)
Author:
gb
Message:

When "eliding pushes", if the pushed and popped registers are disjoint
and the popped register is set in the intervening sequence but the pushed
register isn't we need to generate a COPY of the pushed reg to the popped
reg at the point of the POP.

The x86 backend got this wrong in both the FPR and GPR cases; the ARM
got this right in the GPR case but missed an FPR case.

Fixes ticket:1037 in the trunk; the bug is about a year old, but the
code in question has only been used for PROG1 in the trunk for the last
week or so.

Location:
trunk/source/compiler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/ARM/arm2.lisp

    r15495 r15542  
    30303030                   (if pushed-reg-is-set
    30313031                     (insert-dll-node-after copy push-vinsn)
    3032                      (insert-dll-node-before copy push-vinsn))))
     3032                     (insert-dll-node-before copy pop-vinsn))))
    30333033               (elide-vinsn push-vinsn)
    30343034               (elide-vinsn pop-vinsn))
  • trunk/source/compiler/X86/x862.lisp

    r15526 r15542  
    35453545                   (if pushed-reg-is-set
    35463546                     (insert-dll-node-after copy push-vinsn)
    3547                      (insert-dll-node-before copy push-vinsn))))
     3547                     (insert-dll-node-before copy pop-vinsn))))
    35483548               (elide-vinsn push-vinsn)
    35493549               (elide-vinsn pop-vinsn))
     
    35983598                                (if pushed-reg-is-set
    35993599                                  (insert-dll-node-after copy push-vinsn)
    3600                                   (insert-dll-node-before copy push-vinsn)))))
     3600                                  (insert-dll-node-before copy pop-vinsn)))))
    36013601                          (elide-vinsn push-vinsn)
    36023602                          (elide-vinsn pop-vinsn))
Note: See TracChangeset for help on using the changeset viewer.