1.0.28.26: Mr. ATOMIC-INCF/SYMBOL, meet Mr. AX
authorNikodemus Siivola <nikodemus@random-state.net>
Thu, 7 May 2009 17:44:09 +0000 (17:44 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Thu, 7 May 2009 17:44:09 +0000 (17:44 +0000)
  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.

src/code/sysmacs.lisp
src/compiler/x86-64/cell.lisp
src/compiler/x86/cell.lisp
tests/threads.impure.lisp
version.lisp-expr

index 986e7a8..f9970c6 100644 (file)
 
 (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*)
index e82cdd4..3f2b590 100644 (file)
   (: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)
index 1fa2dcb..2857d95 100644 (file)
   (: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)
index 11b39cf..3eb0fe0 100644 (file)
 
 (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)
                                       (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))))
 
index 19d086a..acb89fa 100644 (file)
@@ -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"