You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
6.3 KiB
170 lines
6.3 KiB
7 years ago
|
Consolidated two commits:
|
||
|
|
||
|
From 51c33bd233d00d77f268ec28565506a6cd1e7d10 Mon Sep 17 00:00:00 2001
|
||
|
From: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||
|
Date: Mon, 25 Mar 2013 16:10:06 -0500
|
||
|
Subject: [PATCH 25/42] PowerPC: modf optimization
|
||
|
|
||
|
This patch implements modf/modff optimization for POWER by focus
|
||
|
on FP operations instead of relying in integer ones.
|
||
|
(backported from commit 3c0265394d9ffedff2b0de508602dc52e077ce5c)
|
||
|
|
||
|
This backport does not include the benchmark tests from the original
|
||
|
commit.
|
||
|
|
||
|
From 599fefcc3e7fbf65d9c441bf1b336b272c39f262 Mon Sep 17 00:00:00 2001
|
||
|
From: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||
|
Date: Fri, 26 Apr 2013 13:00:56 -0500
|
||
|
Subject: [PATCH 26/42] PowerPC: modf optimization fix
|
||
|
|
||
|
This patch fix the 3c0265394d9ffedff2b0de508602dc52e077ce5c commits
|
||
|
by correctly setting minimum architecture for modf PPC optimization
|
||
|
to power5+ instead of power5 (since only on power5+ round/ceil will
|
||
|
be inline to inline assembly).
|
||
|
(cherry picked from commit aa630f590c9c7d070a7cdf3a2a88069ad6b63de9)
|
||
|
|
||
|
diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modf.c glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modf.c
|
||
|
--- glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modf.c 1970-01-01 05:30:00.000000000 +0530
|
||
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modf.c 2013-08-06 17:48:57.609526556 +0530
|
||
|
@@ -0,0 +1,58 @@
|
||
|
+/* Copyright (C) 2013 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 Library General Public License as
|
||
|
+ published by the Free Software Foundation; either version 2 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
|
||
|
+ Library General Public License for more details.
|
||
|
+
|
||
|
+ You should have received a copy of the GNU Library General Public
|
||
|
+ License along with the GNU C Library; see the file COPYING.LIB. If
|
||
|
+ not, see <http://www.gnu.org/licenses/>. */
|
||
|
+
|
||
|
+#include <math.h>
|
||
|
+#include <math_private.h>
|
||
|
+#include <math_ldbl_opt.h>
|
||
|
+
|
||
|
+double
|
||
|
+__modf (double x, double *iptr)
|
||
|
+{
|
||
|
+ if (__builtin_isinf (x))
|
||
|
+ {
|
||
|
+ *iptr = x;
|
||
|
+ return __copysign (0.0, x);
|
||
|
+ }
|
||
|
+ else if (__builtin_isnan (x))
|
||
|
+ {
|
||
|
+ *iptr = NAN;
|
||
|
+ return NAN;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (x >= 0.0)
|
||
|
+ {
|
||
|
+ *iptr = __floor (x);
|
||
|
+ return (x - *iptr);
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ *iptr = __ceil (x);
|
||
|
+ return (x - *iptr);
|
||
|
+ }
|
||
|
+}
|
||
|
+weak_alias (__modf, modf)
|
||
|
+#ifdef NO_LONG_DOUBLE
|
||
|
+strong_alias (__modf, __modfl)
|
||
|
+weak_alias (__modf, modfl)
|
||
|
+#endif
|
||
|
+#ifdef IS_IN_libm
|
||
|
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
|
||
|
+compat_symbol (libm, __modf, modfl, GLIBC_2_0);
|
||
|
+# endif
|
||
|
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
|
||
|
+compat_symbol (libc, __modf, modfl, GLIBC_2_0);
|
||
|
+#endif
|
||
|
diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modff.c glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modff.c
|
||
|
--- glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modff.c 1970-01-01 05:30:00.000000000 +0530
|
||
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/power5+/fpu/s_modff.c 2013-08-06 17:48:57.609526556 +0530
|
||
|
@@ -0,0 +1,46 @@
|
||
|
+/* Copyright (C) 2013 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 Library General Public License as
|
||
|
+ published by the Free Software Foundation; either version 2 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
|
||
|
+ Library General Public License for more details.
|
||
|
+
|
||
|
+ You should have received a copy of the GNU Library General Public
|
||
|
+ License along with the GNU C Library; see the file COPYING.LIB. If
|
||
|
+ not, see <http://www.gnu.org/licenses/>. */
|
||
|
+
|
||
|
+#include <math.h>
|
||
|
+#include <math_private.h>
|
||
|
+
|
||
|
+float
|
||
|
+__modff (float x, float *iptr)
|
||
|
+{
|
||
|
+ if (__builtin_isinff (x))
|
||
|
+ {
|
||
|
+ *iptr = x;
|
||
|
+ return __copysignf (0.0, x);
|
||
|
+ }
|
||
|
+ else if (__builtin_isnanf (x))
|
||
|
+ {
|
||
|
+ *iptr = NAN;
|
||
|
+ return NAN;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (x >= 0.0)
|
||
|
+ {
|
||
|
+ *iptr = __floorf (x);
|
||
|
+ return (x - *iptr);
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ *iptr = __ceilf (x);
|
||
|
+ return (x - *iptr);
|
||
|
+ }
|
||
|
+}
|
||
|
+weak_alias (__modff, modff)
|
||
|
diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/Implies glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/Implies
|
||
|
--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/Implies 2012-12-25 08:32:13.000000000 +0530
|
||
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/Implies 2013-08-06 17:48:54.266526703 +0530
|
||
|
@@ -1,2 +1,4 @@
|
||
|
+powerpc/power5/fpu
|
||
|
+powerpc/power5
|
||
|
powerpc/powerpc32/power4/fpu
|
||
|
powerpc/powerpc32/power4
|
||
|
diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/Implies glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/Implies
|
||
|
--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/Implies 2012-12-25 08:32:13.000000000 +0530
|
||
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/Implies 2013-08-06 17:48:57.609526556 +0530
|
||
|
@@ -1,2 +1,4 @@
|
||
|
+powerpc/power5+/fpu
|
||
|
+powerpc/power5+
|
||
|
powerpc/powerpc32/power5/fpu
|
||
|
powerpc/powerpc32/power5
|
||
|
diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5/Implies glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5/Implies
|
||
|
--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5/Implies 2012-12-25 08:32:13.000000000 +0530
|
||
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5/Implies 2013-08-06 17:48:54.266526703 +0530
|
||
|
@@ -1,2 +1,4 @@
|
||
|
+powerpc/power5/fpu
|
||
|
+powerpc/power5
|
||
|
powerpc/powerpc64/power4/fpu
|
||
|
powerpc/powerpc64/power4
|
||
|
diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5+/Implies glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5+/Implies
|
||
|
--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5+/Implies 2012-12-25 08:32:13.000000000 +0530
|
||
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power5+/Implies 2013-08-06 17:48:57.610526556 +0530
|
||
|
@@ -1,2 +1,4 @@
|
||
|
+powerpc/power5+/fpu
|
||
|
+powerpc/power5+
|
||
|
powerpc/powerpc64/power5/fpu
|
||
|
powerpc/powerpc64/power5
|