From: Nikodemus S. <de...@us...> - 2010-04-02 15:35:05
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv5560/src/code Modified Files: profile.lisp Log Message: 1.0.37.23: saner SB-PROFILE::COUNTER-COUNT handling * Each overflow accounts for (1+ +MOST-POSITIVE-WORD+) instead of +MOST-POSITIVE-WORD+, just like in 0x01 + [0x00,0xff] = [0x01,0x00] ...one less ATOMIC-INCF needed for the overflow case. Index: profile.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/profile.lisp,v retrieving revision 1.41 retrieving revision 1.42 diff -u -d -r1.41 -r1.42 --- profile.lisp 1 Apr 2010 17:36:03 -0000 1.41 +++ profile.lisp 2 Apr 2010 15:34:56 -0000 1.42 @@ -37,11 +37,10 @@ ;; overflow. (let ((prev (atomic-incf (counter-word counter) d))) (when (< (logand +most-positive-word+ (+ prev d)) prev) - (%incf-overflow) - (atomic-incf (counter-word counter)))))) + (%incf-overflow))))) ;; DELTA can potentially be a bignum -- cut it down to word-size. (unless (typep delta 'sb-vm:word) - (multiple-value-bind (n r) (truncate delta +most-positive-word+) + (multiple-value-bind (n r) (truncate delta (1+ +most-positive-word+)) (%incf-overflow n) (setf delta r))) ;; ATOMIC-INCF can at most handle SIGNED-WORD: if DELTA doesn't fit that, @@ -58,8 +57,7 @@ (defun counter-count (counter) (+ (counter-word counter) - (* (counter-overflow counter) - +most-positive-word+))) + (* (counter-overflow counter) (1+ +most-positive-word+)))) ;;;; High resolution timer |