From: Alastair B. <lis...@us...> - 2010-10-07 16:37:05
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv19753/src/compiler/x86 Modified Files: array.lisp Log Message: 1.0.43.32: x86: Implement %ARRAY-ATOMIC-INCF/WORD. * Implement new VOP ARRAY-ATOMIC-INCF/WORD * Add x86 to the appropriate reader conditionals to enable use of the new VOP. Index: array.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/array.lisp,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- array.lisp 8 May 2009 03:00:26 -0000 1.38 +++ array.lisp 7 Oct 2010 16:36:54 -0000 1.39 @@ -696,3 +696,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 :dword :base array + :scale 1 :index index + :disp (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag)) + diff :lock) + (move result diff))) |