[PATCH] Blind attempt at alpha long double glibc switch, looking for testers

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Blind attempt at alpha long double glibc switch, looking for testers

Jakub Jelinek
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  <[hidden email]>

        * 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 ([hidden email]) and
+  Jakub Jelinek ([hidden email]).
+
+   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
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Blind attempt at alpha long double glibc switch, looking for testers

Roland McGrath
I had roughly the same changes in a tree of mine last week.  I've committed
them now, since we know we want to make the change.  If there are any
mistakes we can fix them up later when someone can test on an Alpha.


Thanks,
Roland