This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]