X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-type.lisp;h=5764891318995c04c062b8f252a05d502baf72de;hb=622b19d2c2e3c387ce70536678a5db17a01ab4cc;hp=ccacc48eaa0aab0f2306b42673df42cd1297f023;hpb=47c73b316a434da5bab4e39b746bbe9a0f17aa8c;p=sbcl.git diff --git a/src/compiler/generic/vm-type.lisp b/src/compiler/generic/vm-type.lisp index ccacc48..5764891 100644 --- a/src/compiler/generic/vm-type.lisp +++ b/src/compiler/generic/vm-type.lisp @@ -78,7 +78,7 @@ ;;; FIXME: see also DEFCONSTANT MAXIMUM-BIGNUM-LENGTH in ;;; src/code/bignum.lisp. -- CSR, 2004-07-19 (sb!xc:deftype bignum-index () - '(integer 0 #.(1- (ash 1 (- 32 sb!vm:n-widetag-bits))))) + '(integer 0 #.(1- (ash 1 (- sb!vm:n-word-bits sb!vm:n-widetag-bits))))) ;;;; hooks into the type system @@ -182,6 +182,7 @@ ;;; If TYPE has a CHECK-xxx template, but doesn't have a corresponding ;;; PRIMITIVE-TYPE, then return the template's name. Otherwise, return NIL. +;;; The second value is T if the template needs TYPE to be passed. (defun hairy-type-check-template-name (type) (declare (type ctype type)) (typecase type @@ -208,6 +209,11 @@ #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or)) ((type= type (specifier-type '(unsigned-byte 64))) 'sb!c:check-unsigned-byte-64) + #!+(or x86 x86-64) ; Not implemented yet on other platforms + ((and (eql (numeric-type-class type) 'integer) + (eql (numeric-type-low type) 0) + (fixnump (numeric-type-high type))) + (values 'sb!c:check-mod-fixnum t)) (t nil))) (fun-type 'sb!c:check-fun)