Changeset 9583


Ignore:
Timestamp:
May 23, 2008, 4:02:35 AM (11 years ago)
Author:
rme
Message:

x862-unboxed-reg-for-aset: can't assume that (unsigned-byte 32) fits
in a fixnum on x8632, so never use %unbox-u32 vinsn.

x862-vset: only use with-add'l-imm-reg when result-reg is unboxed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/compiler/X86/x862.lisp

    r9581 r9583  
    23172317                            (x862-lri seg reg constval)
    23182318                            (if *x862-reckless*
    2319                               (! %unbox-u32 reg result-reg)
     2319                              (target-arch-case
     2320                               (:x8632 (! unbox-u32 reg result-reg))
     2321                               (:x8664 (! %unbox-u32 reg result-reg)))
    23202322                              (! unbox-u32 reg result-reg)))))
    23212323                   reg)))
     
    25202522                                                value result-reg)))))
    25212523        (when safe
    2522           (with-additional-imm-reg (src unscaled-idx result-reg)
    2523             (let* ((*available-backend-imm-temps* *available-backend-imm-temps*)
    2524                    (value (if (eql (hard-regspec-class result-reg)
    2525                                    hard-reg-class-gpr)
    2526                             (hard-regspec-value result-reg))))
    2527               (when (and value (logbitp value *available-backend-imm-temps*))
    2528                 (setq *available-backend-imm-temps* (bitclr value *available-backend-imm-temps*)))
    2529               (if (typep safe 'fixnum)
    2530                 (! trap-unless-typecode= src safe))
    2531               (unless index-known-fixnum
    2532                 (! trap-unless-fixnum unscaled-idx))
     2524          (let* ((*available-backend-imm-temps* *available-backend-imm-temps*)
     2525                 (value (if (eql (hard-regspec-class result-reg)
     2526                                 hard-reg-class-gpr)
     2527                          (hard-regspec-value result-reg)))
     2528                 (result-is-imm nil))
     2529            (when (and value (logbitp value *available-backend-imm-temps*))
     2530              (setq *available-backend-imm-temps* (bitclr value *available-backend-imm-temps*))
     2531              (setq result-is-imm t))
     2532            (if (typep safe 'fixnum)
     2533              (if result-is-imm
     2534                (with-additional-imm-reg (src safe)
     2535                  (! trap-unless-typecode= src safe))
     2536                (! trap-unless-typecode= src safe)))
     2537            (unless index-known-fixnum
     2538              (! trap-unless-fixnum unscaled-idx))
     2539            (if result-is-imm
     2540              (with-additional-imm-reg (unscaled-idx src)
     2541                (! check-misc-bound unscaled-idx src))
    25332542              (! check-misc-bound unscaled-idx src))))
    25342543        (x862-vset1 seg vreg xfer type-keyword src unscaled-idx index-known-fixnum result-reg (x862-unboxed-reg-for-aset seg type-keyword result-reg safe constval) constval needs-memoization)))))
Note: See TracChangeset for help on using the changeset viewer.