From: Christophe Rhodes Date: Fri, 14 Jun 2002 21:50:14 +0000 (+0000) Subject: 0.7.4.33: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=13719956d7f8944ed88a29998e7f76400f873206;p=sbcl.git 0.7.4.33: The missing piece in the OpenMCL build... ... move some clauses around in cross-compilation float logic. NB: I am _not_ sure that this is correct in any sense other than the empirical "it works". The IEEE-representation logic for the cross-compiler needs review by someone who knows what an IEEE float looks like. For now, though... ... now SBCL builds under OpenMCL! --- diff --git a/NEWS b/NEWS index d109ef7..d2cc599 100644 --- a/NEWS +++ b/NEWS @@ -1129,8 +1129,9 @@ changes in sbcl-0.7.4 relative to sbcl-0.7.3: changes in sbcl-0.7.5 relative to sbcl-0.7.4: * SBCL now runs on the Tru64 (aka OSF/1) operating system on the Alpha architecture. - * More progress has been made toward bootstrapping under CLISP and - OpenMCL. + * SBCL now builds with OpenMCL (version 0.11+patches) as the + cross-compilation host; also, more progress has been made toward + bootstrapping under CLISP. * bug 140 fixed: redefinition of classes with different supertypes is now reflected in the type hierarchy. (thanks to Pierre Mai) * bug 158 fixed: the compiler can now deal with integer loop diff --git a/TODO b/TODO index 35e257a..0283960 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,5 @@ for early 0.7.x: -* building using something other than SBCL/CMUCL, e.g. CLISP or OpenMCL, - as xc host; or at least hitting bugs (in them, not us:-) which - give us a good excuse not to:-| * urgent EVAL/EVAL-WHEN/%COMPILE/DEFUN/DEFSTRUCT cleanup: ** made inlining DEFUN inside MACROLET work again ** (also, while working on INLINE anyway, it might be easy @@ -67,6 +64,9 @@ for early 0.7.x: * Either get rid of or at least rework the fdefinition/encapsulation system so that (SYMBOL-FUNCTION 'FOO) is identically equal to (FDEFINITION 'FOO). +* building using CLISP (since building under OpenMCL works, this is + reduced to "it would be nice" rather than "as proof of concept") + ======================================================================= for 0.9: diff --git a/src/code/cross-float.lisp b/src/code/cross-float.lisp index ec8f2ab..7fcb3e0 100644 --- a/src/code/cross-float.lisp +++ b/src/code/cross-float.lisp @@ -77,7 +77,13 @@ (if (plusp exponent) ; if not obviously denormalized (do () (nil) - (cond (;; ordinary termination case + (cond (;; special termination case, denormalized + ;; float number + (zerop exponent) + ;; Denormalized numbers have exponent one + ;; greater than the exponent field. + (return (ash significand -1))) + (;; ordinary termination case (>= significand (expt 2 23)) (assert (< 0 significand (expt 2 24))) ;; Exponent 0 is reserved for @@ -87,12 +93,7 @@ (return (logior (ash exponent 23) (logand significand (1- (ash 1 23)))))) - (;; special termination case, denormalized - ;; float number - (zerop exponent) - ;; Denormalized numbers have exponent one - ;; greater than the exponent field. - (return (ash significand -1))) + (t ;; Shift as necessary to set bit 24 of ;; significand. @@ -111,6 +112,7 @@ (ecase lisp-sign (1 unsigned-result) (-1 (logior unsigned-result (- (expt 2 31))))))))) + (defun double-float-bits (x) (declare (type double-float x)) (assert (= (float-radix x) 2)) @@ -126,7 +128,13 @@ (if (plusp exponent) ; if not obviously denormalized (do () (nil) - (cond (;; ordinary termination case + (cond (;; special termination case, denormalized + ;; float number + (zerop exponent) + ;; Denormalized numbers have exponent one + ;; greater than the exponent field. + (return (ash significand -1))) + (;; ordinary termination case (>= significand (expt 2 52)) (assert (< 0 significand (expt 2 53))) ;; Exponent 0 is reserved for @@ -136,12 +144,6 @@ (return (logior (ash exponent 52) (logand significand (1- (ash 1 52)))))) - (;; special termination case, denormalized - ;; float number - (zerop exponent) - ;; Denormalized numbers have exponent one - ;; greater than the exponent field. - (return (ash significand -1))) (t ;; Shift as necessary to set bit 53 of ;; significand. @@ -160,6 +162,7 @@ (ecase lisp-sign (1 unsigned-result) (-1 (logior unsigned-result (- (expt 2 63))))))))) + (defun double-float-low-bits (x) (declare (type double-float x)) (if (zerop x) @@ -170,6 +173,7 @@ ;; would be nice to make the family of functions have a more ;; consistent return convention. (logand #xffffffff (double-float-bits x)))) + (defun double-float-high-bits (x) (declare (type double-float x)) (if (zerop x) @@ -217,6 +221,7 @@ (ash 1 23)) (expt 0.5 23)))) (* sign (kludge-opaque-expt 2.0 expt) mant)))) + (defun make-double-float (hi lo) (if (and (zerop hi) (zerop lo)) ; IEEE float special case 0.0d0 diff --git a/version.lisp-expr b/version.lisp-expr index 99863f1..5a948aa 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; for internal versions, especially for internal versions off the ;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.7.4.32" +"0.7.4.33"