(:temporary (:sc unsigned-reg) tmp)
(:generator 5
(inst mov tmp value)
- (inst shr tmp 61)
+ (inst shr tmp n-positive-fixnum-bits)
(inst jmp (if not-p :nz :z) target)))
;;; A (SIGNED-BYTE 64) can be represented with either fixnum or a bignum with
(check-type (car a) integer))
(assert (eql (car a) 1))))
-
-
-
+;;; The VOP FIXNUMP/UNSIGNED-BYTE-64 was broken on x86-64, failing
+;;; the first ASSERT below. The second ASSERT takes care that the fix
+;;; doesn't overshoot the mark.
+(with-test (:name (:typep :fixnum-if-unsigned-byte))
+ (let ((f (compile nil
+ (lambda (x)
+ (declare (type (unsigned-byte #.sb-vm:n-word-bits) x))
+ (typep x (quote fixnum))))))
+ (assert (not (funcall f (1+ most-positive-fixnum))))
+ (assert (funcall f most-positive-fixnum))))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.0.6"
+"1.0.0.7"