From: Nikodemus Siivola Date: Thu, 7 May 2009 17:44:09 +0000 (+0000) Subject: 1.0.28.26: Mr. ATOMIC-INCF/SYMBOL, meet Mr. AX X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=363e0bda5ea3ff8809ebe599db9e22c3166c9263;p=sbcl.git 1.0.28.26: Mr. ATOMIC-INCF/SYMBOL, meet Mr. AX Given the chop as as dangerous if the symbol-value happens to be anything else but a fixnum. If this are still desired, ATOMIC-INCF can be extended to support symbols proclaimed FIXNUM -- but that too will lose on unbound symbols. Was only used in a single test, replace with a structure and ATOMIC-INCF there. --- diff --git a/src/code/sysmacs.lisp b/src/code/sysmacs.lisp index 986e7a8..f9970c6 100644 --- a/src/code/sysmacs.lisp +++ b/src/code/sysmacs.lisp @@ -11,14 +11,6 @@ (in-package "SB!IMPL") -(defmacro atomic-incf/symbol (symbol-name &optional (delta 1)) - #!-sb-thread - `(incf ,symbol-name ,delta) - #!+sb-thread - `(locally - (declare (optimize (safety 0) (speed 3))) - (sb!vm::locked-symbol-global-value-add ',symbol-name ,delta))) - ;;;; these are initialized in cold init (defvar *in-without-gcing*) diff --git a/src/compiler/x86-64/cell.lisp b/src/compiler/x86-64/cell.lisp index e82cdd4..3f2b590 100644 --- a/src/compiler/x86-64/cell.lisp +++ b/src/compiler/x86-64/cell.lisp @@ -198,24 +198,6 @@ (:policy :fast) (:translate symbol-value)) -(defknown locked-symbol-global-value-add (symbol fixnum) fixnum ()) - -(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 locked-symbol-global-value-add) - (:result-types tagged-num) - (:policy :fast-safe) - (:generator 4 - (move result value) - (inst add (make-ea :qword :base object - :disp (- (* symbol-value-slot n-word-bytes) - other-pointer-lowtag)) - value :lock))) - #!+sb-thread (define-vop (boundp) (:translate boundp) diff --git a/src/compiler/x86/cell.lisp b/src/compiler/x86/cell.lisp index 1fa2dcb..2857d95 100644 --- a/src/compiler/x86/cell.lisp +++ b/src/compiler/x86/cell.lisp @@ -174,23 +174,6 @@ (:policy :fast) (:translate symbol-value)) -(defknown locked-symbol-global-value-add (symbol fixnum) fixnum ()) - -(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 locked-symbol-global-value-add) - (:result-types tagged-num) - (:policy :fast-safe) - (:generator 4 - (move result value) - (inst add (make-ea-for-object-slot object symbol-value-slot - other-pointer-lowtag) - value :lock))) - #!+sb-thread (define-vop (boundp) (:translate boundp) diff --git a/tests/threads.impure.lisp b/tests/threads.impure.lisp index 11b39cf..3eb0fe0 100644 --- a/tests/threads.impure.lisp +++ b/tests/threads.impure.lisp @@ -456,7 +456,8 @@ (format t "~&interrupt test done~%") -(defparameter *interrupt-count* 0) +(defstruct counter (n 0 :type sb-vm:word)) +(defvar *interrupt-counter* (make-counter)) (declaim (notinline check-interrupt-count)) (defun check-interrupt-count (i) @@ -471,16 +472,16 @@ (princ cond) (sb-debug:backtrace most-positive-fixnum)))) - (loop (check-interrupt-count *interrupt-count*))))))) + (loop (check-interrupt-count (counter-n *interrupt-counter*)))))))) (let ((func (lambda () (princ ".") (force-output) - (sb-impl::atomic-incf/symbol *interrupt-count*)))) - (setq *interrupt-count* 0) + (sb-ext:atomic-incf (counter-n *interrupt-counter*))))) + (setf (counter-n *interrupt-counter*) 0) (dotimes (i 100) (sleep (random 0.1d0)) (interrupt-thread c func)) - (loop until (= *interrupt-count* 100) do (sleep 0.1)) + (loop until (= (counter-n *interrupt-counter*) 100) do (sleep 0.1)) (terminate-thread c) (wait-for-threads (list c)))) diff --git a/version.lisp-expr b/version.lisp-expr index 19d086a..acb89fa 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.28.25" +"1.0.28.26"