X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fbignum.lisp;h=86656c70e36b09750ba2b92e7d41d89a670eb082;hb=428b60fff4247e34ff601810f33976908f22bbc0;hp=d05a6fadf6414d9069f6a330e584d5f98b61de8d;hpb=4281f3b99891120fea5cabbc3a9d091b19f45995;p=sbcl.git diff --git a/src/code/bignum.lisp b/src/code/bignum.lisp index d05a6fa..86656c7 100644 --- a/src/code/bignum.lisp +++ b/src/code/bignum.lisp @@ -1184,8 +1184,8 @@ (declare (optimize #-sb-xc-host (sb!ext:inhibit-warnings 3))) (let ((res (dpb exp sb!vm:single-float-exponent-byte - (logandc2 (sb!ext:truly-the (unsigned-byte #.(1- sb!vm:n-word-bits)) - (%bignum-ref bits 1)) + (logandc2 (logand #xffffffff + (%bignum-ref bits 1)) sb!vm:single-float-hidden-bit)))) (make-single-float (if plusp @@ -1196,14 +1196,15 @@ (declare (optimize #-sb-xc-host (sb!ext:inhibit-warnings 3))) (let ((hi (dpb exp sb!vm:double-float-exponent-byte - (logandc2 (sb!ext:truly-the (unsigned-byte #.(1- sb!vm:n-word-bits)) - (%bignum-ref bits 2)) - sb!vm:double-float-hidden-bit)))) - (make-double-float - (if plusp - hi - (logior hi (ash -1 sb!vm:float-sign-shift))) - (%bignum-ref bits 1)))) + (logandc2 (ecase sb!vm::n-word-bits + (32 (%bignum-ref bits 2)) + (64 (ash (%bignum-ref bits 1) -32))) + sb!vm:double-float-hidden-bit))) + (lo (logand #xffffffff (%bignum-ref bits 1)))) + (make-double-float (if plusp + hi + (logior hi (ash -1 sb!vm:float-sign-shift))) + lo))) #!+(and long-float x86) (defun long-float-from-bits (bits exp plusp) (declare (fixnum exp))