Let the system math library elicit IEEE 754 exceptions.
authorTaylor R Campbell <campbell@mumble.net>
Thu, 8 Nov 2018 07:49:02 +0000 (07:49 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Thu, 8 Nov 2018 07:49:02 +0000 (07:49 +0000)
Don't trap in our ucode primitive wrappers if the floating-point
exception isn't trapped.

src/microcode/flonum.c
tests/microcode/test-flonum-except.scm

index 4d323cf153257c9deb210ed7734aa36db9d571ac..cf150a256ce0d9930b624ab30874e7ac97660867 100644 (file)
@@ -214,9 +214,9 @@ DEFINE_PRIMITIVE ("FLONUM-COS", Prim_flonum_cos, 1, 1, 0)
 DEFINE_PRIMITIVE ("FLONUM-TAN", Prim_flonum_tan, 1, 1, 0)
      SIMPLE_TRANSCENDENTAL_FUNCTION (tan)
 DEFINE_PRIMITIVE ("FLONUM-ASIN", Prim_flonum_asin, 1, 1, 0)
-     RESTRICTED_TRANSCENDENTAL_FUNCTION (asin, ((x >= -1) && (x <= 1)))
+     SIMPLE_TRANSCENDENTAL_FUNCTION (asin)
 DEFINE_PRIMITIVE ("FLONUM-ACOS", Prim_flonum_acos, 1, 1, 0)
-     RESTRICTED_TRANSCENDENTAL_FUNCTION (acos, ((x >= -1) && (x <= 1)))
+     SIMPLE_TRANSCENDENTAL_FUNCTION (acos)
 DEFINE_PRIMITIVE ("FLONUM-ATAN", Prim_flonum_atan, 1, 1, 0)
      SIMPLE_TRANSCENDENTAL_FUNCTION (atan)
 
@@ -233,7 +233,7 @@ DEFINE_PRIMITIVE ("FLONUM-ATAN2", Prim_flonum_atan2, 2, 2, 0)
 }
 
 DEFINE_PRIMITIVE ("FLONUM-SQRT", Prim_flonum_sqrt, 1, 1, 0)
-     RESTRICTED_TRANSCENDENTAL_FUNCTION (sqrt, (x >= 0))
+     SIMPLE_TRANSCENDENTAL_FUNCTION (sqrt)
 DEFINE_PRIMITIVE ("FLONUM-CBRT", Prim_flonum_cbrt, 1, 1, 0)
      SIMPLE_TRANSCENDENTAL_FUNCTION (cbrt)
 
index f3c5fb515780c320adefc2a08f954f04d4a98511..6c611d0e263dda54e3dcb54fd55db0604f32e56a 100644 (file)
@@ -178,11 +178,9 @@ USA.
 (define-invop-trap-test 'flonum-sqrt (applicator flo:sqrt -1.))        ;(g)
 
 (define-invop-flag-test 'flonum-sqrt
-  (applicator (make-primitive-procedure 'flonum-sqrt) -1.)
-  'xerror)
+  (applicator (make-primitive-procedure 'flonum-sqrt) -1.))
 (define-invop-trap-test 'flonum-sqrt
-  (applicator (make-primitive-procedure 'flonum-sqrt) -1.)
-  'xerror)
+  (applicator (make-primitive-procedure 'flonum-sqrt) -1.))
 
 ;;; IEEE 754-2008, Sec. 7.3
 
@@ -246,11 +244,11 @@ USA.
 
 ;; XXX atanpi, atan2pi
 
-(define-invop-flag-test 'flonum-asin (applicator flo:asin 2.) 'xerror)
-(define-invop-trap-test 'flonum-asin (applicator flo:asin 2.) 'xerror)
+(define-invop-flag-test 'flonum-asin (applicator flo:asin 2.))
+(define-invop-trap-test 'flonum-asin (applicator flo:asin 2.))
 ;; XXX Not clear how to make asin underflow reliably.
-(define-invop-flag-test 'flonum-acos (applicator flo:acos 2.) 'xerror)
-(define-invop-trap-test 'flonum-acos (applicator flo:acos 2.) 'xerror)
+(define-invop-flag-test 'flonum-acos (applicator flo:acos 2.))
+(define-invop-trap-test 'flonum-acos (applicator flo:acos 2.))
 ;; XXX Not clear how to make atan underflow reliably.
 
 ;; XXX sinh, cosh, tanh, asinh, acosh, atanh