X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86-64%2Farray.lisp;h=ad8f2a57e1fc27c1e27aa2c32e754674cff37d48;hb=fe962ba01d267b92f638c8f0d19be41054219f04;hp=be4823dcc1c4aa762f1fde9b4a0480576c85932b;hpb=25a64b8df600187eea7100bdb89375ff531d7e83;p=sbcl.git diff --git a/src/compiler/x86-64/array.lisp b/src/compiler/x86-64/array.lisp index be4823d..ad8f2a5 100644 --- a/src/compiler/x86-64/array.lisp +++ b/src/compiler/x86-64/array.lisp @@ -154,6 +154,11 @@ signed-num signed-reg) (def-full-data-vector-frobs simple-array-unsigned-byte-63 unsigned-num unsigned-reg)) + +(define-full-compare-and-swap simple-vector-compare-and-swap + simple-vector vector-data-offset other-pointer-lowtag + (descriptor-reg any-reg) * + %simple-vector-compare-and-swap) ;;;; integer vectors whose elements are smaller than a byte, i.e., ;;;; bit, 2-bit, and 4-bit vectors @@ -247,11 +252,11 @@ (unsigned-reg (inst or old value))) (inst rol old :cl) - (mov (make-ea :qword :base object :index word-index - :scale n-word-bytes - :disp (- (* vector-data-offset n-word-bytes) - other-pointer-lowtag)) - old) + (inst mov (make-ea :qword :base object :index word-index + :scale n-word-bytes + :disp (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag)) + old) (sc-case value (immediate (inst mov result (tn-value value)))