diff --git a/src/lisp/GNUmakefile b/src/lisp/GNUmakefile index 056e9ea32eac5f2a58fdcc587da6a67603699985..c557d3be43f8d8d90c497d81b57aadfc2027ffcb 100644 --- a/src/lisp/GNUmakefile +++ b/src/lisp/GNUmakefile @@ -12,7 +12,7 @@ FDLIBM = k_sin.c k_cos.c k_tan.c s_sin.c s_cos.c s_tan.c sincos.c \ e_acosh.c s_asinh.c e_atanh.c \ e_atan2.c \ e_rem_pio2.c k_rem_pio2.c \ - setexception.c double-values.c + setexception.c SRCS = lisp.c coreparse.c alloc.c monitor.c print.c interr.c \ vars.c parse.c interrupt.c search.c validate.c globals.c \ diff --git a/src/lisp/double-values.c b/src/lisp/double-values.c deleted file mode 100644 index 79d59214d1a36880b7666142d2bbe68c55cdf65c..0000000000000000000000000000000000000000 --- a/src/lisp/double-values.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Some helper functions to return specific double values for use by - * fdlibm_setexceptions on NetBSD. Currently, NetBSD doesn't have - * feraiseexcept so we have to do something special. See - * fdlibm_setexceptions. - */ - -#include "fdlibm.h" - -double -double_zero() -{ - return 0.0; -} - -/* - * Return most-positive-double-float - */ -double -double_huge() -{ - union { int i[2]; double d; } ux; - ux.i[HIWORD] = 0x7fefffff; - ux.i[LOWORD] = 0xffffffff; - - return ux.d; -} - -/* - * Return least-positive-double-float - */ -double -double_tiny() -{ - union { int i[2]; double d; } ux; - ux.i[HIWORD] = 0; - ux.i[LOWORD] = 1; - - return ux.d; -} diff --git a/src/lisp/setexception.c b/src/lisp/setexception.c index d0f45199edcd1c5d92d4dd7a10170524f71a5cc0..a77a9d8fa247629dd794c590181a48e307769ec3 100644 --- a/src/lisp/setexception.c +++ b/src/lisp/setexception.c @@ -1,25 +1,4 @@ -#if defined(__NetBSD__) -/* - * NetBSD doesn't have fenv.h. At least the version currently being - * used to build cmucl doesn't. Assume this also means we don't have - * feraiseexcept. So, to generate the desired exceptions, we have to - * create the appropriate operations to generate the desired - * exceptions. - */ -#undef HAVE_FERAISEEXCEPT - -extern double double_zero(); -extern double double_huge(); -extern double double_tiny(); - -#else -#define HAVE_FERAISEEXCEPT -#endif - -#ifdef HAVE_FERAISEEXCEPT #include <fenv.h> -#endif - #include <math.h> #include <stdio.h> @@ -71,48 +50,32 @@ fdlibm_setexception(double x, enum FDLIBM_EXCEPTION type) /* Division by zero. Use the sign of x to get the correct * signed infinity */ -#ifdef HAVE_FERAISEEXCEPT feraiseexcept(FE_DIVBYZERO); - ret = copysign(INFINITY, x); -#else - ret = copysign(1, x) / double_zero(); -#endif + ret = copysign(INFINITY, x); break; case 1: /* Underflow. Use the sign of x to get a signed zero. */ -#ifdef HAVE_FERAISEEXCEPT feraiseexcept(FE_UNDERFLOW); ret = copysign(0.0, x); -#else - ret = double_tiny() * double_tiny();; -#endif break; case 2: /* overflow */ -#ifdef HAVE_FERAISEEXCEPT feraiseexcept(FE_OVERFLOW); ret = copysign(INFINITY, x); -#else - ret = double_huge() * copysign(double_huge(), x); -#endif break; case 3: { - /* if */ + /* invalid */ if (!isQNaN(x)) { /* * If it's not a quiet NaN, we want to signal an invalid * operation. Otherwise, we silently return a NaN. */ -#ifdef HAVE_FERAISEEXCEPT feraiseexcept(FE_INVALID); -#else - ret = double_zero() / double_zero(); - return ret; -#endif } + /* * FIXME: Of the many NaN values that we have, what NaN * should we return?