0.8.13.26:
[sbcl.git] / src / compiler / float-tran.lisp
index c18356b..ec1fabf 100644 (file)
   (values double-float-significand double-float-int-exponent (integer -1 1))
   (movable foldable flushable))
 
-(defknown scale-single-float (single-float fixnum) single-float
+(defknown scale-single-float (single-float integer) single-float
   (movable foldable flushable))
 
-(defknown scale-double-float (double-float fixnum) double-float
+(defknown scale-double-float (double-float integer) double-float
   (movable foldable flushable))
 
 (deftransform decode-float ((x) (single-float) *)
 (macrolet
     ((def (float-type fun)
         `(deftransform %unary-ftruncate ((x) (,float-type))
-          (let ((x-type (lvar-type x))
-                ;; these bounds may look wrong, but in fact they're
-                ;; right: floats within these bounds are those which
-                ;; TRUNCATE to a (SIGNED-BYTE 32).  ROUND would be
-                ;; different.
-                (low-bound (coerce (- (ash 1 31)) ',float-type))
-                (high-bound (coerce (ash 1 31) ',float-type)))
-            (if (csubtypep x-type
-                           (specifier-type
-                            `(,',float-type (,low-bound) (,high-bound))))
-                '(coerce (%unary-truncate x) ',float-type)
-                `(if (< ,low-bound x ,high-bound)
-                     (coerce (%unary-truncate x) ',',float-type)
-                     (,',fun x)))))))
+           '(,fun x))))
   (def single-float %unary-ftruncate/single)
   (def double-float %unary-ftruncate/double))