X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-fndb.lisp;h=a2c9d35994dba4352b9bd755665d6b1d954379b5;hb=78fa16bf55be44cc16845be84d98023e83fb14bc;hp=d554a28838774181f95eaadbb639c1b78877e85d;hpb=cf4cb9554515c59eddbde38d1cf236339c37f55f;p=sbcl.git diff --git a/src/compiler/generic/vm-fndb.lisp b/src/compiler/generic/vm-fndb.lisp index d554a28..a2c9d35 100644 --- a/src/compiler/generic/vm-fndb.lisp +++ b/src/compiler/generic/vm-fndb.lisp @@ -22,6 +22,8 @@ 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 @@ -51,7 +53,15 @@ 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)) @@ -114,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 @@ -258,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