From: Alastair B. <lis...@us...> - 2010-10-07 16:36:48
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86-64 In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv19490/src/compiler/x86-64 Modified Files: array.lisp Log Message: 1.0.43.31: x86-64: Implement %ARRAY-ATOMIC-INCF/WORD. * Implement new VOP ARRAY-ATOMIC-INCF/WORD * Add x86-64 to the appropriate reader conditionals to enable use of the new VOP. Index: array.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86-64/array.lisp,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- array.lisp 30 Oct 2009 18:42:02 -0000 1.22 +++ array.lisp 7 Oct 2010 16:36:37 -0000 1.23 @@ -730,3 +730,22 @@ (define-vop (get-vector-subtype get-header-data)) (define-vop (set-vector-subtype set-header-data)) + +;;;; ATOMIC-INCF for arrays + +(define-vop (array-atomic-incf/word) + (:translate %array-atomic-incf/word) + (:policy :fast-safe) + (:args (array :scs (descriptor-reg)) + (index :scs (any-reg)) + (diff :scs (unsigned-reg) :target result)) + (:arg-types * positive-fixnum unsigned-num) + (:results (result :scs (unsigned-reg))) + (:result-types unsigned-num) + (:generator 4 + (inst xadd (make-ea :qword :base array + :scale 1 :index index + :disp (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag)) + diff :lock) + (move result diff))) |