From patchwork Wed Mar 13 14:03:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 31838 Received: (qmail 51631 invoked by alias); 13 Mar 2019 14:03:33 -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 51544 invoked by uid 89); 13 Mar 2019 14:03:33 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=HX-Languages-Length:1086, H*MI:sk:2019031 X-HELO: mail-vs1-f46.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KNrpbzpBrZvGtGrOIdkVTTMiuW1TDfvWHPcrpBf6qzo=; b=aRpXDFL07PSFBO3/xCxGV07lB4dHfoB3GXvdoLLrf/vDb6vDeoEJKK7RzihXciulw1 jdgjklJYAAH8LRera3kdb4iGtvHNsOAuIJvUouA2QZvb6t8F1qwneTZFJNg0xP1ZyO6p 20y5XuH8L4nhipWDbhDH3TRanZlwH/LmhdbxfILdtLircsvTNWuRfhqgO4K7cMrJBDIt hW0zJ7/n/z8bpDt+Cn80uLqe3R3/5tDyZxE24CpdjgAHG52BfyRZWt0bjcfihoJ4sGlG kwWZP39QJpJSEkpZ1bhenHPPc8N9BszMkMuGBzfPXUMEbpIS5DDRK3rb6HIUqC1LGUYa R2Ow== Return-Path: From: Adhemerval Zanella To: libc-alpha@sourceware.org Cc: "Gabriel F . T . Gomes" Subject: [PATCH v2 5/6] wcsmbs: Use loop_unroll on wcsrchr Date: Wed, 13 Mar 2019 11:03:16 -0300 Message-Id: <20190313140317.8894-5-adhemerval.zanella@linaro.org> In-Reply-To: <20190313140317.8894-1-adhemerval.zanella@linaro.org> References: <20190313140317.8894-1-adhemerval.zanella@linaro.org> This allows an architecture to set explicit loop unrolling. Checked on aarch64-linux-gnu. * wcsmbs/wcsrchr.c (WCSRCHR): Use loop_unroll.h to parametrize the loop unroll. Reviewed-by: Gabriel F. T. Gomes --- wcsmbs/wcsrchr.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/wcsmbs/wcsrchr.c b/wcsmbs/wcsrchr.c index 0d4bad0704..3175df357d 100644 --- a/wcsmbs/wcsrchr.c +++ b/wcsmbs/wcsrchr.c @@ -17,6 +17,7 @@ . */ #include +#include #ifndef WCSRCHR # define WCSRCHR wcsrchr @@ -26,12 +27,21 @@ wchar_t * WCSRCHR (const wchar_t *wcs, const wchar_t wc) { - const wchar_t *retval = NULL; + wchar_t *retval = NULL; - do - if (*wcs == wc) - retval = wcs; - while (*wcs++ != L'\0'); +#define ITERATION(index) \ + ({ \ + if (*wcs == wc) \ + retval = (wchar_t*) wcs; \ + *wcs++ != L'\0'; \ + }) - return (wchar_t *) retval; +#ifndef UNROLL_NTIMES +# define UNROLL_NTIMES 1 +#endif + + while (1) + UNROLL_REPEAT(UNROLL_NTIMES, ITERATION); + + return retval; }