From: Christophe R. <cr...@us...> - 2004-05-21 12:17:59
|
Update of /cvsroot/sbcl/sbcl/src/compiler In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3876/src/compiler Modified Files: globaldb.lisp Log Message: 0.8.10.43: Use SYMBOL-HASH to cache SXHASH values for symbols ... believe it or not: delete various reader conditionals, special-case code, etc. ... one new VOP needed per-backend: implement on alpha, hppa, mips and sparc; ... add some boilerplate; ... unimplemented on ppc. This will break the build, so with luck it won't be too long before an enterprising user implements it. Index: globaldb.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/globaldb.lisp,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- globaldb.lisp 1 Apr 2004 02:05:05 -0000 1.34 +++ globaldb.lisp 21 May 2004 12:17:48 -0000 1.35 @@ -32,11 +32,7 @@ (declaim (special *universal-type*)) ;;; This is sorta semantically equivalent to SXHASH, but optimized for -;;; legal function names. Note: semantically equivalent does *not* -;;; mean that it always returns the same value as SXHASH, just that it -;;; satisfies the formal definition of SXHASH. The ``sorta'' is -;;; because SYMBOL-HASH will not necessarily return the same value in -;;; different lisp images. +;;; legal function names. ;;; ;;; Why optimize? We want to avoid the fully-general TYPECASE in ordinary ;;; SXHASH, because @@ -58,17 +54,17 @@ ;;; aren't used too early in cold boot for SXHASH to run). #!-sb-fluid (declaim (inline globaldb-sxhashoid)) (defun globaldb-sxhashoid (x) - (cond #-sb-xc-host ; (SYMBOL-HASH doesn't exist on cross-compilation host.) - ((symbolp x) - (symbol-hash x)) - #-sb-xc-host ; (SYMBOL-HASH doesn't exist on cross-compilation host.) + (cond ((symbolp x) (sxhash x)) ((and (listp x) (eq (first x) 'setf) (let ((rest (rest x))) (and (symbolp (car rest)) (null (cdr rest))))) - (logxor (symbol-hash (second x)) - 110680597)) + ;; We need to declare the type of the value we're feeding to + ;; SXHASH so that the DEFTRANSFORM on symbols kicks in. + (let ((symbol (second x))) + (declare (symbol symbol)) + (logxor (sxhash symbol) 110680597))) (t (sxhash x)))) ;;; Given any non-negative integer, return a prime number >= to it. |