Don't use expm1 and log1p unless they're available.
authorChris Hanson <org/chris-hanson/cph>
Mon, 27 Jun 2011 00:34:34 +0000 (17:34 -0700)
committerChris Hanson <org/chris-hanson/cph>
Mon, 27 Jun 2011 00:34:34 +0000 (17:34 -0700)
src/microcode/configure.ac
src/microcode/flonum.c

index 642cf04a08db2628e56b5d1124d014c41bd5d025..2a032eec0dd55a5e1dd5a856406b2d61a2f040d4 100644 (file)
@@ -515,6 +515,7 @@ AC_FUNC_VPRINTF
 AC_FUNC_WAIT3
 AC_CHECK_FUNCS([clock_gettime closefrom ctermid])
 AC_CHECK_FUNCS([dup2])
+AC_CHECK_FUNCS([expm1])
 AC_CHECK_FUNCS([fcntl fdatasync feclearexcept fedisableexcept feenableexcept])
 AC_CHECK_FUNCS([fegetenv fegetexcept fegetexceptflag fegetround feholdexcept])
 AC_CHECK_FUNCS([feraiseexcept fesetenv fesetexceptflag fesetround])
@@ -523,7 +524,7 @@ AC_CHECK_FUNCS([fpsetround fsync fsync_range ftruncate])
 AC_CHECK_FUNCS([getcwd gethostbyname gethostname getlogin getpagesize getpgrp])
 AC_CHECK_FUNCS([getpt gettimeofday getwd grantpt])
 AC_CHECK_FUNCS([kill])
-AC_CHECK_FUNCS([lockf])
+AC_CHECK_FUNCS([lockf log1p])
 AC_CHECK_FUNCS([madvise memcpy mkdir mktime modf])
 AC_CHECK_FUNCS([nice ntp_adjtime ntp_gettime])
 AC_CHECK_FUNCS([poll posix_madvise prealloc])
index b329015a00c2ffb3d9b4172b7dab99320c256d89..9b4f5e437718c216e48176deb2bed640f26d3992 100644 (file)
@@ -30,14 +30,6 @@ USA.
 #include "prims.h"
 #include <errno.h>
 
-#ifndef M_LN2
-#  define M_LN2       0.693147180559945309417232121458176568  /* log e2 */
-#endif
-
-#ifndef M_SQRT1_2
-#  define M_SQRT1_2   0.707106781186547524400844362104849039  /* 1/sqrt(2) */
-#endif
-
 double
 arg_flonum (int arg_number)
 {
@@ -156,11 +148,26 @@ DEFINE_PRIMITIVE ("FLONUM-NEGATIVE?", Prim_flonum_negative_p, 1, 1, 0)
 }
 
 DEFINE_PRIMITIVE ("FLONUM-EXPM1", Prim_flonum_expm1, 1, 1, 0)
+#ifdef HAVE_EXPM1
      RESTRICTED_TRANSCENDENTAL_FUNCTION
        (expm1, ((x >= - M_LN2) && (x <= M_LN2)))
+#else
+{
+  error_unimplemented_primitive ();
+  PRIMITIVE_RETURN (UNSPECIFIC);
+}
+#endif
+
 DEFINE_PRIMITIVE ("FLONUM-LOG1P", Prim_flonum_log1p, 1, 1, 0)
+#ifdef HAVE_LOG1P
      RESTRICTED_TRANSCENDENTAL_FUNCTION
        (log1p, ((x >= (M_SQRT1_2 - 1.0)) && (x <= (1.0 - M_SQRT1_2))))
+#else
+{
+  error_unimplemented_primitive ();
+  PRIMITIVE_RETURN (UNSPECIFIC);
+}
+#endif
 
 DEFINE_PRIMITIVE ("FLONUM-EXP", Prim_flonum_exp, 1, 1, 0)
      SIMPLE_TRANSCENDENTAL_FUNCTION (exp)