diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2016-12-16 19:13:14 +0000 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2016-12-27 17:42:09 -0200 |
commit | cfee7d9cf403a1f801784c0d6f1d72994911d9d8 (patch) | |
tree | 7f22f5659670bcdbd1183a91de8169b15f5683a3 | |
parent | c32bb03c38d76cdc7147ce0441d5eac3ed576152 (diff) | |
download | glibc-cfee7d9cf403a1f801784c0d6f1d72994911d9d8.zip glibc-cfee7d9cf403a1f801784c0d6f1d72994911d9d8.tar.gz glibc-cfee7d9cf403a1f801784c0d6f1d72994911d9d8.tar.bz2 |
powerpc: Remove f{max,min}{f} assembly implementations
This patch removes the powerpc assembly implementation of fmax/fmin.
Based on benchtests, the assembly ones shows:
$ ./testrun.sh benchtests/bench-fmax
"fmax": {
"": {
"duration": 5.07586e+09,
"iterations": 2.01676e+09,
"max": 1350.39,
"min": 2.073,
"mean": 2.51684
},
"qNaN": {
"duration": 5.09315e+09,
"iterations": 8.4568e+08,
"max": 2788,
"min": 5.806,
"mean": 6.02255
},
"sNaN": {
"duration": 5.09073e+09,
"iterations": 8.42316e+08,
"max": 4215.84,
"min": 5.737,
"mean": 6.04373
}
And
$ ./testrun.sh benchtests/bench-fmin
"fmin": {
"": {
"duration": 5.07711e+09,
"iterations": 2.02982e+09,
"max": 497.094,
"min": 2.073,
"mean": 2.50126
},
"qNaN": {
"duration": 5.09134e+09,
"iterations": 8.46968e+08,
"max": 2255.14,
"min": 5.807,
"mean": 6.01125
},
"sNaN": {
"duration": 5.09122e+09,
"iterations": 8.4746e+08,
"max": 1969.38,
"min": 5.729,
"mean": 6.00763
}
}
The default implementation (math/s_f{max.min}_template.c) shows slight better
latency for all cases:
$ ./testrun.sh benchtests/bench-fmax
"fmax": {
"": {
"duration": 5.07044e+09,
"iterations": 2.38695e+09,
"max": 2048.58,
"min": 2.073,
"mean": 2.12423
},
"qNaN": {
"duration": 5.09004e+09,
"iterations": 9.45428e+08,
"max": 3306.93,
"min": 5.138,
"mean": 5.38385
},
"sNaN": {
"duration": 5.08458e+09,
"iterations": 1.15959e+09,
"max": 972.008,
"min": 3.321,
"mean": 4.3848
}
}
And:
$ ./testrun.sh benchtests/bench-fmin
"fmin": {
"": {
"duration": 5.06817e+09,
"iterations": 2.3913e+09,
"max": 1177.9,
"min": 2.073,
"mean": 2.11942
},
"qNaN": {
"duration": 5.08857e+09,
"iterations": 9.45656e+08,
"max": 2658.83,
"min": 5.09,
"mean": 5.38099
},
"sNaN": {
"duration": 5.08093e+09,
"iterations": 1.16725e+09,
"max": 1030.74,
"min": 3.323,
"mean": 4.3529
}
}
Both were run with GCC 5.4 (ubuntu 16 default installation) using default
compiler flags on POWER8E 3.4GHz (powerpc64le-linux-gnu).
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/s_fmax.S | 77 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/s_fmaxf.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/s_fmin.S | 77 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/s_fminf.S | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/s_fmax.S | 5 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/s_fmin.S | 5 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/fpu/s_fmax.S | 5 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/fpu/s_fmin.S | 5 |
9 files changed, 11 insertions, 176 deletions
@@ -1,3 +1,14 @@ +2016-12-27 Adhemerval Zanella <adhemerval.zanella@linaro.org> + + * sysdeps/powerpc/fpu/s_fmaxf.S: Remove file. + * sysdeps/powerpc/fpu/s_fminf.S: Likewise. + * sysdeps/powerpc/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/fpu/s_fmin.S: Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/powerpc32/fpu/s_fmin.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_fmax.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_fmin.S: Likewise. + 2016-12-27 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com> * manual/arith.texi (FP Comparison Functions): Fix typo in iseqsig. diff --git a/sysdeps/powerpc/fpu/s_fmax.S b/sysdeps/powerpc/fpu/s_fmax.S deleted file mode 100644 index e6405c0..0000000 --- a/sysdeps/powerpc/fpu/s_fmax.S +++ /dev/null @@ -1,77 +0,0 @@ -/* Floating-point maximum. PowerPC version. - Copyright (C) 1997-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 <sysdep.h> - -ENTRY(__fmax) -/* double [f1] fmax (double [f1] x, double [f2] y); */ - fcmpu cr0,fp1,fp2 - blt cr0,0f /* if x < y, neither x nor y can be NaN... */ - bnulr+ cr0 -/* x and y are unordered, so one of x or y must be a NaN... */ - fcmpu cr1,fp2,fp2 - bun cr1,1f -/* x is a NaN; y is not. Test if x is signaling. */ -#ifdef __powerpc64__ - stfd fp1,-8(r1) - lwz r3,-8+HIWORD(r1) -#else - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp1,8(r1) - lwz r3,8+HIWORD(r1) - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) -#endif - andis. r3,r3,8 - bne cr0,0f - b 2f -1: /* y is a NaN; x may or may not be. */ - fcmpu cr1,fp1,fp1 - bun cr1,2f -/* y is a NaN; x is not. Test if y is signaling. */ -#ifdef __powerpc64__ - stfd fp2,-8(r1) - lwz r3,-8+HIWORD(r1) -#else - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp2,8(r1) - lwz r3,8+HIWORD(r1) - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) -#endif - andis. r3,r3,8 - bnelr cr0 -2: /* x and y are NaNs, or one is a signaling NaN. */ - fadd fp1,fp1,fp2 - blr -0: fmr fp1,fp2 - blr -END(__fmax) - -weak_alias (__fmax,fmax) - -/* It turns out that it's safe to use this code even for single-precision. */ -strong_alias(__fmax,__fmaxf) -weak_alias (__fmax,fmaxf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__fmax,__fmaxl) -weak_alias (__fmax,fmaxl) -#endif diff --git a/sysdeps/powerpc/fpu/s_fmaxf.S b/sysdeps/powerpc/fpu/s_fmaxf.S deleted file mode 100644 index 3c2d62b..0000000 --- a/sysdeps/powerpc/fpu/s_fmaxf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fmaxf is in s_fmax.c */ diff --git a/sysdeps/powerpc/fpu/s_fmin.S b/sysdeps/powerpc/fpu/s_fmin.S deleted file mode 100644 index 9ae77fe..0000000 --- a/sysdeps/powerpc/fpu/s_fmin.S +++ /dev/null @@ -1,77 +0,0 @@ -/* Floating-point minimum. PowerPC version. - Copyright (C) 1997-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 <sysdep.h> - -ENTRY(__fmin) -/* double [f1] fmin (double [f1] x, double [f2] y); */ - fcmpu cr0,fp1,fp2 - bgt cr0,0f /* if x > y, neither x nor y can be NaN... */ - bnulr+ cr0 -/* x and y are unordered, so one of x or y must be a NaN... */ - fcmpu cr1,fp2,fp2 - bun cr1,1f -/* x is a NaN; y is not. Test if x is signaling. */ -#ifdef __powerpc64__ - stfd fp1,-8(r1) - lwz r3,-8+HIWORD(r1) -#else - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp1,8(r1) - lwz r3,8+HIWORD(r1) - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) -#endif - andis. r3,r3,8 - bne cr0,0f - b 2f -1: /* y is a NaN; x may or may not be. */ - fcmpu cr1,fp1,fp1 - bun cr1,2f -/* y is a NaN; x is not. Test if y is signaling. */ -#ifdef __powerpc64__ - stfd fp2,-8(r1) - lwz r3,-8+HIWORD(r1) -#else - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp2,8(r1) - lwz r3,8+HIWORD(r1) - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) -#endif - andis. r3,r3,8 - bnelr cr0 -2: /* x and y are NaNs, or one is a signaling NaN. */ - fadd fp1,fp1,fp2 - blr -0: fmr fp1,fp2 - blr -END(__fmin) - -weak_alias (__fmin,fmin) - -/* It turns out that it's safe to use this code even for single-precision. */ -strong_alias(__fmin,__fminf) -weak_alias (__fmin,fminf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__fmin,__fminl) -weak_alias (__fmin,fminl) -#endif diff --git a/sysdeps/powerpc/fpu/s_fminf.S b/sysdeps/powerpc/fpu/s_fminf.S deleted file mode 100644 index 10ab7fe..0000000 --- a/sysdeps/powerpc/fpu/s_fminf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fminf is in s_fmin.c */ diff --git a/sysdeps/powerpc/powerpc32/fpu/s_fmax.S b/sysdeps/powerpc/powerpc32/fpu/s_fmax.S deleted file mode 100644 index 6973576..0000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_fmax.S +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <sysdeps/powerpc/fpu/s_fmax.S> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmax, fmaxl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_fmin.S b/sysdeps/powerpc/powerpc32/fpu/s_fmin.S deleted file mode 100644 index 6d4a0a9..0000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_fmin.S +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <sysdeps/powerpc/fpu/s_fmin.S> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmin, fminl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_fmax.S b/sysdeps/powerpc/powerpc64/fpu/s_fmax.S deleted file mode 100644 index 6973576..0000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_fmax.S +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <sysdeps/powerpc/fpu/s_fmax.S> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmax, fmaxl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_fmin.S b/sysdeps/powerpc/powerpc64/fpu/s_fmin.S deleted file mode 100644 index 6d4a0a9..0000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_fmin.S +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <sysdeps/powerpc/fpu/s_fmin.S> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmin, fminl, GLIBC_2_1) -#endif |