[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r9303 - in /trunk/libc: ./ math/ sysdeps/ieee754/dbl-wrap/ sysdeps/ieee754/ldbl-128/ sysdeps/ieee754/ldbl-128ibm/ sysdeps/ie...
- To: commits@xxxxxxxxxx
- Subject: [commits] r9303 - in /trunk/libc: ./ math/ sysdeps/ieee754/dbl-wrap/ sysdeps/ieee754/ldbl-128/ sysdeps/ieee754/ldbl-128ibm/ sysdeps/ie...
- From: maxim@xxxxxxxxxx
- Date: Thu, 19 Nov 2009 16:20:05 -0000
Author: maxim
Date: Thu Nov 19 08:20:05 2009
New Revision: 9303
Log:
* option-groups.def (OPTION_EGLIBC_LIBM_BIG): New option group.
* option-groups.defaults (OPTION_EGLIBC_LIBM_BIG): Set.
* configure.in: Handle OPTION_EGLIBC_LIBM_BIG.
* configure: Regenerate.
* math/Makefile (tests: atest-*): Condition on OPTION_EGLIBC_LIBM_BIG.
(libm-test.stmt): Override default result checking precision.
* math/gen-libm-test.pl (default_ulp): New variable. Use it to
override default precision with which test results are checked.
* math/libm-test.inc (MANT_DIG): Handle [l]dbl-wrap math.
* math/test-dbl-wrap: New test.
* sysdeps/ieee754/ldbl-128/s_erfl.c,
* sysdeps/ieee754/ldbl-128/s_log1pl.c,
* sysdeps/ieee754/ldbl-128ibm/s_erfl.c,
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c,
* sysdeps/ieee754/ldbl-96/s_erfl.c,
* sysdeps/ieee754/ldbl-opt/s_atan.c,
* sysdeps/ieee754/ldbl-opt/s_sin.c,
* sysdeps/ieee754/ldbl-opt/s_tan.c: Handle !OPTION_EGLIBC_LIBM_BIG.
* sysdeps/ieee754/dbl-wrap/dbl-wrap.h,
* sysdeps/ieee754/dbl-wrap/dosincos.c,
* sysdeps/ieee754/dbl-wrap/e_asin.c,
* sysdeps/ieee754/dbl-wrap/e_atan2.c,
* sysdeps/ieee754/dbl-wrap/e_exp.c,
* sysdeps/ieee754/dbl-wrap/e_exp2.c,
* sysdeps/ieee754/dbl-wrap/e_log.c,
* sysdeps/ieee754/dbl-wrap/e_pow.c,
* sysdeps/ieee754/dbl-wrap/s_atan.c,
* sysdeps/ieee754/dbl-wrap/s_sin.c,
* sysdeps/ieee754/dbl-wrap/s_tan.c,
* sysdeps/ieee754/ldbl-wrap/e_acosl.c,
* sysdeps/ieee754/ldbl-wrap/e_asinl.c,
* sysdeps/ieee754/ldbl-wrap/e_expl.c,
* sysdeps/ieee754/ldbl-wrap/e_j0l.c,
* sysdeps/ieee754/ldbl-wrap/e_j1l.c,
* sysdeps/ieee754/ldbl-wrap/e_lgammal_r.c,
* sysdeps/ieee754/ldbl-wrap/e_powl.c,
* sysdeps/ieee754/ldbl-wrap/ldbl-wrap.h,
* sysdeps/ieee754/ldbl-wrap/s_erfl.c,
* sysdeps/ieee754/ldbl-wrap/s_log1pl.c: New files.
Added:
trunk/libc/math/test-dbl-wrap.c
trunk/libc/sysdeps/ieee754/dbl-wrap/
trunk/libc/sysdeps/ieee754/dbl-wrap/dbl-wrap.h
trunk/libc/sysdeps/ieee754/dbl-wrap/dosincos.c
trunk/libc/sysdeps/ieee754/dbl-wrap/e_asin.c
trunk/libc/sysdeps/ieee754/dbl-wrap/e_atan2.c
trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp.c
trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp2.c
trunk/libc/sysdeps/ieee754/dbl-wrap/e_log.c
trunk/libc/sysdeps/ieee754/dbl-wrap/e_pow.c
trunk/libc/sysdeps/ieee754/dbl-wrap/s_atan.c
trunk/libc/sysdeps/ieee754/dbl-wrap/s_sin.c
trunk/libc/sysdeps/ieee754/dbl-wrap/s_tan.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_acosl.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_asinl.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_expl.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j0l.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j1l.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_lgammal_r.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/e_powl.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/ldbl-wrap.h
trunk/libc/sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c
trunk/libc/sysdeps/ieee754/ldbl-wrap/s_log1pl-wrap.c
Modified:
trunk/libc/ChangeLog.eglibc
trunk/libc/configure
trunk/libc/configure.in
trunk/libc/math/Makefile
trunk/libc/math/gen-libm-test.pl
trunk/libc/math/libm-test.inc
trunk/libc/option-groups.def
trunk/libc/option-groups.defaults
trunk/libc/sysdeps/ieee754/ldbl-128/s_erfl.c
trunk/libc/sysdeps/ieee754/ldbl-128/s_log1pl.c
trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_erfl.c
trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
trunk/libc/sysdeps/ieee754/ldbl-96/s_erfl.c
trunk/libc/sysdeps/ieee754/ldbl-opt/s_atan.c
trunk/libc/sysdeps/ieee754/ldbl-opt/s_sin.c
trunk/libc/sysdeps/ieee754/ldbl-opt/s_tan.c
Modified: trunk/libc/ChangeLog.eglibc
==============================================================================
--- trunk/libc/ChangeLog.eglibc (original)
+++ trunk/libc/ChangeLog.eglibc Thu Nov 19 08:20:05 2009
@@ -1,3 +1,48 @@
+2009-11-19 Maxim Kuvyrkov <maxim@xxxxxxxxxxxxxxxx>
+
+ * option-groups.def (OPTION_EGLIBC_LIBM_BIG): New option group.
+ * option-groups.defaults (OPTION_EGLIBC_LIBM_BIG): Set.
+ * configure.in: Handle OPTION_EGLIBC_LIBM_BIG.
+ * configure: Regenerate.
+
+ * math/Makefile (tests: atest-*): Condition on OPTION_EGLIBC_LIBM_BIG.
+ (libm-test.stmt): Override default result checking precision.
+ * math/gen-libm-test.pl (default_ulp): New variable. Use it to
+ override default precision with which test results are checked.
+ * math/libm-test.inc (MANT_DIG): Handle [l]dbl-wrap math.
+ * math/test-dbl-wrap: New test.
+
+ * sysdeps/ieee754/ldbl-128/s_erfl.c,
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c,
+ * sysdeps/ieee754/ldbl-128ibm/s_erfl.c,
+ * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c,
+ * sysdeps/ieee754/ldbl-96/s_erfl.c,
+ * sysdeps/ieee754/ldbl-opt/s_atan.c,
+ * sysdeps/ieee754/ldbl-opt/s_sin.c,
+ * sysdeps/ieee754/ldbl-opt/s_tan.c: Handle !OPTION_EGLIBC_LIBM_BIG.
+
+ * sysdeps/ieee754/dbl-wrap/dbl-wrap.h,
+ * sysdeps/ieee754/dbl-wrap/dosincos.c,
+ * sysdeps/ieee754/dbl-wrap/e_asin.c,
+ * sysdeps/ieee754/dbl-wrap/e_atan2.c,
+ * sysdeps/ieee754/dbl-wrap/e_exp.c,
+ * sysdeps/ieee754/dbl-wrap/e_exp2.c,
+ * sysdeps/ieee754/dbl-wrap/e_log.c,
+ * sysdeps/ieee754/dbl-wrap/e_pow.c,
+ * sysdeps/ieee754/dbl-wrap/s_atan.c,
+ * sysdeps/ieee754/dbl-wrap/s_sin.c,
+ * sysdeps/ieee754/dbl-wrap/s_tan.c,
+ * sysdeps/ieee754/ldbl-wrap/e_acosl.c,
+ * sysdeps/ieee754/ldbl-wrap/e_asinl.c,
+ * sysdeps/ieee754/ldbl-wrap/e_expl.c,
+ * sysdeps/ieee754/ldbl-wrap/e_j0l.c,
+ * sysdeps/ieee754/ldbl-wrap/e_j1l.c,
+ * sysdeps/ieee754/ldbl-wrap/e_lgammal_r.c,
+ * sysdeps/ieee754/ldbl-wrap/e_powl.c,
+ * sysdeps/ieee754/ldbl-wrap/ldbl-wrap.h,
+ * sysdeps/ieee754/ldbl-wrap/s_erfl.c,
+ * sysdeps/ieee754/ldbl-wrap/s_log1pl.c: New files.
+
2009-11-16 Maxim Kuvyrkov <maxim@xxxxxxxxxxxxxxxx>
OPTION_EGLIBC_CRYPT and OPTION_EGLIBC_CRYPT_UFC.
Modified: trunk/libc/configure
==============================================================================
--- trunk/libc/configure (original)
+++ trunk/libc/configure Thu Nov 19 08:20:05 2009
@@ -4464,6 +4464,10 @@
sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
fi
+# Peek into option-groups.config to check if sysdeps/ieee754/[l]dbl-wrap needs
+# to be included into $sysnames.
+grep "OPTION_EGLIBC_LIBM_BIG = n" option-groups.config > /dev/null 2>&1
+use_dbl_wrap=$?
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
@@ -4497,6 +4501,14 @@
for x in $implied_candidate; do
found=no
if test -d $xsrcdir$name_base/$x; then
+ # If !OPTION_EGLIBC_LIBM_BIG, add ieee754/dbl-wrap just before
+ # ieee754/dbl-64.
+ if test "$use_dbl_wrap" = "0"; then
+ case $x in
+ ieee754/dbl-64) implied="$implied $name_base/ieee754/dbl-wrap" ;;
+ ieee754/ldbl-*) implied="$implied $name_base/ieee754/ldbl-wrap" ;;
+ esac
+ fi
implied="$implied $name_base/$x";
found=yes
fi
@@ -4510,6 +4522,16 @@
echo "DEBUG: $name implied $x try($d) {$try_srcdir}$try" >&2
if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
then
+ # If !OPTION_EGLIBC_LIBM_BIG, add ieee754/dbl-wrap just before
+ # ieee754/dbl-64.
+ if test "$use_dbl_wrap" = "0"; then
+ case $try in
+ sysdeps/ieee754/dbl-64)
+ implied="$implied sysdeps/ieee754/dbl-wrap" ;;
+ sysdeps/ieee754/ldbl-*)
+ implied="$implied sysdeps/ieee754/ldbl-wrap" ;;
+ esac
+ fi
implied="$implied $try"
found=yes
case "$sysnames_add_ons" in
Modified: trunk/libc/configure.in
==============================================================================
--- trunk/libc/configure.in (original)
+++ trunk/libc/configure.in Thu Nov 19 08:20:05 2009
@@ -758,6 +758,10 @@
sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
fi
+# Peek into option-groups.config to check if sysdeps/ieee754/[l]dbl-wrap needs
+# to be included into $sysnames.
+grep "OPTION_EGLIBC_LIBM_BIG = n" option-groups.config > /dev/null 2>&1
+use_dbl_wrap=$?
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
@@ -791,6 +795,14 @@
for x in $implied_candidate; do
found=no
if test -d $xsrcdir$name_base/$x; then
+ # If !OPTION_EGLIBC_LIBM_BIG, add ieee754/dbl-wrap just before
+ # ieee754/dbl-64.
+ if test "$use_dbl_wrap" = "0"; then
+ case $x in
+ ieee754/dbl-64) implied="$implied $name_base/ieee754/dbl-wrap" ;;
+ ieee754/ldbl-*) implied="$implied $name_base/ieee754/ldbl-wrap" ;;
+ esac
+ fi
implied="$implied $name_base/$x";
found=yes
fi
@@ -804,6 +816,16 @@
echo "[DEBUG]: $name implied $x try($d) {$try_srcdir}$try" >&2
if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
then
+ # If !OPTION_EGLIBC_LIBM_BIG, add ieee754/dbl-wrap just before
+ # ieee754/dbl-64.
+ if test "$use_dbl_wrap" = "0"; then
+ case $try in
+ sysdeps/ieee754/dbl-64)
+ implied="$implied sysdeps/ieee754/dbl-wrap" ;;
+ sysdeps/ieee754/ldbl-*)
+ implied="$implied sysdeps/ieee754/ldbl-wrap" ;;
+ esac
+ fi
implied="$implied $try"
found=yes
case "$sysnames_add_ons" in
Modified: trunk/libc/math/Makefile
==============================================================================
--- trunk/libc/math/Makefile (original)
+++ trunk/libc/math/Makefile Thu Nov 19 08:20:05 2009
@@ -90,9 +90,11 @@
distribute += $(filter-out $(generated),$(long-m-yes:=.c) $(long-c-yes:=.c))
# Rules for the test suite.
-tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
+tests = test-matherr test-fenv basic-test \
test-misc test-fpucw tst-definitions test-tgmath test-tgmath-ret \
- bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int test-tgmath2
+ bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int test-tgmath2 \
+ test-dbl-wrap
+tests-$(OPTION_EGLIBC_LIBM_BIG) += atest-exp atest-sincos atest-exp2
# We do the `long double' tests only if this data type is available and
# distinct from `double'.
test-longdouble-yes = test-ldouble test-ildoubl
@@ -114,9 +116,12 @@
$(addprefix $(objpfx), $(libm-tests-generated)): $(objpfx)libm-test.stmp
+ifeq (n,$(OPTION_EGLIBC_LIBM_BIG))
+default_ulp = -d 1
+endif
$(objpfx)libm-test.stmp: $(ulps-file) libm-test.inc gen-libm-test.pl
$(make-target-directory)
- $(PERL) gen-libm-test.pl -u $< -o "$(objpfx)"
+ $(PERL) gen-libm-test.pl -u $< $(default_ulp) -o "$(objpfx)"
@echo > $@
$(objpfx)test-float.o: $(objpfx)libm-test.stmp
Modified: trunk/libc/math/gen-libm-test.pl
==============================================================================
--- trunk/libc/math/gen-libm-test.pl (original)
+++ trunk/libc/math/gen-libm-test.pl Thu Nov 19 08:20:05 2009
@@ -48,7 +48,7 @@
use vars qw (@tests @functions);
use vars qw ($count);
use vars qw (%beautify @all_floats);
-use vars qw ($output_dir $ulps_file);
+use vars qw ($output_dir $ulps_file $default_ulp);
# all_floats is sorted and contains all recognised float types
@all_floats = ('double', 'float', 'idouble',
@@ -93,11 +93,12 @@
# h: help
# o: output-directory
# n: generate new ulps file
-use vars qw($opt_u $opt_h $opt_o $opt_n);
-getopts('u:o:nh');
+use vars qw($opt_u $opt_h $opt_o $opt_n $opt_d);
+getopts('u:o:d:nh');
$ulps_file = 'libm-test-ulps';
$output_dir = '';
+$default_ulp = '0';
if ($opt_h) {
print "Usage: gen-libm-test.pl [OPTIONS]\n";
@@ -105,11 +106,13 @@
print " -o DIR directory where generated files will be placed\n";
print " -n only generate sorted file NewUlps from libm-test-ulps\n";
print " -u FILE input file with ulps\n";
+ print " -d NUM set the default value for ulp to NUM\n";
exit 0;
}
$ulps_file = $opt_u if ($opt_u);
$output_dir = $opt_o if ($opt_o);
+$default_ulp = $opt_d if ($opt_d);
$input = "libm-test.inc";
$output = "${output_dir}libm-test.c";
@@ -463,7 +466,11 @@
if (exists $results{$fct}{'has_ulps'}) {
$line .= "DELTA$fct";
} else {
- $line .= '0';
+ if ($type eq 'complex') {
+ $line .= "BUILD_COMPLEX ($default_ulp, $default_ulp)";
+ } else {
+ $line .= "$default_ulp";
+ }
}
if (exists $results{$fct}{'has_fails'}) {
$line .= ", FAIL$fct";
@@ -642,22 +649,21 @@
if ($type eq 'complex') {
my ($res);
- # Return 0 instead of BUILD_COMPLEX (0,0)
if (!exists $results{$test}{'real'}{'ulp'}{$float} &&
!exists $results{$test}{'imag'}{'ulp'}{$float}) {
- return "0";
+ return "BUILD_COMPLEX ($default_ulp, $default_ulp)";
}
$res = 'BUILD_COMPLEX (';
$res .= (exists $results{$test}{'real'}{'ulp'}{$float}
- ? $results{$test}{'real'}{'ulp'}{$float} : "0");
+ ? $results{$test}{'real'}{'ulp'}{$float} : "$default_ulp");
$res .= ', ';
$res .= (exists $results{$test}{'imag'}{'ulp'}{$float}
- ? $results{$test}{'imag'}{'ulp'}{$float} : "0");
+ ? $results{$test}{'imag'}{'ulp'}{$float} : "$default_ulp");
$res .= ')';
return $res;
}
return (exists $results{$test}{'normal'}{'ulp'}{$float}
- ? $results{$test}{'normal'}{'ulp'}{$float} : "0");
+ ? $results{$test}{'normal'}{'ulp'}{$float} : "$default_ulp");
}
sub get_failure {
Modified: trunk/libc/math/libm-test.inc
==============================================================================
--- trunk/libc/math/libm-test.inc (original)
+++ trunk/libc/math/libm-test.inc Thu Nov 19 08:20:05 2009
@@ -128,6 +128,7 @@
#include <stdio.h>
#include <string.h>
#include <argp.h>
+#include <gnu/option-groups.h>
/* Possible exceptions */
#define NO_EXCEPTION 0x0
@@ -188,8 +189,15 @@
__retval; })
+#if __OPTION_EGLIBC_LIBM_BIG
#define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
(LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
+#else
+/* Reduce precision to which the results are checked against
+ expected values. */
+#define MANT_DIG CHOOSE ((FLT_MANT_DIG-3), (FLT_MANT_DIG-4), (FLT_MANT_DIG-1), \
+ (FLT_MANT_DIG-3), (FLT_MANT_DIG-4), (FLT_MANT_DIG-1))
+#endif
static void
init_max_error (void)
@@ -2483,7 +2491,12 @@
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
# if LDBL_MIN_10_EXP < -319
+# if __OPTION_EGLIBC_LIBM_BIG
TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
+# else
+ /* ldbl-wrap uses single-precision erfc, so it can't handle e-318 values. */
+ TEST_f_f (erfc, 27.0L, 0.0L);
+# endif
# endif
#endif
Added: trunk/libc/math/test-dbl-wrap.c
==============================================================================
--- trunk/libc/math/test-dbl-wrap.c (added)
+++ trunk/libc/math/test-dbl-wrap.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,110 @@
+#include <math.h>
+#include <stdio.h>
+
+#define N 4
+
+static int
+do_test (int argc, char *argv[])
+{
+ int i;
+ int result = 0;
+
+ const double eps = 0.01, pi = 3.14;
+ const double sin_data[N][2]
+ = {{0.0, 0.0}, {pi / 6, 0.5}, {pi / 4, 0.707}, {pi / 3, 0.866}};
+ const double exp_data[N][2]
+ = {{0.0, 1.0}, {0.5, 1.649}, {1.0, 2.718}, {2.718, 15.150}};
+
+ for (i = 0; i < N; ++i)
+ {
+ double x, y;
+ double s1, c1, t1, e1;
+ double s2, c2, t2, as2, ac2, at2, e2, l2;
+
+ x = sin_data[i][0];
+ s1 = sin_data[i][1];
+ c1 = sqrt (1 - s1 * s1);
+ t1 = s1 / c1;
+
+ s2 = sin (x);
+ c2 = cos (x);
+ t2 = tan (x);
+ as2 = asin (s1);
+ ac2 = acos (c1);
+ at2 = atan (t1);
+
+ y = exp_data[i][0];
+ e1 = exp_data[i][1];
+
+ e2 = exp (y);
+ l2 = log (e1);
+
+ if (fabs (s1 - s2) > eps)
+ {
+ result |= 1;
+#if PRINT
+ printf ("sin(%.3lf) = %.3lf\n", x, s2);
+#endif
+ }
+
+ if (fabs (c1 - c2) > eps)
+ {
+ result |= 2;
+#if PRINT
+ printf ("cos(%.3lf) = %.3lf\n", x, c2);
+#endif
+ }
+
+ if (fabs (t1 - t2) > eps)
+ {
+ result |= 4;
+#if PRINT
+ printf ("tan(%.3lf) = %.3lf\n", x, t2);
+#endif
+ }
+
+ if (fabs (x - as2) > eps)
+ {
+ result |= 8;
+#if PRINT
+ printf ("asin(%.3lf) = %.3lf\n", s1, as2);
+#endif
+ }
+
+ if (fabs (x - ac2) > eps)
+ {
+ result |= 16;
+#if PRINT
+ printf ("acos(%.3lf) = %.3lf\n", c1, ac2);
+#endif
+ }
+
+ if (fabs (x - at2) > eps)
+ {
+ result |= 32;
+#if PRINT
+ printf ("atan(%.3lf) = %.3lf\n", t1, at2);
+#endif
+ }
+
+ if (fabs (e1 - e2) > eps)
+ {
+ result |= 64;
+#if PRINT
+ printf ("exp(%.3lf) = %.3lf\n", y, e2);
+#endif
+ }
+
+ if (fabs (y - l2) > eps)
+ {
+ result |= 128;
+#if PRINT
+ printf ("log(%.3lf) = %.3lf\n", e1, l2);
+#endif
+ }
+ }
+
+ return result;
+}
+
+#include "../test-skeleton.c"
Modified: trunk/libc/option-groups.def
==============================================================================
--- trunk/libc/option-groups.def (original)
+++ trunk/libc/option-groups.def Thu Nov 19 08:20:05 2009
@@ -464,6 +464,19 @@
group, you will not be able to build 'libstdc++' against the
resulting EGLIBC installation.
+config OPTION_EGLIBC_LIBM_BIG
+ bool "Math library size"
+ help
+ This option group enables default configuration of the math library.
+ Not selecting this option group removes most of the extended and
+ double precision math functions and replaces them with wrappers
+ to the single precision couterparts.
+ Doing so greatly degrades quality of calculations carried
+ out by the functions of the math library, but also significantly
+ reduces the size of the libm.
+ This option group is useful for systems that do not rely on precise
+ floating point math.
+
config OPTION_EGLIBC_LOCALES
bool "Locale definitions"
help
Modified: trunk/libc/option-groups.defaults
==============================================================================
--- trunk/libc/option-groups.defaults (original)
+++ trunk/libc/option-groups.defaults Thu Nov 19 08:20:05 2009
@@ -28,6 +28,7 @@
OPTION_EGLIBC_INET = y
OPTION_EGLIBC_INET_ANL = y
OPTION_EGLIBC_LIBM = y
+OPTION_EGLIBC_LIBM_BIG = y
OPTION_EGLIBC_LOCALES = y
OPTION_EGLIBC_LOCALE_CODE = y
OPTION_EGLIBC_MEMUSAGE = y
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/dbl-wrap.h
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/dbl-wrap.h (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/dbl-wrap.h Thu Nov 19 08:20:05 2009
@@ -1,0 +1,2 @@
+typedef float wrap_type_t;
+#define WRAP_FUNC(func) func ## f
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/dosincos.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/dosincos.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/dosincos.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,1 @@
+/* empty */
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/e_asin.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/e_asin.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/e_asin.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,17 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_asin) (wrap_type_t);
+
+double
+__ieee754_asin (double x)
+{
+ return (double) WRAP_FUNC (__ieee754_asin) ((wrap_type_t) x);
+}
+
+wrap_type_t WRAP_FUNC (__ieee754_acos) (wrap_type_t);
+
+double
+__ieee754_acos (double x)
+{
+ return (double) WRAP_FUNC (__ieee754_acos) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/e_atan2.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/e_atan2.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/e_atan2.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_atan2) (wrap_type_t, wrap_type_t);
+
+double
+__ieee754_atan2 (double y, double x)
+{
+ return (double) WRAP_FUNC (__ieee754_atan2) ((wrap_type_t) y, (wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_exp) (wrap_type_t);
+
+double
+__ieee754_exp (double x)
+{
+ return (double) WRAP_FUNC (__ieee754_exp) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp2.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp2.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/e_exp2.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_exp2) (wrap_type_t);
+
+double
+__ieee754_exp2 (double x)
+{
+ return (double) WRAP_FUNC (__ieee754_exp2) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/e_log.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/e_log.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/e_log.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,8 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_log) (wrap_type_t);
+
+double __ieee754_log (double x)
+{
+ return (double) WRAP_FUNC (__ieee754_log) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/e_pow.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/e_pow.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/e_pow.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_pow) (wrap_type_t, wrap_type_t);
+
+double
+__ieee754_pow (double x, double y)
+{
+ return (double) WRAP_FUNC (__ieee754_pow) ((wrap_type_t) x, (wrap_type_t) y);
+}
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/s_atan.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/s_atan.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/s_atan.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,13 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (atan) (wrap_type_t);
+
+double
+atan (double x)
+{
+ return (double) WRAP_FUNC (atan) ((wrap_type_t) x);
+}
+
+#ifdef NO_LONG_DOUBLE
+weak_alias (atan, atanl)
+#endif
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/s_sin.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/s_sin.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/s_sin.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,27 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__sin) (wrap_type_t);
+
+double
+__sin (double x)
+{
+ return (double) WRAP_FUNC (__sin) ((wrap_type_t) x);
+}
+
+wrap_type_t WRAP_FUNC (__cos) (wrap_type_t);
+
+double
+__cos (double x)
+{
+ return (double) WRAP_FUNC (__cos) ((wrap_type_t) x);
+}
+
+weak_alias (__cos, cos)
+weak_alias (__sin, sin)
+
+#ifdef NO_LONG_DOUBLE
+strong_alias (__sin, __sinl)
+weak_alias (__sin, sinl)
+strong_alias (__cos, __cosl)
+weak_alias (__cos, cosl)
+#endif
Added: trunk/libc/sysdeps/ieee754/dbl-wrap/s_tan.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/dbl-wrap/s_tan.c (added)
+++ trunk/libc/sysdeps/ieee754/dbl-wrap/s_tan.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,13 @@
+#include "dbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (tan) (wrap_type_t);
+
+double
+tan (double x)
+{
+ return (double) WRAP_FUNC (tan) ((wrap_type_t) x);
+}
+
+#ifdef NO_LONG_DOUBLE
+weak_alias (tan, tanl)
+#endif
Modified: trunk/libc/sysdeps/ieee754/ldbl-128/s_erfl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-128/s_erfl.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-128/s_erfl.c Thu Nov 19 08:20:05 2009
@@ -98,6 +98,9 @@
#include "math.h"
#include "math_private.h"
+#include <gnu/option-groups.h>
+
+#if __OPTION_EGLIBC_LIBM_BIG
/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */
@@ -948,4 +951,9 @@
}
}
+#else /* !__OPTION_EGLIBC_LIBM_BIG */
+# include <sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c>
+weak_alias (__erfl, erfl)
+#endif /* __OPTION_EGLIBC_LIBM_BIG */
+
weak_alias (__erfcl, erfcl)
Modified: trunk/libc/sysdeps/ieee754/ldbl-128/s_log1pl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-128/s_log1pl.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-128/s_log1pl.c Thu Nov 19 08:20:05 2009
@@ -55,6 +55,9 @@
#include "math.h"
#include "math_private.h"
+#include <gnu/option-groups.h>
+
+#if __OPTION_EGLIBC_LIBM_BIG
/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x)
* 1/sqrt(2) <= 1+x < sqrt(2)
@@ -246,4 +249,8 @@
return (z);
}
+#else /* !__OPTION_EGLIBC_LIBM_BIG */
+# include <sysdeps/ieee754/ldbl-wrap/s_log1pl-wrap.c>
+#endif /* __OPTION_EGLIBC_LIBM_BIG */
+
weak_alias (__log1pl, log1pl)
Modified: trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_erfl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_erfl.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_erfl.c Thu Nov 19 08:20:05 2009
@@ -99,6 +99,9 @@
#include "math.h"
#include "math_private.h"
#include <math_ldbl_opt.h>
+#include <gnu/option-groups.h>
+
+#if __OPTION_EGLIBC_LIBM_BIG
/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */
@@ -955,4 +958,9 @@
}
}
+#else /* !__OPTION_EGLIBC_LIBM_BIG */
+# include <sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c>
+long_double_symbol (libm, __erfl, erfl);
+#endif /* __OPTION_EGLIBC_LIBM_BIG */
+
long_double_symbol (libm, __erfcl, erfcl);
Modified: trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c Thu Nov 19 08:20:05 2009
@@ -56,6 +56,9 @@
#include "math.h"
#include "math_private.h"
#include <math_ldbl_opt.h>
+#include <gnu/option-groups.h>
+
+#if __OPTION_EGLIBC_LIBM_BIG
/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x)
* 1/sqrt(2) <= 1+x < sqrt(2)
@@ -248,4 +251,8 @@
return (z);
}
+#else /* !__OPTION_EGLIBC_LIBM_BIG */
+# include <sysdeps/ieee754/ldbl-wrap/s_log1pl-wrap.c>
+#endif /* __OPTION_EGLIBC_LIBM_BIG */
+
long_double_symbol (libm, __log1pl, log1pl);
Modified: trunk/libc/sysdeps/ieee754/ldbl-96/s_erfl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-96/s_erfl.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-96/s_erfl.c Thu Nov 19 08:20:05 2009
@@ -106,6 +106,9 @@
#include "math.h"
#include "math_private.h"
+#include <gnu/option-groups.h>
+
+#if __OPTION_EGLIBC_LIBM_BIG
#ifdef __STDC__
static const long double
@@ -451,4 +454,9 @@
}
}
+#else /* !__OPTION_EGLIBC_LIBM_BIG */
+# include <sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c>
+weak_alias (__erfl, erfl)
+#endif /* __OPTION_EGLIBC_LIBM_BIG */
+
weak_alias (__erfcl, erfcl)
Modified: trunk/libc/sysdeps/ieee754/ldbl-opt/s_atan.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-opt/s_atan.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-opt/s_atan.c Thu Nov 19 08:20:05 2009
@@ -1,5 +1,10 @@
#include <math_ldbl_opt.h>
-#include <sysdeps/ieee754/dbl-64/s_atan.c>
+#include <gnu/option-groups.h>
+#if __OPTION_EGLIBC_LIBM_BIG
+# include <sysdeps/ieee754/dbl-64/s_atan.c>
+#else
+# include <sysdeps/ieee754/dbl-wrap/s_atan.c>
+#endif
#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
compat_symbol (libm, atan, atanl, GLIBC_2_0);
#endif
Modified: trunk/libc/sysdeps/ieee754/ldbl-opt/s_sin.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-opt/s_sin.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-opt/s_sin.c Thu Nov 19 08:20:05 2009
@@ -1,9 +1,14 @@
/* dbl-64/s_sin.c uses NAN and sincos identifiers internally. */
#define sincos sincos_disable
#include <math_ldbl_opt.h>
+#include <gnu/option-groups.h>
#undef NAN
#undef sincos
-#include <sysdeps/ieee754/dbl-64/s_sin.c>
+#if __OPTION_EGLIBC_LIBM_BIG
+# include <sysdeps/ieee754/dbl-64/s_sin.c>
+#else
+# include <sysdeps/ieee754/dbl-wrap/s_sin.c>
+#endif
#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
compat_symbol (libm, __sin, sinl, GLIBC_2_0);
compat_symbol (libm, __cos, cosl, GLIBC_2_0);
Modified: trunk/libc/sysdeps/ieee754/ldbl-opt/s_tan.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-opt/s_tan.c (original)
+++ trunk/libc/sysdeps/ieee754/ldbl-opt/s_tan.c Thu Nov 19 08:20:05 2009
@@ -1,5 +1,10 @@
#include <math_ldbl_opt.h>
-#include <sysdeps/ieee754/dbl-64/s_tan.c>
+#include <gnu/option-groups.h>
+#if __OPTION_EGLIBC_LIBM_BIG
+# include <sysdeps/ieee754/dbl-64/s_tan.c>
+#else
+# include <sysdeps/ieee754/dbl-wrap/s_tan.c>
+#endif
#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
compat_symbol (libm, tan, tanl, GLIBC_2_0);
#endif
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_acosl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_acosl.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_acosl.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_acos) (wrap_type_t);
+
+long double
+__ieee754_acosl (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_acos) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_asinl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_asinl.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_asinl.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_asin) (wrap_type_t);
+
+long double
+__ieee754_asinl (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_asin) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_expl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_expl.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_expl.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_exp) (wrap_type_t);
+
+long double
+__ieee754_expl (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_exp) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j0l.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j0l.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j0l.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,17 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_j0) (wrap_type_t);
+
+long double
+__ieee754_j0l (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_j0) ((wrap_type_t) x);
+}
+
+wrap_type_t WRAP_FUNC (__ieee754_y0) (wrap_type_t);
+
+long double
+__ieee754_y0l (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_y0) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j1l.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j1l.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_j1l.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,17 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_j1) (wrap_type_t);
+
+long double
+__ieee754_j1l (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_j1) ((wrap_type_t) x);
+}
+
+wrap_type_t WRAP_FUNC (__ieee754_y1) (wrap_type_t);
+
+long double
+__ieee754_y1l (long double x)
+{
+ return (long double) WRAP_FUNC (__ieee754_y1) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_lgammal_r.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_lgammal_r.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_lgammal_r.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC2 (__ieee754_lgamma, _r) (wrap_type_t, int *);
+
+long double
+__ieee754_lgammal_r (long double x, int *s)
+{
+ return (long double) WRAP_FUNC2 (__ieee754_lgamma, _r) ((wrap_type_t) x, s);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/e_powl.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/e_powl.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/e_powl.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,10 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__ieee754_pow) (wrap_type_t, wrap_type_t);
+
+long double
+__ieee754_powl (long double x, long double y)
+{
+ return (long double) WRAP_FUNC (__ieee754_pow) ((wrap_type_t) x,
+ (wrap_type_t) y);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/ldbl-wrap.h
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/ldbl-wrap.h (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/ldbl-wrap.h Thu Nov 19 08:20:05 2009
@@ -1,0 +1,3 @@
+typedef float wrap_type_t;
+#define WRAP_FUNC(func) func ## f
+#define WRAP_FUNC2(func, suffix) func ## f ## suffix
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/s_erfl-wrap.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,17 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__erf) (wrap_type_t);
+
+long double
+__erfl (long double x)
+{
+ return (long double) WRAP_FUNC (__erf) ((wrap_type_t) x);
+}
+
+wrap_type_t WRAP_FUNC (__erfc) (wrap_type_t);
+
+long double
+__erfcl (long double x)
+{
+ return (long double) WRAP_FUNC (__erfc) ((wrap_type_t) x);
+}
Added: trunk/libc/sysdeps/ieee754/ldbl-wrap/s_log1pl-wrap.c
==============================================================================
--- trunk/libc/sysdeps/ieee754/ldbl-wrap/s_log1pl-wrap.c (added)
+++ trunk/libc/sysdeps/ieee754/ldbl-wrap/s_log1pl-wrap.c Thu Nov 19 08:20:05 2009
@@ -1,0 +1,9 @@
+#include "ldbl-wrap.h"
+
+wrap_type_t WRAP_FUNC (__log1p) (wrap_type_t);
+
+long double
+__log1pl (long double x)
+{
+ return (long double) WRAP_FUNC (__log1p) ((wrap_type_t) x);
+}