From patchwork Mon Mar 4 19:43:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 31712 Received: (qmail 73090 invoked by alias); 4 Mar 2019 19:44:02 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 73070 invoked by uid 89); 4 Mar 2019 19:44:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS, TVD_SUBJ_WIPE_DEBT autolearn=ham version=3.3.2 spammy=Multiple, H*p:D*org, SRC, Wide X-HELO: mail-qk1-f193.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id; bh=v2dhgwKj9GFT3P3Z13HJgMxeCchsr19D9Urf2qRlzSA=; b=fD6tkRwdZyjipdXud7Iape+cWiWPgAPiUhL4P5y9/QNyp2TJsdQnEyonLpbtVOmtgb Dfr6lLLDO6dFBHa6oWakEAptURntywYAxmrK8SYbWwRSnqcB4CXufWpmrydLRevMrsnB kgWZR1mYAT8XTJTJCTPdxkDRbNokBNRXL9LPDEm+8mdFesUZ8WdXY/bt5ma88a3E8W9p Wu+R3GpEG1N9BVj2HRdxnnOkW5E3KJV3xwP2Aox84I6rQOu/R0FVDz927Z0PTyR/6XZ+ z+AXFwY2A/q/7GZB8kXb5JSxUHH4865+L1JVR7cBPMoNIlxS4abyqjz/tkpru9WYt2ej NgLg== Return-Path: From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 1/3] powerpc: remove power6 wcscpy optimization Date: Mon, 4 Mar 2019 16:43:48 -0300 Message-Id: <20190304194350.16116-1-adhemerval.zanella@linaro.org> This patch removes the power6 wcscpy optimization. It is rarely int real word codo, the optimizations can be potentially implemented in generic code (which would also benefit not only powerpc), and the power6 and power7 resulting binary are essentially the same. Checked on powerpc64-linux-gnu. * sysdeps/powerpc/power6/wcscpy.c: Remove file. * sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c: Likewise. * sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c: Likewise. * sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c: Likewise. * sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c: Likewise. * sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c: Likewise. * sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c: Likewise. * sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c: Likewise. * sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c: Likewise. * sysdeps/powerpc/powerpc64/multiarch/wcscpy.c: Likewise. * sysdeps/powerpc/powerpc64/power6/wcscpy.c: Likewise. * sysdeps/powerpc/powerpc32/power4/multiarch/Makefile [$(subdir) == wcsmbs] (sysdeps_routines): Remove wcscpy-power6 and wcscpy-power7. (CFLAGS-wcscpy-power7.c, CFLAGS-wcscpy-power6.c): Remove rule. * sysdeps/powerpc/powerpc64/multiarch/Makefile: Likewise. * sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c: Remove wcscpy optimizations. --- sysdeps/powerpc/power6/wcscpy.c | 105 ------------------ .../powerpc32/power4/multiarch/Makefile | 5 +- .../power4/multiarch/ifunc-impl-list.c | 11 -- .../power4/multiarch/wcscpy-power6.c | 22 ---- .../power4/multiarch/wcscpy-power7.c | 22 ---- .../powerpc32/power4/multiarch/wcscpy-ppc32.c | 27 ----- .../powerpc32/power4/multiarch/wcscpy.c | 36 ------ sysdeps/powerpc/powerpc64/multiarch/Makefile | 5 +- .../powerpc64/multiarch/ifunc-impl-list.c | 11 -- .../powerpc64/multiarch/wcscpy-power6.c | 19 ---- .../powerpc64/multiarch/wcscpy-power7.c | 19 ---- .../powerpc64/multiarch/wcscpy-ppc64.c | 18 --- sysdeps/powerpc/powerpc64/multiarch/wcscpy.c | 35 ------ sysdeps/powerpc/powerpc64/power6/wcscpy.c | 1 - 14 files changed, 2 insertions(+), 334 deletions(-) delete mode 100644 sysdeps/powerpc/power6/wcscpy.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy.c delete mode 100644 sysdeps/powerpc/powerpc64/power6/wcscpy.c diff --git a/sysdeps/powerpc/power6/wcscpy.c b/sysdeps/powerpc/power6/wcscpy.c deleted file mode 100644 index 11c04b081a..0000000000 --- a/sysdeps/powerpc/power6/wcscpy.c +++ /dev/null @@ -1,105 +0,0 @@ -/* wcscpy.c - Wide Character Copy for POWER6+. - Copyright (C) 2012-2019 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; see the file COPYING.LIB. If - not, see . */ - -#include -#include - -#ifndef WCSCPY -# define WCSCPY wcscpy -#endif - -/* Copy SRC to DEST. */ -wchar_t * -WCSCPY (wchar_t *dest, const wchar_t *src) -{ - wint_t c,d; - wchar_t *wcp, *wcp2; - - if (__alignof__ (wchar_t) >= sizeof (wchar_t)) - { - const ptrdiff_t off = dest - src; - - wcp = (wchar_t *) src; - wcp2 = wcp + 1 ; - - do - { - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - } - while (c != L'\0'); - - } - else - { - wcp = dest; - - do - { - c = *src++; - *wcp++ = c; - } - while (c != L'\0'); - } - return dest; -} diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile b/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile index bd9d360efa..f5141bc5b5 100644 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile @@ -18,13 +18,10 @@ endif ifeq ($(subdir),wcsmbs) sysdep_routines += wcschr-power7 wcschr-power6 wcschr-ppc32 \ - wcsrchr-power7 wcsrchr-power6 wcsrchr-ppc32 \ - wcscpy-power7 wcscpy-power6 wcscpy-ppc32 + wcsrchr-power7 wcsrchr-power6 wcsrchr-ppc32 CFLAGS-wcschr-power7.c += -mcpu=power7 CFLAGS-wcschr-power6.c += -mcpu=power6 CFLAGS-wcsrchr-power7.c += -mcpu=power7 CFLAGS-wcsrchr-power6.c += -mcpu=power6 -CFLAGS-wcscpy-power7.c += -mcpu=power7 -CFLAGS-wcscpy-power6.c += -mcpu=power6 endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c index bcd38e0f79..ae581d62f8 100644 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c @@ -209,16 +209,5 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, wcsrchr, 1, __wcsrchr_ppc)) - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c. */ - IFUNC_IMPL (i, name, wcscpy, - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_HAS_VSX, - __wcscpy_power7) - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcscpy_power6) - IFUNC_IMPL_ADD (array, i, wcscpy, 1, - __wcscpy_ppc)) - return i; } diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c deleted file mode 100644 index 5bb0c82462..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2013-2019 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 - -#define WCSCPY __wcscpy_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c deleted file mode 100644 index 5375094b60..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2013-2019 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 - -#define WCSCPY __wcscpy_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c deleted file mode 100644 index 31e0d81ef0..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2013-2019 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 - -extern __typeof (wcscpy) __wcscpy_ppc; - -#define WCSCPY __wcscpy_ppc -#include - -#ifdef SHARED -__hidden_ver1 (__wcscpy_ppc, __GI___wcscpy, __wcscpy_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c deleted file mode 100644 index 0daf55cf70..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcscpy - Copyright (C) 2013-2019 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 - . */ - -#if IS_IN (libc) -# define __wcscpy __redirect_wcscpy -# include -# undef __wcscpy -# include "init-arch.h" - -extern __typeof (__redirect_wcscpy) __wcscpy_ppc attribute_hidden; -extern __typeof (__redirect_wcscpy) __wcscpy_power6 attribute_hidden; -extern __typeof (__redirect_wcscpy) __wcscpy_power7 attribute_hidden; - -libc_ifunc_redirected (__redirect_wcscpy, __wcscpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcscpy_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcscpy_power6 - : __wcscpy_ppc); -weak_alias (__wcscpy, wcscpy) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile index 963ea84dbf..3913ef580e 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile @@ -40,13 +40,10 @@ endif ifeq ($(subdir),wcsmbs) sysdep_routines += wcschr-power7 wcschr-power6 wcschr-ppc64 \ - wcsrchr-power7 wcsrchr-power6 wcsrchr-ppc64 \ - wcscpy-power7 wcscpy-power6 wcscpy-ppc64 \ + wcsrchr-power7 wcsrchr-power6 wcsrchr-ppc64 CFLAGS-wcschr-power7.c += -mcpu=power7 CFLAGS-wcschr-power6.c += -mcpu=power6 CFLAGS-wcsrchr-power7.c += -mcpu=power7 CFLAGS-wcsrchr-power6.c += -mcpu=power6 -CFLAGS-wcscpy-power7.c += -mcpu=power7 -CFLAGS-wcscpy-power6.c += -mcpu=power6 endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c index 8d91d9abb9..06d33d71e0 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c @@ -282,17 +282,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, wcsrchr, 1, __wcsrchr_ppc)) - /* Support sysdeps/powerpc/powerpc64/multiarch/wcscpy.c. */ - IFUNC_IMPL (i, name, wcscpy, - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_HAS_VSX, - __wcscpy_power7) - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcscpy_power6) - IFUNC_IMPL_ADD (array, i, wcscpy, 1, - __wcscpy_ppc)) - /* Support sysdeps/powerpc/powerpc64/multiarch/strrchr.c. */ IFUNC_IMPL (i, name, strrchr, IFUNC_IMPL_ADD (array, i, strrchr, diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c deleted file mode 100644 index abe2e0f073..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcscpy.c - Wide Character Search for powerpc64/power6. - Copyright (C) 2013-2019 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; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c deleted file mode 100644 index be95cd9074..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcscpy.c - Wide Character Search for powerpc64/power7. - Copyright (C) 2013-2019 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; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c deleted file mode 100644 index faa3c1614f..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2019 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/multiarch/wcscpy.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy.c deleted file mode 100644 index 3f918b27c6..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiple versions of wcscpy. - Copyright (C) 2013-2019 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 - . */ - -#define __wcscpy __redirect___wcscpy -#include -#undef __wcscpy -#include -#include "init-arch.h" - -extern __typeof (wcscpy) __wcscpy_ppc attribute_hidden; -extern __typeof (wcscpy) __wcscpy_power6 attribute_hidden; -extern __typeof (wcscpy) __wcscpy_power7 attribute_hidden; - -libc_ifunc_redirected (__redirect___wcscpy, __wcscpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcscpy_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcscpy_power6 - : __wcscpy_ppc); -weak_alias (__wcscpy, wcscpy) diff --git a/sysdeps/powerpc/powerpc64/power6/wcscpy.c b/sysdeps/powerpc/powerpc64/power6/wcscpy.c deleted file mode 100644 index 722c8f995b..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/wcscpy.c +++ /dev/null @@ -1 +0,0 @@ -#include