1.0.4.92: faster generic array access
[sbcl.git] / src / compiler / generic / late-type-vops.lisp
index 14bcd83..2774689 100644 (file)
   (instance-pointer-lowtag)
   :mask lowtag-mask)
 
+(!define-type-vops %other-pointer-p nil nil nil
+  (other-pointer-lowtag)
+  :mask lowtag-mask)
+
 (!define-type-vops bignump check-bignum bignum object-not-bignum-error
   (bignum-widetag))
 
@@ -37,7 +41,7 @@
 
 (!define-type-vops complexp check-complex complex object-not-complex-error
   (complex-widetag complex-single-float-widetag complex-double-float-widetag
-                  #!+long-float complex-long-float-widetag))
+                   #!+long-float complex-long-float-widetag))
 
 (!define-type-vops complex-rational-p check-complex-rational nil
     object-not-complex-rational-error
@@ -46,7 +50,7 @@
 (!define-type-vops complex-float-p check-complex-float nil
     object-not-complex-float-error
   (complex-single-float-widetag complex-double-float-widetag
-                               #!+long-float complex-long-float-widetag))
+                                #!+long-float complex-long-float-widetag))
 
 (!define-type-vops complex-single-float-p check-complex-single-float complex-single-float
     object-not-complex-single-float-error
 
 (!define-type-vops simple-string-p check-simple-string nil
     object-not-simple-string-error
-  (simple-base-string-widetag simple-array-nil-widetag))
+  (#!+sb-unicode simple-character-string-widetag
+   simple-base-string-widetag simple-array-nil-widetag))
 
 (macrolet
     ((define-simple-array-type-vops ()
-        `(progn
-          ,@(map 'list
-                 (lambda (saetp)
-                   (let ((primtype (saetp-primitive-type-name saetp)))
-                   `(!define-type-vops
-                     ,(symbolicate primtype "-P")
-                     ,(symbolicate "CHECK-" primtype)
-                     ,primtype
-                     ,(symbolicate "OBJECT-NOT-" primtype "-ERROR")
-                     (,(saetp-typecode saetp)))))
-                 *specialized-array-element-type-properties*))))
+         `(progn
+           ,@(map 'list
+                  (lambda (saetp)
+                    (let ((primtype (saetp-primitive-type-name saetp)))
+                    `(!define-type-vops
+                      ,(symbolicate primtype "-P")
+                      ,(symbolicate "CHECK-" primtype)
+                      ,primtype
+                      ,(symbolicate "OBJECT-NOT-" primtype "-ERROR")
+                      (,(saetp-typecode saetp)))))
+                  *specialized-array-element-type-properties*))))
   (define-simple-array-type-vops))
 
-(!define-type-vops base-char-p check-base-char base-char
-    object-not-base-char-error
-  (base-char-widetag))
+(!define-type-vops characterp check-character character
+    object-not-character-error
+  (character-widetag))
 
 (!define-type-vops system-area-pointer-p check-system-area-pointer
       system-area-pointer
 (!define-type-vops fdefn-p nil nil nil
   (fdefn-widetag))
 
+#!+(and sb-thread sb-lutex)
+(!define-type-vops lutexp nil nil nil
+  (lutex-widetag))
+
 (!define-type-vops funcallable-instance-p nil nil nil
   (funcallable-instance-header-widetag))
 
 (!define-type-vops array-header-p nil nil nil
-  (simple-array-widetag complex-base-string-widetag complex-bit-vector-widetag
+  (simple-array-widetag
+   #!+sb-unicode complex-character-string-widetag
+   complex-base-string-widetag complex-bit-vector-widetag
    complex-vector-widetag complex-array-widetag complex-vector-nil-widetag))
 
 (!define-type-vops stringp check-string nil object-not-string-error
-  (simple-base-string-widetag complex-base-string-widetag
+  (#!+sb-unicode simple-character-string-widetag
+   #!+sb-unicode complex-character-string-widetag
+   simple-base-string-widetag complex-base-string-widetag
    simple-array-nil-widetag complex-vector-nil-widetag))
 
 (!define-type-vops base-string-p check-base-string nil object-not-base-string-error
     object-not-vector-nil-error
   (simple-array-nil-widetag complex-vector-nil-widetag))
 
+#!+sb-unicode
+(!define-type-vops character-string-p check-character-string nil
+    object-not-character-string-error
+  (simple-character-string-widetag complex-character-string-widetag))
+
 (!define-type-vops vectorp check-vector nil object-not-vector-error
   (complex-vector-widetag .
    #.(append
       (map 'list
-          #'saetp-typecode
-          *specialized-array-element-type-properties*)
+           #'saetp-typecode
+           *specialized-array-element-type-properties*)
       (mapcan (lambda (saetp)
-               (when (saetp-complex-typecode saetp)
-                 (list (saetp-complex-typecode saetp))))
-             (coerce *specialized-array-element-type-properties* 'list)))))
+                (when (saetp-complex-typecode saetp)
+                  (list (saetp-complex-typecode saetp))))
+              (coerce *specialized-array-element-type-properties* 'list)))))
 
 ;;; Note that this "type VOP" is sort of an oddball; it doesn't so
 ;;; much test for a Lisp-level type as just expose a low-level type
     object-not-simple-array-error
   (simple-array-widetag .
    #.(map 'list
-         #'saetp-typecode
-         *specialized-array-element-type-properties*)))
+          #'saetp-typecode
+          *specialized-array-element-type-properties*)))
 
 (!define-type-vops arrayp check-array nil object-not-array-error
   (simple-array-widetag
    complex-vector-widetag .
    #.(append
       (map 'list
-          #'saetp-typecode
-          *specialized-array-element-type-properties*)
+           #'saetp-typecode
+           *specialized-array-element-type-properties*)
       (mapcan (lambda (saetp)
-               (when (saetp-complex-typecode saetp)
-                 (list (saetp-complex-typecode saetp))))
-             (coerce *specialized-array-element-type-properties* 'list)))))
+                (when (saetp-complex-typecode saetp)
+                  (list (saetp-complex-typecode saetp))))
+              (coerce *specialized-array-element-type-properties* 'list)))))
 
 (!define-type-vops numberp check-number nil object-not-number-error
   (even-fixnum-lowtag