Changeset 15058


Ignore:
Timestamp:
Nov 5, 2011, 8:31:10 AM (8 years ago)
Author:
gb
Message:

In ARM2-INLINE-NUMCMP, don't map the condition codes to T/NIL if
we're branching, in the fixnum case.

File:
1 edited

Legend:

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

    r15037 r15058  
    46934693     
    46944694(defun arm2-branch (seg xfer crf &optional cr-bit true-p)
     4695  (declare (notinline arm2-branch))
    46954696  (let* ((*arm2-vstack* *arm2-vstack*)
    46964697         (*arm2-top-vstack-lcell* *arm2-top-vstack-lcell*))
     
    47034704          (arm2-set-nargs seg 1)))
    47044705      (if (neq 0 xfer)
    4705         (if (eq xfer $backend-return)    ;; xfer : RETURN ==> popj
     4706        (if (eq xfer $backend-return);; xfer : RETURN ==> popj
    47064707          (arm2-do-return seg)
    47074708          (if (not (arm2-cd-compound-p xfer))
    4708             (-> xfer)  ;; xfer : label# ==> BRA label#
     4709            (-> xfer);; xfer : label# ==> BRA label#
    47094710            ;; cd is compound : (<true> / <false>)
    47104711            (let* ((truebranch (arm2-cd-true xfer))
     
    47214722              (if (and tn0 tnret nn0 nnret)
    47224723                (progn
    4723                   (! cbranch-true tlabel crf cr-bit )    ;; (label# /  label#)
    4724                   (-> nbranch)))
     4724                  (! cbranch-true tlabel crf cr-bit );; (label# /  label#)
     4725                  (-> nbranch))
    47254726                (if (and nnret tnret)
    47264727                  (if nn0
     
    47334734                      (! cbranch-false auxl crf cr-bit))
    47344735                    (arm2-do-return seg)
    4735                     (@ aux-label))))))))))
     4736                    (@ aux-label)))))))))))
    47364737
    47374738(defun arm2-cd-merge (cd label)
     
    60946095          (arm2-two-targeted-reg-forms seg  form1 ($ arm::arg_y) form2 ($ arm::arg_z)))
    60956096        (let* ((out-of-line (backend-get-next-label))
    6096                (done (backend-get-next-label)))
     6097               (done (backend-get-next-label))
     6098               (continue (backend-get-next-label)))
    60976099          (if otherform
    60986100            (unless (acode-fixnum-form-p otherform)
     
    61046106                (! branch-unless-both-args-fixnums ($ arm::arg_y) ($ arm::arg_z) (aref *backend-labels* out-of-line)))))
    61056107          (with-crf-target () crf
    6106           (if otherform
    6107             (! compare-immediate crf ($ arm::arg_z) 0)
    6108             (! compare crf ($ arm::arg_y) ($ arm::arg_z)))
    6109           (! cond->boolean ($ arm::arg_z) (if true-p cr-bit (logxor cr-bit 1))))
    6110           (-> done)
     6108                           (if otherform
     6109                             (! compare-immediate crf ($ arm::arg_z) 0)
     6110                             (! compare crf ($ arm::arg_y) ($ arm::arg_z)))
     6111                           (if (and vreg (eql (hard-regspec-class vreg) hard-reg-class-crf))
     6112                             (arm2-branch seg (arm2-cd-merge xfer continue) crf cr-bit true-p)
     6113                             (progn
     6114                               (! cond->boolean ($ arm::arg_z) (if true-p cr-bit (logxor cr-bit 1)))
     6115                               (-> done))))
    61116116          (@ out-of-line)
    61126117          (if otherform
     
    61176122          (@ done)
    61186123          (<- ($ arm::arg_z))
    6119           (^))))))
     6124          (^)
     6125          (@ continue))))))
    61206126   
    61216127(defarm2 arm2-%word-to-int %word-to-int (seg vreg xfer form)
Note: See TracChangeset for help on using the changeset viewer.