1.0.0.7:
authorJuho Snellman <jsnell@iki.fi>
Fri, 1 Dec 2006 16:32:13 +0000 (16:32 +0000)
committerJuho Snellman <jsnell@iki.fi>
Fri, 1 Dec 2006 16:32:13 +0000 (16:32 +0000)
Fix an off-by-one in the x86-64 FIXNUMP/UNSIGNED-BYTE-64 VOP (patch
        from Lutz Euler).

src/compiler/x86-64/type-vops.lisp
tests/type.pure.lisp
version.lisp-expr

index f3b540f..c052211 100644 (file)
   (: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
index 46a4bd6..07ad60d 100644 (file)
@@ -377,6 +377,13 @@ ACTUAL ~D DERIVED ~D~%"
       (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))))
index 9892437..740ee63 100644 (file)
@@ -17,4 +17,4 @@
 ;;; 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"