diff --git a/code/hash-new.lisp b/code/hash-new.lisp
index 3595b9951eb9bfb9edae5f6e93037b6b997bb7c9..b40a5c1541a629dce7375b8cae22078885bc832f 100644
--- a/code/hash-new.lisp
+++ b/code/hash-new.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/hash-new.lisp,v 1.8 2000/01/13 16:55:46 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/hash-new.lisp,v 1.9 2000/01/14 19:47:19 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -141,6 +141,7 @@
   (values (sxhash key) nil))
 
 (defun equalp-hash (key)
+  (declare (values hash (member t nil)))
   (values (internal-equalp-hash key 0) nil))
 
 
@@ -882,6 +883,14 @@
 	 (sxmash hash (,(if equalp 'internal-equalp-hash 'internal-sxhash)
 			(car sequence) ,depth)))))
 
+(defmacro sxhash-bit-vector (vector)
+  `(let* ((length (length ,vector))
+	  (hash length))
+     (declare (type index length) (type hash hash))
+     (dotimes (index (min length sxhash-max-len) hash)
+       (declare (type index index))
+       (sxmash hash (bit ,vector index)))))
+
 ); eval-when (compile eval)
 
 
@@ -933,6 +942,9 @@
     (array
      (typecase s-expr
        (string (sxhash-string s-expr))
+       (simple-bit-vector (sxhash-bit-vector
+			   (truly-the simple-bit-vector s-expr)))
+       (bit-vector (sxhash-bit-vector (truly-the bit-vector s-expr)))
        (t (array-rank s-expr))))
     ;; Everything else.
     (t 42)))
@@ -970,15 +982,13 @@
 (defmacro vector-equalp-hash (vector depth)
   `(if (= ,depth sxhash-max-depth)
        0
-       (let ((hash 4)
-	     (length (length ,vector)))
-	 (declare (type hash hash) (type index length))
-	 (sxmash hash length)
-	 (let ((,depth (+ ,depth 1)))
-	   (dotimes (index (min length sxhash-max-len) hash)
-	     (declare (type index index))
-	     (sxmash hash (internal-equalp-hash (aref ,vector index)
-						,depth)))))))
+       (let* ((length (length ,vector))
+	      (hash length)
+	      (,depth (+ ,depth 1)))
+	 (declare (type index length) (type hash hash))
+	 (dotimes (index (min length sxhash-max-len) hash)
+	   (declare (type index index))
+	   (sxmash hash (internal-equalp-hash (aref ,vector index) ,depth))))))
 
 (defmacro array-equalp-hash (array depth)
   `(if (= ,depth sxhash-max-depth)
diff --git a/code/hash.lisp b/code/hash.lisp
index b4dade692125844a2546337e676d2d25ea43dc77..befee36f90286c7e0f2ae1c7f5ab0d623af71800 100644
--- a/code/hash.lisp
+++ b/code/hash.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/hash.lisp,v 1.32 2000/01/13 16:55:46 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/hash.lisp,v 1.33 2000/01/14 19:47:20 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -206,6 +206,7 @@
   (values (sxhash key) nil))
 
 (defun equalp-hash (key)
+  (declare (values hash (member t nil)))
   (values (internal-equalp-hash key 0) nil))
 
 
@@ -851,6 +852,14 @@
 	 (sxmash hash (,(if equalp 'internal-equalp-hash 'internal-sxhash)
 			(car sequence) ,depth)))))
 
+(defmacro sxhash-bit-vector (vector)
+  `(let* ((length (length ,vector))
+	  (hash length))
+     (declare (type index length) (type hash hash))
+     (dotimes (index (min length sxhash-max-len) hash)
+       (declare (type index index))
+       (sxmash hash (bit ,vector index)))))
+
 ); eval-when (compile eval)
 
 
@@ -902,6 +911,9 @@
     (array
      (typecase s-expr
        (string (sxhash-string s-expr))
+       (simple-bit-vector (sxhash-bit-vector
+			   (truly-the simple-bit-vector s-expr)))
+       (bit-vector (sxhash-bit-vector (truly-the bit-vector s-expr)))
        (t (array-rank s-expr))))
     ;; Everything else.
     (t 42)))
@@ -939,15 +951,13 @@
 (defmacro vector-equalp-hash (vector depth)
   `(if (= ,depth sxhash-max-depth)
        0
-       (let ((hash 4)
-	     (length (length ,vector)))
-	 (declare (type hash hash) (type index length))
-	 (sxmash hash length)
-	 (let ((,depth (+ ,depth 1)))
-	   (dotimes (index (min length sxhash-max-len) hash)
-	     (declare (type index index))
-	     (sxmash hash (internal-equalp-hash (aref ,vector index)
-						,depth)))))))
+       (let* ((length (length ,vector))
+	      (hash length)
+	      (,depth (+ ,depth 1)))
+	 (declare (type index length) (type hash hash))
+	 (dotimes (index (min length sxhash-max-len) hash)
+	   (declare (type index index))
+	   (sxmash hash (internal-equalp-hash (aref ,vector index) ,depth))))))
 
 (defmacro array-equalp-hash (array depth)
   `(if (= ,depth sxhash-max-depth)