--- /dev/null
+;;;; nonportable floating point things, useful in LOAD-TIME-VALUE
+;;;; forms for referring to floating point objects that will exist on
+;;;; the SBCL target but may not when running under an ordinary ANSI
+;;;; Common Lisp implementation.
+
+;;;; This software is part of the SBCL system. See the README file for
+;;;; more information.
+;;;;
+;;;; This software is derived from the CMU CL system, which was
+;;;; written at Carnegie Mellon University and released into the
+;;;; public domain. The software is in the public domain and is
+;;;; provided with absolutely no warranty. See the COPYING and CREDITS
+;;;; files for more information.
+
+(in-package "SB!IMPL")
+
+(defun make-unportable-float (name)
+ (flet ((opaque-identity (x) x))
+ ;; KLUDGE: "DO NOT CONSTANT FOLD, EVIL COMPILER!"
+ (declare (notinline opaque-identity make-single-float make-double-float))
+ (ecase name
+ (:single-float-negative-zero (make-single-float
+ (opaque-identity #x-80000000)))
+ (:double-float-negative-zero (make-double-float
+ (opaque-identity #x-80000000)
+ (opaque-identity #x00000000)))
+ #!+long-float
+ (:long-float-negative-zero (error "write LONG-FLOAT creation form")))))