This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Blind attempt at alpha long double glibc switch, looking for testers
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: Balint Cristian <cristian dot balint at oradea dot rdsnet dot ro>, Glibc <libc-alpha at sources dot redhat dot com>
- Date: Tue, 31 Jan 2006 18:05:21 +0100
- Subject: [PATCH] Blind attempt at alpha long double glibc switch, looking for testers
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
I don't have access to any alphas these days, so this patch was created just
by looking at the sources.
It is against current CVS glibc plus
http://sources.redhat.com/ml/libc-hacker/2006-01/msg00104.html
(for multc3.c/divtc3.c).
Can anybody please try it and report how it went?
Thanks.
2006-01-31 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/alpha/bits/wordsize.h: New file.
* sysdeps/unix/sysv/linux/alpha/fpu/Implies: New file.
* sysdeps/unix/sysv/linux/alpha/fpu/Makefile: New file.
* sysdeps/unix/sysv/linux/alpha/fpu/divtc3.c: New file.
* sysdeps/unix/sysv/linux/alpha/fpu/multc3.c: New file.
* sysdeps/unix/sysv/linux/alpha/nldbl-abi.h: New file.
* sysdeps/alpha/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove.
* sysdeps/alpha/fpu/s_ceil.c: Include math_ldbl_opt.h, add
compat_symbol if LONG_DOUBLE_COMPAT.
* sysdeps/alpha/fpu/s_copysign.c: Likewise.
* sysdeps/alpha/fpu/s_fabs.c: Likewise.
* sysdeps/alpha/fpu/s_floor.c: Likewise.
* sysdeps/alpha/fpu/s_rint.c: Likewise.
* sysdeps/alpha/soft-fp/e_sqrtl.c: New file.
* sysdeps/alpha/Implies: Add ieee754/ldbl-128.
--- libc/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h.jj 2006-01-31 17:39:11.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h 2006-01-31 17:39:41.000000000 +0100
@@ -0,0 +1,30 @@
+/* Copyright (C) 1999, 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#define __WORDSIZE 64
+
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
+
+/* Signal that we didn't used to have a `long double'. The changes all
+ the `long double' function variants to be redirects to the double
+ functions. */
+# define __LONG_DOUBLE_MATH_OPTIONAL 1
+# ifndef __LONG_DOUBLE_128__
+# define __NO_LONG_DOUBLE_MATH 1
+# endif
+#endif
--- libc/sysdeps/unix/sysv/linux/alpha/fpu/Implies.jj 2006-01-31 16:46:11.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/alpha/fpu/Implies 2006-01-31 17:37:51.000000000 +0100
@@ -0,0 +1,5 @@
+# Override ldbl-opt with alpha specific routines.
+alpha/fpu
+# These supply the ABI compatibility for when long double was double.
+ieee754/ldbl-64-128
+ieee754/ldbl-opt
--- libc/sysdeps/unix/sysv/linux/alpha/fpu/divtc3.c.jj 2006-01-31 17:45:29.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/alpha/fpu/divtc3.c 2006-01-31 17:45:24.000000000 +0100
@@ -0,0 +1 @@
+#include "../../sparc/sparc32/fpu/divtc3.c"
--- libc/sysdeps/unix/sysv/linux/alpha/fpu/Makefile.jj 2006-01-31 16:09:48.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/alpha/fpu/Makefile 2006-01-31 17:45:05.000000000 +0100
@@ -0,0 +1,9 @@
+ifeq ($(subdir),math)
+# These 2 routines are normally in libgcc{.a,_s.so.1}.
+# However, alpha -mlong-double-128 libgcc relies on
+# glibc providing _Ots* routines and without these files
+# glibc relies on __multc3/__divtc3 only provided
+# by libgcc if configured with -mlong-double-128.
+# Provide these routines here as well.
+libm-routines += multc3 divtc3
+endif # math
--- libc/sysdeps/unix/sysv/linux/alpha/fpu/multc3.c.jj 2006-01-31 17:45:29.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/alpha/fpu/multc3.c 2006-01-31 17:45:41.000000000 +0100
@@ -0,0 +1 @@
+#include "../../sparc/sparc32/fpu/multc3.c"
--- libc/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h.jj 2006-01-31 17:38:20.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h 2006-01-31 17:38:16.000000000 +0100
@@ -0,0 +1,8 @@
+/* ABI version for long double switch.
+ This is used by the Versions and math_ldbl_opt.h files in
+ sysdeps/ieee754/ldbl-opt/. It gives the ABI version where
+ long double == double was replaced with proper long double
+ for libm *l functions and libc functions using long double. */
+
+#define NLDBL_VERSION GLIBC_2.4
+#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4
--- libc/sysdeps/alpha/fpu/bits/mathdef.h.jj 2004-03-16 13:30:04.000000000 +0100
+++ libc/sysdeps/alpha/fpu/bits/mathdef.h 2006-01-31 17:42:51.000000000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004
+/* Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -55,12 +55,6 @@ typedef double double_t;
#endif /* ISO C99 && MATH_H */
-#ifndef __NO_LONG_DOUBLE_MATH
-/* Signal that we do not really have a `long double'. The disables the
- declaration of all the `long double' function variants. */
-# define __NO_LONG_DOUBLE_MATH 1
-#endif
-
#if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF
# define _COMPLEX_H_MATHDEF 1
# if defined(__GNUC__) && !__GNUC_PREREQ(3,4)
--- libc/sysdeps/alpha/fpu/s_ceil.c.jj 2001-07-06 06:55:47.000000000 +0200
+++ libc/sysdeps/alpha/fpu/s_ceil.c 2006-01-31 16:48:11.000000000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson.
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include <math.h>
+#include <math_ldbl_opt.h>
/* Use the -inf rounding mode conversion instructions to implement
ceil, via something akin to -floor(-x). This is much faster than
@@ -52,3 +53,6 @@ weak_alias (__ceil, ceil)
strong_alias (__ceil, __ceill)
weak_alias (__ceil, ceill)
#endif
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __ceil, ceill, GLIBC_2_0);
+#endif
--- libc/sysdeps/alpha/fpu/s_copysign.c.jj 2001-07-06 06:55:47.000000000 +0200
+++ libc/sysdeps/alpha/fpu/s_copysign.c 2006-01-31 16:49:07.000000000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson.
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include <math.h>
+#include <math_ldbl_opt.h>
double
__copysign (double x, double y)
@@ -31,3 +32,10 @@ weak_alias (__copysign, copysign)
strong_alias (__copysign, __copysignl)
weak_alias (__copysign, copysignl)
#endif
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __copysign, copysignl, GLIBC_2_0);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __copysign, copysignl, GLIBC_2_0);
+#endif
--- libc/sysdeps/alpha/fpu/s_fabs.c.jj 2001-07-06 06:55:47.000000000 +0200
+++ libc/sysdeps/alpha/fpu/s_fabs.c 2006-01-31 17:02:55.000000000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson.
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include <math.h>
+#include <math_ldbl_opt.h>
double
__fabs (double x)
@@ -35,3 +36,6 @@ weak_alias (__fabs, fabs)
strong_alias (__fabs, __fabsl)
weak_alias (__fabs, fabsl)
#endif
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __fabs, fabsl, GLIBC_2_0);
+#endif
--- libc/sysdeps/alpha/fpu/s_floor.c.jj 2001-07-06 06:55:47.000000000 +0200
+++ libc/sysdeps/alpha/fpu/s_floor.c 2006-01-31 17:03:27.000000000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson.
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include <math.h>
+#include <math_ldbl_opt.h>
/* Use the -inf rounding mode conversion instructions to implement
@@ -53,3 +54,6 @@ weak_alias (__floor, floor)
strong_alias (__floor, __floorl)
weak_alias (__floor, floorl)
#endif
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __floor, floorl, GLIBC_2_0);
+#endif
--- libc/sysdeps/alpha/fpu/s_rint.c.jj 2001-07-06 06:55:47.000000000 +0200
+++ libc/sysdeps/alpha/fpu/s_rint.c 2006-01-31 17:03:59.000000000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson.
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include <math.h>
+#include <math_ldbl_opt.h>
double
@@ -48,3 +49,6 @@ weak_alias (__rint, rint)
strong_alias (__rint, __rintl)
weak_alias (__rint, rintl)
#endif
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __rint, rintl, GLIBC_2_0);
+#endif
--- libc/sysdeps/alpha/soft-fp/e_sqrtl.c.jj 2006-01-31 17:32:12.000000000 +0100
+++ libc/sysdeps/alpha/soft-fp/e_sqrtl.c 2006-01-31 17:32:52.000000000 +0100
@@ -0,0 +1,37 @@
+/* Software floating-point emulation.
+ Return sqrtl(a)
+ Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include "local-soft-fp.h"
+
+long double __ieee754_sqrtl (const long double a)
+{
+ FP_DECL_EX;
+ FP_DECL_Q(A); FP_DECL_Q(C);
+ long double c;
+
+ FP_INIT_ROUNDMODE;
+ FP_UNPACK_Q(A, a);
+ FP_SQRT_Q(C, A);
+ FP_PACK_Q(c, C);
+ FP_HANDLE_EXCEPTIONS;
+ return c;
+}
--- libc/sysdeps/alpha/Implies.jj 2004-03-08 12:01:50.000000000 +0100
+++ libc/sysdeps/alpha/Implies 2006-01-31 17:43:41.000000000 +0100
@@ -1,5 +1,6 @@
wordsize-64
-# Alpha uses IEEE 754 single and double precision floating point.
-ieee754/flt-32
+# Alpha uses IEEE 754 single, double and quad precision floating point.
+ieee754/ldbl-128
ieee754/dbl-64
+ieee754/flt-32
alpha/soft-fp
Jakub