1.0.4.55: Optimized REPLACE and UB*-BASH-COPY routines
[sbcl.git] / src / compiler / x86 / array.lisp
index ed9922f..3926463 100644 (file)
          (:note "inline array store")
          (:translate data-vector-set)
          (:policy :fast-safe)
-         (:args (object :scs (descriptor-reg))
+         (:args (object :scs (descriptor-reg) :to (:argument 2))
                 (index :scs (unsigned-reg) :target ecx)
                 (value :scs (unsigned-reg immediate) :target result))
          (:arg-types ,type positive-fixnum positive-fixnum)
          (:result-types positive-fixnum)
          (:temporary (:sc unsigned-reg) word-index)
          (:temporary (:sc unsigned-reg) old)
-         (:temporary (:sc unsigned-reg :offset ecx-offset) ecx)
+         (:temporary (:sc unsigned-reg :offset ecx-offset :from (:argument 1)) ecx)
          (:generator 25
            (move word-index index)
            (inst shr word-index ,bit-shift)
              (inst ,ref-inst value
                    (make-ea :word :base object
                             :disp (- (+ (* vector-data-offset n-word-bytes)
-                                        (* 2 (+ offset (tn-value index)))
-                                     other-pointer-lowtag)))))
+                                        (* 2 (+ offset (tn-value index))))
+                                     other-pointer-lowtag))))
             (t
              (inst ,ref-inst value
                    (make-ea :word :base object :index index :scale 2
 \f
 ;;; These vops are useful for accessing the bits of a vector
 ;;; irrespective of what type of vector it is.
-(define-full-reffer raw-bits * 0 other-pointer-lowtag (unsigned-reg)
-  unsigned-num %raw-bits)
-(define-full-setter set-raw-bits * 0 other-pointer-lowtag (unsigned-reg)
-  unsigned-num %set-raw-bits)
-(define-full-reffer vector-raw-bits * vector-data-offset other-pointer-lowtag
-  (unsigned-reg) unsigned-num %vector-raw-bits)
-(define-full-setter set-vector-raw-bits * vector-data-offset other-pointer-lowtag
-  (unsigned-reg) unsigned-num %set-vector-raw-bits)
+(define-full-reffer+offset raw-bits-with-offset * 0 other-pointer-lowtag (unsigned-reg)
+  unsigned-num %raw-bits-with-offset)
+(define-full-setter+offset set-raw-bits-with-offset * 0 other-pointer-lowtag (unsigned-reg)
+  unsigned-num %set-raw-bits-with-offset)
+
 \f
 ;;;; miscellaneous array VOPs