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