Fix make-array transforms.
[sbcl.git] / src / compiler / x86 / memory.lisp
index 6f5ef02..4a9a14a 100644 (file)
@@ -78,8 +78,7 @@
   (:policy :fast-safe)
   (:generator 4
     (move result value)
-    (inst xadd (make-ea :dword :base object
-                        :disp (- (* offset n-word-bytes) lowtag))
+    (inst xadd (make-ea-for-object-slot object offset lowtag)
           value)))
 
 ;;; SLOT-REF and SLOT-SET are used to define VOPs like CLOSURE-REF,
   (:variant-vars base lowtag)
   (:info offset)
   (:generator 4
-     (if (sc-is value immediate)
-         (let ((val (tn-value value)))
-           (etypecase val
-             (integer
-              (inst mov
-                    (make-ea :dword :base object
-                             :disp (- (* (+ base offset) n-word-bytes) lowtag))
-                    (fixnumize val)))
-             (symbol
-              (inst mov
-                    (make-ea :dword :base object
-                             :disp (- (* (+ base offset) n-word-bytes) lowtag))
-                    (+ nil-value (static-symbol-offset val))))
-             (character
-              (inst mov
-                    (make-ea :dword :base object
-                             :disp (- (* (+ base offset) n-word-bytes) lowtag))
-                    (logior (ash (char-code val) n-widetag-bits)
-                            character-widetag)))))
-         ;; Else, value not immediate.
-         (storew value object (+ base offset) lowtag))))
+     (storew (encode-value-if-immediate value) object (+ base offset) lowtag)))
 
 (define-vop (slot-set-conditional)
   (:args (object :scs (descriptor-reg) :to :eval)
   (:generator 4
     (move eax old-value)
     (move temp new-value)
-    (inst cmpxchg (make-ea :dword :base object
-                           :disp (- (* (+ base offset) n-word-bytes) lowtag))
+    (inst cmpxchg (make-ea-for-object-slot object (+ base offset) lowtag)
           temp)
     (move result eax)))
 
   (:info offset)
   (:generator 4
     (move result value)
-    (inst xadd (make-ea :dword :base object
-                        :disp (- (* (+ base offset) n-word-bytes) lowtag))
+    (inst xadd (make-ea-for-object-slot object (+ base offset) lowtag)
           value)))