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.
169 lines
6.3 KiB
169 lines
6.3 KiB
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
|
|
|