Changeset 6424 for branches/x8664-call


Ignore:
Timestamp:
May 4, 2007, 2:47:47 PM (13 years ago)
Author:
gb
Message:

Fixnum addition, subtraction: avoid overflow checks in binops if
each operand is known to be no larger than "half a fixnum".
Maybe unbox recklessly in vset1.
When lowering GENERIC-AREF2/3 to typed-simple versions, don't
pass ACODE nil if unsafe(!).

File:
1 edited

Legend:

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

    r6396 r6424  
    3636(defparameter *x862-target-num-arg-regs* 0)
    3737(defparameter *x862-target-num-save-regs* 0)
     38(defparameter *x862-target-half-fixnum-type* nil)
    3839
    3940(defparameter *x862-operator-supports-u8-target* ())
     
    457458           (*x862-target-bits-in-word* (arch::target-nbits-in-word (backend-target-arch *target-backend*)))
    458459           (*x862-target-node-size* *x862-target-lcell-size*)
     460           (*x862-target-half-fixnum-type* `(signed-byte ,(- *x862-target-bits-in-word*
     461                                                            (1+ *x862-target-fixnum-shift*))))
    459462           (*x862-target-dnode-size* (* 2 *x862-target-lcell-size*))
    460463           (*x862-all-lcells* ())
     
    20992102                          (if (typep constval '(unsigned-byte 32))
    21002103                            (x862-lri seg reg constval)
    2101                             (! unbox-u32 reg result-reg))))
     2104                            (if *x862-reckless*
     2105                              (! %unbox-u32 reg result-reg)
     2106                              (! unbox-u32 reg result-reg)))))
    21022107                   reg)))
    21032108              (is-16-bit
     
    21062111                   (if (typep constval '(signed-byte 16))
    21072112                     (x862-lri seg reg constval)
    2108                      (! unbox-s16 reg result-reg))
     2113                     (if *x862-reckless*
     2114                       (! %unbox-s16 reg result-reg)
     2115                       (! unbox-s16 reg result-reg)))
    21092116                   reg)
    21102117                 (let* ((reg (make-unwired-lreg next-imm-target :mode hard-reg-class-gpr-mode-u16)))
    21112118                   (if (typep constval '(unsigned-byte 16))
    21122119                     (x862-lri seg reg constval)
    2113                      (! unbox-u16 reg result-reg))
     2120                     (if *x862-reckless*
     2121                       (! %unbox-u16 reg result-reg)
     2122                       (! unbox-u16 reg result-reg)))
    21142123                   reg)))
    21152124              (is-8-bit
     
    21182127                   (if (typep constval '(signed-byte 8))
    21192128                     (x862-lri seg reg constval)
    2120                      (! unbox-s8 reg result-reg))
     2129                     (if *x862-reckless*
     2130                       (! %unbox-s8 reg result-reg)
     2131                       (! unbox-s8 reg result-reg)))
    21212132                   reg)
    21222133                 (let* ((reg (make-unwired-lreg next-imm-target :mode hard-reg-class-gpr-mode-u8)))
    21232134                   (if (typep constval '(unsigned-byte 8))
    21242135                     (x862-lri seg reg constval)
    2125                      (! unbox-u8 reg result-reg))
     2136                     (if *x862-reckless*
     2137                       (! %unbox-u8 reg result-reg)
     2138                       (! unbox-u8 reg result-reg)))
    21262139                   reg)))
    21272140              (t
     
    68076820
    68086821(defx862 x862-%i+ %i+ (seg vreg xfer form1 form2 &optional overflow)
     6822  (when overflow
     6823    (let* ((type *x862-target-half-fixnum-type*))
     6824      (when (and (x862-form-typep form1 type)
     6825               (x862-form-typep form2 type))
     6826        (setq overflow nil))))
    68096827  (cond ((null vreg)
    68106828         (x862-form seg nil nil form1)
     
    68576875
    68586876(defx862 x862-%i- %i- (seg vreg xfer num1 num2 &optional overflow)
     6877  (when overflow
     6878    (let* ((type *x862-target-half-fixnum-type*))
     6879      (when (and (x862-form-typep num1 type)
     6880                 (x862-form-typep num2 type))
     6881        (setq overflow nil))))
    68596882  (let* ((v1 (acode-fixnum-form-p num1))
    68606883         (v2 (acode-fixnum-form-p num2)))
     
    77997822                         j
    78007823                         (if *x862-reckless*
    7801                            *nx-nil*
     7824                           nil
    78027825                           (nx-lookup-target-uvector-subtag keyword ))
    78037826                         keyword ;(make-acode (%nx1-operator immediate) )
     
    78527875                         k
    78537876                         (if *x862-reckless*
    7854                            *nx-nil*
     7877                           nil
    78557878                           (nx-lookup-target-uvector-subtag keyword ))
    78567879                         keyword ;(make-acode (%nx1-operator immediate) )
Note: See TracChangeset for help on using the changeset viewer.