From patchwork Mon Mar 7 21:47:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 11247 Received: (qmail 92491 invoked by alias); 7 Mar 2016 21:47:56 -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 92475 invoked by uid 89); 7 Mar 2016 21:47:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=__n, hongjiu.lu@intel.com, hongjiuluintelcom X-HELO: mail-qg0-f42.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to; bh=DDvjbxCR3qB9wxazBjoQJkBaRkxIj6PvwBWsX6xr2y4=; b=CAS3crNa28F2R+LiKD4m3oEB503H2DOyiDXHGHfDG7zQFX3Uk0jPvRO308tMP7/Kjq irBYQicr9qPp9NcaGdr9GLT7uAgg2R1X6eFto34i6K8J5Sw2rtGQOpBmhwKj2N/DBlEL Y1yQ53U75PEKrhW5s9ZVaHhzHSVPuuddSd+1z3OHoc33YrVFvubWhYxO+eH4pvdHeja1 iVQr0hFPv8f8gqVr3hOlPt3m5kEQvGNnh4gjglohXf32bQsPpfkvlqIJ/FjE+w3qQiyq hAxIjcg/gUV2LZ0bHa8jnIoEdVALZIfWVuaUs/YgGr5FV/3GTdvWKTRvx2vQMXkgY1BF gPcw== X-Gm-Message-State: AD7BkJKVq8nuHGngN1fyleDHPd1dEtSoOWIeJ5cnQ7GkzNn5evhnPi+GCzvBBvHsfahyH9YbPlKJTmVv5fwX0w== MIME-Version: 1.0 X-Received: by 10.140.16.225 with SMTP id 88mr31684643qgb.96.1457387263688; Mon, 07 Mar 2016 13:47:43 -0800 (PST) Date: Mon, 7 Mar 2016 13:47:43 -0800 Message-ID: Subject: [PATCH] Revert commit 05a910f7 From: "H.J. Lu" To: GNU C Library , Wilco Dijkstra On Mon, Mar 7, 2016 at 1:20 PM, H.J. Lu wrote: > On Mon, Mar 7, 2016 at 12:57 PM, H.J. Lu wrote: >> Since x86 has an optimized mempcpy and GCC can inline mempcpy on x86, >> define _HAVE_STRING_ARCH_mempcpy to 1 for x86. >> >> If duplicated code between optimized memcpy and mempcpy is a concern, >> we can add an entry point in memcpy and use it to implement mempcpy, >> similar to the set of patches for __mempcpy_sse2_unaligned: >> >> https://sourceware.org/ml/libc-alpha/2016-03/msg00166.html >> >> OK for master? >> >> >> H.J. >> --- >> [BZ #19759] >> * sysdeps/x86/bits/string.h (_HAVE_STRING_ARCH_mempcpy): New. >> --- >> sysdeps/x86/bits/string.h | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/sysdeps/x86/bits/string.h b/sysdeps/x86/bits/string.h >> index e4e019f..f5885b4 100644 >> --- a/sysdeps/x86/bits/string.h >> +++ b/sysdeps/x86/bits/string.h >> @@ -62,6 +62,9 @@ >> | ((const unsigned char *) (src))[idx]) >> >> >> +/* Don't inline mempcpy into memcpy as x86 has an optimized mempcpy. */ >> +# define _HAVE_STRING_ARCH_mempcpy 1 >> + >> /* Copy N bytes of SRC to DEST. */ >> # define _HAVE_STRING_ARCH_memcpy 1 >> # define memcpy(dest, src, n) \ >> -- >> 2.5.0 >> > > It doesn't work since is included only if > > #if defined __GNUC__ && __GNUC__ >= 2 > # if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \ > && !defined __NO_INLINE__ && !defined __cplusplus > > is true. > I believe commit 05a910f7 was wrong. At minimum, mempcpy shouldn't be inlined in 2 different header files. From 786bb62f66da6ffe6b2614191ca19a0f0d161af9 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 7 Mar 2016 13:40:54 -0800 Subject: [PATCH] Revert commit 05a910f7 mempcpy is inlined in string/bits/string2.h. Any improvement for mempcpy should be made in string/bits/string2.h, not in string/string.h. [BZ #19759] * string/string.h (mempcpy): Removed. (__mempcpy): Likewise. (__mempcpy_inline): Likewise. * sysdeps/sparc/bits/string.h (_HAVE_STRING_ARCH_mempcpy): Likewise. --- string/string.h | 19 ------------------- sysdeps/sparc/bits/string.h | 3 --- 2 files changed, 22 deletions(-) diff --git a/string/string.h b/string/string.h index 1f3e348..f46e3eb 100644 --- a/string/string.h +++ b/string/string.h @@ -636,25 +636,6 @@ extern char *basename (const char *__filename) __THROW __nonnull ((1)); # endif #endif -#if defined __USE_GNU && defined __OPTIMIZE__ \ - && defined __extern_always_inline && __GNUC_PREREQ (3,2) -# if !defined _FORCE_INLINES && !defined _HAVE_STRING_ARCH_mempcpy - -#undef mempcpy -#undef __mempcpy -#define mempcpy(dest, src, n) __mempcpy_inline (dest, src, n) -#define __mempcpy(dest, src, n) __mempcpy_inline (dest, src, n) - -__extern_always_inline void * -__mempcpy_inline (void *__restrict __dest, - const void *__restrict __src, size_t __n) -{ - return (char *) memcpy (__dest, __src, __n) + __n; -} - -# endif -#endif - __END_DECLS #endif /* string.h */ diff --git a/sysdeps/sparc/bits/string.h b/sysdeps/sparc/bits/string.h index 10beca6..1ef4243 100644 --- a/sysdeps/sparc/bits/string.h +++ b/sysdeps/sparc/bits/string.h @@ -26,6 +26,3 @@ /* sparc32 and sparc64 strchr(x, '\0') perform better than __rawmemchr(x, '\0'). */ #define _HAVE_STRING_ARCH_strchr 1 - -/* Don't inline mempcpy into memcpy as sparc has an optimized mempcpy. */ -#define _HAVE_STRING_ARCH_mempcpy 1 -- 2.5.0