aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorNoah Goldstein <goldstein.w.n@gmail.com>2022-06-16 15:07:12 -0700
committerNoah Goldstein <goldstein.w.n@gmail.com>2022-06-16 20:17:45 -0700
commitc22eb807b0c8125101f6a274795425be2bbd0386 (patch)
tree12f3b90aa183a801d36ac26efbd0b21dd4ec6f8e /sysdeps
parent8da9f346cb2051844348785b8a932ec44489e0b7 (diff)
downloadglibc-c22eb807b0c8125101f6a274795425be2bbd0386.tar
glibc-c22eb807b0c8125101f6a274795425be2bbd0386.tar.gz
glibc-c22eb807b0c8125101f6a274795425be2bbd0386.tar.bz2
glibc-c22eb807b0c8125101f6a274795425be2bbd0386.zip
x86: Rename generic functions with unique postfix for clarity
No functions are changed. It just renames generic implementations from '{func}_sse2' to '{func}_generic'. This is just because the postfix "_sse2" was overloaded and was used for files that had hand-optimized sse2 assembly implementations and files that just redirected back to the generic implementation. Full xcheck passed on x86_64.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/x86_64/multiarch/Makefile33
-rw-r--r--sysdeps/x86_64/multiarch/ifunc-avx2.h8
-rw-r--r--sysdeps/x86_64/multiarch/ifunc-impl-list.c18
-rw-r--r--sysdeps/x86_64/multiarch/ifunc-sse4_2.h4
-rw-r--r--sysdeps/x86_64/multiarch/ifunc-strcpy.h8
-rw-r--r--sysdeps/x86_64/multiarch/ifunc-wcslen.h8
-rw-r--r--sysdeps/x86_64/multiarch/stpncpy-c.c7
-rw-r--r--sysdeps/x86_64/multiarch/stpncpy-generic.c26
-rw-r--r--sysdeps/x86_64/multiarch/stpncpy.c1
-rw-r--r--sysdeps/x86_64/multiarch/strcspn-generic.c (renamed from sysdeps/x86_64/multiarch/strcspn-sse2.c)2
-rw-r--r--sysdeps/x86_64/multiarch/strcspn-sse4.c (renamed from sysdeps/x86_64/multiarch/strcspn-c.c)8
-rw-r--r--sysdeps/x86_64/multiarch/strncat-c.c2
-rw-r--r--sysdeps/x86_64/multiarch/strncat-generic.c21
-rw-r--r--sysdeps/x86_64/multiarch/strncat.c1
-rw-r--r--sysdeps/x86_64/multiarch/strncpy-c.c5
-rw-r--r--sysdeps/x86_64/multiarch/strncpy-generic.c24
-rw-r--r--sysdeps/x86_64/multiarch/strncpy.c1
-rw-r--r--sysdeps/x86_64/multiarch/strpbrk-generic.c (renamed from sysdeps/x86_64/multiarch/strpbrk-sse2.c)2
-rw-r--r--sysdeps/x86_64/multiarch/strpbrk-sse4.c (renamed from sysdeps/x86_64/multiarch/strpbrk-c.c)4
-rw-r--r--sysdeps/x86_64/multiarch/strspn-generic.c (renamed from sysdeps/x86_64/multiarch/strspn-sse2.c)2
-rw-r--r--sysdeps/x86_64/multiarch/strspn-sse4.c (renamed from sysdeps/x86_64/multiarch/strspn-c.c)4
-rw-r--r--sysdeps/x86_64/multiarch/wcscpy-c.c5
-rw-r--r--sysdeps/x86_64/multiarch/wcscpy-generic.c24
-rw-r--r--sysdeps/x86_64/multiarch/wcscpy.c4
-rw-r--r--sysdeps/x86_64/multiarch/wcsncmp-generic.c (renamed from sysdeps/x86_64/multiarch/wcsncmp-sse2.c)4
-rw-r--r--sysdeps/x86_64/multiarch/wcsncmp.c2
-rw-r--r--sysdeps/x86_64/multiarch/wcsnlen-c.c9
-rw-r--r--sysdeps/x86_64/multiarch/wcsnlen-generic.c28
-rw-r--r--sysdeps/x86_64/multiarch/wcsnlen.c1
29 files changed, 190 insertions, 76 deletions
diff --git a/sysdeps/x86_64/multiarch/Makefile b/sysdeps/x86_64/multiarch/Makefile
index 3d153cac35..666ee4d5d6 100644
--- a/sysdeps/x86_64/multiarch/Makefile
+++ b/sysdeps/x86_64/multiarch/Makefile
@@ -43,7 +43,7 @@ sysdep_routines += \
stpcpy-sse2-unaligned \
stpncpy-avx2 \
stpncpy-avx2-rtm \
- stpncpy-c \
+ stpncpy-generic \
stpncpy-evex \
stpncpy-sse2-unaligned \
strcasecmp_l-avx2 \
@@ -76,8 +76,8 @@ sysdep_routines += \
strcpy-evex \
strcpy-sse2 \
strcpy-sse2-unaligned \
- strcspn-c \
- strcspn-sse2 \
+ strcspn-generic \
+ strcspn-sse4 \
strlen-avx2 \
strlen-avx2-rtm \
strlen-evex \
@@ -90,7 +90,7 @@ sysdep_routines += \
strncase_l-sse4_2 \
strncat-avx2 \
strncat-avx2-rtm \
- strncat-c \
+ strncat-generic \
strncat-evex \
strncat-sse2-unaligned \
strncmp-avx2 \
@@ -100,7 +100,7 @@ sysdep_routines += \
strncmp-sse4_2 \
strncpy-avx2 \
strncpy-avx2-rtm \
- strncpy-c \
+ strncpy-generic \
strncpy-evex \
strncpy-sse2-unaligned \
strnlen-avx2 \
@@ -108,22 +108,23 @@ sysdep_routines += \
strnlen-evex \
strnlen-evex512 \
strnlen-sse2 \
- strpbrk-c \
- strpbrk-sse2 \
+ strpbrk-generic \
+ strpbrk-sse4 \
strrchr-avx2 \
strrchr-avx2-rtm \
strrchr-evex \
strrchr-sse2 \
- strspn-c \
- strspn-sse2 \
+ strspn-generic \
+ strspn-sse4 \
strstr-avx512 \
strstr-sse2-unaligned \
varshift \
# sysdep_routines
-CFLAGS-varshift.c += -msse4
-CFLAGS-strcspn-c.c += -msse4
-CFLAGS-strpbrk-c.c += -msse4
-CFLAGS-strspn-c.c += -msse4
+
+CFLAGS-strcspn-sse4.c += -msse4
+CFLAGS-strpbrk-sse4.c += -msse4
+CFLAGS-strspn-sse4.c += -msse4
+
CFLAGS-strstr-avx512.c += -mavx512f -mavx512vl -mavx512dq -mavx512bw -mbmi -mbmi2 -O3
endif
@@ -137,7 +138,7 @@ sysdep_routines += \
wcscmp-avx2-rtm \
wcscmp-evex \
wcscmp-sse2 \
- wcscpy-c \
+ wcscpy-generic \
wcscpy-ssse3 \
wcslen-avx2 \
wcslen-avx2-rtm \
@@ -147,11 +148,11 @@ sysdep_routines += \
wcslen-sse4_1 \
wcsncmp-avx2 \
wcsncmp-avx2-rtm \
+ wcsncmp-generic \
wcsncmp-evex \
- wcsncmp-sse2 \
wcsnlen-avx2 \
wcsnlen-avx2-rtm \
- wcsnlen-c \
+ wcsnlen-generic \
wcsnlen-evex \
wcsnlen-evex512 \
wcsnlen-sse4_1 \
diff --git a/sysdeps/x86_64/multiarch/ifunc-avx2.h b/sysdeps/x86_64/multiarch/ifunc-avx2.h
index 4289df29ec..1d9cdfcfec 100644
--- a/sysdeps/x86_64/multiarch/ifunc-avx2.h
+++ b/sysdeps/x86_64/multiarch/ifunc-avx2.h
@@ -19,7 +19,11 @@
#include <init-arch.h>
-extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+#ifndef GENERIC
+# define GENERIC sse2
+#endif
+
+extern __typeof (REDIRECT_NAME) OPTIMIZE (GENERIC) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2_rtm) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (evex) attribute_hidden;
@@ -44,5 +48,5 @@ IFUNC_SELECTOR (void)
return OPTIMIZE (avx2);
}
- return OPTIMIZE (sse2);
+ return OPTIMIZE (GENERIC);
}
diff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c b/sysdeps/x86_64/multiarch/ifunc-impl-list.c
index dc595752e0..883362f63d 100644
--- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c
@@ -367,7 +367,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
__stpncpy_evex)
IFUNC_IMPL_ADD (array, i, stpncpy, 1,
__stpncpy_sse2_unaligned)
- IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_sse2))
+ IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_generic))
/* Support sysdeps/x86_64/multiarch/stpcpy.c. */
IFUNC_IMPL (i, name, stpcpy,
@@ -526,7 +526,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
IFUNC_IMPL (i, name, strcspn,
IFUNC_IMPL_ADD (array, i, strcspn, CPU_FEATURE_USABLE (SSE4_2),
__strcspn_sse42)
- IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_sse2))
+ IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_generic))
/* Support sysdeps/x86_64/multiarch/strncase_l.c. */
IFUNC_IMPL (i, name, strncasecmp,
@@ -580,7 +580,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
__strncat_evex)
IFUNC_IMPL_ADD (array, i, strncat, 1,
__strncat_sse2_unaligned)
- IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_sse2))
+ IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_generic))
/* Support sysdeps/x86_64/multiarch/strncpy.c. */
IFUNC_IMPL (i, name, strncpy,
@@ -596,20 +596,20 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
__strncpy_evex)
IFUNC_IMPL_ADD (array, i, strncpy, 1,
__strncpy_sse2_unaligned)
- IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_sse2))
+ IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_generic))
/* Support sysdeps/x86_64/multiarch/strpbrk.c. */
IFUNC_IMPL (i, name, strpbrk,
IFUNC_IMPL_ADD (array, i, strpbrk, CPU_FEATURE_USABLE (SSE4_2),
__strpbrk_sse42)
- IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_sse2))
+ IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_generic))
/* Support sysdeps/x86_64/multiarch/strspn.c. */
IFUNC_IMPL (i, name, strspn,
IFUNC_IMPL_ADD (array, i, strspn, CPU_FEATURE_USABLE (SSE4_2),
__strspn_sse42)
- IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_sse2))
+ IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_generic))
/* Support sysdeps/x86_64/multiarch/strstr.c. */
IFUNC_IMPL (i, name, strstr,
@@ -686,13 +686,13 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
&& CPU_FEATURE_USABLE (AVX512BW)
&& CPU_FEATURE_USABLE (BMI2)),
__wcsncmp_evex)
- IFUNC_IMPL_ADD (array, i, wcsncmp, 1, __wcsncmp_sse2))
+ IFUNC_IMPL_ADD (array, i, wcsncmp, 1, __wcsncmp_generic))
/* Support sysdeps/x86_64/multiarch/wcscpy.c. */
IFUNC_IMPL (i, name, wcscpy,
IFUNC_IMPL_ADD (array, i, wcscpy, CPU_FEATURE_USABLE (SSSE3),
__wcscpy_ssse3)
- IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_sse2))
+ IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_generic))
/* Support sysdeps/x86_64/multiarch/wcslen.c. */
IFUNC_IMPL (i, name, wcslen,
@@ -744,7 +744,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
IFUNC_IMPL_ADD (array, i, wcsnlen,
CPU_FEATURE_USABLE (SSE4_1),
__wcsnlen_sse4_1)
- IFUNC_IMPL_ADD (array, i, wcsnlen, 1, __wcsnlen_sse2))
+ IFUNC_IMPL_ADD (array, i, wcsnlen, 1, __wcsnlen_generic))
/* Support sysdeps/x86_64/multiarch/wmemchr.c. */
IFUNC_IMPL (i, name, wmemchr,
diff --git a/sysdeps/x86_64/multiarch/ifunc-sse4_2.h b/sysdeps/x86_64/multiarch/ifunc-sse4_2.h
index b555ff2fac..ee36525bcf 100644
--- a/sysdeps/x86_64/multiarch/ifunc-sse4_2.h
+++ b/sysdeps/x86_64/multiarch/ifunc-sse4_2.h
@@ -19,7 +19,7 @@
#include <init-arch.h>
-extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+extern __typeof (REDIRECT_NAME) OPTIMIZE (generic) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse42) attribute_hidden;
static inline void *
@@ -30,5 +30,5 @@ IFUNC_SELECTOR (void)
if (CPU_FEATURE_USABLE_P (cpu_features, SSE4_2))
return OPTIMIZE (sse42);
- return OPTIMIZE (sse2);
+ return OPTIMIZE (generic);
}
diff --git a/sysdeps/x86_64/multiarch/ifunc-strcpy.h b/sysdeps/x86_64/multiarch/ifunc-strcpy.h
index a15afa44e9..80529458d1 100644
--- a/sysdeps/x86_64/multiarch/ifunc-strcpy.h
+++ b/sysdeps/x86_64/multiarch/ifunc-strcpy.h
@@ -20,7 +20,11 @@
#include <init-arch.h>
-extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+#ifndef GENERIC
+# define GENERIC sse2
+#endif
+
+extern __typeof (REDIRECT_NAME) OPTIMIZE (GENERIC) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_unaligned)
attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
@@ -49,5 +53,5 @@ IFUNC_SELECTOR (void)
if (CPU_FEATURES_ARCH_P (cpu_features, Fast_Unaligned_Load))
return OPTIMIZE (sse2_unaligned);
- return OPTIMIZE (sse2);
+ return OPTIMIZE (GENERIC);
}
diff --git a/sysdeps/x86_64/multiarch/ifunc-wcslen.h b/sysdeps/x86_64/multiarch/ifunc-wcslen.h
index 2b29e7608a..88c1c502af 100644
--- a/sysdeps/x86_64/multiarch/ifunc-wcslen.h
+++ b/sysdeps/x86_64/multiarch/ifunc-wcslen.h
@@ -19,7 +19,11 @@
#include <init-arch.h>
-extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+#ifndef GENERIC
+# define GENERIC sse2
+#endif
+
+extern __typeof (REDIRECT_NAME) OPTIMIZE (GENERIC) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse4_1) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2_rtm) attribute_hidden;
@@ -48,5 +52,5 @@ IFUNC_SELECTOR (void)
if (CPU_FEATURE_USABLE_P (cpu_features, SSE4_1))
return OPTIMIZE (sse4_1);
- return OPTIMIZE (sse2);
+ return OPTIMIZE (GENERIC);
}
diff --git a/sysdeps/x86_64/multiarch/stpncpy-c.c b/sysdeps/x86_64/multiarch/stpncpy-c.c
deleted file mode 100644
index b016e487e1..0000000000
--- a/sysdeps/x86_64/multiarch/stpncpy-c.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#define STPNCPY __stpncpy_sse2
-#undef weak_alias
-#define weak_alias(ignored1, ignored2)
-#undef libc_hidden_def
-#define libc_hidden_def(stpncpy)
-
-#include <string/stpncpy.c>
diff --git a/sysdeps/x86_64/multiarch/stpncpy-generic.c b/sysdeps/x86_64/multiarch/stpncpy-generic.c
new file mode 100644
index 0000000000..87826845b0
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/stpncpy-generic.c
@@ -0,0 +1,26 @@
+/* stpncpy.
+ 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/>. */
+
+
+#define STPNCPY __stpncpy_generic
+#undef weak_alias
+#define weak_alias(ignored1, ignored2)
+#undef libc_hidden_def
+#define libc_hidden_def(stpncpy)
+
+#include <string/stpncpy.c>
diff --git a/sysdeps/x86_64/multiarch/stpncpy.c b/sysdeps/x86_64/multiarch/stpncpy.c
index 82fa53957d..879bc83f0b 100644
--- a/sysdeps/x86_64/multiarch/stpncpy.c
+++ b/sysdeps/x86_64/multiarch/stpncpy.c
@@ -25,6 +25,7 @@
# undef stpncpy
# undef __stpncpy
+# define GENERIC generic
# define SYMBOL_NAME stpncpy
# include "ifunc-strcpy.h"
diff --git a/sysdeps/x86_64/multiarch/strcspn-sse2.c b/sysdeps/x86_64/multiarch/strcspn-generic.c
index 3a04bb39fc..423de2e2b2 100644
--- a/sysdeps/x86_64/multiarch/strcspn-sse2.c
+++ b/sysdeps/x86_64/multiarch/strcspn-generic.c
@@ -19,7 +19,7 @@
#if IS_IN (libc)
# include <sysdep.h>
-# define STRCSPN __strcspn_sse2
+# define STRCSPN __strcspn_generic
# undef libc_hidden_builtin_def
# define libc_hidden_builtin_def(STRCSPN)
diff --git a/sysdeps/x86_64/multiarch/strcspn-c.c b/sysdeps/x86_64/multiarch/strcspn-sse4.c
index c312fab8b1..59f64f9fe8 100644
--- a/sysdeps/x86_64/multiarch/strcspn-c.c
+++ b/sysdeps/x86_64/multiarch/strcspn-sse4.c
@@ -52,8 +52,8 @@
when either CFlag or ZFlag is 1. If CFlag == 1, ECX has the offset
X for case 1. */
-#ifndef STRCSPN_SSE2
-# define STRCSPN_SSE2 __strcspn_sse2
+#ifndef STRCSPN_GENERIC
+# define STRCSPN_GENERIC __strcspn_generic
# define STRCSPN_SSE42 __strcspn_sse42
#endif
@@ -69,7 +69,7 @@ char *
#else
size_t
#endif
-STRCSPN_SSE2 (const char *, const char *) attribute_hidden;
+STRCSPN_GENERIC (const char *, const char *) attribute_hidden;
#ifdef USE_AS_STRPBRK
@@ -119,7 +119,7 @@ STRCSPN_SSE42 (const char *s, const char *a)
/* There is no NULL terminator. Don't use SSE4.2 if the length
of A > 16. */
if (a[16] != 0)
- return STRCSPN_SSE2 (s, a);
+ return STRCSPN_GENERIC (s, a);
}
aligned = s;
diff --git a/sysdeps/x86_64/multiarch/strncat-c.c b/sysdeps/x86_64/multiarch/strncat-c.c
deleted file mode 100644
index 93a7fab7ea..0000000000
--- a/sysdeps/x86_64/multiarch/strncat-c.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define STRNCAT __strncat_sse2
-#include <string/strncat.c>
diff --git a/sysdeps/x86_64/multiarch/strncat-generic.c b/sysdeps/x86_64/multiarch/strncat-generic.c
new file mode 100644
index 0000000000..0090669cd1
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/strncat-generic.c
@@ -0,0 +1,21 @@
+/* strncat.
+ 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/>. */
+
+
+#define STRNCAT __strncat_generic
+#include <string/strncat.c>
diff --git a/sysdeps/x86_64/multiarch/strncat.c b/sysdeps/x86_64/multiarch/strncat.c
index b649343a97..50fba8a41f 100644
--- a/sysdeps/x86_64/multiarch/strncat.c
+++ b/sysdeps/x86_64/multiarch/strncat.c
@@ -24,6 +24,7 @@
# undef strncat
# define SYMBOL_NAME strncat
+# define GENERIC generic
# include "ifunc-strcpy.h"
libc_ifunc_redirected (__redirect_strncat, strncat, IFUNC_SELECTOR ());
diff --git a/sysdeps/x86_64/multiarch/strncpy-c.c b/sysdeps/x86_64/multiarch/strncpy-c.c
deleted file mode 100644
index 57c45ac7ab..0000000000
--- a/sysdeps/x86_64/multiarch/strncpy-c.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#define STRNCPY __strncpy_sse2
-#undef libc_hidden_builtin_def
-#define libc_hidden_builtin_def(strncpy)
-
-#include <string/strncpy.c>
diff --git a/sysdeps/x86_64/multiarch/strncpy-generic.c b/sysdeps/x86_64/multiarch/strncpy-generic.c
new file mode 100644
index 0000000000..9916153dd5
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/strncpy-generic.c
@@ -0,0 +1,24 @@
+/* strncpy.
+ 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/>. */
+
+
+#define STRNCPY __strncpy_generic
+#undef libc_hidden_builtin_def
+#define libc_hidden_builtin_def(strncpy)
+
+#include <string/strncpy.c>
diff --git a/sysdeps/x86_64/multiarch/strncpy.c b/sysdeps/x86_64/multiarch/strncpy.c
index 2a780a7e16..7fc7d72ec5 100644
--- a/sysdeps/x86_64/multiarch/strncpy.c
+++ b/sysdeps/x86_64/multiarch/strncpy.c
@@ -24,6 +24,7 @@
# undef strncpy
# define SYMBOL_NAME strncpy
+# define GENERIC generic
# include "ifunc-strcpy.h"
libc_ifunc_redirected (__redirect_strncpy, strncpy, IFUNC_SELECTOR ());
diff --git a/sysdeps/x86_64/multiarch/strpbrk-sse2.c b/sysdeps/x86_64/multiarch/strpbrk-generic.c
index d03214c4fb..d31acfe495 100644
--- a/sysdeps/x86_64/multiarch/strpbrk-sse2.c
+++ b/sysdeps/x86_64/multiarch/strpbrk-generic.c
@@ -19,7 +19,7 @@
#if IS_IN (libc)
# include <sysdep.h>
-# define STRPBRK __strpbrk_sse2
+# define STRPBRK __strpbrk_generic
# undef libc_hidden_builtin_def
# define libc_hidden_builtin_def(STRPBRK)
diff --git a/sysdeps/x86_64/multiarch/strpbrk-c.c b/sysdeps/x86_64/multiarch/strpbrk-sse4.c
index abf4ff7f1a..bf74d660d5 100644
--- a/sysdeps/x86_64/multiarch/strpbrk-c.c
+++ b/sysdeps/x86_64/multiarch/strpbrk-sse4.c
@@ -17,6 +17,6 @@
<https://www.gnu.org/licenses/>. */
#define USE_AS_STRPBRK
-#define STRCSPN_SSE2 __strpbrk_sse2
+#define STRCSPN_GENERIC __strpbrk_generic
#define STRCSPN_SSE42 __strpbrk_sse42
-#include "strcspn-c.c"
+#include "strcspn-sse4.c"
diff --git a/sysdeps/x86_64/multiarch/strspn-sse2.c b/sysdeps/x86_64/multiarch/strspn-generic.c
index 61cc6cb0a5..6b50c36432 100644
--- a/sysdeps/x86_64/multiarch/strspn-sse2.c
+++ b/sysdeps/x86_64/multiarch/strspn-generic.c
@@ -19,7 +19,7 @@
#if IS_IN (libc)
# include <sysdep.h>
-# define STRSPN __strspn_sse2
+# define STRSPN __strspn_generic
# undef libc_hidden_builtin_def
# define libc_hidden_builtin_def(STRSPN)
diff --git a/sysdeps/x86_64/multiarch/strspn-c.c b/sysdeps/x86_64/multiarch/strspn-sse4.c
index 6124033ceb..d044916688 100644
--- a/sysdeps/x86_64/multiarch/strspn-c.c
+++ b/sysdeps/x86_64/multiarch/strspn-sse4.c
@@ -51,7 +51,7 @@
We exit from the loop for case 1. */
-extern size_t __strspn_sse2 (const char *, const char *) attribute_hidden;
+extern size_t __strspn_generic (const char *, const char *) attribute_hidden;
size_t
@@ -98,7 +98,7 @@ __strspn_sse42 (const char *s, const char *a)
/* There is no NULL terminator. Don't use SSE4.2 if the length
of A > 16. */
if (a[16] != 0)
- return __strspn_sse2 (s, a);
+ return __strspn_generic (s, a);
}
aligned = s;
offset = (unsigned int) ((size_t) s & 15);
diff --git a/sysdeps/x86_64/multiarch/wcscpy-c.c b/sysdeps/x86_64/multiarch/wcscpy-c.c
deleted file mode 100644
index 26d6984e9b..0000000000
--- a/sysdeps/x86_64/multiarch/wcscpy-c.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#if IS_IN (libc)
-# define WCSCPY __wcscpy_sse2
-#endif
-
-#include <wcsmbs/wcscpy.c>
diff --git a/sysdeps/x86_64/multiarch/wcscpy-generic.c b/sysdeps/x86_64/multiarch/wcscpy-generic.c
new file mode 100644
index 0000000000..5ea905f33f
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/wcscpy-generic.c
@@ -0,0 +1,24 @@
+/* wcscpy.
+ 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/>. */
+
+
+#if IS_IN (libc)
+# define WCSCPY __wcscpy_generic
+#endif
+
+#include <wcsmbs/wcscpy.c>
diff --git a/sysdeps/x86_64/multiarch/wcscpy.c b/sysdeps/x86_64/multiarch/wcscpy.c
index 6a2d1421d9..53c3228dc2 100644
--- a/sysdeps/x86_64/multiarch/wcscpy.c
+++ b/sysdeps/x86_64/multiarch/wcscpy.c
@@ -26,7 +26,7 @@
# define SYMBOL_NAME wcscpy
# include <init-arch.h>
-extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+extern __typeof (REDIRECT_NAME) OPTIMIZE (generic) attribute_hidden;
extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3) attribute_hidden;
static inline void *
@@ -37,7 +37,7 @@ IFUNC_SELECTOR (void)
if (CPU_FEATURE_USABLE_P (cpu_features, SSSE3))
return OPTIMIZE (ssse3);
- return OPTIMIZE (sse2);
+ return OPTIMIZE (generic);
}
libc_ifunc_redirected (__redirect_wcscpy, __wcscpy, IFUNC_SELECTOR ());
diff --git a/sysdeps/x86_64/multiarch/wcsncmp-sse2.c b/sysdeps/x86_64/multiarch/wcsncmp-generic.c
index 8d9cbbb900..658d541886 100644
--- a/sysdeps/x86_64/multiarch/wcsncmp-sse2.c
+++ b/sysdeps/x86_64/multiarch/wcsncmp-generic.c
@@ -1,4 +1,4 @@
-/* wcsncmp optimized with SSE2.
+/* wcsncmp.
Copyright (C) 2018-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -16,5 +16,5 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#define WCSNCMP __wcsncmp_sse2
+#define WCSNCMP __wcsncmp_generic
#include <wcsmbs/wcsncmp.c>
diff --git a/sysdeps/x86_64/multiarch/wcsncmp.c b/sysdeps/x86_64/multiarch/wcsncmp.c
index 5e00af2ca5..1836f794dd 100644
--- a/sysdeps/x86_64/multiarch/wcsncmp.c
+++ b/sysdeps/x86_64/multiarch/wcsncmp.c
@@ -24,6 +24,8 @@
# undef wcsncmp
# undef __wcsncmp
+# define GENERIC generic
+
# define SYMBOL_NAME wcsncmp
# include "ifunc-avx2.h"
diff --git a/sysdeps/x86_64/multiarch/wcsnlen-c.c b/sysdeps/x86_64/multiarch/wcsnlen-c.c
deleted file mode 100644
index e1ec7cfbb5..0000000000
--- a/sysdeps/x86_64/multiarch/wcsnlen-c.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#if IS_IN (libc)
-# include <wchar.h>
-
-# define WCSNLEN __wcsnlen_sse2
-
-extern __typeof (wcsnlen) __wcsnlen_sse2;
-#endif
-
-#include "wcsmbs/wcsnlen.c"
diff --git a/sysdeps/x86_64/multiarch/wcsnlen-generic.c b/sysdeps/x86_64/multiarch/wcsnlen-generic.c
new file mode 100644
index 0000000000..2d75da7709
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/wcsnlen-generic.c
@@ -0,0 +1,28 @@
+/* wcsnlen.
+ 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/>. */
+
+
+#if IS_IN (libc)
+# include <wchar.h>
+
+# define WCSNLEN __wcsnlen_generic
+
+extern __typeof (wcsnlen) __wcsnlen_generic;
+#endif
+
+#include "wcsmbs/wcsnlen.c"
diff --git a/sysdeps/x86_64/multiarch/wcsnlen.c b/sysdeps/x86_64/multiarch/wcsnlen.c
index baa26666a8..05b7a211de 100644
--- a/sysdeps/x86_64/multiarch/wcsnlen.c
+++ b/sysdeps/x86_64/multiarch/wcsnlen.c
@@ -24,6 +24,7 @@
# undef __wcsnlen
# define SYMBOL_NAME wcsnlen
+# define GENERIC generic
# include "ifunc-wcslen.h"
libc_ifunc_redirected (__redirect_wcsnlen, __wcsnlen, IFUNC_SELECTOR ());