Changeset 6298


Ignore:
Timestamp:
Apr 18, 2007, 11:25:23 AM (15 years ago)
Author:
gb
Message:

In MATCH-TEMPLATE-VREGS, handle locals/temps which refer to global labels.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/x8664-call/ccl/compiler/vinsn.lisp

    r3241 r6298  
    385385         ((null temps) vp)
    386386      (declare (fixnum i))
    387       (let* ((lreg (allocate-temporary-vreg (car temps)))
    388              (class (hard-regspec-class lreg))
    389              (value (hard-regspec-value lreg)))
    390         (when value
    391           (case class
    392             (#.hard-reg-class-gpr (note-vinsn-sets-gpr vinsn value))
    393             (#.hard-reg-class-fpr (note-vinsn-sets-fpr vinsn value))))
    394         (setf (svref vp i) lreg)
    395         (pushnew vinsn (lreg-defs lreg))
    396         (pushnew vinsn (lreg-refs lreg))))))
     387      (let* ((spec (cadar temps)))
     388        (if (and (consp spec) (eq (car spec) :label))
     389          (let* ((label (aref *backend-labels* (cadr spec))))
     390            (push vinsn (vinsn-label-refs label))
     391            (setf (svref vp i) label))
     392        (let* ((lreg (allocate-temporary-vreg (car temps)))
     393               (class (hard-regspec-class lreg))
     394               (value (hard-regspec-value lreg)))
     395          (when value
     396            (case class
     397              (#.hard-reg-class-gpr (note-vinsn-sets-gpr vinsn value))
     398              (#.hard-reg-class-fpr (note-vinsn-sets-fpr vinsn value))))
     399          (setf (svref vp i) lreg)
     400          (pushnew vinsn (lreg-defs lreg))
     401          (pushnew vinsn (lreg-refs lreg))))))))
    397402
    398403;;; "spec" is (<name> <class>).
Note: See TracChangeset for help on using the changeset viewer.