public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim
  2016-08-04  1:09 [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 Aurelien Jarno
@ 2016-08-04  1:09 ` Aurelien Jarno
  2016-08-26 14:25   ` Paul E. Murphy
  2016-08-04  1:09 ` [PATCH 2/3] sparc: remove fdim sparc specific implementations Aurelien Jarno
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Aurelien Jarno @ 2016-08-04  1:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: David Miller, Aurelien Jarno

sparc32 passes floating point values in the integer registers. VIS3
instructions gives access to the movwtos instruction to directly
transfer a value from an integer register to a floating point register.
Therefore it makes sense to provide a VIS3 version consisting in the
generic version compiled with -mvis3.

Changelog:
	* math/s_fdim.c: Avoid alias renamed.
	* math/s_fdimf.c: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
	[$(subdir) = math && $(have-as-vis3) = yes] (libm-sysdep_routines):
	Add s_fdimf-vis3, s_fdim-vis3.
	(CFLAGS-s_fdimf-vis3.c): New. Set to -Wa,-Av9d -mvis3.
	(CFLAGS-s_fdim-vis3.c): Likewise.
	sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c: New file.
	sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c: Likewise.
---
 ChangeLog                                          | 12 ++++++++
 math/s_fdim.c                                      |  4 ++-
 math/s_fdimf.c                                     |  2 ++
 .../sparc/sparc32/sparcv9/fpu/multiarch/Makefile   |  5 +++-
 .../sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c    | 23 ++++++++++++++++
 .../sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c   | 32 ++++++++++++++++++++++
 .../sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c   | 23 ++++++++++++++++
 .../sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c  | 32 ++++++++++++++++++++++
 8 files changed, 131 insertions(+), 2 deletions(-)
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c

diff --git a/ChangeLog b/ChangeLog
index 1effe19..3f36ff9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2016-08-04  Aurelien Jarno  <aurelien@aurel32.net>
 
+	* math/s_fdim.c: Avoid alias renamed.
+	* math/s_fdimf.c: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
+	[$(subdir) = math && $(have-as-vis3) = yes] (libm-sysdep_routines):
+	Add s_fdimf-vis3, s_fdim-vis3.
+	(CFLAGS-s_fdimf-vis3.c): New. Set to -Wa,-Av9d -mvis3.
+	(CFLAGS-s_fdim-vis3.c): Likewise.
+	sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c: New file.
+	sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c: Likewise.
+
+2016-08-04  Aurelien Jarno  <aurelien@aurel32.net>
+
 	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
 	[$(subdir) = math && $(have-as-vis3) = yes] (libm-sysdep_routines):
 	Remove s_fdimf-vis3, s_fdim-vis3.
diff --git a/math/s_fdim.c b/math/s_fdim.c
index a051ed8..1786521 100644
--- a/math/s_fdim.c
+++ b/math/s_fdim.c
@@ -33,8 +33,10 @@ __fdim (double x, double y)
 
   return r;
 }
+#ifndef __fdim
 weak_alias (__fdim, fdim)
-#ifdef NO_LONG_DOUBLE
+# ifdef NO_LONG_DOUBLE
 strong_alias (__fdim, __fdiml)
 weak_alias (__fdim, fdiml)
+# endif
 #endif
diff --git a/math/s_fdimf.c b/math/s_fdimf.c
index 8aed61d..e457f9d 100644
--- a/math/s_fdimf.c
+++ b/math/s_fdimf.c
@@ -33,4 +33,6 @@ __fdimf (float x, float y)
 
   return r;
 }
+#ifndef __fdimf
 weak_alias (__fdimf, fdimf)
+#endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
index 13d3c6d..4489b70 100644
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
@@ -5,7 +5,10 @@ libm-sysdep_routines += m_copysignf-vis3 m_copysign-vis3 s_fabs-vis3 \
 			s_rintf-vis3 s_rint-vis3 w_sqrt-vis3 w_sqrtf-vis3 \
 			s_fminf-vis3 s_fmin-vis3 s_fmaxf-vis3 s_fmax-vis3 \
 			s_fmaf-vis3 s_fma-vis3 s_nearbyint-vis3 \
-			s_nearbyintf-vis3
+			s_nearbyintf-vis3 s_fdimf-vis3 s_fdim-vis3
 sysdep_routines += s_copysignf-vis3 s_copysign-vis3
+
+CFLAGS-s_fdimf-vis3.c += -Wa,-Av9d -mvis3
+CFLAGS-s_fdim-vis3.c += -Wa,-Av9d -mvis3
 endif
 endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
new file mode 100644
index 0000000..2973b49
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
@@ -0,0 +1,23 @@
+/* Compute positive difference, sparc 32-bit+v9+vis3.
+   Copyright (C) 2016 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+#define __fdim __fdim_vis3
+
+#include <math/s_fdim.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
new file mode 100644
index 0000000..c9c7704
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
@@ -0,0 +1,32 @@
+/* Compute positive difference, sparc 32-bit.
+   Copyright (C) 2016 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_AS_VIS3_SUPPORT
+# include <sparc-ifunc.h>
+# include <math.h>
+
+extern double __fdim_vis3 (double, double);
+extern double __fdim_generic (double, double);
+
+sparc_libm_ifunc(__fdim, hwcap & HWCAP_SPARC_VIS3 ? __fdim_vis3 : __fdim_generic);
+weak_alias (__fdim, fdim)
+
+# define __fdim __fdim_generic
+#endif
+
+#include <math/s_fdim.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c
new file mode 100644
index 0000000..75997c6
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c
@@ -0,0 +1,23 @@
+/* Float compute positive difference, sparc 32-bit+v9+vis3.
+   Copyright (C) 2016 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+#define __fdimf __fdimf_vis3
+
+#include <math/s_fdimf.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c
new file mode 100644
index 0000000..767520f
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c
@@ -0,0 +1,32 @@
+/* Float compute positive difference, sparc 32-bit.
+   Copyright (C) 2016 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_AS_VIS3_SUPPORT
+# include <sparc-ifunc.h>
+# include <math.h>
+
+extern float __fdimf_vis3 (float, float);
+extern float __fdimf_generic (float, float);
+
+sparc_libm_ifunc(__fdimf, hwcap & HWCAP_SPARC_VIS3 ? __fdimf_vis3 : __fdimf_generic);
+weak_alias (__fdimf, fdimf)
+
+# define __fdimf __fdimf_generic
+#endif
+
+#include <math/s_fdimf.c>
-- 
2.8.1

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/3] sparc: remove fdim sparc specific implementations
  2016-08-04  1:09 [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 Aurelien Jarno
  2016-08-04  1:09 ` [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim Aurelien Jarno
@ 2016-08-04  1:09 ` Aurelien Jarno
  2016-08-04  5:19 ` [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 David Miller
  2016-08-04 11:29 ` Mike Frysinger
  3 siblings, 0 replies; 12+ messages in thread
From: Aurelien Jarno @ 2016-08-04  1:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: David Miller, Aurelien Jarno

The fdim and fdimf functions on sparc do not fully follow the standard
and do not set errno to ERANGE when the result overflows. Since glibc
2.24 this causes the two following tests to fail:

  Failure: fdim (max_value, -max_value): errno set to 0, expected 34 (ERANGE)
  Failure: fdim_upward (max_value, -max_value): errno set to 0, expected 34 (ERANGE)

It happens that using GCC with the generic C code generates very similar
code to the sparc specific implementations. Therefore this patches
remove them. Note it might still worth adding a vis3 specific version of
fdim on sparc32/sparcv9, this is done in a following patch to ease
backporting.

Changelog:
	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
	[$(subdir) = math && $(have-as-vis3) = yes] (libm-sysdep_routines):
	Remove s_fdimf-vis3, s_fdim-vis3.
	* sysdeps/sparc/sparc32/fpu/s_fdim.S: Delete file.
	* sysdeps/sparc/sparc32/fpu/s_fdimf.S: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S: Likewise.
	* sysdeps/sparc/sparc64/fpu/s_fdim.S: Likewise.
	* sysdeps/sparc/sparc64/fpu/s_fdimf.S: Likewise.
---
 ChangeLog                                          | 16 +++++++++
 sysdeps/sparc/sparc32/fpu/s_fdim.S                 | 42 ----------------------
 sysdeps/sparc/sparc32/fpu/s_fdimf.S                | 35 ------------------
 .../sparc/sparc32/sparcv9/fpu/multiarch/Makefile   |  4 +--
 .../sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S    | 34 ------------------
 .../sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S   | 19 ----------
 .../sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S   | 32 -----------------
 .../sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S  | 12 -------
 sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S         | 40 ---------------------
 sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S        | 35 ------------------
 sysdeps/sparc/sparc64/fpu/s_fdim.S                 | 32 -----------------
 sysdeps/sparc/sparc64/fpu/s_fdimf.S                | 31 ----------------
 12 files changed, 18 insertions(+), 314 deletions(-)
 delete mode 100644 sysdeps/sparc/sparc32/fpu/s_fdim.S
 delete mode 100644 sysdeps/sparc/sparc32/fpu/s_fdimf.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S
 delete mode 100644 sysdeps/sparc/sparc64/fpu/s_fdim.S
 delete mode 100644 sysdeps/sparc/sparc64/fpu/s_fdimf.S

diff --git a/ChangeLog b/ChangeLog
index c3fe9fa..1effe19 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
 2016-08-04  Aurelien Jarno  <aurelien@aurel32.net>
 
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
+	[$(subdir) = math && $(have-as-vis3) = yes] (libm-sysdep_routines):
+	Remove s_fdimf-vis3, s_fdim-vis3.
+	* sysdeps/sparc/sparc32/fpu/s_fdim.S: Delete file.
+	* sysdeps/sparc/sparc32/fpu/s_fdimf.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S: Likewise.
+	* sysdeps/sparc/sparc64/fpu/s_fdim.S: Likewise.
+	* sysdeps/sparc/sparc64/fpu/s_fdimf.S: Likewise.
+
+2016-08-04  Aurelien Jarno  <aurelien@aurel32.net>
+
 	* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Add -mvis.
 	* sysdeps/sparc/sparc64/Makefile (sysdep-CFLAGS): New. Define to
 	-Wa,-Av9a -mvis.
diff --git a/sysdeps/sparc/sparc32/fpu/s_fdim.S b/sysdeps/sparc/sparc32/fpu/s_fdim.S
deleted file mode 100644
index e93970f..0000000
--- a/sysdeps/sparc/sparc32/fpu/s_fdim.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Compute positive difference, sparc 32-bit.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <math_ldbl_opt.h>
-
-ENTRY(__fdim)
-	std	%o0, [%sp + 72]
-	std	%o2, [%sp + 80]
-	ldd	[%sp + 72], %f0
-	ldd	[%sp + 80], %f2
-	fcmpd	%f0, %f2
-	st	%g0, [%sp + 72]
-	fbug	1f
-	 st	%g0, [%sp + 76]
-	ldd	[%sp + 72], %f0
-	fnegs	%f0, %f2
-	fmovs	%f1, %f3
-1:	retl
-	 fsubd	%f0, %f2, %f0
-END(__fdim)
-weak_alias (__fdim, fdim)
-
-#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
-compat_symbol (libm, __fdim, fdiml, GLIBC_2_1);
-#endif
diff --git a/sysdeps/sparc/sparc32/fpu/s_fdimf.S b/sysdeps/sparc/sparc32/fpu/s_fdimf.S
deleted file mode 100644
index c3fe8af..0000000
--- a/sysdeps/sparc/sparc32/fpu/s_fdimf.S
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Compute positive difference, sparc 32-bit.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-ENTRY(__fdimf)
-	st	%o0, [%sp + 72]
-	st	%o1, [%sp + 76]
-	ld	[%sp + 72], %f0
-	ld	[%sp + 76], %f1
-	fcmps	%f0, %f1
-	fbug	1f
-	 st	%g0, [%sp + 72]
-	ld	[%sp + 72], %f0
-	fnegs	%f0, %f1
-1:	retl
-	 fsubs	%f0, %f1, %f0
-END(__fdimf)
-weak_alias (__fdimf, fdimf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
index ebbe28b..13d3c6d 100644
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
@@ -4,8 +4,8 @@ libm-sysdep_routines += m_copysignf-vis3 m_copysign-vis3 s_fabs-vis3 \
 			s_fabsf-vis3 s_llrintf-vis3 s_llrint-vis3 \
 			s_rintf-vis3 s_rint-vis3 w_sqrt-vis3 w_sqrtf-vis3 \
 			s_fminf-vis3 s_fmin-vis3 s_fmaxf-vis3 s_fmax-vis3 \
-			s_fmaf-vis3 s_fma-vis3 s_fdimf-vis3 s_fdim-vis3 \
-			s_nearbyint-vis3 s_nearbyintf-vis3
+			s_fmaf-vis3 s_fma-vis3 s_nearbyint-vis3 \
+			s_nearbyintf-vis3
 sysdep_routines += s_copysignf-vis3 s_copysign-vis3
 endif
 endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S
deleted file mode 100644
index 4a479b1..0000000
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Compute positive difference, sparc 32-bit+v9+vis3.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-ENTRY(__fdim_vis3)
-	movwtos	%o0, %f0
-	movwtos	%o1, %f1
-	movwtos	%o2, %f2
-	movwtos	%o3, %f3
-	fcmpd	%f0, %f2
-	fbug	1f
-	 nop
-	fzero	%f0
-	fnegd	%f0, %f2
-1:	retl
-	 fsubd	%f0, %f2, %f0
-END(__fdim_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S
deleted file mode 100644
index 4b13408..0000000
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.S
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <sparc-ifunc.h>
-#include <math_ldbl_opt.h>
-
-SPARC_ASM_VIS3_IFUNC(fdim)
-
-weak_alias (__fdim, fdim)
-
-#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
-compat_symbol (libm, __fdim, fdiml, GLIBC_2_1);
-#endif
-
-# undef weak_alias
-# define weak_alias(a, b)
-# undef compat_symbol
-# define compat_symbol(a, b, c, d)
-
-#define __fdim __fdim_generic
-
-#include "../s_fdim.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S
deleted file mode 100644
index 081fc15..0000000
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.S
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Compute positive difference, sparc 32-bit+v9+vis3.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-ENTRY(__fdimf_vis3)
-	movwtos	%o0, %f0
-	movwtos	%o1, %f1
-	fcmps	%f0, %f1
-	fbug	1f
-	 nop
-	fzeros	%f0
-	fnegs	%f0, %f1
-1:	retl
-	 fsubs	%f0, %f1, %f0
-END(__fdimf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S
deleted file mode 100644
index 30381d6..0000000
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.S
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <sparc-ifunc.h>
-
-SPARC_ASM_VIS3_IFUNC(fdimf)
-
-weak_alias (__fdimf, fdimf)
-
-# undef weak_alias
-# define weak_alias(a, b)
-
-#define __fdimf __fdimf_generic
-
-#include "../s_fdimf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S
deleted file mode 100644
index 37f7f44..0000000
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fdim.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Compute positive difference, sparc 32-bit+v9.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <math_ldbl_opt.h>
-
-ENTRY(__fdim)
-	std	%o0, [%sp + 72]
-	std	%o2, [%sp + 80]
-	ldd	[%sp + 72], %f0
-	ldd	[%sp + 80], %f2
-	fcmpd	%f0, %f2
-	fbug	1f
-	 nop
-	fzero	%f0
-	fnegd	%f0, %f2
-1:	retl
-	 fsubd	%f0, %f2, %f0
-END(__fdim)
-weak_alias (__fdim, fdim)
-
-#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
-compat_symbol (libm, __fdim, fdiml, GLIBC_2_1);
-#endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S
deleted file mode 100644
index 9e0e3f2..0000000
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fdimf.S
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Compute positive difference, sparc 32-bit+v9.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-ENTRY(__fdimf)
-	st	%o0, [%sp + 72]
-	st	%o1, [%sp + 76]
-	ld	[%sp + 72], %f0
-	ld	[%sp + 76], %f1
-	fcmps	%f0, %f1
-	fbug	1f
-	 nop
-	fzeros	%f0
-	fnegs	%f0, %f1
-1:	retl
-	 fsubs	%f0, %f1, %f0
-END(__fdimf)
-weak_alias (__fdimf, fdimf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_fdim.S b/sysdeps/sparc/sparc64/fpu/s_fdim.S
deleted file mode 100644
index 7fae72a..0000000
--- a/sysdeps/sparc/sparc64/fpu/s_fdim.S
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Compute positive difference, sparc 64-bit.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <math_ldbl_opt.h>
-
-ENTRY(__fdim)
-	fcmpd	%f0, %f2
-	fbug	1f
-	 nop
-	fzero	%f0
-	fnegd	%f0, %f2
-1:	retl
-	 fsubd	%f0, %f2, %f0
-END(__fdim)
-weak_alias (__fdim, fdim)
diff --git a/sysdeps/sparc/sparc64/fpu/s_fdimf.S b/sysdeps/sparc/sparc64/fpu/s_fdimf.S
deleted file mode 100644
index 356c23c..0000000
--- a/sysdeps/sparc/sparc64/fpu/s_fdimf.S
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Compute positive difference, sparc 64-bit.
-   Copyright (C) 2013-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by David S. Miller <davem@davemloft.net>.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-ENTRY(__fdimf)
-	fcmps	%f1, %f3
-	fbug	1f
-	 nop
-	fzeros	%f1
-	fnegs	%f1, %f3
-1:	retl
-	 fsubs	%f1, %f3, %f0
-END(__fdimf)
-weak_alias (__fdimf, fdimf)
-- 
2.8.1

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64
@ 2016-08-04  1:09 Aurelien Jarno
  2016-08-04  1:09 ` [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim Aurelien Jarno
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Aurelien Jarno @ 2016-08-04  1:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: David Miller, Aurelien Jarno

When building for sparc32/sparcv9 or sparc64, we assume that VIS
instructions are available and use them in the sparc specific assembly
code. However we do not tell GCC to use such instructions, resulting in
slightly suboptimal code.

Fix that by passing -Wa,-Av9a -mvis to GCC.

Changelog:
	* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Add -mvis.
	* sysdeps/sparc/sparc64/Makefile (sysdep-CFLAGS): New. Define to
	-Wa,-Av9a -mvis.
---
 ChangeLog                              | 6 ++++++
 sysdeps/sparc/sparc32/sparcv9/Makefile | 2 +-
 sysdeps/sparc/sparc64/Makefile         | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index ac692dc..c3fe9fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-08-04  Aurelien Jarno  <aurelien@aurel32.net>
+
+	* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Add -mvis.
+	* sysdeps/sparc/sparc64/Makefile (sysdep-CFLAGS): New. Define to
+	-Wa,-Av9a -mvis.
+
 2016-08-03  Joseph Myers  <joseph@codesourcery.com>
 
 	* bits/libc-header-start.h (__GLIBC_USE_IEC_60559_FUNCS_EXT): New
diff --git a/sysdeps/sparc/sparc32/sparcv9/Makefile b/sysdeps/sparc/sparc32/sparcv9/Makefile
index fefc742..08c5a96 100644
--- a/sysdeps/sparc/sparc32/sparcv9/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/Makefile
@@ -1,4 +1,4 @@
-sysdep-CFLAGS += -mcpu=ultrasparc -Wa,-Av9a
+sysdep-CFLAGS += -mcpu=ultrasparc -Wa,-Av9a -mvis
 
 ifeq ($(have-as-vis3),yes)
 ASFLAGS-.o += -Wa,-Av9d
diff --git a/sysdeps/sparc/sparc64/Makefile b/sysdeps/sparc/sparc64/Makefile
index 3a12510..fbabf69 100644
--- a/sysdeps/sparc/sparc64/Makefile
+++ b/sysdeps/sparc/sparc64/Makefile
@@ -1,3 +1,5 @@
+sysdep-CFLAGS += -Wa,-Av9a -mvis
+
 ifeq ($(subdir),string)
 sysdep_routines += align-cpy
 endif
-- 
2.8.1

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64
  2016-08-04  1:09 [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 Aurelien Jarno
  2016-08-04  1:09 ` [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim Aurelien Jarno
  2016-08-04  1:09 ` [PATCH 2/3] sparc: remove fdim sparc specific implementations Aurelien Jarno
@ 2016-08-04  5:19 ` David Miller
  2016-08-05 20:36   ` Aurelien Jarno
  2016-08-04 11:29 ` Mike Frysinger
  3 siblings, 1 reply; 12+ messages in thread
From: David Miller @ 2016-08-04  5:19 UTC (permalink / raw)
  To: aurelien; +Cc: libc-alpha

From: Aurelien Jarno <aurelien@aurel32.net>
Date: Thu,  4 Aug 2016 03:08:58 +0200

> When building for sparc32/sparcv9 or sparc64, we assume that VIS
> instructions are available and use them in the sparc specific assembly
> code. However we do not tell GCC to use such instructions, resulting in
> slightly suboptimal code.
> 
> Fix that by passing -Wa,-Av9a -mvis to GCC.
> 
> Changelog:
> 	* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Add -mvis.
> 	* sysdeps/sparc/sparc64/Makefile (sysdep-CFLAGS): New. Define to
> 	-Wa,-Av9a -mvis.

All three patches look great, please commit them and thanks for doing
this work.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64
  2016-08-04  1:09 [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 Aurelien Jarno
                   ` (2 preceding siblings ...)
  2016-08-04  5:19 ` [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 David Miller
@ 2016-08-04 11:29 ` Mike Frysinger
  2016-08-04 12:58   ` Aurelien Jarno
  3 siblings, 1 reply; 12+ messages in thread
From: Mike Frysinger @ 2016-08-04 11:29 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: libc-alpha, David Miller

[-- Attachment #1: Type: text/plain, Size: 688 bytes --]

On 04 Aug 2016 03:08, Aurelien Jarno wrote:
> When building for sparc32/sparcv9 or sparc64, we assume that VIS
> instructions are available and use them in the sparc specific assembly
> code. However we do not tell GCC to use such instructions, resulting in
> slightly suboptimal code.
> 
> Fix that by passing -Wa,-Av9a -mvis to GCC.

does this address:
	https://sourceware.org/bugzilla/show_bug.cgi?id=19477

it also seems to imply that v9 is *not* supported, and if you want to
build for sparc64, you must have at least v9a ?  and that VIS is always
supported ?  glancing at some wiki history, it doesn't seem like a big
problem, but it is different from before.
-mike

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64
  2016-08-04 11:29 ` Mike Frysinger
@ 2016-08-04 12:58   ` Aurelien Jarno
  0 siblings, 0 replies; 12+ messages in thread
From: Aurelien Jarno @ 2016-08-04 12:58 UTC (permalink / raw)
  To: libc-alpha, David Miller

[-- Attachment #1: Type: text/plain, Size: 1404 bytes --]

On 2016-08-04 07:29, Mike Frysinger wrote:
> On 04 Aug 2016 03:08, Aurelien Jarno wrote:
> > When building for sparc32/sparcv9 or sparc64, we assume that VIS
> > instructions are available and use them in the sparc specific assembly
> > code. However we do not tell GCC to use such instructions, resulting in
> > slightly suboptimal code.
> > 
> > Fix that by passing -Wa,-Av9a -mvis to GCC.
> 
> does this address:
> 	https://sourceware.org/bugzilla/show_bug.cgi?id=19477

Depends what you mean by address. The issue will disappear for sure.
However the real issue seems to be a misconfiguration between binutils
and GCC. The GCC call doesn't force any specific architecture, so it
means GCC is configure to default to v9a, while binutils is configured
for v9.

> it also seems to imply that v9 is *not* supported, and if you want to
> build for sparc64, you must have at least v9a ?  and that VIS is always
> supported ?  glancing at some wiki history, it doesn't seem like a big
> problem, but it is different from before.

Yes we have v9a code for example in sparc/sparc64/memset.S for more than
17 years, so it means v9 is not support since at least that time. Now I
do wonder if pure v9 CPUs (ie v9 without VIS) have ever existed.

Aurelien

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64
  2016-08-04  5:19 ` [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 David Miller
@ 2016-08-05 20:36   ` Aurelien Jarno
  0 siblings, 0 replies; 12+ messages in thread
From: Aurelien Jarno @ 2016-08-05 20:36 UTC (permalink / raw)
  To: David Miller; +Cc: libc-alpha

On 2016-08-03 22:19, David Miller wrote:
> From: Aurelien Jarno <aurelien@aurel32.net>
> Date: Thu,  4 Aug 2016 03:08:58 +0200
> 
> > When building for sparc32/sparcv9 or sparc64, we assume that VIS
> > instructions are available and use them in the sparc specific assembly
> > code. However we do not tell GCC to use such instructions, resulting in
> > slightly suboptimal code.
> > 
> > Fix that by passing -Wa,-Av9a -mvis to GCC.
> > 
> > Changelog:
> > 	* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Add -mvis.
> > 	* sysdeps/sparc/sparc64/Makefile (sysdep-CFLAGS): New. Define to
> > 	-Wa,-Av9a -mvis.
> 
> All three patches look great, please commit them and thanks for doing
> this work.

Thanks for the review, I have just pushed the patches.

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim
  2016-08-04  1:09 ` [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim Aurelien Jarno
@ 2016-08-26 14:25   ` Paul E. Murphy
  2016-08-26 14:34     ` Paul E. Murphy
  0 siblings, 1 reply; 12+ messages in thread
From: Paul E. Murphy @ 2016-08-26 14:25 UTC (permalink / raw)
  To: Aurelien Jarno, libc-alpha



On 08/03/2016 08:09 PM, Aurelien Jarno wrote:
> diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> new file mode 100644
> index 0000000..c9c7704
> --- /dev/null
> +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> @@ -0,0 +1,32 @@
> +/* Compute positive difference, sparc 32-bit.
> +   Copyright (C) 2016 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, see
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifdef HAVE_AS_VIS3_SUPPORT
> +# include <sparc-ifunc.h>
> +# include <math.h>
> +
> +extern double __fdim_vis3 (double, double);
> +extern double __fdim_generic (double, double);
> +
> +sparc_libm_ifunc(__fdim, hwcap & HWCAP_SPARC_VIS3 ? __fdim_vis3 : __fdim_generic);
> +weak_alias (__fdim, fdim)
> +
> +# define __fdim __fdim_generic
> +#endif
> +
> +#include <math/s_fdim.c>

Hi Aurelien,

I was working on a patch to use the new generic libm infrastructure on fdim*.
While testing the sparc changes, I noticed the fdiml@GLIBC_2.1 symbol is
missing.  I built this from a recent copy of master.  The include of s_fdim.c
seems to pick up the copy in math/, not in sysdeps/ieee754/ldbl-opt/ which
provides the extra compat symbols.  I filed BZ 20517, feel free to close if
this is a mistake.

I built using the F22 sparc cross-toolchain via a command similar to:

../configure CXX=broken CC="sparc64-linux-gnu-gcc -m32" --prefix=/usr/     \
             --with-headers=/path/to/generic/sparc/headers/                \
             --host=sparcv9-linux-gnu libc_cv_ssp=no libc_cv_ssp_strong=no

Likewise, the following seemed to restore it:

diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
index c9c7704..9666741 100644
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
@@ -29,4 +29,4 @@ weak_alias (__fdim, fdim)
 # define __fdim __fdim_generic
 #endif
 
-#include <math/s_fdim.c>
+#include <ldbl-opt/s_fdim.c>

Thanks,
Paul

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim
  2016-08-26 14:25   ` Paul E. Murphy
@ 2016-08-26 14:34     ` Paul E. Murphy
  2016-08-26 16:02       ` Joseph Myers
  2016-08-26 17:41       ` Aurelien Jarno
  0 siblings, 2 replies; 12+ messages in thread
From: Paul E. Murphy @ 2016-08-26 14:34 UTC (permalink / raw)
  To: Aurelien Jarno, libc-alpha



On 08/26/2016 09:25 AM, Paul E. Murphy wrote:
> diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> index c9c7704..9666741 100644
> --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> @@ -29,4 +29,4 @@ weak_alias (__fdim, fdim)
>  # define __fdim __fdim_generic
>  #endif
> 
> -#include <math/s_fdim.c>
> +#include <ldbl-opt/s_fdim.c>

Note, Joseph mentioned in BZ this is used for 64b builds,
which does not use ldbl-opt. So, this is not a correct fix.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim
  2016-08-26 14:34     ` Paul E. Murphy
@ 2016-08-26 16:02       ` Joseph Myers
  2016-08-26 18:34         ` David Miller
  2016-08-26 17:41       ` Aurelien Jarno
  1 sibling, 1 reply; 12+ messages in thread
From: Joseph Myers @ 2016-08-26 16:02 UTC (permalink / raw)
  To: Paul E. Murphy; +Cc: Aurelien Jarno, libc-alpha

On Fri, 26 Aug 2016, Paul E. Murphy wrote:

> On 08/26/2016 09:25 AM, Paul E. Murphy wrote:
> > diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> > index c9c7704..9666741 100644
> > --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> > +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> > @@ -29,4 +29,4 @@ weak_alias (__fdim, fdim)
> >  # define __fdim __fdim_generic
> >  #endif
> > 
> > -#include <math/s_fdim.c>
> > +#include <ldbl-opt/s_fdim.c>
> 
> Note, Joseph mentioned in BZ this is used for 64b builds,

As it's in sysdeps/sparc/sparc32/sparcv9 it shouldn't be used for 64b 
builds....

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim
  2016-08-26 14:34     ` Paul E. Murphy
  2016-08-26 16:02       ` Joseph Myers
@ 2016-08-26 17:41       ` Aurelien Jarno
  1 sibling, 0 replies; 12+ messages in thread
From: Aurelien Jarno @ 2016-08-26 17:41 UTC (permalink / raw)
  To: Paul E. Murphy; +Cc: libc-alpha

On 2016-08-26 09:34, Paul E. Murphy wrote:
> 
> 
> On 08/26/2016 09:25 AM, Paul E. Murphy wrote:
> > diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> > index c9c7704..9666741 100644
> > --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> > +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
> > @@ -29,4 +29,4 @@ weak_alias (__fdim, fdim)
> >  # define __fdim __fdim_generic
> >  #endif
> > 
> > -#include <math/s_fdim.c>
> > +#include <ldbl-opt/s_fdim.c>
> 
> Note, Joseph mentioned in BZ this is used for 64b builds,
> which does not use ldbl-opt. So, this is not a correct fix.

I actually think your fix is the correct one. I have found an old build
log and this is the file used when building with --disable-multiarch. I
will run a build to confirm that.

I do wonder if simply using "#include_next <s_fdim.c>" would prevent
this kind of error. It's a GNU extension, but it's seems to be used in
many places already, so it's probably acceptable.

Aurelien

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim
  2016-08-26 16:02       ` Joseph Myers
@ 2016-08-26 18:34         ` David Miller
  0 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2016-08-26 18:34 UTC (permalink / raw)
  To: joseph; +Cc: murphyp, aurelien, libc-alpha

From: Joseph Myers <joseph@codesourcery.com>
Date: Fri, 26 Aug 2016 16:02:11 +0000

> On Fri, 26 Aug 2016, Paul E. Murphy wrote:
> 
>> On 08/26/2016 09:25 AM, Paul E. Murphy wrote:
>> > diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
>> > index c9c7704..9666741 100644
>> > --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
>> > +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
>> > @@ -29,4 +29,4 @@ weak_alias (__fdim, fdim)
>> >  # define __fdim __fdim_generic
>> >  #endif
>> > 
>> > -#include <math/s_fdim.c>
>> > +#include <ldbl-opt/s_fdim.c>
>> 
>> Note, Joseph mentioned in BZ this is used for 64b builds,
> 
> As it's in sysdeps/sparc/sparc32/sparcv9 it shouldn't be used for 64b 
> builds....

Right, that directory is for 32-bit v9 builds.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-08-26 18:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-04  1:09 [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 Aurelien Jarno
2016-08-04  1:09 ` [PATCH 3/3] sparc32/sparcv9: add a VIS3 version of fdim Aurelien Jarno
2016-08-26 14:25   ` Paul E. Murphy
2016-08-26 14:34     ` Paul E. Murphy
2016-08-26 16:02       ` Joseph Myers
2016-08-26 18:34         ` David Miller
2016-08-26 17:41       ` Aurelien Jarno
2016-08-04  1:09 ` [PATCH 2/3] sparc: remove fdim sparc specific implementations Aurelien Jarno
2016-08-04  5:19 ` [PATCH 1/3] sparc: build with -mvis on sparc32/sparcv9 and sparc64 David Miller
2016-08-05 20:36   ` Aurelien Jarno
2016-08-04 11:29 ` Mike Frysinger
2016-08-04 12:58   ` Aurelien Jarno

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).