public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Noah Goldstein <goldstein.w.n@gmail.com>
To: libc-alpha@sourceware.org
Subject: [PATCH v1 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level
Date: Tue, 28 Jun 2022 08:27:17 -0700	[thread overview]
Message-ID: <20220628152717.17838-2-goldstein.w.n@gmail.com> (raw)
In-Reply-To: <20220628152717.17838-1-goldstein.w.n@gmail.com>

The changes for these functions are different than the others because
the best implementation (sse4_2) requires the generic
implementation as a fallback to be built as well.

Changes are:

1. Add non-multiarch functions for str{c|p}{brk|spn}.c to statically
   select the best implementation based on the configured ISA build
   level.

2. Add stubs for str{c|p}{brk|spn}-generic and varshift.c to in the
   sysdeps/x86_64 directory so that the the sse4 implementation will
   have all of its dependencies for the non-multiarch / rtld build
   when ISA level >=

3. Add new multiarch/rtld-strcspn.c that just include the
   non-multiarch strcspn.c which will in turn select the best
   implementation based on the compiled ISA level.

4. Refactor the ifunc selector and ifunc implementation list to use
   the ISA level aware wrapper macros that allow functions below the
   compiled ISA level (with a guranteed replacement) to be skipped.

Tested with and without multiarch on x86_64 for ISA levels:
{generic, x86-64-v2, x86-64-v3, x86-64-v4}

And m32 with and without multiarch.
---
 sysdeps/x86_64/Makefile                    |  9 +++++++-
 sysdeps/x86_64/multiarch/ifunc-impl-list.c |  9 +++++++-
 sysdeps/x86_64/multiarch/ifunc-sse4_2.h    |  2 +-
 sysdeps/x86_64/multiarch/rtld-strcspn.c    | 18 +++++++++++++++
 sysdeps/x86_64/multiarch/strcspn-generic.c | 11 +++++----
 sysdeps/x86_64/multiarch/strcspn-sse4.c    |  6 +++--
 sysdeps/x86_64/multiarch/strpbrk-generic.c |  9 +++++---
 sysdeps/x86_64/multiarch/strpbrk-sse4.c    |  6 ++++-
 sysdeps/x86_64/multiarch/strspn-generic.c  |  8 ++++---
 sysdeps/x86_64/multiarch/strspn-sse4.c     |  6 ++++-
 sysdeps/x86_64/strcspn-generic.c           | 22 ++++++++++++++++++
 sysdeps/x86_64/strcspn.c                   | 27 ++++++++++++++++++++++
 sysdeps/x86_64/strpbrk-generic.c           | 22 ++++++++++++++++++
 sysdeps/x86_64/strpbrk.c                   | 27 ++++++++++++++++++++++
 sysdeps/x86_64/strspn-generic.c            | 23 ++++++++++++++++++
 sysdeps/x86_64/strspn.c                    | 27 ++++++++++++++++++++++
 sysdeps/x86_64/varshift.c                  | 23 ++++++++++++++++++
 17 files changed, 238 insertions(+), 17 deletions(-)
 create mode 100644 sysdeps/x86_64/multiarch/rtld-strcspn.c
 create mode 100644 sysdeps/x86_64/strcspn-generic.c
 create mode 100644 sysdeps/x86_64/strcspn.c
 create mode 100644 sysdeps/x86_64/strpbrk-generic.c
 create mode 100644 sysdeps/x86_64/strpbrk.c
 create mode 100644 sysdeps/x86_64/strspn-generic.c
 create mode 100644 sysdeps/x86_64/strspn.c
 create mode 100644 sysdeps/x86_64/varshift.c

diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile
index 79365aff2a..c130d56342 100644
--- a/sysdeps/x86_64/Makefile
+++ b/sysdeps/x86_64/Makefile
@@ -14,7 +14,14 @@ sysdep_noprof += _mcount
 endif
 
 ifeq ($(subdir),string)
-sysdep_routines += strcasecmp_l-nonascii strncase_l-nonascii
+sysdep_routines += \
+  strcasecmp_l-nonascii \
+  strcspn-generic \
+  strncase_l-nonascii \
+  strpbrk-generic \
+  strspn-generic \
+  varshift \
+#sysdep_routines
 gen-as-const-headers += locale-defines.sym
 tests += \
   tst-rsi-strlen
diff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c b/sysdeps/x86_64/multiarch/ifunc-impl-list.c
index 772b4ace6c..251b0022d9 100644
--- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c
@@ -540,6 +540,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strcspn.c.  */
   IFUNC_IMPL (i, name, strcspn,
+	      /* All implementations of strcspn are built at all ISA
+	         levels.  */
 	      IFUNC_IMPL_ADD (array, i, strcspn, CPU_FEATURE_USABLE (SSE4_2),
 			      __strcspn_sse42)
 	      IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_generic))
