Raymond Toy pushed to branch master at cmucl / cmucl

Commits:

2 changed files:

Changes:

  • src/code/float-trap.lisp
    ... ... @@ -445,9 +445,7 @@
    445 445
     	 `(progn
    
    446 446
     	    (defmacro ,macro-name (traps &body body)
    
    447 447
     	      ,docstring
    
    448
    -	      (let ((traps (dpb (float-trap-mask traps) float-traps-byte 0))
    
    449
    -		    (exceptions (dpb (float-trap-mask traps) float-sticky-bits 0))
    
    450
    -		    (trap-mask (dpb (lognot (float-trap-mask traps))
    
    448
    +	      (let ((trap-mask (dpb (lognot (float-trap-mask traps))
    
    451 449
     				    float-traps-byte #xffffffff))
    
    452 450
     		    (exception-mask (dpb (lognot (vm::float-trap-mask traps))
    
    453 451
     					 float-sticky-bits #xffffffff))
    

  • tests/float.lisp
    ... ... @@ -116,3 +116,25 @@
    116 116
     		      f
    
    117 117
     		      e)))))
    
    118 118
     
    
    119
    +(define-test float-traps-masked
    
    120
    +  ;; inf-inf signals invalid, which is masked so the result is NaN.
    
    121
    +  (assert-true
    
    122
    +   (ext:float-nan-p
    
    123
    +    (ext:with-float-traps-masked (:invalid)
    
    124
    +      (- ext:double-float-positive-infinity
    
    125
    +	 ext:double-float-positive-infinity))))
    
    126
    +
    
    127
    +  ;; Divide-by-zero is masked so dividing by zero returns infinity
    
    128
    +  (assert-true
    
    129
    +   (ext:float-infinity-p
    
    130
    +    (ext:with-float-traps-masked (:divide-by-zero)
    
    131
    +      (/ 100d0 0d0))))
    
    132
    +
    
    133
    +  ;; Overflow is masked so 100 * most-positive-double returns infinity
    
    134
    +  (assert-true
    
    135
    +   (ext:float-infinity-p
    
    136
    +    (ext:with-float-traps-masked (:overflow)
    
    137
    +      (* 100 most-negative-double-float)))))
    
    138
    +
    
    139
    +  
    
    140
    +   
    \ No newline at end of file