master: Change sset-hash1 to MIX
snuglas via Sbcl-commits <[email protected]> Sun, 05 Jul 2026 14:25:24 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via b3185f38061a03c7350eb605f63e647cc0d0aba3 (commit)
from a89ff67e7782826374d94c374a80b5510534ecca (commit)
- Log -----------------------------------------------------------------
commit b3185f38061a03c7350eb605f63e647cc0d0aba3
Author: Douglas Katzman <[email protected]>
Date: Sun Jul 5 14:07:07 2026 +0000
Change sset-hash1 to MIX
When sset-hash1 was first implemented (rev 2df8b5a0) the MIX function was
in a target-only file. Google Antigravity said that the total latency of
the add-and-shift sequence is worse on most CPUs because it's a longer
serially-dependent instruction chain, despite looking cheaper than MUL.
---
src/compiler/sset.lisp | 22 +---------------------
1 file changed, 1 insertion(+), 21 deletions(-)
diff --git a/src/compiler/sset.lisp b/src/compiler/sset.lisp
index 92a35bc24..3e32951b0 100644
--- a/src/compiler/sset.lisp
+++ b/src/compiler/sset.lisp
@@ -55,27 +55,7 @@
;;; Primary hash.
(declaim (inline sset-hash1))
-(defun sset-hash1 (element)
- #+sb-xc-host
- (let ((result (sset-element-number element)))
- ;; This is performance critical, and it's not certain that the host
- ;; compiler does modular arithmetic optimization. Instad use
- ;; something that most CL implementations will do efficiently.
- (the fixnum (logxor (the fixnum result)
- (the fixnum (ash result -9))
- (the fixnum (ash result -5)))))
- #-sb-xc-host
- (let ((result (sset-element-number element)))
- (declare (type sb-vm:word result))
- ;; We only use the low-order bits.
- (macrolet ((set-result (form)
- `(setf result (ldb (byte #.sb-vm:n-word-bits 0) ,form))))
- (set-result (+ result (ash result -19)))
- (set-result (logxor result (ash result -13)))
- (set-result (+ result (ash result -9)))
- (set-result (logxor result (ash result -5)))
- (set-result (+ result (ash result -2)))
- (logand most-positive-fixnum result))))
+(defun sset-hash1 (element) (mix (sset-element-number element) 0))
;;; Secondary hash (for double hash probing). Needs to return an odd
;;; number.
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL