From patchwork Thu Jun 3 18:51:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Seija K." X-Patchwork-Id: 1487389 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=DWCD52Ma; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Fww4s4xvYz9sPf for ; Fri, 4 Jun 2021 04:52:44 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F0F4D3833026 for ; Thu, 3 Jun 2021 18:52:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F0F4D3833026 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1622746360; bh=aB3gvF8hungvlpKa3lJhMXf794WqNBKMntoj2FogTLs=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=DWCD52MaFPrQGB/tTiJWlac/jmvigoDypkWGtpHa54/Tq8L+NmdvhbZpiUMDVSmh3 JKUUZPn8MtUbdwk8DyOJeYdRJww5jSH4EEYZC+HeeO4h/v83Hdzi4gD9Jj3gkxHIOZ LOUubKzJ4B1ji/DqXlwAAVztOhzKKG6nLkOrX5LI= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) by sourceware.org (Postfix) with ESMTPS id 4C4723857C75 for ; Thu, 3 Jun 2021 18:51:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4C4723857C75 Received: by mail-lj1-x230.google.com with SMTP id e2so8450685ljk.4 for ; Thu, 03 Jun 2021 11:51:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=wdbLofg2ey7blZN4IMLa50HbrOa5S0l25ZUBt3DXpMc=; b=uCq/FcuAJ+iYKWGhj04HBwnc5+7si04jPZhCSdsj/LOaMkt/NQLixBgWZuRySgwAXd WMmSv2DOQbSQYReNQWUA8gZR+5hojc08X/xo5t2z2vjMWZet+AkJFcR06IgKO6ABGH92 PaWO6hKL46F+cgKPoaCwT5pfIAGmHzGU/9H5hWJwkltzD1TIllysO30a6HkaO7Q+XMqC iJZP1ouSBaTZ36BImHCiBWtGHhBEPPmoxlJkaJSPydCn5jLKomNndwTIhoNLARLRZmj8 IlbP/O1nVbVf6ZOedSjr2GOnR4z+9ljB8mqc/nsANYQ1wSDW0Ew/QqVFHT7QIWGXIHX0 YBhQ== X-Gm-Message-State: AOAM532cO/FqyX8zGLbX9aDM6en8g16k6bzVN8+LUwdZB6b7F7tUsnCz cWLiOVlofEU60gm8QiyrkRC757UOCQEkEAGW1N4TEczp0Q2J X-Google-Smtp-Source: ABdhPJymxY1qkeJK7eN0P46FkyQ6icQ9oRVNfp9drlJNjjXyHNbYP95Oyb0UUAWyDk1Z8pmSZCBxFEZwF/KdZt2u1T4= X-Received: by 2002:a2e:5347:: with SMTP id t7mr548090ljd.464.1622746314344; Thu, 03 Jun 2021 11:51:54 -0700 (PDT) MIME-Version: 1.0 Date: Thu, 3 Jun 2021 14:51:42 -0400 Message-ID: Subject: [PATCH] libgcc libiberty: optimize and modernize standard string and memory functions To: "gcc-patches@gcc.gnu.org" X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: "Seija K. via Gcc-patches" From: "Seija K." Reply-To: "Seija K." Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" This patch optimizes and simplifies many of the standard string functions. Since C99, some of the standard string functions have been changed to use the restrict modifier. } diff --git a/libgcc/memcmp.c b/libgcc/memcmp.c index 2348afe1d27f7..74195cf6baf13 100644 --- a/libgcc/memcmp.c +++ b/libgcc/memcmp.c @@ -7,10 +7,11 @@ memcmp (const void *str1, const void *str2, size_t count) const unsigned char *s1 = str1; const unsigned char *s2 = str2; - while (count-- > 0) + while (count--) { - if (*s1++ != *s2++) - return s1[-1] < s2[-1] ? -1 : 1; + if (*s1 != *s2) + return *s1 < *s2 ? -1 : 1; + s1++, s2++; } return 0; } diff --git a/libgcc/memcpy.c b/libgcc/memcpy.c index 58b1e405627aa..616df78fd2969 100644 --- a/libgcc/memcpy.c +++ b/libgcc/memcpy.c @@ -2,7 +2,7 @@ #include void * -memcpy (void *dest, const void *src, size_t len) +memcpy (void * restrict dest, const void * restrict src, size_t len) { char *d = dest; const char *s = src; diff --git a/libgcc/memset.c b/libgcc/memset.c index 3e7025ee39443..b3b27cd63e12d 100644 --- a/libgcc/memset.c +++ b/libgcc/memset.c @@ -5,7 +5,7 @@ void * memset (void *dest, int val, size_t len) { unsigned char *ptr = dest; - while (len-- > 0) - *ptr++ = val; + while (len--) + *ptr++ = (unsigned char)val; return dest; } diff --git a/libiberty/memchr.c b/libiberty/memchr.c index 7448ab9e71c32..6f03e9c281108 100644 --- a/libiberty/memchr.c +++ b/libiberty/memchr.c @@ -23,7 +23,7 @@ memchr (register const PTR src_void, int c, size_t length) { const unsigned char *src = (const unsigned char *)src_void; - while (length-- > 0) + while (length--) { if (*src == c) return (PTR)src; diff --git a/libiberty/memcmp.c b/libiberty/memcmp.c index 37db60f38267a..f41b35a758cc4 100644 --- a/libiberty/memcmp.c +++ b/libiberty/memcmp.c @@ -27,8 +27,9 @@ memcmp (const PTR str1, const PTR str2, size_t count) while (count-- > 0) { - if (*s1++ != *s2++) - return s1[-1] < s2[-1] ? -1 : 1; + if (*s1 != *s2) + return *s1 < *s2 ? -1 : 1; + s1++, s2++; } return 0; } diff --git a/libiberty/memcpy.c b/libiberty/memcpy.c index 7f67d0bd1f26c..d388ae7f3506b 100644 --- a/libiberty/memcpy.c +++ b/libiberty/memcpy.c @@ -19,7 +19,7 @@ Copies @var{length} bytes from memory region @var{in} to region void bcopy (const void*, void*, size_t); PTR -memcpy (PTR out, const PTR in, size_t length) +memcpy (PTR restrict out, const PTR restrict in, size_t length) { bcopy(in, out, length); return out; diff --git a/libiberty/mempcpy.c b/libiberty/mempcpy.c index f4c624d4a3227..ac56eeaee0d5e 100644 --- a/libiberty/mempcpy.c +++ b/libiberty/mempcpy.c @@ -33,10 +33,10 @@ Copies @var{length} bytes from memory region @var{in} to region #include #include -extern PTR memcpy (PTR, const PTR, size_t); +extern PTR memcpy (PTR restrict, const PTR restrict, size_t); PTR -mempcpy (PTR dst, const PTR src, size_t len) +mempcpy (PTR restrict dst, const PTR restrict src, size_t len) { return (char *) memcpy (dst, src, len) + len;