X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-fndb.lisp;h=e0a48990ebe2957f74691e23969c83dac6ff2456;hb=77d94d36bcfd3d5eea73ad51e6ee621a8938f995;hp=e2264f1e04ca6dc996a8a86fd9e62b06599c351e;hpb=ace140856e6b3f92bb06597092a59753f1e59142;p=sbcl.git diff --git a/src/compiler/generic/vm-fndb.lisp b/src/compiler/generic/vm-fndb.lisp index e2264f1..e0a4899 100644 --- a/src/compiler/generic/vm-fndb.lisp +++ b/src/compiler/generic/vm-fndb.lisp @@ -22,22 +22,46 @@ complex-vector-p base-char-p %standard-char-p %instancep base-string-p simple-base-string-p + #!+sb-unicode character-string-p + #!+sb-unicode simple-character-string-p array-header-p simple-array-p simple-array-nil-p vector-nil-p simple-array-unsigned-byte-2-p simple-array-unsigned-byte-4-p simple-array-unsigned-byte-7-p simple-array-unsigned-byte-8-p simple-array-unsigned-byte-15-p - simple-array-unsigned-byte-16-p simple-array-unsigned-byte-29-p + simple-array-unsigned-byte-16-p + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) + simple-array-unsigned-byte-29-p simple-array-unsigned-byte-31-p simple-array-unsigned-byte-32-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + simple-array-unsigned-byte-60-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + simple-array-unsigned-byte-63-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + simple-array-unsigned-byte-64-p simple-array-signed-byte-8-p simple-array-signed-byte-16-p - simple-array-signed-byte-30-p simple-array-signed-byte-32-p + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) + simple-array-signed-byte-30-p + simple-array-signed-byte-32-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + simple-array-signed-byte-61-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + simple-array-signed-byte-64-p simple-array-single-float-p simple-array-double-float-p #!+long-float simple-array-long-float-p simple-array-complex-single-float-p simple-array-complex-double-float-p #!+long-float simple-array-complex-long-float-p - system-area-pointer-p realp unsigned-byte-32-p signed-byte-32-p + system-area-pointer-p realp + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) + unsigned-byte-32-p + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) + signed-byte-32-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + unsigned-byte-64-p + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + signed-byte-64-p vector-t-p weak-pointer-p code-component-p lra-p funcallable-instance-p) (t) boolean (movable foldable flushable)) @@ -100,6 +124,16 @@ (sb!xc:deftype raw-vector () '(simple-array sb!vm:word (*))) +;;; %RAW-{REF,SET}-FOO VOPs should be declared as taking a RAW-VECTOR +;;; as their first argument (clarity and to match these DEFKNOWNs). +;;; We declare RAW-VECTOR as a primitive type so the VOP machinery +;;; will accept our VOPs as legitimate. --njf, 2004-08-10 +(sb!vm::!def-primitive-type-alias raw-vector + #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or)) + sb!vm::simple-array-unsigned-byte-32 + #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) + sb!vm::simple-array-unsigned-byte-64) + (defknown %raw-ref-single (raw-vector index) single-float (foldable flushable)) (defknown %raw-ref-double (raw-vector index) double-float @@ -244,7 +278,7 @@ (foldable flushable movable)) (defknown (%ashl %ashr %digit-logical-shift-right) - (bignum-element-type (mod 32)) bignum-element-type + (bignum-element-type (mod #.sb!vm:n-word-bits)) bignum-element-type (foldable flushable movable)) ;;;; bit-bashing routines