Changeset 5350


Ignore:
Timestamp:
Oct 14, 2006, 6:41:13 AM (18 years ago)
Author:
Gary Byers
Message:

Fix use of ,<- vinsn macros inside ENSURING-NODE-TARGET.

Inline the fixnum case of two-arg numeric comparisons.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/compiler/PPC/ppc2.lisp

    r5218 r5350  
    54055405      (with-node-temps (v) (temp)
    54065406        (! %slot-ref temp v i)
    5407         (<- temp))))
     5407        (ppc2-copy-register seg target temp))))
    54085408  (^))
    54095409 
     
    56155615
    56165616(defppc2 ppc2-struct-ref struct-ref (seg vreg xfer struct offset)
    5617   (ppc2-misc-node-ref seg vreg xfer struct offset (nx-lookup-target-uvector-subtag :struct)))
     5617  (ppc2-misc-node-ref seg vreg xfer struct offset (unless *ppc2-reckless* (nx-lookup-target-uvector-subtag :struct))))
    56185618
    56195619(defppc2 ppc2-struct-set struct-set (seg vreg xfer struct offset value)
    5620   (ppc2-misc-node-set seg vreg xfer struct offset value (nx-lookup-target-uvector-subtag :struct)))
     5620  (ppc2-misc-node-set seg vreg xfer struct offset value (unless *ppc2-reckless* (nx-lookup-target-uvector-subtag :struct))))
    56215621
    56225622(defppc2 ppc2-istruct-typep istruct-typep (seg vreg xfer cc form type)
     
    58065806    (ppc2-compare seg vreg xfer form1 form2 cr-bit true-p)))
    58075807
    5808 
    5809 
     5808(defppc2 ppc2-numcmp numcmp (seg vreg xfer cc form1 form2)
     5809  (let* ((name (ecase (cadr cc)
     5810                 (:eq '=-2)
     5811                 (:ne '/=-2)
     5812                 (:lt '<-2)
     5813                 (:le '<=-2)
     5814                 (:gt '>-2)
     5815                 (:ge '>=-2))))
     5816    (if (or (ppc2-explicit-non-fixnum-type-p form1)
     5817            (ppc2-explicit-non-fixnum-type-p form2))
     5818      (ppc2-binary-builtin seg vreg xfer name form1 form2)
     5819      (ppc2-inline-numcmp seg vreg xfer cc name form1 form2))))
     5820
     5821(defun ppc2-inline-numcmp (seg vreg xfer cc name form1 form2)
     5822  (with-ppc-local-vinsn-macros (seg vreg xfer)
     5823    (multiple-value-bind (cr-bit true-p) (acode-condition-to-ppc-cr-bit cc)
     5824      (let* ((otherform (and (eql cr-bit ppc::ppc-eq-bit)
     5825                             (if (eql (acode-fixnum-form-p form2) 0)
     5826                               form1
     5827                               (if (eql (acode-fixnum-form-p form1) 0)
     5828                                 form2)))))
     5829        (if otherform
     5830          (ppc2-one-targeted-reg-form seg otherform ($ ppc::arg_z))
     5831          (ppc2-two-targeted-reg-forms seg  form1 ($ ppc::arg_y) form2 ($ ppc::arg_z)))
     5832        (let* ((out-of-line (backend-get-next-label))
     5833               (done (backend-get-next-label)))
     5834          (if otherform
     5835            (unless (acode-fixnum-form-p otherform)
     5836              (! branch-unless-arg-fixnum ($ ppc::arg_z) (aref *backend-labels* out-of-line)))
     5837            (if (acode-fixnum-form-p form1)
     5838              (! branch-unless-arg-fixnum ($ ppc::arg_z) (aref *backend-labels* out-of-line))
     5839              (if (acode-fixnum-form-p form2)
     5840                (! branch-unless-arg-fixnum ($ ppc::arg_y) (aref *backend-labels* out-of-line)) 
     5841                (! branch-unless-both-args-fixnums ($ ppc::arg_y) ($ ppc::arg_z) (aref *backend-labels* out-of-line)))))
     5842          (with-imm-target () (b31-reg :natural)
     5843            (if otherform
     5844              (if true-p
     5845                (! eq0->bit31 b31-reg ($ ppc::arg_z))
     5846                (! ne0->bit31 b31-reg ($ ppc::arg_z)))
     5847              (ecase cr-bit
     5848                (#. ppc::ppc-eq-bit
     5849                    (if true-p
     5850                      (! eq->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z))
     5851                      (! ne->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z))))
     5852                (#. ppc::ppc-lt-bit
     5853                    (if true-p
     5854                      (! lt->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z))
     5855                      (! ge->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z))))
     5856                (#. ppc::ppc-gt-bit
     5857                    (if true-p
     5858                      (! gt->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z))
     5859                      (! le->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z))))))
     5860            (! lowbit->truth ($ ppc::arg_z) b31-reg)
     5861            (-> done)
     5862            (@ out-of-line)
     5863            (if otherform
     5864              (ppc2-lri seg ($ ppc::arg_y) 0))
     5865            (let* ((index (arch::builtin-function-name-offset name))
     5866                   (idx-subprim (ppc2-builtin-index-subprim index)))
     5867              (! call-subprim-2 ($ ppc::arg_z) idx-subprim ($ ppc::arg_y) ($ ppc::arg_z)))
     5868            (@ done)
     5869            (<- ($ ppc::arg_z))
     5870            (^)))))))
     5871   
    58105872(defppc2 ppc2-%word-to-int %word-to-int (seg vreg xfer form)
    58115873  (if (null vreg)
     
    61596221        (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-plus) ($ ppc::arg_y) ($ ppc::arg_z))
    61606222        (@ done)
    6161         (ppc2-copy-register seg target ($ ppc::arg_z))
    6162         (^)))))
     6223        (ppc2-copy-register seg target ($ ppc::arg_z)))
     6224      (^))))
     6225
     6226(defun ppc2-inline-sub2 (seg vreg xfer form1 form2)
     6227  (with-ppc-local-vinsn-macros (seg vreg xfer)
     6228    (ppc2-two-targeted-reg-forms seg form1 ($ ppc::arg_y) form2 ($ ppc::arg_z))
     6229    (let* ((out-of-line (backend-get-next-label))
     6230           (done (backend-get-next-label)))
     6231      (ensuring-node-target (target vreg)
     6232        (if (acode-fixnum-form-p form1)
     6233          (! branch-unless-arg-fixnum ($ ppc::arg_z) (aref *backend-labels* out-of-line))
     6234          (if (acode-fixnum-form-p form2)
     6235            (! branch-unless-arg-fixnum ($ ppc::arg_y) (aref *backend-labels* out-of-line)) 
     6236            (! branch-unless-both-args-fixnums ($ ppc::arg_y) ($ ppc::arg_z) (aref *backend-labels* out-of-line))))
     6237        (if *ppc2-open-code-inline*
     6238          (! fixnum-sub-overflow-inline-skip ($ ppc::arg_z) ($ ppc::arg_y) ($ ppc::arg_z) (aref *backend-labels* done))
     6239          (progn
     6240            (! fixnum-sub-overflow-ool ($ ppc::arg_y) ($ ppc::arg_z))
     6241            (-> done)))
     6242        (@ out-of-line)
     6243        (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-minus) ($ ppc::arg_y) ($ ppc::arg_z))
     6244        (@ done)
     6245        (ppc2-copy-register seg target ($ ppc::arg_z)))
     6246      (^))))
    61636247
    61646248;;; Return T if form is declared to be something that couldn't be a fixnum.
     
    62336317                             form2
    62346318                             t)
    6235           (ppc2-binary-builtin seg vreg xfer '--2 form1 form2))))))
     6319          (if (or (ppc2-explicit-non-fixnum-type-p form1)
     6320                  (ppc2-explicit-non-fixnum-type-p form2))
     6321            (ppc2-binary-builtin seg vreg xfer '--2 form1 form2)
     6322            (ppc2-inline-sub2 seg vreg xfer form1 form2)))))))
    62366323
    62376324(defppc2 ppc2-mul2 mul2 (seg vreg xfer form1 form2)
     
    63196406            (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-logior) ($ ppc::arg_y) ($ ppc::arg_z))
    63206407            (@ done)
    6321             (ppc2-copy-register seg target ($ ppc::arg_z))
    6322             (^)))))))
     6408            (ppc2-copy-register seg target ($ ppc::arg_z)))
     6409          (^))))))
    63236410
    63246411(defppc2 ppc2-logior2 logior2 (seg vreg xfer form1 form2)
     
    63766463            (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-logand) ($ ppc::arg_y) ($ ppc::arg_z))         
    63776464            (@ done)
    6378             (ppc2-copy-register seg target ($ ppc::arg_z))
    6379             (^)))))))
     6465            (ppc2-copy-register seg target ($ ppc::arg_z)))
     6466        (^))))))
    63806467
    63816468(defppc2 ppc2-logand2 logand2 (seg vreg xfer form1 form2)
     
    67066793                   (! ,vinsn result r1 r2)
    67076794                   (ensuring-node-target (target vreg)
    6708                      (<- result))))
     6795                     (ppc2-copy-register seg target result))))
    67096796               (^)))))))
    67106797 
     
    67236810                   (! ,vinsn result r1 r2)
    67246811                   (ensuring-node-target (target vreg)
    6725                      (<- result))))
     6812                     (ppc2-copy-register seg target result))))
    67266813               (^)))))))
    67276814)
     
    79508037              (target vreg)
    79518038              (! makeu64)
    7952               (<- ($ ppc::arg_z))))
     8039              (ppc2-copy-register seg target ppc::arg_z)))
    79538040            ((eq resultspec :signed-doubleword)
    79548041             (ensuring-node-target
    79558042              (target vreg)
    79568043              (! makes64)
    7957               (<- ($ ppc::arg_z))))
     8044              (ppc2-copy-register seg target ppc::arg_z)))
    79588045            (t
    79598046             (<- (make-wired-lreg ppc::imm0
     
    81798266               (ensuring-node-target (target vreg)
    81808267                 (! makeu64)
    8181                  (<- ($ ppc::arg_z))))
     8268                 (ppc2-copy-register seg target ppc::arg_z)))
    81828269              ((eq resultspec :signed-doubleword)
    81838270               (ensuring-node-target (target vreg)
    81848271                 (! makes64)
    8185                  (<- ($ ppc::arg_z))))
     8272                 (ppc2-copy-register seg target ppc::arg_z)))
    81868273              (t
    81878274               (<- (make-wired-lreg ppc::imm0
     
    82388325              (target vreg)
    82398326              (! makeu64)
    8240               (<- ppc::arg_z)))
     8327              (ppc2-copy-register seg target ppc::arg_z)))
    82418328            ((eq resultspec :signed-doubleword)
    82428329             (ensuring-node-target
    82438330              (target vreg)
    82448331              (! makes64)
    8245               (<- ppc::arg_z)))
     8332              (ppc2-copy-register seg target ppc::arg_z)))
    82468333            (t
    82478334             (<- (set-regspec-mode ppc::imm0 (gpr-mode-name-value
     
    82838370    (let* ((reg (if (eq (hard-regspec-value target) ppc::arg_z) ($ ppc::arg_y) ($ ppc::arg_z))))
    82848371      (ppc2-one-targeted-reg-form seg arg reg)
    8285       (! eep.address target reg))
    8286     (^)))
     8372      (! eep.address target reg)))
     8373  (^))
    82878374
    82888375(defppc2 ppc2-%natural+ %natural+ (seg vreg xfer x y)
Note: See TracChangeset for help on using the changeset viewer.