Changeset 15052


Ignore:
Timestamp:
Oct 30, 2011, 10:16:55 AM (8 years ago)
Author:
gb
Message:

When processing self tail-calls in X862-SELF-CALL: don't skip a
form where the outgoing argument looks like the incoming argument
if we're targeting a volatile register (we may have to load that
register from the argument's stack location.) If we did that,
we don't need to store the volatile arg reg back into the frame.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/x862.lisp

    r15051 r15052  
    75627562                   (form (car xforms)))
    75637563              (unless (and (eq var (nx2-lexical-reference-p form))
    7564                            (not (logbitp $vbitsetq (nx-var-bits var))))
     7564                           (not (logbitp $vbitsetq (nx-var-bits var)))
     7565                           (var-nvr var))
    75657566                (incf new-nargs)
    75667567                (new-vars var)
     
    75847585          (4 (x862-four-targeted-reg-forms seg (car forms) (car regs) (cadr forms) (cadr regs)  (caddr forms) (caddr regs) (cadddr forms) (cadddr regs))))
    75857586        (do* ((vars vars (cdr vars))
     7587              (forms forms (cdr forms))
    75867588              (regs regs (cdr regs)))
    75877589             ((null vars))
    75887590          (let* ((var (car vars))
    75897591                 (reg (car regs)))
    7590             (x862-do-lexical-setq seg nil (var-ea var) reg)))
     7592            (unless (and (eq var (nx2-lexical-reference-p (car forms)))
     7593                         (not (logbitp $vbitsetq (nx-var-bits var))))
     7594              (x862-do-lexical-setq seg nil (var-ea var) reg))))
    75917595        (let* ((diff (- *x862-vstack* *x862-tail-vsp*)))
    75927596          (unless (eql 0 diff)
Note: See TracChangeset for help on using the changeset viewer.