Changeset 6266


Ignore:
Timestamp:
Apr 16, 2007, 12:48:30 AM (15 years ago)
Author:
gb
Message:

in aset2/aset3: don't clobber val-reg if it's an imm-reg; we need another
imm-reg to do some index calculations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/compiler/X86/x862.lisp

    r6258 r6266  
    16611661                                              j ($ x8664::arg_y)
    16621662                                              new val-reg))))
    1663         (when safe     
    1664           (when (typep safe 'fixnum)
    1665             (! trap-unless-simple-array-2
    1666                src
    1667                (dpb safe target::arrayH.flags-cell-subtag-byte
    1668                     (ash 1 $arh_simple_bit))
    1669                (nx-error-for-simple-2d-array-type type-keyword)))
    1670           (unless i-known-fixnum
    1671             (! trap-unless-fixnum unscaled-i))
    1672           (unless j-known-fixnum
    1673             (! trap-unless-fixnum unscaled-j)))
    1674         (with-imm-target () dim1
    1675           (let* ((idx-reg ($ x8664::arg_y)))
    1676             (if constidx
    1677               (if needs-memoization
    1678                 (x862-lri seg x8664::arg_y (ash constidx *x862-target-fixnum-shift*)))
    1679               (progn
    1680                 (if safe                 
    1681                   (! check-2d-bound dim1 unscaled-i unscaled-j src)
    1682                   (! 2d-dim1 dim1 src))
    1683                 (! 2d-unscaled-index idx-reg dim1 unscaled-i unscaled-j)))
    1684             (let* ((v ($ x8664::arg_x)))
    1685               (! array-data-vector-ref v src)
    1686               (x862-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (x862-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization))))))))
     1663        (let* ((*available-backend-imm-temps* *available-backend-imm-temps*))
     1664          (when (and (= (hard-regspec-class val-reg) hard-reg-class-gpr)
     1665                     (logbitp (hard-regspec-value val-reg)
     1666                              *backend-imm-temps*))
     1667            (use-imm-temp val-reg))     
     1668          (when safe     
     1669            (when (typep safe 'fixnum)
     1670              (! trap-unless-simple-array-2
     1671                 src
     1672                 (dpb safe target::arrayH.flags-cell-subtag-byte
     1673                      (ash 1 $arh_simple_bit))
     1674                 (nx-error-for-simple-2d-array-type type-keyword)))
     1675            (unless i-known-fixnum
     1676              (! trap-unless-fixnum unscaled-i))
     1677            (unless j-known-fixnum
     1678              (! trap-unless-fixnum unscaled-j)))
     1679          (with-imm-target () dim1
     1680            (let* ((idx-reg ($ x8664::arg_y)))
     1681              (if constidx
     1682                (if needs-memoization
     1683                  (x862-lri seg x8664::arg_y (ash constidx *x862-target-fixnum-shift*)))
     1684                (progn
     1685                  (if safe                 
     1686                    (! check-2d-bound dim1 unscaled-i unscaled-j src)
     1687                    (! 2d-dim1 dim1 src))
     1688                  (! 2d-unscaled-index idx-reg dim1 unscaled-i unscaled-j)))
     1689              (let* ((v ($ x8664::arg_x)))
     1690                (! array-data-vector-ref v src)
     1691                (x862-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (x862-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization)))))))))
    16871692
    16881693
     
    17251730             (x862-one-untargeted-reg-form seg array ($ x8664::arg_z)))
    17261731            (x862-four-targeted-reg-forms seg
    1727                                             i ($ x8664::temp0)
    1728                                             j ($ x8664::arg_x)
    1729                                             k ($ x8664::arg_y)
    1730                                             new val-reg)
     1732                                          i ($ x8664::temp0)
     1733                                          j ($ x8664::arg_x)
     1734                                          k ($ x8664::arg_y)
     1735                                          new val-reg)
    17311736            (x862-pop-register seg src)))
    1732         (when safe     
    1733           (when (typep safe 'fixnum)
    1734             (! trap-unless-simple-array-3
    1735                src
    1736                (dpb safe target::arrayH.flags-cell-subtag-byte
    1737                     (ash 1 $arh_simple_bit))
    1738                (nx-error-for-simple-3d-array-type type-keyword)))
    1739           (unless i-known-fixnum
    1740             (! trap-unless-fixnum unscaled-i))
    1741           (unless j-known-fixnum
    1742             (! trap-unless-fixnum unscaled-j))
    1743           (unless k-known-fixnum
    1744             (! trap-unless-fixnum unscaled-k)))
    1745         (with-imm-target () dim1
    1746           (with-imm-target (dim1) dim2
    1747             (let* ((idx-reg ($ x8664::arg_y)))
    1748               (if constidx
    1749                 (when needs-memoization
    1750                   (x862-lri seg idx-reg (ash constidx *x862-target-fixnum-shift*)))
    1751                 (progn
    1752                   (if safe                 
    1753                     (! check-3d-bound dim1 dim2 unscaled-i unscaled-j unscaled-k src)
    1754                     (! 3d-dims dim1 dim2 src))
    1755                   (! 3d-unscaled-index idx-reg dim1 dim2 unscaled-i unscaled-j unscaled-k)))
    1756               (let* ((v ($ x8664::arg_x)))
    1757                 (! array-data-vector-ref v src)
    1758                 (x862-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (x862-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization)))))))))
     1737        (let* ((*available-backend-imm-temps* *available-backend-imm-temps*))
     1738          (when (and (= (hard-regspec-class val-reg) hard-reg-class-gpr)
     1739                     (logbitp (hard-regspec-value val-reg)
     1740                              *backend-imm-temps*))
     1741            (use-imm-temp val-reg))
     1742       
     1743          (when safe     
     1744            (when (typep safe 'fixnum)
     1745              (! trap-unless-simple-array-3
     1746                 src
     1747                 (dpb safe target::arrayH.flags-cell-subtag-byte
     1748                      (ash 1 $arh_simple_bit))
     1749                 (nx-error-for-simple-3d-array-type type-keyword)))
     1750            (unless i-known-fixnum
     1751              (! trap-unless-fixnum unscaled-i))
     1752            (unless j-known-fixnum
     1753              (! trap-unless-fixnum unscaled-j))
     1754            (unless k-known-fixnum
     1755              (! trap-unless-fixnum unscaled-k)))
     1756          (with-imm-target () dim1
     1757            (with-imm-target (dim1) dim2
     1758              (let* ((idx-reg ($ x8664::arg_y)))
     1759                (if constidx
     1760                  (when needs-memoization
     1761                    (x862-lri seg idx-reg (ash constidx *x862-target-fixnum-shift*)))
     1762                  (progn
     1763                    (if safe                 
     1764                      (! check-3d-bound dim1 dim2 unscaled-i unscaled-j unscaled-k src)
     1765                      (! 3d-dims dim1 dim2 src))
     1766                    (! 3d-unscaled-index idx-reg dim1 dim2 unscaled-i unscaled-j unscaled-k)))
     1767                (let* ((v ($ x8664::arg_x)))
     1768                  (! array-data-vector-ref v src)
     1769                  (x862-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (x862-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization))))))))))
    17591770
    17601771
Note: See TracChangeset for help on using the changeset viewer.