1.0.5.6: compare-and-swap / instance-set-conditional refactoring
[sbcl.git] / src / code / array.lisp
index 45c15a5..d569ad4 100644 (file)
         (values vector index))
       (values array index)))
 
+(defun %simple-vector-compare-and-swap (vector index old new)
+  #!+(or x86 x86-64)
+  (%simple-vector-compare-and-swap vector index old new)
+  #!-(or x86 x86-64)
+  (let ((n-old (svref vector index)))
+    (when (eq old n-old)
+      (setf (svref vector index) new))
+    n-old))
+
 ;;; It'd waste space to expand copies of error handling in every
 ;;; inline %WITH-ARRAY-DATA, so we have them call this function
 ;;; instead. This is just a wrapper which is known never to return.