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
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
* 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:
(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
(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.
(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))
(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
(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.
(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)
;; 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)
(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