Changeset 5369


Ignore:
Timestamp:
Oct 18, 2006, 12:41:21 AM (18 years ago)
Author:
Gary Byers
Message:

Stuff for comparing memory (stack) addresses to NIL.

Mark arg_z and rcx/nargs as being in use when restoring interrupt level
inline.

File:
1 edited

Legend:

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

    r5359 r5369  
    888888             (splcell (pop splcells))
    889889             (reg (x862-assign-register-var var))
    890              (sp-reg ($ x8664::arg_z))
    891890             (regloadedlabel (if reg (backend-get-next-label))))
    892891        (unless (nx-null initform)
    893           (x862-stack-to-register seg (x862-vloc-ea spvloc) sp-reg)
    894892          (let ((skipinitlabel (backend-get-next-label)))
    895893            (with-crf-target () crf
    896               (x862-compare-register-to-nil seg crf (x862-make-compound-cd 0 skipinitlabel) sp-reg  x86::x86-e-bits t))
     894              (x862-compare-ea-to-nil seg crf (x862-make-compound-cd 0 skipinitlabel) (x862-vloc-ea spvloc)  x86::x86-e-bits t))
    897895            (if reg
    898896              (x862-form seg reg regloadedlabel initform)
     
    921919             (var-lcell (pop lcells))
    922920             (sp-lcell (pop lcells))
    923              (sp-reg ($ x8664::arg_z))
    924921             (sploc (%i+ vloc *x862-target-node-size*)))
    925922        (unless (nx-null initform)
    926           (x862-stack-to-register seg (x862-vloc-ea sploc) sp-reg)
    927923          (let ((skipinitlabel (backend-get-next-label)))
    928924            (with-crf-target () crf
    929               (x862-compare-register-to-nil seg crf (x862-make-compound-cd 0 skipinitlabel) sp-reg  x86::x86-e-bits t))
     925              (x862-compare-ea-to-nil seg crf (x862-make-compound-cd 0 skipinitlabel) (x862-vloc-ea sploc)  x86::x86-e-bits t))
    930926            (if reg
    931927              (x862-form seg reg regloadedlabel initform)
     
    10401036             (spvloc (%i+ vloc *x862-target-node-size*))
    10411037             (var-lcell (pop lcells))
    1042              (sp-reg ($ x8664::arg_z))
    10431038             (sp-lcell (pop lcells)))
    10441039        (unless (nx-null initform)
    1045           (x862-stack-to-register seg (x862-vloc-ea spvloc) sp-reg)
    10461040          (let ((skipinitlabel (backend-get-next-label)))
    10471041            (with-crf-target () crf
    1048               (x862-compare-register-to-nil seg crf (x862-make-compound-cd 0 skipinitlabel) sp-reg x86::x86-e-bits t))
     1042              (x862-compare-ea-to-nil seg crf (x862-make-compound-cd 0 skipinitlabel) (x862-vloc-ea spvloc) x86::x86-e-bits t))
    10491043            (x862-register-to-stack seg (x862-one-untargeted-reg-form seg initform ($ x8664::arg_z)) (x862-vloc-ea vloc))
    10501044            (@ skipinitlabel)))
     
    31583152    (when vreg
    31593153      (! compare-to-nil ireg)
     3154      (regspec-crf-gpr-case
     3155       (vreg dest)
     3156       (^ cr-bit true-p)
     3157       (progn
     3158       (ensuring-node-target (target dest)
     3159         (if (not true-p)
     3160           (setq cr-bit (logxor 1 cr-bit)))
     3161         (! cr-bit->boolean target cr-bit))
     3162       (^))))))
     3163
     3164(defun x862-compare-ea-to-nil (seg vreg xfer ea cr-bit true-p)
     3165  (with-x86-local-vinsn-macros (seg vreg xfer)
     3166    (when vreg
     3167      (if (addrspec-vcell-p ea)
     3168        (with-node-target () temp
     3169          (x862-stack-to-register seg ea temp)
     3170          (! compare-value-cell-to-nil temp))
     3171        (! compare-vframe-offset-to-nil (memspec-frame-address-offset ea) *x862-vstack*))
    31603172      (regspec-crf-gpr-case
    31613173       (vreg dest)
     
    43714383        (x862-branch seg (x862-cd-true xfer))
    43724384        (with-crf-target () crf
    4373           (x862-form seg crf xfer form))))))
     4385          (let* ((ea (x862-lexical-reference-ea form)))
     4386            (if (and ea (memory-spec-p ea))
     4387              (x862-compare-ea-to-nil seg crf xfer ea x86::x86-e-bits nil)
     4388              (x862-form seg crf xfer form))))))))
    43744389
    43754390     
     
    48104825                (setq n 0))
    48114826              (if *x862-open-code-inline*
    4812                 (! unbind-interrupt-level-inline)
     4827                (let* ((*available-backend-node-temps* (bitclr x8664::arg_z (bitclr x8664::rcx *available-backend-node-temps*))))
     4828                  (! unbind-interrupt-level-inline))
    48134829                (! unbind-interrupt-level)))
    48144830            (nx-error "unknown payback token ~s" r)))))))
     
    68156831(defx862 x862-not not (seg vreg xfer cc form)
    68166832  (multiple-value-bind (cr-bit true-p) (acode-condition-to-x86-cr-bit cc)
    6817   (x862-compare-register-to-nil
    6818    seg
    6819    vreg
    6820    xfer
    6821    (x862-one-untargeted-reg-form seg form x8664::arg_z)
    6822    cr-bit
    6823    true-p)))
     6833    (let* ((ea (x862-lexical-reference-ea form)))
     6834      (if (and ea (memory-spec-p ea))
     6835        (x862-compare-ea-to-nil
     6836         seg
     6837         vreg
     6838         xfer
     6839         ea
     6840         cr-bit
     6841         true-p)
     6842        (x862-compare-register-to-nil
     6843         seg
     6844         vreg
     6845         xfer
     6846         (x862-one-untargeted-reg-form seg form x8664::arg_z)
     6847         cr-bit
     6848         true-p)))))
    68246849
    68256850
Note: See TracChangeset for help on using the changeset viewer.