Changeset 13076


Ignore:
Timestamp:
Oct 22, 2009, 1:02:55 AM (10 years ago)
Author:
rme
Message:

Trunk changes through r13072.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/1.4/source/compiler/X86/x862.lisp

    r13075 r13076  
    72087208(defun x862-inline-add2 (seg vreg xfer form1 form2)
    72097209  (with-x86-local-vinsn-macros (seg vreg xfer)
    7210     (let* ((fix1 (acode-fixnum-form-p form1))
    7211            (fix2 (acode-fixnum-form-p form2))
    7212            (otherform (if (and fix1
    7213                                (typep (ash fix1 *x862-target-fixnum-shift*)
    7214                                       '(signed-byte 32)))
     7210    (let* ((c1 (acode-fixnum-form-p form1))
     7211           (c2 (acode-fixnum-form-p form2))
     7212           (fix1 (s32-fixnum-constant-p c1))
     7213           (fix2 (s32-fixnum-constant-p c2))
     7214           (otherform (if fix1
    72157215                        form2
    7216                         (if (and fix2
    7217                                  (typep (ash fix2 *x862-target-fixnum-shift*)
    7218                                         '(signed-byte 32)))
     7216                        (if fix2
    72197217                          form1))))
    72207218      (if otherform
     
    72237221      (let* ((out-of-line (backend-get-next-label))
    72247222             (done (backend-get-next-label)))
    7225      
    72267223        (ensuring-node-target (target vreg)
    72277224          (if otherform
     
    92219218      (x862-form seg vreg xfer ptr)
    92229219      (let* ((ptr-reg (with-imm-target () (ptr-reg :address)
    9223                         (x862-one-targeted-reg-form seg ptr ptr-reg))))
    9224         (if fixnum-by
     9220                        (x862-one-targeted-reg-form seg ptr ptr-reg)))
     9221             (s32-by (s32-fixnum-constant-p fixnum-by)))
     9222        (if s32-by
    92259223          (let* ((result ptr-reg))
    9226             (! add-constant result fixnum-by)
     9224            (! add-constant result s32-by)
    92279225            (<- result))
    9228             (progn
    9229               (unless triv-by
    9230                 (x862-push-register seg ptr-reg))
    9231               (let* ((boxed-by (x862-one-targeted-reg-form seg by *x862-arg-z*)))
    9232                 (unless triv-by
    9233                   (x862-pop-register seg ptr-reg))
    9234                 (with-additional-imm-reg ()
    9235                   (with-imm-target (ptr-reg) (by-reg :signed-natural)
    9236                     (! fixnum->signed-natural by-reg boxed-by)
    9237                     (let* ((result ptr-reg))
    9238                       (! fixnum-add2 result by-reg)
    9239                       (<- result)))))))
     9226          (progn
     9227            (unless triv-by
     9228              (x862-push-register seg ptr-reg))
     9229            (let* ((boxed-by (x862-one-targeted-reg-form seg by *x862-arg-z*)))
     9230              (unless triv-by
     9231                (x862-pop-register seg ptr-reg))
     9232              (with-additional-imm-reg ()
     9233                (with-imm-target (ptr-reg) (by-reg :signed-natural)
     9234                  (! fixnum->signed-natural by-reg boxed-by)
     9235                  (let* ((result ptr-reg))
     9236                    (! fixnum-add2 result by-reg)
     9237                    (<- result)))))))
    92409238        (^)))))
    92419239
Note: See TracChangeset for help on using the changeset viewer.