X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fpred.lisp;h=93299ddc7e93d5df7ea3d29a2973b696cd73283e;hb=baa0eaf21221dc564088c37b228c620c298aeaa1;hp=a3d18bd692c7a0052f0f6e97d0cb9e684e513f3e;hpb=3ceaa081c90a970f6779e02bed659835a202772c;p=sbcl.git diff --git a/src/code/pred.lisp b/src/code/pred.lisp index a3d18bd..93299dd 100644 --- a/src/code/pred.lisp +++ b/src/code/pred.lisp @@ -93,8 +93,14 @@ (def-type-predicate-wrapper system-area-pointer-p) (def-type-predicate-wrapper weak-pointer-p) (def-type-predicate-wrapper vectorp) + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) (def-type-predicate-wrapper unsigned-byte-32-p) + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) (def-type-predicate-wrapper signed-byte-32-p) + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + (def-type-predicate-wrapper unsigned-byte-64-p) + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + (def-type-predicate-wrapper signed-byte-64-p) (def-type-predicate-wrapper simple-array-nil-p) (def-type-predicate-wrapper simple-array-unsigned-byte-2-p) (def-type-predicate-wrapper simple-array-unsigned-byte-4-p) @@ -216,6 +222,9 @@ whose elements are EQUAL. Strings and bit-vectors are EQUAL if they are the same length and have identical components. Other arrays must be EQ to be EQUAL." + ;; Non-tail self-recursion implemented with a local auxiliary function + ;; is a lot faster than doing it the straightforward way (at least + ;; on x86oids) due to calling convention differences. -- JES, 2005-12-30 (labels ((equal-aux (x y) (cond ((%eql x y) t) @@ -231,6 +240,8 @@ (and (bit-vector-p y) (bit-vector-= x y))) (t nil)))) + ;; Use MAYBE-INLINE to get the inline expansion only once (instead + ;; of 200 times with INLINE). -- JES, 2005-12-30 (declare (maybe-inline equal-aux)) (equal-aux x y)))