1 /* Enumerate available IFUNC implementations of a function. x86-64 version.
2 Copyright (C) 2012-2021 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
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.
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.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
22 #include <ifunc-impl-list.h>
24 #include "init-arch.h"
26 /* Maximum number of IFUNC implementations. */
29 /* Fill ARRAY of MAX elements with IFUNC implementations for function
30 NAME supported on target machine and return the number of valid
34 __libc_ifunc_impl_list (const char *name
, struct libc_ifunc_impl
*array
,
37 assert (max
>= MAX_IFUNC
);
41 /* Support sysdeps/x86_64/multiarch/memchr.c. */
42 IFUNC_IMPL (i
, name
, memchr
,
43 IFUNC_IMPL_ADD (array
, i
, memchr
,
44 CPU_FEATURE_USABLE (AVX2
),
46 IFUNC_IMPL_ADD (array
, i
, memchr
,
47 (CPU_FEATURE_USABLE (AVX512VL
)
48 && CPU_FEATURE_USABLE (AVX512BW
)
49 && CPU_FEATURE_USABLE (BMI2
)),
51 IFUNC_IMPL_ADD (array
, i
, memchr
, 1, __memchr_sse2
))
53 /* Support sysdeps/x86_64/multiarch/memcmp.c. */
54 IFUNC_IMPL (i
, name
, memcmp
,
55 IFUNC_IMPL_ADD (array
, i
, memcmp
,
56 (CPU_FEATURE_USABLE (AVX2
)
57 && CPU_FEATURE_USABLE (MOVBE
)),
59 IFUNC_IMPL_ADD (array
, i
, memcmp
, CPU_FEATURE_USABLE (SSE4_1
),
61 IFUNC_IMPL_ADD (array
, i
, memcmp
, CPU_FEATURE_USABLE (SSSE3
),
63 IFUNC_IMPL_ADD (array
, i
, memcmp
, 1, __memcmp_sse2
))
66 /* Support sysdeps/x86_64/multiarch/memmove_chk.c. */
67 IFUNC_IMPL (i
, name
, __memmove_chk
,
68 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
69 CPU_FEATURE_USABLE (AVX512F
),
70 __memmove_chk_avx512_no_vzeroupper
)
71 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
72 CPU_FEATURE_USABLE (AVX512F
),
73 __memmove_chk_avx512_unaligned
)
74 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
75 CPU_FEATURE_USABLE (AVX512F
),
76 __memmove_chk_avx512_unaligned_erms
)
77 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
78 CPU_FEATURE_USABLE (AVX
),
79 __memmove_chk_avx_unaligned
)
80 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
81 CPU_FEATURE_USABLE (AVX
),
82 __memmove_chk_avx_unaligned_erms
)
83 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
84 CPU_FEATURE_USABLE (AVX512VL
),
85 __memmove_chk_evex_unaligned
)
86 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
87 CPU_FEATURE_USABLE (AVX512VL
),
88 __memmove_chk_evex_unaligned_erms
)
89 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
90 CPU_FEATURE_USABLE (SSSE3
),
91 __memmove_chk_ssse3_back
)
92 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
93 CPU_FEATURE_USABLE (SSSE3
),
95 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
, 1,
96 __memmove_chk_sse2_unaligned
)
97 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
, 1,
98 __memmove_chk_sse2_unaligned_erms
)
99 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
, 1,
103 /* Support sysdeps/x86_64/multiarch/memmove.c. */
104 IFUNC_IMPL (i
, name
, memmove
,
105 IFUNC_IMPL_ADD (array
, i
, memmove
,
106 CPU_FEATURE_USABLE (AVX
),
107 __memmove_avx_unaligned
)
108 IFUNC_IMPL_ADD (array
, i
, memmove
,
109 CPU_FEATURE_USABLE (AVX
),
110 __memmove_avx_unaligned_erms
)
111 IFUNC_IMPL_ADD (array
, i
, memmove
,
112 CPU_FEATURE_USABLE (AVX512VL
),
113 __memmove_evex_unaligned
)
114 IFUNC_IMPL_ADD (array
, i
, memmove
,
115 CPU_FEATURE_USABLE (AVX512VL
),
116 __memmove_evex_unaligned_erms
)
117 IFUNC_IMPL_ADD (array
, i
, memmove
,
118 CPU_FEATURE_USABLE (AVX512F
),
119 __memmove_avx512_no_vzeroupper
)
120 IFUNC_IMPL_ADD (array
, i
, memmove
,
121 CPU_FEATURE_USABLE (AVX512F
),
122 __memmove_avx512_unaligned
)
123 IFUNC_IMPL_ADD (array
, i
, memmove
,
124 CPU_FEATURE_USABLE (AVX512F
),
125 __memmove_avx512_unaligned_erms
)
126 IFUNC_IMPL_ADD (array
, i
, memmove
, CPU_FEATURE_USABLE (SSSE3
),
127 __memmove_ssse3_back
)
128 IFUNC_IMPL_ADD (array
, i
, memmove
, CPU_FEATURE_USABLE (SSSE3
),
130 IFUNC_IMPL_ADD (array
, i
, memmove
, 1, __memmove_erms
)
131 IFUNC_IMPL_ADD (array
, i
, memmove
, 1,
132 __memmove_sse2_unaligned
)
133 IFUNC_IMPL_ADD (array
, i
, memmove
, 1,
134 __memmove_sse2_unaligned_erms
))
136 /* Support sysdeps/x86_64/multiarch/memrchr.c. */
137 IFUNC_IMPL (i
, name
, memrchr
,
138 IFUNC_IMPL_ADD (array
, i
, memrchr
,
139 CPU_FEATURE_USABLE (AVX2
),
141 IFUNC_IMPL_ADD (array
, i
, memrchr
,
142 (CPU_FEATURE_USABLE (AVX512VL
)
143 && CPU_FEATURE_USABLE (AVX512BW
)),
146 IFUNC_IMPL_ADD (array
, i
, memrchr
, 1, __memrchr_sse2
))
149 /* Support sysdeps/x86_64/multiarch/memset_chk.c. */
150 IFUNC_IMPL (i
, name
, __memset_chk
,
151 IFUNC_IMPL_ADD (array
, i
, __memset_chk
, 1,
153 IFUNC_IMPL_ADD (array
, i
, __memset_chk
, 1,
154 __memset_chk_sse2_unaligned
)
155 IFUNC_IMPL_ADD (array
, i
, __memset_chk
, 1,
156 __memset_chk_sse2_unaligned_erms
)
157 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
158 CPU_FEATURE_USABLE (AVX2
),
159 __memset_chk_avx2_unaligned
)
160 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
161 CPU_FEATURE_USABLE (AVX2
),
162 __memset_chk_avx2_unaligned_erms
)
163 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
164 (CPU_FEATURE_USABLE (AVX512VL
)
165 && CPU_FEATURE_USABLE (AVX512BW
)),
166 __memset_chk_evex_unaligned
)
167 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
168 (CPU_FEATURE_USABLE (AVX512VL
)
169 && CPU_FEATURE_USABLE (AVX512BW
)),
170 __memset_chk_evex_unaligned_erms
)
171 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
172 CPU_FEATURE_USABLE (AVX512F
),
173 __memset_chk_avx512_unaligned_erms
)
174 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
175 CPU_FEATURE_USABLE (AVX512F
),
176 __memset_chk_avx512_unaligned
)
177 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
178 CPU_FEATURE_USABLE (AVX512F
),
179 __memset_chk_avx512_no_vzeroupper
)
183 /* Support sysdeps/x86_64/multiarch/memset.c. */
184 IFUNC_IMPL (i
, name
, memset
,
185 IFUNC_IMPL_ADD (array
, i
, memset
, 1,
186 __memset_sse2_unaligned
)
187 IFUNC_IMPL_ADD (array
, i
, memset
, 1,
188 __memset_sse2_unaligned_erms
)
189 IFUNC_IMPL_ADD (array
, i
, memset
, 1, __memset_erms
)
190 IFUNC_IMPL_ADD (array
, i
, memset
,
191 CPU_FEATURE_USABLE (AVX2
),
192 __memset_avx2_unaligned
)
193 IFUNC_IMPL_ADD (array
, i
, memset
,
194 CPU_FEATURE_USABLE (AVX2
),
195 __memset_avx2_unaligned_erms
)
196 IFUNC_IMPL_ADD (array
, i
, memset
,
197 (CPU_FEATURE_USABLE (AVX512VL
)
198 && CPU_FEATURE_USABLE (AVX512BW
)),
199 __memset_evex_unaligned
)
200 IFUNC_IMPL_ADD (array
, i
, memset
,
201 (CPU_FEATURE_USABLE (AVX512VL
)
202 && CPU_FEATURE_USABLE (AVX512BW
)),
203 __memset_evex_unaligned_erms
)
204 IFUNC_IMPL_ADD (array
, i
, memset
,
205 CPU_FEATURE_USABLE (AVX512F
),
206 __memset_avx512_unaligned_erms
)
207 IFUNC_IMPL_ADD (array
, i
, memset
,
208 CPU_FEATURE_USABLE (AVX512F
),
209 __memset_avx512_unaligned
)
210 IFUNC_IMPL_ADD (array
, i
, memset
,
211 CPU_FEATURE_USABLE (AVX512F
),
212 __memset_avx512_no_vzeroupper
)
215 /* Support sysdeps/x86_64/multiarch/rawmemchr.c. */
216 IFUNC_IMPL (i
, name
, rawmemchr
,
217 IFUNC_IMPL_ADD (array
, i
, rawmemchr
,
218 CPU_FEATURE_USABLE (AVX2
),
220 IFUNC_IMPL_ADD (array
, i
, rawmemchr
,
221 (CPU_FEATURE_USABLE (AVX512VL
)
222 && CPU_FEATURE_USABLE (AVX512BW
)
223 && CPU_FEATURE_USABLE (BMI2
)),
225 IFUNC_IMPL_ADD (array
, i
, rawmemchr
, 1, __rawmemchr_sse2
))
227 /* Support sysdeps/x86_64/multiarch/strlen.c. */
228 IFUNC_IMPL (i
, name
, strlen
,
229 IFUNC_IMPL_ADD (array
, i
, strlen
,
230 CPU_FEATURE_USABLE (AVX2
),
232 IFUNC_IMPL_ADD (array
, i
, strlen
,
233 (CPU_FEATURE_USABLE (AVX512VL
)
234 && CPU_FEATURE_USABLE (AVX512BW
)),
236 IFUNC_IMPL_ADD (array
, i
, strlen
, 1, __strlen_sse2
))
238 /* Support sysdeps/x86_64/multiarch/strnlen.c. */
239 IFUNC_IMPL (i
, name
, strnlen
,
240 IFUNC_IMPL_ADD (array
, i
, strnlen
,
241 CPU_FEATURE_USABLE (AVX2
),
243 IFUNC_IMPL_ADD (array
, i
, strnlen
,
244 (CPU_FEATURE_USABLE (AVX512VL
)
245 && CPU_FEATURE_USABLE (AVX512BW
)),
247 IFUNC_IMPL_ADD (array
, i
, strnlen
, 1, __strnlen_sse2
))
249 /* Support sysdeps/x86_64/multiarch/stpncpy.c. */
250 IFUNC_IMPL (i
, name
, stpncpy
,
251 IFUNC_IMPL_ADD (array
, i
, stpncpy
, CPU_FEATURE_USABLE (SSSE3
),
253 IFUNC_IMPL_ADD (array
, i
, stpncpy
, CPU_FEATURE_USABLE (AVX2
),
255 IFUNC_IMPL_ADD (array
, i
, stpncpy
,
256 (CPU_FEATURE_USABLE (AVX512VL
)
257 && CPU_FEATURE_USABLE (AVX512BW
)),
259 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1,
260 __stpncpy_sse2_unaligned
)
261 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1, __stpncpy_sse2
))
263 /* Support sysdeps/x86_64/multiarch/stpcpy.c. */
264 IFUNC_IMPL (i
, name
, stpcpy
,
265 IFUNC_IMPL_ADD (array
, i
, stpcpy
, CPU_FEATURE_USABLE (SSSE3
),
267 IFUNC_IMPL_ADD (array
, i
, stpcpy
, CPU_FEATURE_USABLE (AVX2
),
269 IFUNC_IMPL_ADD (array
, i
, stpcpy
,
270 (CPU_FEATURE_USABLE (AVX512VL
)
271 && CPU_FEATURE_USABLE (AVX512BW
)),
273 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, __stpcpy_sse2_unaligned
)
274 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, __stpcpy_sse2
))
276 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
277 IFUNC_IMPL (i
, name
, strcasecmp
,
278 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
279 CPU_FEATURE_USABLE (AVX
),
281 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
282 CPU_FEATURE_USABLE (SSE4_2
),
284 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
285 CPU_FEATURE_USABLE (SSSE3
),
287 IFUNC_IMPL_ADD (array
, i
, strcasecmp
, 1, __strcasecmp_sse2
))
289 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
290 IFUNC_IMPL (i
, name
, strcasecmp_l
,
291 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
292 CPU_FEATURE_USABLE (AVX
),
294 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
295 CPU_FEATURE_USABLE (SSE4_2
),
296 __strcasecmp_l_sse42
)
297 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
298 CPU_FEATURE_USABLE (SSSE3
),
299 __strcasecmp_l_ssse3
)
300 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
, 1,
301 __strcasecmp_l_sse2
))
303 /* Support sysdeps/x86_64/multiarch/strcat.c. */
304 IFUNC_IMPL (i
, name
, strcat
,
305 IFUNC_IMPL_ADD (array
, i
, strcat
, CPU_FEATURE_USABLE (AVX2
),
307 IFUNC_IMPL_ADD (array
, i
, strcat
,
308 (CPU_FEATURE_USABLE (AVX512VL
)
309 && CPU_FEATURE_USABLE (AVX512BW
)),
311 IFUNC_IMPL_ADD (array
, i
, strcat
, CPU_FEATURE_USABLE (SSSE3
),
313 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, __strcat_sse2_unaligned
)
314 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, __strcat_sse2
))
316 /* Support sysdeps/x86_64/multiarch/strchr.c. */
317 IFUNC_IMPL (i
, name
, strchr
,
318 IFUNC_IMPL_ADD (array
, i
, strchr
,
319 CPU_FEATURE_USABLE (AVX2
),
321 IFUNC_IMPL_ADD (array
, i
, strchr
,
322 (CPU_FEATURE_USABLE (AVX512VL
)
323 && CPU_FEATURE_USABLE (AVX512BW
)
324 && CPU_FEATURE_USABLE (BMI2
)),
326 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, __strchr_sse2_no_bsf
)
327 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, __strchr_sse2
))
329 /* Support sysdeps/x86_64/multiarch/strchrnul.c. */
330 IFUNC_IMPL (i
, name
, strchrnul
,
331 IFUNC_IMPL_ADD (array
, i
, strchrnul
,
332 CPU_FEATURE_USABLE (AVX2
),
334 IFUNC_IMPL_ADD (array
, i
, strchrnul
,
335 (CPU_FEATURE_USABLE (AVX512VL
)
336 && CPU_FEATURE_USABLE (AVX512BW
)
337 && CPU_FEATURE_USABLE (BMI2
)),
339 IFUNC_IMPL_ADD (array
, i
, strchrnul
, 1, __strchrnul_sse2
))
341 /* Support sysdeps/x86_64/multiarch/strrchr.c. */
342 IFUNC_IMPL (i
, name
, strrchr
,
343 IFUNC_IMPL_ADD (array
, i
, strrchr
,
344 CPU_FEATURE_USABLE (AVX2
),
346 IFUNC_IMPL_ADD (array
, i
, strrchr
,
347 (CPU_FEATURE_USABLE (AVX512VL
)
348 && CPU_FEATURE_USABLE (AVX512BW
)),
350 IFUNC_IMPL_ADD (array
, i
, strrchr
, 1, __strrchr_sse2
))
352 /* Support sysdeps/x86_64/multiarch/strcmp.c. */
353 IFUNC_IMPL (i
, name
, strcmp
,
354 IFUNC_IMPL_ADD (array
, i
, strcmp
,
355 CPU_FEATURE_USABLE (AVX2
),
357 IFUNC_IMPL_ADD (array
, i
, strcmp
,
358 (CPU_FEATURE_USABLE (AVX512VL
)
359 && CPU_FEATURE_USABLE (AVX512BW
)
360 && CPU_FEATURE_USABLE (BMI2
)),
362 IFUNC_IMPL_ADD (array
, i
, strcmp
, CPU_FEATURE_USABLE (SSE4_2
),
364 IFUNC_IMPL_ADD (array
, i
, strcmp
, CPU_FEATURE_USABLE (SSSE3
),
366 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, __strcmp_sse2_unaligned
)
367 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, __strcmp_sse2
))
369 /* Support sysdeps/x86_64/multiarch/strcpy.c. */
370 IFUNC_IMPL (i
, name
, strcpy
,
371 IFUNC_IMPL_ADD (array
, i
, strcpy
, CPU_FEATURE_USABLE (AVX2
),
373 IFUNC_IMPL_ADD (array
, i
, strcpy
,
374 (CPU_FEATURE_USABLE (AVX512VL
)
375 && CPU_FEATURE_USABLE (AVX512BW
)),
377 IFUNC_IMPL_ADD (array
, i
, strcpy
, CPU_FEATURE_USABLE (SSSE3
),
379 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, __strcpy_sse2_unaligned
)
380 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, __strcpy_sse2
))
382 /* Support sysdeps/x86_64/multiarch/strcspn.c. */
383 IFUNC_IMPL (i
, name
, strcspn
,
384 IFUNC_IMPL_ADD (array
, i
, strcspn
, CPU_FEATURE_USABLE (SSE4_2
),
386 IFUNC_IMPL_ADD (array
, i
, strcspn
, 1, __strcspn_sse2
))
388 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
389 IFUNC_IMPL (i
, name
, strncasecmp
,
390 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
391 CPU_FEATURE_USABLE (AVX
),
393 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
394 CPU_FEATURE_USABLE (SSE4_2
),
396 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
397 CPU_FEATURE_USABLE (SSSE3
),
399 IFUNC_IMPL_ADD (array
, i
, strncasecmp
, 1,
402 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
403 IFUNC_IMPL (i
, name
, strncasecmp_l
,
404 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
405 CPU_FEATURE_USABLE (AVX
),
407 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
408 CPU_FEATURE_USABLE (SSE4_2
),
409 __strncasecmp_l_sse42
)
410 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
411 CPU_FEATURE_USABLE (SSSE3
),
412 __strncasecmp_l_ssse3
)
413 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
, 1,
414 __strncasecmp_l_sse2
))
416 /* Support sysdeps/x86_64/multiarch/strncat.c. */
417 IFUNC_IMPL (i
, name
, strncat
,
418 IFUNC_IMPL_ADD (array
, i
, strncat
, CPU_FEATURE_USABLE (AVX2
),
420 IFUNC_IMPL_ADD (array
, i
, strncat
,
421 (CPU_FEATURE_USABLE (AVX512VL
)
422 && CPU_FEATURE_USABLE (AVX512BW
)),
424 IFUNC_IMPL_ADD (array
, i
, strncat
, CPU_FEATURE_USABLE (SSSE3
),
426 IFUNC_IMPL_ADD (array
, i
, strncat
, 1,
427 __strncat_sse2_unaligned
)
428 IFUNC_IMPL_ADD (array
, i
, strncat
, 1, __strncat_sse2
))
430 /* Support sysdeps/x86_64/multiarch/strncpy.c. */
431 IFUNC_IMPL (i
, name
, strncpy
,
432 IFUNC_IMPL_ADD (array
, i
, strncpy
, CPU_FEATURE_USABLE (AVX2
),
434 IFUNC_IMPL_ADD (array
, i
, strncpy
,
435 (CPU_FEATURE_USABLE (AVX512VL
)
436 && CPU_FEATURE_USABLE (AVX512BW
)),
438 IFUNC_IMPL_ADD (array
, i
, strncpy
, CPU_FEATURE_USABLE (SSSE3
),
440 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1,
441 __strncpy_sse2_unaligned
)
442 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1, __strncpy_sse2
))
444 /* Support sysdeps/x86_64/multiarch/strpbrk.c. */
445 IFUNC_IMPL (i
, name
, strpbrk
,
446 IFUNC_IMPL_ADD (array
, i
, strpbrk
, CPU_FEATURE_USABLE (SSE4_2
),
448 IFUNC_IMPL_ADD (array
, i
, strpbrk
, 1, __strpbrk_sse2
))
451 /* Support sysdeps/x86_64/multiarch/strspn.c. */
452 IFUNC_IMPL (i
, name
, strspn
,
453 IFUNC_IMPL_ADD (array
, i
, strspn
, CPU_FEATURE_USABLE (SSE4_2
),
455 IFUNC_IMPL_ADD (array
, i
, strspn
, 1, __strspn_sse2
))
457 /* Support sysdeps/x86_64/multiarch/strstr.c. */
458 IFUNC_IMPL (i
, name
, strstr
,
459 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, __strstr_sse2_unaligned
)
460 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, __strstr_sse2
))
462 /* Support sysdeps/x86_64/multiarch/wcschr.c. */
463 IFUNC_IMPL (i
, name
, wcschr
,
464 IFUNC_IMPL_ADD (array
, i
, wcschr
,
465 CPU_FEATURE_USABLE (AVX2
),
467 IFUNC_IMPL_ADD (array
, i
, wcschr
,
468 (CPU_FEATURE_USABLE (AVX512VL
)
469 && CPU_FEATURE_USABLE (AVX512BW
)
470 && CPU_FEATURE_USABLE (BMI2
)),
472 IFUNC_IMPL_ADD (array
, i
, wcschr
, 1, __wcschr_sse2
))
474 /* Support sysdeps/x86_64/multiarch/wcsrchr.c. */
475 IFUNC_IMPL (i
, name
, wcsrchr
,
476 IFUNC_IMPL_ADD (array
, i
, wcsrchr
,
477 CPU_FEATURE_USABLE (AVX2
),
479 IFUNC_IMPL_ADD (array
, i
, wcsrchr
,
480 (CPU_FEATURE_USABLE (AVX512VL
)
481 && CPU_FEATURE_USABLE (AVX512BW
)
482 && CPU_FEATURE_USABLE (BMI2
)),
484 IFUNC_IMPL_ADD (array
, i
, wcsrchr
, 1, __wcsrchr_sse2
))
486 /* Support sysdeps/x86_64/multiarch/wcscmp.c. */
487 IFUNC_IMPL (i
, name
, wcscmp
,
488 IFUNC_IMPL_ADD (array
, i
, wcscmp
,
489 CPU_FEATURE_USABLE (AVX2
),
491 IFUNC_IMPL_ADD (array
, i
, wcscmp
,
492 (CPU_FEATURE_USABLE (AVX512VL
)
493 && CPU_FEATURE_USABLE (AVX512BW
)
494 && CPU_FEATURE_USABLE (BMI2
)),
496 IFUNC_IMPL_ADD (array
, i
, wcscmp
, 1, __wcscmp_sse2
))
498 /* Support sysdeps/x86_64/multiarch/wcsncmp.c. */
499 IFUNC_IMPL (i
, name
, wcsncmp
,
500 IFUNC_IMPL_ADD (array
, i
, wcsncmp
,
501 CPU_FEATURE_USABLE (AVX2
),
503 IFUNC_IMPL_ADD (array
, i
, wcsncmp
,
504 (CPU_FEATURE_USABLE (AVX512VL
)
505 && CPU_FEATURE_USABLE (AVX512BW
)
506 && CPU_FEATURE_USABLE (BMI2
)),
508 IFUNC_IMPL_ADD (array
, i
, wcsncmp
, 1, __wcsncmp_sse2
))
510 /* Support sysdeps/x86_64/multiarch/wcscpy.c. */
511 IFUNC_IMPL (i
, name
, wcscpy
,
512 IFUNC_IMPL_ADD (array
, i
, wcscpy
, CPU_FEATURE_USABLE (SSSE3
),
514 IFUNC_IMPL_ADD (array
, i
, wcscpy
, 1, __wcscpy_sse2
))
516 /* Support sysdeps/x86_64/multiarch/wcslen.c. */
517 IFUNC_IMPL (i
, name
, wcslen
,
518 IFUNC_IMPL_ADD (array
, i
, wcslen
,
519 CPU_FEATURE_USABLE (AVX2
),
521 IFUNC_IMPL_ADD (array
, i
, wcslen
,
522 (CPU_FEATURE_USABLE (AVX512VL
)
523 && CPU_FEATURE_USABLE (AVX512BW
)
524 && CPU_FEATURE_USABLE (BMI2
)),
526 IFUNC_IMPL_ADD (array
, i
, wcslen
, 1, __wcslen_sse2
))
528 /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */
529 IFUNC_IMPL (i
, name
, wcsnlen
,
530 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
531 CPU_FEATURE_USABLE (AVX2
),
533 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
534 (CPU_FEATURE_USABLE (AVX512VL
)
535 && CPU_FEATURE_USABLE (AVX512BW
)
536 && CPU_FEATURE_USABLE (BMI2
)),
538 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
539 CPU_FEATURE_USABLE (SSE4_1
),
541 IFUNC_IMPL_ADD (array
, i
, wcsnlen
, 1, __wcsnlen_sse2
))
543 /* Support sysdeps/x86_64/multiarch/wmemchr.c. */
544 IFUNC_IMPL (i
, name
, wmemchr
,
545 IFUNC_IMPL_ADD (array
, i
, wmemchr
,
546 CPU_FEATURE_USABLE (AVX2
),
548 IFUNC_IMPL_ADD (array
, i
, wmemchr
,
549 (CPU_FEATURE_USABLE (AVX512VL
)
550 && CPU_FEATURE_USABLE (AVX512BW
)
551 && CPU_FEATURE_USABLE (BMI2
)),
553 IFUNC_IMPL_ADD (array
, i
, wmemchr
, 1, __wmemchr_sse2
))
555 /* Support sysdeps/x86_64/multiarch/wmemcmp.c. */
556 IFUNC_IMPL (i
, name
, wmemcmp
,
557 IFUNC_IMPL_ADD (array
, i
, wmemcmp
,
558 (CPU_FEATURE_USABLE (AVX2
)
559 && CPU_FEATURE_USABLE (MOVBE
)),
560 __wmemcmp_avx2_movbe
)
561 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, CPU_FEATURE_USABLE (SSE4_1
),
563 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, CPU_FEATURE_USABLE (SSSE3
),
565 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, 1, __wmemcmp_sse2
))
567 /* Support sysdeps/x86_64/multiarch/wmemset.c. */
568 IFUNC_IMPL (i
, name
, wmemset
,
569 IFUNC_IMPL_ADD (array
, i
, wmemset
, 1,
570 __wmemset_sse2_unaligned
)
571 IFUNC_IMPL_ADD (array
, i
, wmemset
,
572 CPU_FEATURE_USABLE (AVX2
),
573 __wmemset_avx2_unaligned
)
574 IFUNC_IMPL_ADD (array
, i
, wmemset
,
575 CPU_FEATURE_USABLE (AVX512VL
),
576 __wmemset_evex_unaligned
)
577 IFUNC_IMPL_ADD (array
, i
, wmemset
,
578 CPU_FEATURE_USABLE (AVX512F
),
579 __wmemset_avx512_unaligned
))
582 /* Support sysdeps/x86_64/multiarch/memcpy_chk.c. */
583 IFUNC_IMPL (i
, name
, __memcpy_chk
,
584 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
585 CPU_FEATURE_USABLE (AVX512F
),
586 __memcpy_chk_avx512_no_vzeroupper
)
587 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
588 CPU_FEATURE_USABLE (AVX512F
),
589 __memcpy_chk_avx512_unaligned
)
590 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
591 CPU_FEATURE_USABLE (AVX512F
),
592 __memcpy_chk_avx512_unaligned_erms
)
593 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
594 CPU_FEATURE_USABLE (AVX
),
595 __memcpy_chk_avx_unaligned
)
596 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
597 CPU_FEATURE_USABLE (AVX
),
598 __memcpy_chk_avx_unaligned_erms
)
599 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
600 CPU_FEATURE_USABLE (AVX512VL
),
601 __memcpy_chk_evex_unaligned
)
602 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
603 CPU_FEATURE_USABLE (AVX512VL
),
604 __memcpy_chk_evex_unaligned_erms
)
605 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
606 CPU_FEATURE_USABLE (SSSE3
),
607 __memcpy_chk_ssse3_back
)
608 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
609 CPU_FEATURE_USABLE (SSSE3
),
611 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
612 __memcpy_chk_sse2_unaligned
)
613 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
614 __memcpy_chk_sse2_unaligned_erms
)
615 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
619 /* Support sysdeps/x86_64/multiarch/memcpy.c. */
620 IFUNC_IMPL (i
, name
, memcpy
,
621 IFUNC_IMPL_ADD (array
, i
, memcpy
,
622 CPU_FEATURE_USABLE (AVX
),
623 __memcpy_avx_unaligned
)
624 IFUNC_IMPL_ADD (array
, i
, memcpy
,
625 CPU_FEATURE_USABLE (AVX
),
626 __memcpy_avx_unaligned_erms
)
627 IFUNC_IMPL_ADD (array
, i
, memcpy
,
628 CPU_FEATURE_USABLE (AVX512VL
),
629 __memcpy_evex_unaligned
)
630 IFUNC_IMPL_ADD (array
, i
, memcpy
,
631 CPU_FEATURE_USABLE (AVX512VL
),
632 __memcpy_evex_unaligned_erms
)
633 IFUNC_IMPL_ADD (array
, i
, memcpy
, CPU_FEATURE_USABLE (SSSE3
),
635 IFUNC_IMPL_ADD (array
, i
, memcpy
, CPU_FEATURE_USABLE (SSSE3
),
637 IFUNC_IMPL_ADD (array
, i
, memcpy
,
638 CPU_FEATURE_USABLE (AVX512F
),
639 __memcpy_avx512_no_vzeroupper
)
640 IFUNC_IMPL_ADD (array
, i
, memcpy
,
641 CPU_FEATURE_USABLE (AVX512F
),
642 __memcpy_avx512_unaligned
)
643 IFUNC_IMPL_ADD (array
, i
, memcpy
,
644 CPU_FEATURE_USABLE (AVX512F
),
645 __memcpy_avx512_unaligned_erms
)
646 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, __memcpy_sse2_unaligned
)
647 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1,
648 __memcpy_sse2_unaligned_erms
)
649 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, __memcpy_erms
))
652 /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */
653 IFUNC_IMPL (i
, name
, __mempcpy_chk
,
654 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
655 CPU_FEATURE_USABLE (AVX512F
),
656 __mempcpy_chk_avx512_no_vzeroupper
)
657 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
658 CPU_FEATURE_USABLE (AVX512F
),
659 __mempcpy_chk_avx512_unaligned
)
660 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
661 CPU_FEATURE_USABLE (AVX512F
),
662 __mempcpy_chk_avx512_unaligned_erms
)
663 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
664 CPU_FEATURE_USABLE (AVX
),
665 __mempcpy_chk_avx_unaligned
)
666 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
667 CPU_FEATURE_USABLE (AVX
),
668 __mempcpy_chk_avx_unaligned_erms
)
669 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
670 CPU_FEATURE_USABLE (AVX512VL
),
671 __mempcpy_chk_evex_unaligned
)
672 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
673 CPU_FEATURE_USABLE (AVX512VL
),
674 __mempcpy_chk_evex_unaligned_erms
)
675 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
676 CPU_FEATURE_USABLE (SSSE3
),
677 __mempcpy_chk_ssse3_back
)
678 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
679 CPU_FEATURE_USABLE (SSSE3
),
681 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
682 __mempcpy_chk_sse2_unaligned
)
683 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
684 __mempcpy_chk_sse2_unaligned_erms
)
685 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
689 /* Support sysdeps/x86_64/multiarch/mempcpy.c. */
690 IFUNC_IMPL (i
, name
, mempcpy
,
691 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
692 CPU_FEATURE_USABLE (AVX512F
),
693 __mempcpy_avx512_no_vzeroupper
)
694 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
695 CPU_FEATURE_USABLE (AVX512F
),
696 __mempcpy_avx512_unaligned
)
697 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
698 CPU_FEATURE_USABLE (AVX512F
),
699 __mempcpy_avx512_unaligned_erms
)
700 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
701 CPU_FEATURE_USABLE (AVX
),
702 __mempcpy_avx_unaligned
)
703 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
704 CPU_FEATURE_USABLE (AVX
),
705 __mempcpy_avx_unaligned_erms
)
706 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
707 CPU_FEATURE_USABLE (AVX512VL
),
708 __mempcpy_evex_unaligned
)
709 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
710 CPU_FEATURE_USABLE (AVX512VL
),
711 __mempcpy_evex_unaligned_erms
)
712 IFUNC_IMPL_ADD (array
, i
, mempcpy
, CPU_FEATURE_USABLE (SSSE3
),
713 __mempcpy_ssse3_back
)
714 IFUNC_IMPL_ADD (array
, i
, mempcpy
, CPU_FEATURE_USABLE (SSSE3
),
716 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1,
717 __mempcpy_sse2_unaligned
)
718 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1,
719 __mempcpy_sse2_unaligned_erms
)
720 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1, __mempcpy_erms
))
722 /* Support sysdeps/x86_64/multiarch/strncmp.c. */
723 IFUNC_IMPL (i
, name
, strncmp
,
724 IFUNC_IMPL_ADD (array
, i
, strncmp
,
725 CPU_FEATURE_USABLE (AVX2
),
727 IFUNC_IMPL_ADD (array
, i
, strncmp
,
728 (CPU_FEATURE_USABLE (AVX512VL
)
729 && CPU_FEATURE_USABLE (AVX512BW
)),
731 IFUNC_IMPL_ADD (array
, i
, strncmp
, CPU_FEATURE_USABLE (SSE4_2
),
733 IFUNC_IMPL_ADD (array
, i
, strncmp
, CPU_FEATURE_USABLE (SSSE3
),
735 IFUNC_IMPL_ADD (array
, i
, strncmp
, 1, __strncmp_sse2
))
738 /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */
739 IFUNC_IMPL (i
, name
, __wmemset_chk
,
740 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
, 1,
741 __wmemset_chk_sse2_unaligned
)
742 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
,
743 CPU_FEATURE_USABLE (AVX2
),
744 __wmemset_chk_avx2_unaligned
)
745 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
,
746 CPU_FEATURE_USABLE (AVX512VL
),
747 __wmemset_chk_evex_unaligned
)
748 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
,
749 CPU_FEATURE_USABLE (AVX512F
),
750 __wmemset_chk_avx512_unaligned
))