;; bits at the low end.
(logand (1- vector-length) (- line-size)))
-;;; The smallest power of two that is equal to or greater then X.
-(declaim (inline power-of-two-ceiling))
-(defun power-of-two-ceiling (x)
- (ash 1 (integer-length (1- x))))
-
(defun cache-statistics (cache)
(let* ((vector (cache-vector cache))
(size (length vector))
;; _Experimentally_ 50% seems to perform the
;; best, but it would be nice to have a proper
;; analysis...
- (flet ((random-fixnum ()
- (random (1+ most-positive-fixnum))))
- (let ((drops (random-fixnum)))
- (declare (fixnum drops))
- (lambda (layouts value)
- (when (logbitp 0 drops)
- (try-update-cache copy layouts value))
- (when (zerop (ash drops -1))
- (setf drops (random-fixnum))))))
+ (randomly-punting-lambda (layouts value)
+ (try-update-cache copy layouts value))
(lambda (layouts value)
(unless (try-update-cache copy layouts value)
;; Didn't fit -- expand the cache, or drop