From: Daniel B. <da...@us...> - 2003-04-18 01:29:44
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sc8-pr-cvs1:/tmp/cvs-serv22806/src/compiler/x86 Modified Files: cell.lisp Log Message: 0.pre8.69 SMP safety: prefix thread synchronosation insns with LOCK Delete "waitpid pid -1" message on GC Index: cell.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/cell.lisp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- cell.lisp 2 Apr 2003 11:15:19 -0000 1.11 +++ cell.lisp 18 Apr 2003 01:29:41 -0000 1.12 @@ -145,13 +145,24 @@ (:policy :fast) (:translate symbol-value)) -(defknown fast-symbol-global-value-xadd (symbol fixnum) fixnum ()) +(defknown locked-symbol-global-value-add (symbol fixnum) fixnum ()) -(define-vop (fast-symbol-global-value-xadd cell-xadd) - (:variant symbol-value-slot other-pointer-lowtag) +(define-vop (locked-symbol-global-value-add) + (:args (object :scs (descriptor-reg) :to :result) + (value :scs (any-reg) :target result)) + (:arg-types * tagged-num) + (:results (result :scs (any-reg) :from (:argument 1))) (:policy :fast) - (:translate fast-symbol-global-value-xadd) - (:arg-types * tagged-num)) + (:translate locked-symbol-global-value-add) + (:result-types tagged-num) + (:policy :fast-safe) + (:generator 4 + (move result value) + (inst lock) + (inst add (make-ea :dword :base object + :disp (- (* symbol-value-slot n-word-bytes) + other-pointer-lowtag)) + value))) #!+sb-thread (define-vop (boundp) @@ -449,6 +460,7 @@ (:policy :fast-safe) (:generator 5 (move eax old-value) + (inst lock) (inst cmpxchg (make-ea :dword :base object :index slot :scale 1 :disp (- (* instance-slots-offset n-word-bytes) instance-pointer-lowtag)) |