]>
Commit | Line | Data |
---|---|---|
ac49ecaf | 1 | /* Enumerate available IFUNC implementations of a function. x86-64 version. |
2b778ceb | 2 | Copyright (C) 2012-2021 Free Software Foundation, Inc. |
ac49ecaf L |
3 | This file is part of the GNU C Library. |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
16 | License along with the GNU C Library; if not, see | |
5a82c748 | 17 | <https://www.gnu.org/licenses/>. */ |
ac49ecaf L |
18 | |
19 | #include <assert.h> | |
20 | #include <string.h> | |
21 | #include <wchar.h> | |
22 | #include <ifunc-impl-list.h> | |
83d776f9 | 23 | #include <sysdep.h> |
ac49ecaf L |
24 | #include "init-arch.h" |
25 | ||
26 | /* Maximum number of IFUNC implementations. */ | |
72276d6e | 27 | #define MAX_IFUNC 5 |
ac49ecaf L |
28 | |
29 | /* Fill ARRAY of MAX elements with IFUNC implementations for function | |
30 | NAME supported on target machine and return the number of valid | |
31 | entries. */ | |
32 | ||
33 | size_t | |
34 | __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, | |
35 | size_t max) | |
36 | { | |
37 | assert (max >= MAX_IFUNC); | |
38 | ||
39 | size_t i = 0; | |
40 | ||
6b6710e5 | 41 | /* Support sysdeps/x86_64/multiarch/memchr.c. */ |
2f5d20ac L |
42 | IFUNC_IMPL (i, name, memchr, |
43 | IFUNC_IMPL_ADD (array, i, memchr, | |
107e6a3c | 44 | CPU_FEATURE_USABLE (AVX2), |
2f5d20ac L |
45 | __memchr_avx2) |
46 | IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_sse2)) | |
47 | ||
b91a52d0 | 48 | /* Support sysdeps/x86_64/multiarch/memcmp.c. */ |
ac49ecaf | 49 | IFUNC_IMPL (i, name, memcmp, |
935971ba | 50 | IFUNC_IMPL_ADD (array, i, memcmp, |
107e6a3c L |
51 | (CPU_FEATURE_USABLE (AVX2) |
52 | && CPU_FEATURE_USABLE (MOVBE)), | |
935971ba | 53 | __memcmp_avx2_movbe) |
107e6a3c | 54 | IFUNC_IMPL_ADD (array, i, memcmp, CPU_FEATURE_USABLE (SSE4_1), |
ac49ecaf | 55 | __memcmp_sse4_1) |
107e6a3c | 56 | IFUNC_IMPL_ADD (array, i, memcmp, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 57 | __memcmp_ssse3) |
ac49ecaf L |
58 | IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_sse2)) |
59 | ||
7a499756 | 60 | #ifdef SHARED |
5c3e322d | 61 | /* Support sysdeps/x86_64/multiarch/memmove_chk.c. */ |
ac49ecaf | 62 | IFUNC_IMPL (i, name, __memmove_chk, |
72276d6e | 63 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 64 | CPU_FEATURE_USABLE (AVX512F), |
72276d6e | 65 | __memmove_chk_avx512_no_vzeroupper) |
88b57b8e | 66 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 67 | CPU_FEATURE_USABLE (AVX512F), |
c867597b | 68 | __memmove_chk_avx512_unaligned) |
88b57b8e | 69 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 70 | CPU_FEATURE_USABLE (AVX512F), |
88b57b8e | 71 | __memmove_chk_avx512_unaligned_erms) |
0b5395f0 | 72 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 73 | CPU_FEATURE_USABLE (AVX), |
05f3633d | 74 | __memmove_chk_avx_unaligned) |
88b57b8e | 75 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 76 | CPU_FEATURE_USABLE (AVX), |
88b57b8e | 77 | __memmove_chk_avx_unaligned_erms) |
0b5395f0 | 78 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 79 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 80 | __memmove_chk_ssse3_back) |
0b5395f0 | 81 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
107e6a3c | 82 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 83 | __memmove_chk_ssse3) |
88b57b8e | 84 | IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, |
c867597b | 85 | __memmove_chk_sse2_unaligned) |
88b57b8e | 86 | IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, |
5c3e322d L |
87 | __memmove_chk_sse2_unaligned_erms) |
88 | IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, | |
89 | __memmove_chk_erms)) | |
7a499756 | 90 | #endif |
ac49ecaf | 91 | |
5c3e322d | 92 | /* Support sysdeps/x86_64/multiarch/memmove.c. */ |
ac49ecaf | 93 | IFUNC_IMPL (i, name, memmove, |
0b5395f0 | 94 | IFUNC_IMPL_ADD (array, i, memmove, |
107e6a3c | 95 | CPU_FEATURE_USABLE (AVX), |
05f3633d | 96 | __memmove_avx_unaligned) |
88b57b8e | 97 | IFUNC_IMPL_ADD (array, i, memmove, |
107e6a3c | 98 | CPU_FEATURE_USABLE (AVX), |
88b57b8e | 99 | __memmove_avx_unaligned_erms) |
72276d6e | 100 | IFUNC_IMPL_ADD (array, i, memmove, |
107e6a3c | 101 | CPU_FEATURE_USABLE (AVX512F), |
72276d6e | 102 | __memmove_avx512_no_vzeroupper) |
88b57b8e | 103 | IFUNC_IMPL_ADD (array, i, memmove, |
107e6a3c | 104 | CPU_FEATURE_USABLE (AVX512F), |
c867597b | 105 | __memmove_avx512_unaligned) |
88b57b8e | 106 | IFUNC_IMPL_ADD (array, i, memmove, |
107e6a3c | 107 | CPU_FEATURE_USABLE (AVX512F), |
88b57b8e | 108 | __memmove_avx512_unaligned_erms) |
107e6a3c | 109 | IFUNC_IMPL_ADD (array, i, memmove, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 110 | __memmove_ssse3_back) |
107e6a3c | 111 | IFUNC_IMPL_ADD (array, i, memmove, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 112 | __memmove_ssse3) |
88b57b8e L |
113 | IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_erms) |
114 | IFUNC_IMPL_ADD (array, i, memmove, 1, | |
c867597b | 115 | __memmove_sse2_unaligned) |
88b57b8e | 116 | IFUNC_IMPL_ADD (array, i, memmove, 1, |
c867597b | 117 | __memmove_sse2_unaligned_erms)) |
ac49ecaf | 118 | |
6b6710e5 | 119 | /* Support sysdeps/x86_64/multiarch/memrchr.c. */ |
5ac7aa1d L |
120 | IFUNC_IMPL (i, name, memrchr, |
121 | IFUNC_IMPL_ADD (array, i, memrchr, | |
107e6a3c | 122 | CPU_FEATURE_USABLE (AVX2), |
5ac7aa1d L |
123 | __memrchr_avx2) |
124 | IFUNC_IMPL_ADD (array, i, memrchr, 1, __memrchr_sse2)) | |
125 | ||
7a499756 | 126 | #ifdef SHARED |
93e46f87 | 127 | /* Support sysdeps/x86_64/multiarch/memset_chk.c. */ |
d92d8f8a | 128 | IFUNC_IMPL (i, name, __memset_chk, |
93e46f87 L |
129 | IFUNC_IMPL_ADD (array, i, __memset_chk, 1, |
130 | __memset_chk_erms) | |
83056630 L |
131 | IFUNC_IMPL_ADD (array, i, __memset_chk, 1, |
132 | __memset_chk_sse2_unaligned) | |
133 | IFUNC_IMPL_ADD (array, i, __memset_chk, 1, | |
134 | __memset_chk_sse2_unaligned_erms) | |
83056630 | 135 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
107e6a3c | 136 | CPU_FEATURE_USABLE (AVX2), |
83056630 L |
137 | __memset_chk_avx2_unaligned) |
138 | IFUNC_IMPL_ADD (array, i, __memset_chk, | |
107e6a3c | 139 | CPU_FEATURE_USABLE (AVX2), |
83056630 | 140 | __memset_chk_avx2_unaligned_erms) |
83056630 | 141 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
107e6a3c | 142 | CPU_FEATURE_USABLE (AVX512F), |
83056630 L |
143 | __memset_chk_avx512_unaligned_erms) |
144 | IFUNC_IMPL_ADD (array, i, __memset_chk, | |
107e6a3c | 145 | CPU_FEATURE_USABLE (AVX512F), |
83056630 | 146 | __memset_chk_avx512_unaligned) |
83d776f9 | 147 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
107e6a3c | 148 | CPU_FEATURE_USABLE (AVX512F), |
83d776f9 | 149 | __memset_chk_avx512_no_vzeroupper) |
83d776f9 | 150 | ) |
7a499756 | 151 | #endif |
d92d8f8a | 152 | |
93e46f87 | 153 | /* Support sysdeps/x86_64/multiarch/memset.c. */ |
d92d8f8a | 154 | IFUNC_IMPL (i, name, memset, |
83056630 L |
155 | IFUNC_IMPL_ADD (array, i, memset, 1, |
156 | __memset_sse2_unaligned) | |
157 | IFUNC_IMPL_ADD (array, i, memset, 1, | |
158 | __memset_sse2_unaligned_erms) | |
159 | IFUNC_IMPL_ADD (array, i, memset, 1, __memset_erms) | |
83056630 | 160 | IFUNC_IMPL_ADD (array, i, memset, |
107e6a3c | 161 | CPU_FEATURE_USABLE (AVX2), |
83056630 L |
162 | __memset_avx2_unaligned) |
163 | IFUNC_IMPL_ADD (array, i, memset, | |
107e6a3c | 164 | CPU_FEATURE_USABLE (AVX2), |
83056630 | 165 | __memset_avx2_unaligned_erms) |
83056630 | 166 | IFUNC_IMPL_ADD (array, i, memset, |
107e6a3c | 167 | CPU_FEATURE_USABLE (AVX512F), |
83056630 L |
168 | __memset_avx512_unaligned_erms) |
169 | IFUNC_IMPL_ADD (array, i, memset, | |
107e6a3c | 170 | CPU_FEATURE_USABLE (AVX512F), |
83056630 | 171 | __memset_avx512_unaligned) |
83d776f9 | 172 | IFUNC_IMPL_ADD (array, i, memset, |
107e6a3c | 173 | CPU_FEATURE_USABLE (AVX512F), |
83d776f9 | 174 | __memset_avx512_no_vzeroupper) |
83d776f9 | 175 | ) |
d92d8f8a | 176 | |
6b6710e5 | 177 | /* Support sysdeps/x86_64/multiarch/rawmemchr.c. */ |
2f5d20ac L |
178 | IFUNC_IMPL (i, name, rawmemchr, |
179 | IFUNC_IMPL_ADD (array, i, rawmemchr, | |
107e6a3c | 180 | CPU_FEATURE_USABLE (AVX2), |
2f5d20ac L |
181 | __rawmemchr_avx2) |
182 | IFUNC_IMPL_ADD (array, i, rawmemchr, 1, __rawmemchr_sse2)) | |
183 | ||
6b6710e5 | 184 | /* Support sysdeps/x86_64/multiarch/strlen.c. */ |
dc485ceb L |
185 | IFUNC_IMPL (i, name, strlen, |
186 | IFUNC_IMPL_ADD (array, i, strlen, | |
107e6a3c | 187 | CPU_FEATURE_USABLE (AVX2), |
dc485ceb L |
188 | __strlen_avx2) |
189 | IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_sse2)) | |
190 | ||
6b6710e5 | 191 | /* Support sysdeps/x86_64/multiarch/strnlen.c. */ |
dc485ceb L |
192 | IFUNC_IMPL (i, name, strnlen, |
193 | IFUNC_IMPL_ADD (array, i, strnlen, | |
107e6a3c | 194 | CPU_FEATURE_USABLE (AVX2), |
dc485ceb L |
195 | __strnlen_avx2) |
196 | IFUNC_IMPL_ADD (array, i, strnlen, 1, __strnlen_sse2)) | |
197 | ||
4df54c89 | 198 | /* Support sysdeps/x86_64/multiarch/stpncpy.c. */ |
ac49ecaf | 199 | IFUNC_IMPL (i, name, stpncpy, |
107e6a3c | 200 | IFUNC_IMPL_ADD (array, i, stpncpy, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 201 | __stpncpy_ssse3) |
107e6a3c | 202 | IFUNC_IMPL_ADD (array, i, stpncpy, CPU_FEATURE_USABLE (AVX2), |
1a153e47 | 203 | __stpncpy_avx2) |
ac49ecaf L |
204 | IFUNC_IMPL_ADD (array, i, stpncpy, 1, |
205 | __stpncpy_sse2_unaligned) | |
206 | IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_sse2)) | |
207 | ||
4df54c89 | 208 | /* Support sysdeps/x86_64/multiarch/stpcpy.c. */ |
ac49ecaf | 209 | IFUNC_IMPL (i, name, stpcpy, |
107e6a3c | 210 | IFUNC_IMPL_ADD (array, i, stpcpy, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 211 | __stpcpy_ssse3) |
107e6a3c | 212 | IFUNC_IMPL_ADD (array, i, stpcpy, CPU_FEATURE_USABLE (AVX2), |
1a153e47 | 213 | __stpcpy_avx2) |
ac49ecaf L |
214 | IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2_unaligned) |
215 | IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2)) | |
216 | ||
4df54c89 | 217 | /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */ |
ac49ecaf | 218 | IFUNC_IMPL (i, name, strcasecmp, |
0b5395f0 | 219 | IFUNC_IMPL_ADD (array, i, strcasecmp, |
107e6a3c | 220 | CPU_FEATURE_USABLE (AVX), |
ac49ecaf | 221 | __strcasecmp_avx) |
0b5395f0 | 222 | IFUNC_IMPL_ADD (array, i, strcasecmp, |
107e6a3c | 223 | CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf | 224 | __strcasecmp_sse42) |
0b5395f0 | 225 | IFUNC_IMPL_ADD (array, i, strcasecmp, |
107e6a3c | 226 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
227 | __strcasecmp_ssse3) |
228 | IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_sse2)) | |
229 | ||
4df54c89 | 230 | /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */ |
ac49ecaf | 231 | IFUNC_IMPL (i, name, strcasecmp_l, |
0b5395f0 | 232 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, |
107e6a3c | 233 | CPU_FEATURE_USABLE (AVX), |
ac49ecaf | 234 | __strcasecmp_l_avx) |
0b5395f0 | 235 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, |
107e6a3c | 236 | CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf | 237 | __strcasecmp_l_sse42) |
0b5395f0 | 238 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, |
107e6a3c | 239 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
240 | __strcasecmp_l_ssse3) |
241 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, | |
242 | __strcasecmp_l_sse2)) | |
243 | ||
4df54c89 | 244 | /* Support sysdeps/x86_64/multiarch/strcat.c. */ |
ac49ecaf | 245 | IFUNC_IMPL (i, name, strcat, |
107e6a3c | 246 | IFUNC_IMPL_ADD (array, i, strcat, CPU_FEATURE_USABLE (AVX2), |
1a153e47 | 247 | __strcat_avx2) |
107e6a3c | 248 | IFUNC_IMPL_ADD (array, i, strcat, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 249 | __strcat_ssse3) |
ac49ecaf L |
250 | IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2_unaligned) |
251 | IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2)) | |
252 | ||
8fe57365 | 253 | /* Support sysdeps/x86_64/multiarch/strchr.c. */ |
ac49ecaf | 254 | IFUNC_IMPL (i, name, strchr, |
8fe57365 | 255 | IFUNC_IMPL_ADD (array, i, strchr, |
107e6a3c | 256 | CPU_FEATURE_USABLE (AVX2), |
8fe57365 | 257 | __strchr_avx2) |
ac49ecaf L |
258 | IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_sse2_no_bsf) |
259 | IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_sse2)) | |
260 | ||
8fe57365 L |
261 | /* Support sysdeps/x86_64/multiarch/strchrnul.c. */ |
262 | IFUNC_IMPL (i, name, strchrnul, | |
263 | IFUNC_IMPL_ADD (array, i, strchrnul, | |
107e6a3c | 264 | CPU_FEATURE_USABLE (AVX2), |
8fe57365 L |
265 | __strchrnul_avx2) |
266 | IFUNC_IMPL_ADD (array, i, strchrnul, 1, __strchrnul_sse2)) | |
267 | ||
d2538b91 L |
268 | /* Support sysdeps/x86_64/multiarch/strrchr.c. */ |
269 | IFUNC_IMPL (i, name, strrchr, | |
270 | IFUNC_IMPL_ADD (array, i, strrchr, | |
107e6a3c | 271 | CPU_FEATURE_USABLE (AVX2), |
d2538b91 L |
272 | __strrchr_avx2) |
273 | IFUNC_IMPL_ADD (array, i, strrchr, 1, __strrchr_sse2)) | |
274 | ||
4df54c89 | 275 | /* Support sysdeps/x86_64/multiarch/strcmp.c. */ |
ac49ecaf | 276 | IFUNC_IMPL (i, name, strcmp, |
14570163 | 277 | IFUNC_IMPL_ADD (array, i, strcmp, |
107e6a3c | 278 | CPU_FEATURE_USABLE (AVX2), |
14570163 | 279 | __strcmp_avx2) |
107e6a3c | 280 | IFUNC_IMPL_ADD (array, i, strcmp, CPU_FEATURE_USABLE (SSE4_2), |
0b5395f0 | 281 | __strcmp_sse42) |
107e6a3c | 282 | IFUNC_IMPL_ADD (array, i, strcmp, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 283 | __strcmp_ssse3) |
8f02859f | 284 | IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2_unaligned) |
ac49ecaf L |
285 | IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2)) |
286 | ||
4df54c89 | 287 | /* Support sysdeps/x86_64/multiarch/strcpy.c. */ |
ac49ecaf | 288 | IFUNC_IMPL (i, name, strcpy, |
107e6a3c | 289 | IFUNC_IMPL_ADD (array, i, strcpy, CPU_FEATURE_USABLE (AVX2), |
1a153e47 | 290 | __strcpy_avx2) |
107e6a3c | 291 | IFUNC_IMPL_ADD (array, i, strcpy, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 292 | __strcpy_ssse3) |
ac49ecaf L |
293 | IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2_unaligned) |
294 | IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2)) | |
295 | ||
4df54c89 | 296 | /* Support sysdeps/x86_64/multiarch/strcspn.c. */ |
ac49ecaf | 297 | IFUNC_IMPL (i, name, strcspn, |
107e6a3c | 298 | IFUNC_IMPL_ADD (array, i, strcspn, CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf L |
299 | __strcspn_sse42) |
300 | IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_sse2)) | |
301 | ||
4df54c89 | 302 | /* Support sysdeps/x86_64/multiarch/strncase_l.c. */ |
ac49ecaf | 303 | IFUNC_IMPL (i, name, strncasecmp, |
0b5395f0 | 304 | IFUNC_IMPL_ADD (array, i, strncasecmp, |
107e6a3c | 305 | CPU_FEATURE_USABLE (AVX), |
ac49ecaf | 306 | __strncasecmp_avx) |
0b5395f0 | 307 | IFUNC_IMPL_ADD (array, i, strncasecmp, |
107e6a3c | 308 | CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf | 309 | __strncasecmp_sse42) |
0b5395f0 | 310 | IFUNC_IMPL_ADD (array, i, strncasecmp, |
107e6a3c | 311 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
312 | __strncasecmp_ssse3) |
313 | IFUNC_IMPL_ADD (array, i, strncasecmp, 1, | |
314 | __strncasecmp_sse2)) | |
315 | ||
4df54c89 | 316 | /* Support sysdeps/x86_64/multiarch/strncase_l.c. */ |
ac49ecaf | 317 | IFUNC_IMPL (i, name, strncasecmp_l, |
0b5395f0 | 318 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, |
107e6a3c | 319 | CPU_FEATURE_USABLE (AVX), |
ac49ecaf | 320 | __strncasecmp_l_avx) |
0b5395f0 | 321 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, |
107e6a3c | 322 | CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf | 323 | __strncasecmp_l_sse42) |
0b5395f0 | 324 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, |
107e6a3c | 325 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
326 | __strncasecmp_l_ssse3) |
327 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, | |
328 | __strncasecmp_l_sse2)) | |
329 | ||
4df54c89 | 330 | /* Support sysdeps/x86_64/multiarch/strncat.c. */ |
ac49ecaf | 331 | IFUNC_IMPL (i, name, strncat, |
107e6a3c | 332 | IFUNC_IMPL_ADD (array, i, strncat, CPU_FEATURE_USABLE (AVX2), |
1a153e47 | 333 | __strncat_avx2) |
107e6a3c | 334 | IFUNC_IMPL_ADD (array, i, strncat, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
335 | __strncat_ssse3) |
336 | IFUNC_IMPL_ADD (array, i, strncat, 1, | |
337 | __strncat_sse2_unaligned) | |
338 | IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_sse2)) | |
339 | ||
4df54c89 | 340 | /* Support sysdeps/x86_64/multiarch/strncpy.c. */ |
ac49ecaf | 341 | IFUNC_IMPL (i, name, strncpy, |
107e6a3c | 342 | IFUNC_IMPL_ADD (array, i, strncpy, CPU_FEATURE_USABLE (AVX2), |
1a153e47 | 343 | __strncpy_avx2) |
107e6a3c | 344 | IFUNC_IMPL_ADD (array, i, strncpy, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
345 | __strncpy_ssse3) |
346 | IFUNC_IMPL_ADD (array, i, strncpy, 1, | |
347 | __strncpy_sse2_unaligned) | |
348 | IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_sse2)) | |
349 | ||
4df54c89 | 350 | /* Support sysdeps/x86_64/multiarch/strpbrk.c. */ |
ac49ecaf | 351 | IFUNC_IMPL (i, name, strpbrk, |
107e6a3c | 352 | IFUNC_IMPL_ADD (array, i, strpbrk, CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf L |
353 | __strpbrk_sse42) |
354 | IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_sse2)) | |
355 | ||
ac49ecaf | 356 | |
4df54c89 | 357 | /* Support sysdeps/x86_64/multiarch/strspn.c. */ |
ac49ecaf | 358 | IFUNC_IMPL (i, name, strspn, |
107e6a3c | 359 | IFUNC_IMPL_ADD (array, i, strspn, CPU_FEATURE_USABLE (SSE4_2), |
0b5395f0 | 360 | __strspn_sse42) |
ac49ecaf L |
361 | IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_sse2)) |
362 | ||
6f8e37eb | 363 | /* Support sysdeps/x86_64/multiarch/strstr.c. */ |
ac49ecaf | 364 | IFUNC_IMPL (i, name, strstr, |
584b18eb | 365 | IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2_unaligned) |
ac49ecaf L |
366 | IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2)) |
367 | ||
8fe57365 L |
368 | /* Support sysdeps/x86_64/multiarch/wcschr.c. */ |
369 | IFUNC_IMPL (i, name, wcschr, | |
370 | IFUNC_IMPL_ADD (array, i, wcschr, | |
107e6a3c | 371 | CPU_FEATURE_USABLE (AVX2), |
8fe57365 L |
372 | __wcschr_avx2) |
373 | IFUNC_IMPL_ADD (array, i, wcschr, 1, __wcschr_sse2)) | |
374 | ||
d2538b91 L |
375 | /* Support sysdeps/x86_64/multiarch/wcsrchr.c. */ |
376 | IFUNC_IMPL (i, name, wcsrchr, | |
377 | IFUNC_IMPL_ADD (array, i, wcsrchr, | |
107e6a3c | 378 | CPU_FEATURE_USABLE (AVX2), |
d2538b91 L |
379 | __wcsrchr_avx2) |
380 | IFUNC_IMPL_ADD (array, i, wcsrchr, 1, __wcsrchr_sse2)) | |
381 | ||
14570163 LS |
382 | /* Support sysdeps/x86_64/multiarch/wcscmp.c. */ |
383 | IFUNC_IMPL (i, name, wcscmp, | |
384 | IFUNC_IMPL_ADD (array, i, wcscmp, | |
107e6a3c | 385 | CPU_FEATURE_USABLE (AVX2), |
14570163 LS |
386 | __wcscmp_avx2) |
387 | IFUNC_IMPL_ADD (array, i, wcscmp, 1, __wcscmp_sse2)) | |
388 | ||
389 | /* Support sysdeps/x86_64/multiarch/wcsncmp.c. */ | |
390 | IFUNC_IMPL (i, name, wcsncmp, | |
391 | IFUNC_IMPL_ADD (array, i, wcsncmp, | |
107e6a3c | 392 | CPU_FEATURE_USABLE (AVX2), |
14570163 LS |
393 | __wcsncmp_avx2) |
394 | IFUNC_IMPL_ADD (array, i, wcsncmp, 1, __wcsncmp_sse2)) | |
395 | ||
4df54c89 | 396 | /* Support sysdeps/x86_64/multiarch/wcscpy.c. */ |
ac49ecaf | 397 | IFUNC_IMPL (i, name, wcscpy, |
107e6a3c | 398 | IFUNC_IMPL_ADD (array, i, wcscpy, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 399 | __wcscpy_ssse3) |
ac49ecaf L |
400 | IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_sse2)) |
401 | ||
dc485ceb L |
402 | /* Support sysdeps/x86_64/multiarch/wcslen.c. */ |
403 | IFUNC_IMPL (i, name, wcslen, | |
404 | IFUNC_IMPL_ADD (array, i, wcslen, | |
107e6a3c | 405 | CPU_FEATURE_USABLE (AVX2), |
dc485ceb L |
406 | __wcslen_avx2) |
407 | IFUNC_IMPL_ADD (array, i, wcslen, 1, __wcslen_sse2)) | |
408 | ||
d4cc385c L |
409 | /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */ |
410 | IFUNC_IMPL (i, name, wcsnlen, | |
dc485ceb | 411 | IFUNC_IMPL_ADD (array, i, wcsnlen, |
107e6a3c | 412 | CPU_FEATURE_USABLE (AVX2), |
dc485ceb | 413 | __wcsnlen_avx2) |
d4cc385c | 414 | IFUNC_IMPL_ADD (array, i, wcsnlen, |
107e6a3c | 415 | CPU_FEATURE_USABLE (SSE4_1), |
d4cc385c L |
416 | __wcsnlen_sse4_1) |
417 | IFUNC_IMPL_ADD (array, i, wcsnlen, 1, __wcsnlen_sse2)) | |
418 | ||
2f5d20ac L |
419 | /* Support sysdeps/x86_64/multiarch/wmemchr.c. */ |
420 | IFUNC_IMPL (i, name, wmemchr, | |
421 | IFUNC_IMPL_ADD (array, i, wmemchr, | |
107e6a3c | 422 | CPU_FEATURE_USABLE (AVX2), |
2f5d20ac L |
423 | __wmemchr_avx2) |
424 | IFUNC_IMPL_ADD (array, i, wmemchr, 1, __wmemchr_sse2)) | |
425 | ||
b91a52d0 | 426 | /* Support sysdeps/x86_64/multiarch/wmemcmp.c. */ |
ac49ecaf | 427 | IFUNC_IMPL (i, name, wmemcmp, |
935971ba | 428 | IFUNC_IMPL_ADD (array, i, wmemcmp, |
107e6a3c L |
429 | (CPU_FEATURE_USABLE (AVX2) |
430 | && CPU_FEATURE_USABLE (MOVBE)), | |
935971ba | 431 | __wmemcmp_avx2_movbe) |
107e6a3c | 432 | IFUNC_IMPL_ADD (array, i, wmemcmp, CPU_FEATURE_USABLE (SSE4_1), |
ac49ecaf | 433 | __wmemcmp_sse4_1) |
107e6a3c | 434 | IFUNC_IMPL_ADD (array, i, wmemcmp, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
435 | __wmemcmp_ssse3) |
436 | IFUNC_IMPL_ADD (array, i, wmemcmp, 1, __wmemcmp_sse2)) | |
437 | ||
5e112282 | 438 | /* Support sysdeps/x86_64/multiarch/wmemset.c. */ |
ef9c4cb6 L |
439 | IFUNC_IMPL (i, name, wmemset, |
440 | IFUNC_IMPL_ADD (array, i, wmemset, 1, | |
441 | __wmemset_sse2_unaligned) | |
442 | IFUNC_IMPL_ADD (array, i, wmemset, | |
107e6a3c | 443 | CPU_FEATURE_USABLE (AVX2), |
ef9c4cb6 L |
444 | __wmemset_avx2_unaligned) |
445 | IFUNC_IMPL_ADD (array, i, wmemset, | |
107e6a3c | 446 | CPU_FEATURE_USABLE (AVX512F), |
ef9c4cb6 L |
447 | __wmemset_avx512_unaligned)) |
448 | ||
ac49ecaf | 449 | #ifdef SHARED |
5c3e322d | 450 | /* Support sysdeps/x86_64/multiarch/memcpy_chk.c. */ |
ac49ecaf | 451 | IFUNC_IMPL (i, name, __memcpy_chk, |
72276d6e | 452 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 453 | CPU_FEATURE_USABLE (AVX512F), |
72276d6e | 454 | __memcpy_chk_avx512_no_vzeroupper) |
88b57b8e | 455 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 456 | CPU_FEATURE_USABLE (AVX512F), |
c867597b | 457 | __memcpy_chk_avx512_unaligned) |
88b57b8e | 458 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 459 | CPU_FEATURE_USABLE (AVX512F), |
88b57b8e | 460 | __memcpy_chk_avx512_unaligned_erms) |
0b5395f0 | 461 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 462 | CPU_FEATURE_USABLE (AVX), |
05f3633d | 463 | __memcpy_chk_avx_unaligned) |
88b57b8e | 464 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 465 | CPU_FEATURE_USABLE (AVX), |
88b57b8e | 466 | __memcpy_chk_avx_unaligned_erms) |
0b5395f0 | 467 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 468 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 469 | __memcpy_chk_ssse3_back) |
0b5395f0 | 470 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
107e6a3c | 471 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 472 | __memcpy_chk_ssse3) |
88b57b8e | 473 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, |
c867597b | 474 | __memcpy_chk_sse2_unaligned) |
ac49ecaf | 475 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, |
5c3e322d L |
476 | __memcpy_chk_sse2_unaligned_erms) |
477 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, | |
478 | __memcpy_chk_erms)) | |
fc11ff8d | 479 | #endif |
ac49ecaf | 480 | |
5c3e322d | 481 | /* Support sysdeps/x86_64/multiarch/memcpy.c. */ |
ac49ecaf | 482 | IFUNC_IMPL (i, name, memcpy, |
0b5395f0 | 483 | IFUNC_IMPL_ADD (array, i, memcpy, |
107e6a3c | 484 | CPU_FEATURE_USABLE (AVX), |
05f3633d | 485 | __memcpy_avx_unaligned) |
88b57b8e | 486 | IFUNC_IMPL_ADD (array, i, memcpy, |
107e6a3c | 487 | CPU_FEATURE_USABLE (AVX), |
88b57b8e | 488 | __memcpy_avx_unaligned_erms) |
107e6a3c | 489 | IFUNC_IMPL_ADD (array, i, memcpy, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 490 | __memcpy_ssse3_back) |
107e6a3c | 491 | IFUNC_IMPL_ADD (array, i, memcpy, CPU_FEATURE_USABLE (SSSE3), |
0b5395f0 | 492 | __memcpy_ssse3) |
72276d6e | 493 | IFUNC_IMPL_ADD (array, i, memcpy, |
107e6a3c | 494 | CPU_FEATURE_USABLE (AVX512F), |
72276d6e | 495 | __memcpy_avx512_no_vzeroupper) |
88b57b8e | 496 | IFUNC_IMPL_ADD (array, i, memcpy, |
107e6a3c | 497 | CPU_FEATURE_USABLE (AVX512F), |
c867597b | 498 | __memcpy_avx512_unaligned) |
88b57b8e | 499 | IFUNC_IMPL_ADD (array, i, memcpy, |
107e6a3c | 500 | CPU_FEATURE_USABLE (AVX512F), |
88b57b8e | 501 | __memcpy_avx512_unaligned_erms) |
2d48b41c | 502 | IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_sse2_unaligned) |
88b57b8e L |
503 | IFUNC_IMPL_ADD (array, i, memcpy, 1, |
504 | __memcpy_sse2_unaligned_erms) | |
c867597b | 505 | IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_erms)) |
ac49ecaf | 506 | |
fc11ff8d | 507 | #ifdef SHARED |
5c3e322d | 508 | /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */ |
ac49ecaf | 509 | IFUNC_IMPL (i, name, __mempcpy_chk, |
72276d6e | 510 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 511 | CPU_FEATURE_USABLE (AVX512F), |
72276d6e | 512 | __mempcpy_chk_avx512_no_vzeroupper) |
88b57b8e | 513 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 514 | CPU_FEATURE_USABLE (AVX512F), |
c867597b | 515 | __mempcpy_chk_avx512_unaligned) |
88b57b8e | 516 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 517 | CPU_FEATURE_USABLE (AVX512F), |
88b57b8e | 518 | __mempcpy_chk_avx512_unaligned_erms) |
0b5395f0 | 519 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 520 | CPU_FEATURE_USABLE (AVX), |
05f3633d | 521 | __mempcpy_chk_avx_unaligned) |
88b57b8e | 522 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 523 | CPU_FEATURE_USABLE (AVX), |
88b57b8e | 524 | __mempcpy_chk_avx_unaligned_erms) |
0b5395f0 | 525 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 526 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 527 | __mempcpy_chk_ssse3_back) |
0b5395f0 | 528 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
107e6a3c | 529 | CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 530 | __mempcpy_chk_ssse3) |
88b57b8e | 531 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, |
c867597b | 532 | __mempcpy_chk_sse2_unaligned) |
ac49ecaf | 533 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, |
5c3e322d L |
534 | __mempcpy_chk_sse2_unaligned_erms) |
535 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, | |
536 | __mempcpy_chk_erms)) | |
fc11ff8d | 537 | #endif |
ac49ecaf | 538 | |
5c3e322d | 539 | /* Support sysdeps/x86_64/multiarch/mempcpy.c. */ |
ac49ecaf | 540 | IFUNC_IMPL (i, name, mempcpy, |
72276d6e | 541 | IFUNC_IMPL_ADD (array, i, mempcpy, |
107e6a3c | 542 | CPU_FEATURE_USABLE (AVX512F), |
72276d6e | 543 | __mempcpy_avx512_no_vzeroupper) |
88b57b8e | 544 | IFUNC_IMPL_ADD (array, i, mempcpy, |
107e6a3c | 545 | CPU_FEATURE_USABLE (AVX512F), |
c867597b | 546 | __mempcpy_avx512_unaligned) |
88b57b8e | 547 | IFUNC_IMPL_ADD (array, i, mempcpy, |
107e6a3c | 548 | CPU_FEATURE_USABLE (AVX512F), |
88b57b8e | 549 | __mempcpy_avx512_unaligned_erms) |
0b5395f0 | 550 | IFUNC_IMPL_ADD (array, i, mempcpy, |
107e6a3c | 551 | CPU_FEATURE_USABLE (AVX), |
05f3633d | 552 | __mempcpy_avx_unaligned) |
88b57b8e | 553 | IFUNC_IMPL_ADD (array, i, mempcpy, |
107e6a3c | 554 | CPU_FEATURE_USABLE (AVX), |
88b57b8e | 555 | __mempcpy_avx_unaligned_erms) |
107e6a3c | 556 | IFUNC_IMPL_ADD (array, i, mempcpy, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 557 | __mempcpy_ssse3_back) |
107e6a3c | 558 | IFUNC_IMPL_ADD (array, i, mempcpy, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf | 559 | __mempcpy_ssse3) |
88b57b8e | 560 | IFUNC_IMPL_ADD (array, i, mempcpy, 1, |
c867597b | 561 | __mempcpy_sse2_unaligned) |
88b57b8e L |
562 | IFUNC_IMPL_ADD (array, i, mempcpy, 1, |
563 | __mempcpy_sse2_unaligned_erms) | |
c867597b | 564 | IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_erms)) |
ac49ecaf | 565 | |
4df54c89 | 566 | /* Support sysdeps/x86_64/multiarch/strncmp.c. */ |
ac49ecaf | 567 | IFUNC_IMPL (i, name, strncmp, |
14570163 | 568 | IFUNC_IMPL_ADD (array, i, strncmp, |
107e6a3c | 569 | CPU_FEATURE_USABLE (AVX2), |
14570163 | 570 | __strncmp_avx2) |
107e6a3c | 571 | IFUNC_IMPL_ADD (array, i, strncmp, CPU_FEATURE_USABLE (SSE4_2), |
ac49ecaf | 572 | __strncmp_sse42) |
107e6a3c | 573 | IFUNC_IMPL_ADD (array, i, strncmp, CPU_FEATURE_USABLE (SSSE3), |
ac49ecaf L |
574 | __strncmp_ssse3) |
575 | IFUNC_IMPL_ADD (array, i, strncmp, 1, __strncmp_sse2)) | |
ef9c4cb6 | 576 | |
fc11ff8d | 577 | #ifdef SHARED |
5e112282 | 578 | /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */ |
ef9c4cb6 L |
579 | IFUNC_IMPL (i, name, __wmemset_chk, |
580 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, 1, | |
581 | __wmemset_chk_sse2_unaligned) | |
582 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, | |
107e6a3c | 583 | CPU_FEATURE_USABLE (AVX2), |
ef9c4cb6 L |
584 | __wmemset_chk_avx2_unaligned) |
585 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, | |
107e6a3c | 586 | CPU_FEATURE_USABLE (AVX512F), |
ef9c4cb6 | 587 | __wmemset_chk_avx512_unaligned)) |
ac49ecaf L |
588 | #endif |
589 | ||
590 | return i; | |
591 | } |