Optimize the compiler a bit.
authorStas Boukarev <stassats@gmail.com>
Thu, 3 Oct 2013 00:13:03 +0000 (04:13 +0400)
committerStas Boukarev <stassats@gmail.com>
Thu, 3 Oct 2013 00:13:03 +0000 (04:13 +0400)
Optimize make-values-type-cached by adding a declaration or two.
Building SBCL sans contribs goes from 1:52 to 1:39.

contrib/sb-bsd-sockets/name-service.lisp
src/code/early-extensions.lisp
src/code/early-type.lisp
src/code/typedefs.lisp

index 51c1c82..bf7c37d 100644 (file)
@@ -97,7 +97,7 @@ weird stuff - see gethostbyname(3) or getaddrinfo(3) for the details."
 
 #+sb-bsd-sockets-addrinfo
 (declaim (inline get-address-info))
-#+sb-bsd-sockets-addrinfo 
+#+sb-bsd-sockets-addrinfo
 (defun get-address-info (node)
   (declare (optimize speed))
   (sb-alien:with-alien ((info (* sockint::addrinfo)))
index 577d3c3..dd7742e 100644 (file)
 ;;; our equality tests, because MEMBER and friends refer to EQLity.
 ;;; So:
 (defun equal-but-no-car-recursion (x y)
-  (cond
-    ((eql x y) t)
-    ((consp x)
-     (and (consp y)
-          (eql (car x) (car y))
-          (equal-but-no-car-recursion (cdr x) (cdr y))))
-    (t nil)))
+  (do () (())
+    (cond ((eql x y) (return t))
+          ((and (consp x)
+                (consp y)
+                (eql (pop x) (pop y))))
+          (t
+           (return)))))
 \f
 ;;;; package idioms
 
index 20f1642..c5cacb3 100644 (file)
                                          (if rest
                                              (type-hash-value rest)
                                              42)
-                                         (sxhash allowp))
+                                         (if allowp
+                                             #.(logand #xFF (sxhash t))
+                                             #.(logand #xFF (sxhash nil))))
                                         #xFF)))
     ((required equal-but-no-car-recursion)
      (optional equal-but-no-car-recursion)
index e8480f1..e652fc4 100644 (file)
 #!-sb-fluid (declaim (inline type-list-cache-hash))
 (declaim (ftype (function (list) (unsigned-byte 8)) type-list-cache-hash))
 (defun type-list-cache-hash (types)
-  (logand (loop with res = 0
-             for type in types
-             for hash = (type-hash-value type)
-             do (setq res (logxor res hash))
-             finally (return res))
-          #xFF))
+  (logand #xFF
+          (loop with res fixnum = 0
+                for type in types
+                for hash = (type-hash-value type)
+                do (setq res (logxor res hash))
+                finally (return res))))
 \f
 ;;;; cold loading initializations