public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org,
	Richard Henderson <richard.henderson@linaro.org>,
	Jeff Law <jeffreyalaw@gmail.com>, Xi Ruoyao <xry111@xry111.site>,
	Noah Goldstein <goldstein.w.n@gmail.com>
Subject: [PATCH v12 15/31] hppa: Add memcopy.h
Date: Thu,  2 Feb 2023 15:11:33 -0300	[thread overview]
Message-ID: <20230202181149.2181553-16-adhemerval.zanella@linaro.org> (raw)
In-Reply-To: <20230202181149.2181553-1-adhemerval.zanella@linaro.org>

From: Richard Henderson <richard.henderson@linaro.org>

GCC's combine pass cannot merge (x >> c | y << (32 - c)) into a
double-word shift unless (1) the subtract is in the same basic block
and (2) the result of the subtract is used exactly once.  Neither
condition is true for any use of MERGE.

By forcing the use of a double-word shift, we not only reduce
contention on SAR, but also allow the setting of SAR to be hoisted
outside of a loop.

Checked on hppa-linux-gnu.

Reviewewd-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
---
 sysdeps/hppa/memcopy.h | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 sysdeps/hppa/memcopy.h

diff --git a/sysdeps/hppa/memcopy.h b/sysdeps/hppa/memcopy.h
new file mode 100644
index 0000000000..0d4b4ac435
--- /dev/null
+++ b/sysdeps/hppa/memcopy.h
@@ -0,0 +1,42 @@
+/* Definitions for memory copy functions, PA-RISC version.
+   Copyright (C) 2023 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/generic/memcopy.h>
+
+/* Use a single double-word shift instead of two shifts and an ior.
+   If the uses of MERGE were close to the computation of shl/shr,
+   the compiler might have been able to create this itself.
+   But instead that computation is well separated.
+
+   Using an inline function instead of a macro is the easiest way
+   to ensure that the types are correct.  */
+
+#undef MERGE
+
+static __always_inline op_t
+MERGE (op_t w0, int shl, op_t w1, int shr)
+{
+  _Static_assert (OPSIZ == 4 || OPSIZ == 8, "Invalid OPSIZE");
+
+  op_t res;
+  if (OPSIZ == 4)
+    asm ("shrpw %1,%2,%%sar,%0" : "=r"(res) : "r"(w0), "r"(w1), "q"(shr));
+  else if (OPSIZ == 8)
+    asm ("shrpd %1,%2,%%sar,%0" : "=r"(res) : "r"(w0), "r"(w1), "q"(shr));
+  return res;
+}
-- 
2.34.1


  parent reply	other threads:[~2023-02-02 18:12 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-02 18:11 [PATCH v12 00/31] Improve generic string routines Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 01/31] Parameterize op_t from memcopy.h Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 02/31] Parameterize OP_T_THRES " Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 03/31] Add string vectorized find and detection functions Adhemerval Zanella
2023-02-03  0:24   ` Richard Henderson
2023-02-03 12:39     ` Adhemerval Zanella Netto
2023-02-03 13:40       ` Adhemerval Zanella Netto
2023-02-04  2:54         ` Richard Henderson
2023-02-02 18:11 ` [PATCH v12 04/31] string: Improve generic strlen Adhemerval Zanella
2023-02-03 23:23   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 05/31] string: Improve generic strchrnul Adhemerval Zanella
2023-02-03 23:23   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 06/31] string: Improve generic strchr Adhemerval Zanella
2023-02-03 23:24   ` Noah Goldstein
2023-02-04  2:58   ` Richard Henderson
2023-02-06 13:07     ` Adhemerval Zanella Netto
2023-02-02 18:11 ` [PATCH v12 07/31] string: Improve generic strcmp Adhemerval Zanella
2023-02-03 23:25   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 08/31] string: Improve generic strncmp Adhemerval Zanella
2023-02-03  0:34   ` Richard Henderson
2023-02-21  9:28   ` Szabolcs Nagy
2023-02-21 12:24     ` Adhemerval Zanella Netto
2023-02-02 18:11 ` [PATCH v12 09/31] string: Improve generic stpcpy Adhemerval Zanella
2023-02-03 23:26   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 10/31] string: Improve generic strcpy Adhemerval Zanella
2023-02-03 23:26   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 11/31] string: Improve generic memchr Adhemerval Zanella
2023-02-03 23:26   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 12/31] string: Improve generic strnlen with memchr Adhemerval Zanella
2023-02-03 23:27   ` Noah Goldstein
2023-02-02 18:11 ` [PATCH v12 13/31] string: Improve generic memrchr Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 14/31] string: Improve generic strrchr with memrchr and strlen Adhemerval Zanella
2023-02-04  3:06   ` Richard Henderson
2023-02-06 14:01     ` Adhemerval Zanella Netto
2023-02-02 18:11 ` Adhemerval Zanella [this message]
2023-02-02 18:11 ` [PATCH v12 16/31] hppa: Add string-fza.h, string-fzc.h, and string-fzi.h Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 17/31] alpha: Add string-fza, string-fzb.h, string-fzi.h, and string-shift.h Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 18/31] arm: Add string-fza.h Adhemerval Zanella
2023-02-20 13:24   ` Szabolcs Nagy
2023-02-20 13:45     ` Szabolcs Nagy
2023-02-20 14:01       ` Adhemerval Zanella Netto
2023-02-20 16:12         ` Szabolcs Nagy
2023-02-02 18:11 ` [PATCH v12 19/31] powerpc: " Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 20/31] sh: Add string-fzb.h Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 21/31] riscv: Add string-fza.h and string-fzi.h Adhemerval Zanella
2023-02-03 19:47   ` Noah Goldstein
2023-02-06 16:14     ` Adhemerval Zanella Netto
2023-02-02 18:11 ` [PATCH v12 22/31] string: Hook up the default implementation on test-strlen Adhemerval Zanella
2023-02-03 23:30   ` Noah Goldstein
2023-02-06 17:36     ` Adhemerval Zanella Netto
2023-02-02 18:11 ` [PATCH v12 23/31] string: Hook up the default implementation on test-strnlen Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 24/31] string: Hook up the default implementation on test-strchr Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 25/31] string: Hook up the default implementation on test-strcmp Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 26/31] string: Hook up the default implementation on test-strncmp Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 27/31] string: Hook up the default implementation on test-stpcpy Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 28/31] string: Hook up the default implementation on test-strcpy Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 29/31] string: Hook up the default implementation on test-memchr Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 30/31] string: Hook up the default implementation on test-memrchr Adhemerval Zanella
2023-02-02 18:11 ` [PATCH v12 31/31] string: Hook up the default implementation on test-strrchr Adhemerval Zanella
2023-02-03  1:55   ` Richard Henderson
2023-02-02 18:17 ` [PATCH v12 00/31] Improve generic string routines Adhemerval Zanella Netto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230202181149.2181553-16-adhemerval.zanella@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=goldstein.w.n@gmail.com \
    --cc=jeffreyalaw@gmail.com \
    --cc=libc-alpha@sourceware.org \
    --cc=richard.henderson@linaro.org \
    --cc=xry111@xry111.site \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).