@@ -616,6 +618,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strpbrk.c.  */
   IFUNC_IMPL (i, name, strpbrk,
+	      /* All implementations of strpbrk are built at all ISA
+	         levels.  */
 	      IFUNC_IMPL_ADD (array, i, strpbrk, CPU_FEATURE_USABLE (SSE4_2),
 			      __strpbrk_sse42)
 	      IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_generic))
@@ -623,13 +627,16 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strspn.c.  */
   IFUNC_IMPL (i, name, strspn,
+	      /* All implementations of strspn are built at all ISA
+	         levels.  */
 	      IFUNC_IMPL_ADD (array, i, strspn, CPU_FEATURE_USABLE (SSE4_2),
 			      __strspn_sse42)
 	      IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_generic))
 
   /* Support sysdeps/x86_64/multiarch/strstr.c.  */
   IFUNC_IMPL (i, name, strstr,
-	      /* All implementations of strstr are built at all ISA levels.  */
+	      /* All implementations of strstr are built at all ISA
+	         levels.  */
 	      IFUNC_IMPL_ADD (array, i, strstr,
 			      (CPU_FEATURE_USABLE (AVX512VL)
 			       && CPU_FEATURE_USABLE (AVX512BW)
diff --git a/sysdeps/x86_64/multiarch/ifunc-sse4_2.h b/sysdeps/x86_64/multiarch/ifunc-sse4_2.h
index 204c4b5406..d642f54fac 100644
--- a/sysdeps/x86_64/multiarch/ifunc-sse4_2.h
+++ b/sysdeps/x86_64/multiarch/ifunc-sse4_2.h
@@ -31,7 +31,7 @@ IFUNC_SELECTOR (void)
      there is no other optimized implementation keep using.  If an
      optimized fallback is added add a X86_ISA_CPU_FEATURE_USABLE_P
      (cpu_features, SSE4_2) check.  */
-  if (ISA_CPU_FEATURE_USABLE_P (cpu_features, SSE4_2))
+  if (X86_ISA_CPU_FEATURE_USABLE_P (cpu_features, SSE4_2))
     return OPTIMIZE (sse42);
 
   return OPTIMIZE (generic);
diff --git a/sysdeps/x86_64/multiarch/rtld-strcspn.c b/sysdeps/x86_64/multiarch/rtld-strcspn.c
new file mode 100644
index 0000000000..99e3c59e00
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/rtld-strcspn.c
@@ -0,0 +1,18 @@
+/* Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include "../strcspn.c"
diff --git a/sysdeps/x86_64/multiarch/strcspn-generic.c b/sysdeps/x86_64/multiarch/strcspn-generic.c
index 423de2e2b2..64e90a26bb 100644
--- a/sysdeps/x86_64/multiarch/strcspn-generic.c
+++ b/sysdeps/x86_64/multiarch/strcspn-generic.c
@@ -16,13 +16,16 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#if IS_IN (libc)
-
+/* We always need to build this implementation as strcspn-sse4 needs
+   to be able to fallback to it.  */
+#include <isa-level.h>
+#if IS_IN (libc) || MINIMUM_X86_ISA_LEVEL >= 2
 # include <sysdep.h>
 # define STRCSPN __strcspn_generic
 
 # undef libc_hidden_builtin_def
 # define libc_hidden_builtin_def(STRCSPN)
-#endif
 
-#include <string/strcspn.c>
+# include <string/strcspn.c>
+
+#endif
diff --git a/sysdeps/x86_64/multiarch/strcspn-sse4.c b/sysdeps/x86_64/multiarch/strcspn-sse4.c
index 59f64f9fe8..becdaf05f3 100644
--- a/sysdeps/x86_64/multiarch/strcspn-sse4.c
+++ b/sysdeps/x86_64/multiarch/strcspn-sse4.c
@@ -52,9 +52,11 @@
    when either CFlag or ZFlag is 1.  If CFlag == 1, ECX has the offset
    X for case 1.  */
 
+#ifndef STRCSPN
+# define STRCSPN __strcspn_sse42
+#endif
 #ifndef STRCSPN_GENERIC
 # define STRCSPN_GENERIC __strcspn_generic
-# define STRCSPN_SSE42 __strcspn_sse42
 #endif
 
 #ifdef USE_AS_STRPBRK
@@ -78,7 +80,7 @@ char *
 size_t
 #endif
 __attribute__ ((section (".text.sse4.2")))
-STRCSPN_SSE42 (const char *s, const char *a)
+STRCSPN (const char *s, const char *a)
 {
   if (*a == 0)
     RETURN (NULL, strlen (s));
diff --git a/sysdeps/x86_64/multiarch/strpbrk-generic.c b/sysdeps/x86_64/multiarch/strpbrk-generic.c
index d31acfe495..7f3ea86e91 100644
--- a/sysdeps/x86_64/multiarch/strpbrk-generic.c
+++ b/sysdeps/x86_64/multiarch/strpbrk-generic.c
@@ -16,13 +16,16 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#if IS_IN (libc)
 
+/* We always need to build this implementation as strpbrk-sse4 needs
+   to be able to fallback to it.  */
+#include <isa-level.h>
+#if IS_IN (libc) || MINIMUM_X86_ISA_LEVEL >= 2
 # include <sysdep.h>
 # define STRPBRK __strpbrk_generic
 
 # undef libc_hidden_builtin_def
 # define libc_hidden_builtin_def(STRPBRK)
-#endif
 
-#include <string/strpbrk.c>
+# include <string/strpbrk.c>
+#endif
diff --git a/sysdeps/x86_64/multiarch/strpbrk-sse4.c b/sysdeps/x86_64/multiarch/strpbrk-sse4.c
index bf74d660d5..0adb577955 100644
--- a/sysdeps/x86_64/multiarch/strpbrk-sse4.c
+++ b/sysdeps/x86_64/multiarch/strpbrk-sse4.c
@@ -16,7 +16,11 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#ifndef STRPBRK
+# define STRPBRK __strpbrk_sse42
+#endif
+
 #define USE_AS_STRPBRK
 #define STRCSPN_GENERIC __strpbrk_generic
-#define STRCSPN_SSE42 __strpbrk_sse42
+#define STRCSPN STRPBRK
 #include "strcspn-sse4.c"
diff --git a/sysdeps/x86_64/multiarch/strspn-generic.c b/sysdeps/x86_64/multiarch/strspn-generic.c
index 6b50c36432..f5632ad3b2 100644
--- a/sysdeps/x86_64/multiarch/strspn-generic.c
+++ b/sysdeps/x86_64/multiarch/strspn-generic.c
@@ -16,13 +16,15 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#if IS_IN (libc)
-
+/* We always need to build this implementation as strspn-sse4 needs to
+   be able to fallback to it.  */
+#include <isa-level.h>
+#if IS_IN (libc) || MINIMUM_X86_ISA_LEVEL >= 2
 # include <sysdep.h>
 # define STRSPN __strspn_generic
 
 # undef libc_hidden_builtin_def
 # define libc_hidden_builtin_def(STRSPN)
-#endif
 
 #include <string/strspn.c>
+#endif
diff --git a/sysdeps/x86_64/multiarch/strspn-sse4.c b/sysdeps/x86_64/multiarch/strspn-sse4.c
index d044916688..6263669b54 100644
--- a/sysdeps/x86_64/multiarch/strspn-sse4.c
+++ b/sysdeps/x86_64/multiarch/strspn-sse4.c
@@ -51,12 +51,16 @@
 
    We exit from the loop for case 1.  */
 
+
 extern size_t __strspn_generic (const char *, const char *) attribute_hidden;
 
+#ifndef STRSPN
+# define STRSPN	__strspn_sse42
+#endif
 
 size_t
 __attribute__ ((section (".text.sse4.2")))
-__strspn_sse42 (const char *s, const char *a)
+STRSPN (const char *s, const char *a)
 {
   if (*a == 0)
     return 0;
diff --git a/sysdeps/x86_64/strcspn-generic.c b/sysdeps/x86_64/strcspn-generic.c
new file mode 100644
index 0000000000..082324e793
--- /dev/null
+++ b/sysdeps/x86_64/strcspn-generic.c
@@ -0,0 +1,22 @@
+/* Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <isa-level.h>
+
+#if !defined USE_MULTIARCH && MINIMUM_X86_ISA_LEVEL >= 2
+# include "multiarch/strcspn-generic.c"
+#endif
diff --git a/sysdeps/x86_64/strcspn.c b/sysdeps/x86_64/strcspn.c
new file mode 100644
index 0000000000..cd54eed869
--- /dev/null
+++ b/sysdeps/x86_64/strcspn.c
@@ -0,0 +1,27 @@
+/* strcspn hook for non-multiarch and RTLD build.
+   Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <isa-level.h>
+
+#if MINIMUM_X86_ISA_LEVEL == 1
+#include <string/strcspn.c>
+#else
+#define STRCSPN	strcspn
+#include "multiarch/strcspn-sse4.c"
+libc_hidden_builtin_def (strcspn)
+#endif
diff --git a/sysdeps/x86_64/strpbrk-generic.c b/sysdeps/x86_64/strpbrk-generic.c
new file mode 100644
index 0000000000..6bdbb2d164
--- /dev/null
+++ b/sysdeps/x86_64/strpbrk-generic.c
@@ -0,0 +1,22 @@
+/* Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <isa-level.h>
+
+#if !defined USE_MULTIARCH && MINIMUM_X86_ISA_LEVEL >= 2
+# include "multiarch/strpbrk-generic.c"
+#endif
diff --git a/sysdeps/x86_64/strpbrk.c b/sysdeps/x86_64/strpbrk.c
new file mode 100644
index 0000000000..e7ea1b334a
--- /dev/null
+++ b/sysdeps/x86_64/strpbrk.c
@@ -0,0 +1,27 @@
+/* strpbrk hook for non-multiarch and RTLD build.
+   Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <isa-level.h>
+
+#if MINIMUM_X86_ISA_LEVEL == 1
+#include <string/strpbrk.c>
+#else
+#define STRPBRK	strpbrk
+#include "multiarch/strpbrk-sse4.c"
+libc_hidden_builtin_def (strpbrk)
+#endif
diff --git a/sysdeps/x86_64/strspn-generic.c b/sysdeps/x86_64/strspn-generic.c
new file mode 100644
index 0000000000..0730972bbd
--- /dev/null
+++ b/sysdeps/x86_64/strspn-generic.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+
+#include <isa-level.h>
+
+#if !defined USE_MULTIARCH && MINIMUM_X86_ISA_LEVEL >= 2
+# include "multiarch/strspn-generic.c"
+#endif
diff --git a/sysdeps/x86_64/strspn.c b/sysdeps/x86_64/strspn.c
new file mode 100644
index 0000000000..7b9ede26d9
--- /dev/null
+++ b/sysdeps/x86_64/strspn.c
@@ -0,0 +1,27 @@
+/* strspn hook for non-multiarch and RTLD build.
+   Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <isa-level.h>
+
+#if MINIMUM_X86_ISA_LEVEL == 1
+#include <string/strspn.c>
+#else
+#define STRSPN	strspn
+#include "multiarch/strspn-sse4.c"
+libc_hidden_builtin_def (strspn)
+#endif
diff --git a/sysdeps/x86_64/varshift.c b/sysdeps/x86_64/varshift.c
new file mode 100644
index 0000000000..ab3c506378
--- /dev/null
+++ b/sysdeps/x86_64/varshift.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 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
+   <https://www.gnu.org/licenses/>.  */
+
+
+#include <isa-level.h>
+
+#if !defined USE_MULTIARCH && MINIMUM_X86_ISA_LEVEL >= 2
+# include "multiarch/varshift.c"
+#endif
-- 
2.34.1


  reply	other threads:[~2022-06-28 15:27 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-28 15:27 [PATCH v1 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 Noah Goldstein
2022-06-28 15:27 ` Noah Goldstein [this message]
2022-06-29 19:20   ` [PATCH v1 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level H.J. Lu
2022-06-29 22:07     ` Noah Goldstein
2022-06-29 18:53 ` [PATCH v1 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 H.J. Lu
2022-06-29 19:19   ` Noah Goldstein
2022-06-29 22:06     ` Noah Goldstein
2022-06-29 22:05 ` [PATCH v2 " Noah Goldstein
2022-06-29 22:05   ` [PATCH v2 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level Noah Goldstein
2022-06-29 22:15     ` H.J. Lu
2022-06-30  3:11       ` Noah Goldstein
2022-06-30  3:27         ` Noah Goldstein
2022-06-29 22:12   ` [PATCH v2 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 H.J. Lu
2022-06-30  3:09     ` Noah Goldstein
2022-06-30  3:08 ` [PATCH v4 1/2] x86: Add missing IS_IN (libc) check to strncmp-sse4_2.S Noah Goldstein
2022-06-30  3:08   ` [PATCH v4 2/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 Noah Goldstein
2022-06-30  3:10   ` [PATCH v4 1/2] x86: Add missing IS_IN (libc) check to strncmp-sse4_2.S Noah Goldstein
2022-06-30  3:10 ` [PATCH v5 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 Noah Goldstein
2022-06-30  3:10   ` [PATCH v5 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level Noah Goldstein
2022-06-30  3:44 ` [PATCH v6 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 Noah Goldstein
2022-06-30  3:44   ` [PATCH v6 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level Noah Goldstein
2022-06-30  7:47   ` [PATCH v6 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 Andreas Schwab
2022-06-30 20:13     ` Noah Goldstein
2022-06-30 20:13 ` Noah Goldstein
2022-06-30 20:13   ` [PATCH v6 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level Noah Goldstein
2022-07-01 22:35     ` H.J. Lu
2022-06-30 23:20   ` [PATCH v6 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 H.J. Lu
2022-07-01  0:01     ` Noah Goldstein
2022-07-01  0:01       ` Noah Goldstein
2022-07-01 22:38         ` H.J. Lu
2022-07-01 22:52           ` Noah Goldstein
2022-07-03 18:00             ` H.J. Lu
2022-07-04  4:28               ` Noah Goldstein
2022-07-04  4:28 ` [PATCH v7 " Noah Goldstein
2022-07-04  4:28   ` [PATCH v7 2/2] x86: Add support for building str{c|p}{brk|spn} with explicit ISA level Noah Goldstein
2022-07-05 15:41   ` [PATCH v7 1/2] x86: Add comment explaining no Slow_SSE4_2 check in ifunc-sse4_2 H.J. Lu

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=20220628152717.17838-2-goldstein.w.n@gmail.com \
    --to=goldstein.w.n@gmail.com \
    --cc=libc-alpha@sourceware.org \
    /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).