X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Ffloat-tran.lisp;h=68c1ccd745356a71de1dfec45cec7a47c9953798;hb=f7faed97898dd0e94a18b0d1fca03aaa0fe24ab0;hp=e0d6e935eb17fc8bae1870e8b188be82f2aaea38;hpb=9e37bfc1ef0532a16a9ac8b1e48123ee19347f80;p=sbcl.git diff --git a/src/compiler/float-tran.lisp b/src/compiler/float-tran.lisp index e0d6e93..68c1ccd 100644 --- a/src/compiler/float-tran.lisp +++ b/src/compiler/float-tran.lisp @@ -331,8 +331,11 @@ ;; problem, but in the context of evaluated and compiled (+ ) ;; giving different result if we fail to check for this. (or (not (csubtypep x (specifier-type 'integer))) + #!+x86 (csubtypep x (specifier-type `(integer ,most-negative-exactly-single-float-fixnum - ,most-positive-exactly-single-float-fixnum))))) + ,most-positive-exactly-single-float-fixnum))) + #!-x86 + (csubtypep x (specifier-type 'fixnum)))) ;;; Do some stuff to recognize when the loser is doing mixed float and ;;; rational arithmetic, or different float types, and fix it up. If @@ -948,11 +951,9 @@ (int-hi (if hi (ceiling (type-bound-number hi)) '*)) - (f-lo (if lo - (bound-func #'float lo) + (f-lo (or (bound-func #'float lo) '*)) - (f-hi (if hi - (bound-func #'float hi) + (f-hi (or (bound-func #'float hi) '*))) (specifier-type `(or (rational ,int-lo ,int-hi) (single-float ,f-lo, f-hi))))) @@ -982,11 +983,9 @@ (int-hi (if hi (ceiling (type-bound-number hi)) '*)) - (f-lo (if lo - (bound-func #'float lo) + (f-lo (or (bound-func #'float lo) '*)) - (f-hi (if hi - (bound-func #'float hi) + (f-hi (or (bound-func #'float hi) '*))) (specifier-type `(or (rational ,int-lo ,int-hi) (single-float ,f-lo, f-hi)))))