Changeset 15650


Ignore:
Timestamp:
Feb 2, 2013, 9:34:46 PM (6 years ago)
Author:
gb
Message:

Propagate r15649 to 1.9

Location:
release/1.9/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/1.9/source/level-0/l0-numbers.lisp

    r15560 r15650  
    11811181         (bignum (if (eq number target::target-most-negative-fixnum)
    11821182                   (with-small-bignum-buffers ((bn number))
    1183                      (bignum-truncate bn divisor))
     1183                     (multiple-value-bind (q r) (bignum-truncate bn divisor)
     1184                       (if (eq r bn)
     1185                         (values q number)
     1186                         (values q r))))
    11841187                   (values 0 number)))
    11851188         (double-float (truncate-rat-dfloat number divisor))
     
    15571560     (number-case divisor
    15581561       (fixnum (nth-value 1 (%fixnum-truncate number divisor)))
    1559        (bignum number)
     1562       (bignum
     1563        (if (and (eql number target::target-most-negative-fixnum)
     1564                 (eql divisor (- target::target-most-negative-fixnum)))
     1565          0
     1566          number))
    15601567       (t (nth-value 1 (truncate number divisor)))))
    15611568    (bignum
  • release/1.9/source/level-1/l1-numbers.lisp

    r15628 r15650  
    762762  (with-stack-double-floats ((temp))
    763763    #+arm-target (%set-fpscr-status 0)
    764     #+linux-target
    765     (progn
    766       (%get-errno)                      ;clear errno
    767       (#_feclearexcept #$FE_ALL_EXCEPT))
    768764    #-freebsdx8632-target
    769765    (%setf-double-float TEMP (#_exp n))
     
    772768    (%df-check-exception-1 'exp n (%ffi-exception-status))
    773769    #+linux-target
    774     (and (eql (- #$ERANGE) (%get-errno))
    775          (#_fetestexcept #$FE_OVERFLOW)
     770    (and (infinity-p TEMP)
     771         (not (infinity-p n))
    776772         (get-fpu-mode :overflow)
    777773         (error 'floating-point-overflow
     
    785781  (target::with-stack-short-floats ((temp))
    786782    #+arm-target (%set-fpscr-status 0)
    787     #+linux-target
    788     (progn
    789       (%get-errno)                      ;clear errno
    790       (#_feclearexcept #$FE_ALL_EXCEPT))
    791783    #-freebsdx8632-target
    792784    (%setf-short-float TEMP (#_expf n))
     
    795787    (%sf-check-exception-1 'exp n (%ffi-exception-status))
    796788    #+linux-target
    797     (and (eql (- #$ERANGE) (%get-errno))
    798          (#_fetestexcept #$FE_OVERFLOW)
     789    (and (infinity-p TEMP)
     790         (not (infinity-p n))
    799791         (get-fpu-mode :overflow)
    800792         (error 'floating-point-overflow
     
    814806(defun %single-float-exp (n)
    815807  (declare (single-float n))
    816   #+linux-target
    817   (progn
    818     (%get-errno)                      ;clear errno
    819     (#_feclearexcept #$FE_ALL_EXCEPT))
    820808  (let* ((result (#_expf n)))
    821809    (%sf-check-exception-1 'exp n (%ffi-exception-status))
    822810    #+linux-target
    823     (and (eql (- #$ERANGE) (%get-errno))
    824          (#_fetestexcept #$FE_OVERFLOW)
     811    (and (infinity-p result)
     812         (not (infinity-p n))
    825813         (get-fpu-mode :overflow)
    826814         (error 'floating-point-overflow
Note: See TracChangeset for help on using the changeset viewer.