From 42fcb46ce6dae3a9a55176b4c82e5f07a41ca536 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Fri, 13 Dec 2013 15:38:01 -0500 Subject: [PATCH] PowerPC: multiarch hypot/hypotf for PowerPC64 --- ChangeLog | 13 ++++++++ .../powerpc/powerpc64/fpu/multiarch/Makefile | 5 ++- .../powerpc/powerpc64/fpu/multiarch/e_hypof.c | 32 +++++++++++++++++++ .../powerpc64/fpu/multiarch/e_hypot-power7.c | 19 +++++++++++ .../powerpc64/fpu/multiarch/e_hypot-ppc64.c | 26 +++++++++++++++ .../powerpc/powerpc64/fpu/multiarch/e_hypot.c | 32 +++++++++++++++++++ .../powerpc64/fpu/multiarch/e_hypotf-power7.c | 19 +++++++++++ .../powerpc64/fpu/multiarch/e_hypotf-ppc64.c | 26 +++++++++++++++ 8 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypof.c create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c diff --git a/ChangeLog b/ChangeLog index e44199c6dfa..b848b2b2ae7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2013-12-13 Adhemerval Zanella + + * sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile: Add hypot and + hypotf multiarch implementations. + * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c: New file. + * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c: New file. + * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c: New file: + multiarch hypot for PPC64. + * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c: New file. + * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c: New file. + * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c : New file: + multiarch hypotf for PPC64. + 2013-12-13 Adhemerval Zanella * sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile: Add modf and diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile index 9a9aaecf3ca..ebf957e40b6 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile @@ -20,11 +20,14 @@ libm-sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \ s_isinf-ppc64 s_logb-power7 s_logbf-power7 \ s_logbl-power7 s_logb-ppc64 s_logbf-ppc64 \ s_logbl-ppc64 s_modf-power5+ s_modf-ppc64 \ - s_modff-power5+ s_modff-ppc64 + s_modff-power5+ s_modff-ppc64 e_hypot-ppc64 \ + e_hypot-power7 e_hypotf-ppc64 e_hypotf-power7 CFLAGS-s_logbf-power7.c = -mcpu=power7 CFLAGS-s_logbl-power7.c = -mcpu=power7 CFLAGS-s_logb-power7.c = -mcpu=power7 CFLAGS-s_modf-power5+.c = -mcpu=power5+ CFLAGS-s_modff-power5+.c = -mcpu=power5+ +CFLAGS-e_hypot-power7.c = -mcpu=power7 +CFLAGS-e_hypotf-power7.c = -mcpu=power7 endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypof.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypof.c new file mode 100644 index 00000000000..526130223b4 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypof.c @@ -0,0 +1,32 @@ +/* Multiple versions of ieee754_hypot. + 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 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 + . */ + +#include +#include +#include +#include "init-arch.h" + +extern __typeof (__ieee754_hypotf) __ieee754_hypotf_ppc64 attribute_hidden; +extern __typeof (__ieee754_hypotf) __ieee754_hypotf_power7 attribute_hidden; + +libc_ifunc (__ieee754_hypotf, + (hwcap & PPC_FEATURE_ARCH_2_06) + ? __ieee754_hypotf_power7 + : __ieee754_hypotf_ppc64); + +strong_alias (__ieee754_hypotf, __hypotf_finite) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c new file mode 100644 index 00000000000..7380c3d3959 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c @@ -0,0 +1,19 @@ +/* __ieee_hypot() POWER7 version. + 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 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 + . */ + +#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c new file mode 100644 index 00000000000..9b0c1b0d222 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c @@ -0,0 +1,26 @@ +/* __ieee_hypot() PowerPC64 version. + 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 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 + . */ + +#include + +#undef strong_alias +#define strong_alias(a, b) + +#define __ieee754_hypot __ieee754_hypot_ppc64 + +#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c new file mode 100644 index 00000000000..faaf55032a9 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c @@ -0,0 +1,32 @@ +/* Multiple versions of ieee754_hypot. + 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 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 + . */ + +#include +#include +#include +#include "init-arch.h" + +extern __typeof (__ieee754_hypot) __ieee754_hypot_ppc64 attribute_hidden; +extern __typeof (__ieee754_hypot) __ieee754_hypot_power7 attribute_hidden; + +libc_ifunc (__ieee754_hypot, + (hwcap & PPC_FEATURE_ARCH_2_06) + ? __ieee754_hypot_power7 + : __ieee754_hypot_ppc64); + +strong_alias (__ieee754_hypot, __hypot_finite) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c new file mode 100644 index 00000000000..9ee841ba3d0 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c @@ -0,0 +1,19 @@ +/* __ieee_hypotf() POWER7 version. + 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 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 + . */ + +#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c new file mode 100644 index 00000000000..734cfe28361 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c @@ -0,0 +1,26 @@ +/* __ieee_hypot() PowerPC64 version. + 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 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 + . */ + +#include + +#undef strong_alias +#define strong_alias(a, b) + +#define __ieee754_hypotf __ieee754_hypotf_ppc64 + +#include -- 2.39.5