as specified by AMOP.
   * optimization: faster LOGCOUNT implementation on x86 and x86-64
     (thanks to Lutz Euler)
+  * optimization: hashing of general arrays and vectors has been
+    improved. (reported by Any Fingerhut)
   * fixed bug #337: use of MAKE-METHOD in method combination now works
     even in the presence of user-defined method classes.  (reported by
     Bruno Haible and Pascal Costanza)
 
 (declaim (ftype (sfunction (t) (integer 0 #.sb!xc:most-positive-fixnum))
                 sxhash-instance))
 
+(defmacro hash-array-using (recurse array depthoid)
+  ;; Any other array can be hashed by working with its underlying
+  ;; one-dimensional physical representation. Used by both SXHASH and
+  ;; PSXHASH.
+  (once-only ((array array) (depthoid depthoid))
+    `(let ((result 60828123))
+       (declare (type fixnum result))
+       (dotimes (i (min ,depthoid (array-rank ,array)))
+         (mixf result (array-dimension ,array i)))
+       (dotimes (i (min ,depthoid (array-total-size ,array)))
+         (mixf result
+               (,recurse (row-major-aref ,array i) (- ,depthoid 1 i))))
+       result)))
+
 (defun sxhash (x)
   ;; profiling SXHASH is hard, but we might as well try to make it go
   ;; fast, in case it is the bottleneck somwhere.  -- CSR, 2003-03-14
                    ;; work needs to be done using the %RAW-BITS
                    ;; approach.  This will probably do for now.
                    (sxhash-recurse (copy-seq x) depthoid))
-                  (t (logxor 191020317 (sxhash (array-rank x))))))
+                  (t
+                   (hash-array-using sxhash-recurse x depthoid))))
                (character
                 (logxor 72185131
                         (sxhash (char-code x)))) ; through DEFTRANSFORM
           ;;(format t "~&SIMPLE-VECTOR special case~%")
           (frob))
          (t (frob)))))
-    ;; Any other array can be hashed by working with its underlying
-    ;; one-dimensional physical representation.
     (t
-     (let ((result 60828))
-       (declare (type fixnum result))
-       (dotimes (i (min depthoid (array-rank key)))
-         (mixf result (array-dimension key i)))
-       (dotimes (i (min depthoid (array-total-size key)))
-         (mixf result
-               (psxhash (row-major-aref key i)
-                        (- depthoid 1 i))))
-       result))))
+     (hash-array-using psxhash key depthoid))))
 
 (defun structure-object-psxhash (key depthoid)
   (declare (optimize speed))