1 /* Enumerate available IFUNC implementations of a function. x86-64 version.
2 Copyright (C) 2012-2019 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 HAS_ARCH_FEATURE (AVX2_Usable
),
46 IFUNC_IMPL_ADD (array
, i
, memchr
, 1, __memchr_sse2
))
48 /* Support sysdeps/x86_64/multiarch/memcmp.c. */
49 IFUNC_IMPL (i
, name
, memcmp
,
50 IFUNC_IMPL_ADD (array
, i
, memcmp
,
51 (HAS_ARCH_FEATURE (AVX2_Usable
)
52 && HAS_CPU_FEATURE (MOVBE
)),
54 IFUNC_IMPL_ADD (array
, i
, memcmp
, HAS_CPU_FEATURE (SSE4_1
),
56 IFUNC_IMPL_ADD (array
, i
, memcmp
, HAS_CPU_FEATURE (SSSE3
),
58 IFUNC_IMPL_ADD (array
, i
, memcmp
, 1, __memcmp_sse2
))
61 /* Support sysdeps/x86_64/multiarch/memmove_chk.c. */
62 IFUNC_IMPL (i
, name
, __memmove_chk
,
63 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
64 HAS_ARCH_FEATURE (AVX512F_Usable
),
65 __memmove_chk_avx512_no_vzeroupper
)
66 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
67 HAS_ARCH_FEATURE (AVX512F_Usable
),
68 __memmove_chk_avx512_unaligned
)
69 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
70 HAS_ARCH_FEATURE (AVX512F_Usable
),
71 __memmove_chk_avx512_unaligned_erms
)
72 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
73 HAS_ARCH_FEATURE (AVX_Usable
),
74 __memmove_chk_avx_unaligned
)
75 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
76 HAS_ARCH_FEATURE (AVX_Usable
),
77 __memmove_chk_avx_unaligned_erms
)
78 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
79 HAS_CPU_FEATURE (SSSE3
),
80 __memmove_chk_ssse3_back
)
81 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
,
82 HAS_CPU_FEATURE (SSSE3
),
84 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
, 1,
85 __memmove_chk_sse2_unaligned
)
86 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
, 1,
87 __memmove_chk_sse2_unaligned_erms
)
88 IFUNC_IMPL_ADD (array
, i
, __memmove_chk
, 1,
92 /* Support sysdeps/x86_64/multiarch/memmove.c. */
93 IFUNC_IMPL (i
, name
, memmove
,
94 IFUNC_IMPL_ADD (array
, i
, memmove
,
95 HAS_ARCH_FEATURE (AVX_Usable
),
96 __memmove_avx_unaligned
)
97 IFUNC_IMPL_ADD (array
, i
, memmove
,
98 HAS_ARCH_FEATURE (AVX_Usable
),
99 __memmove_avx_unaligned_erms
)
100 IFUNC_IMPL_ADD (array
, i
, memmove
,
101 HAS_ARCH_FEATURE (AVX512F_Usable
),
102 __memmove_avx512_no_vzeroupper
)
103 IFUNC_IMPL_ADD (array
, i
, memmove
,
104 HAS_ARCH_FEATURE (AVX512F_Usable
),
105 __memmove_avx512_unaligned
)
106 IFUNC_IMPL_ADD (array
, i
, memmove
,
107 HAS_ARCH_FEATURE (AVX512F_Usable
),
108 __memmove_avx512_unaligned_erms
)
109 IFUNC_IMPL_ADD (array
, i
, memmove
, HAS_CPU_FEATURE (SSSE3
),
110 __memmove_ssse3_back
)
111 IFUNC_IMPL_ADD (array
, i
, memmove
, HAS_CPU_FEATURE (SSSE3
),
113 IFUNC_IMPL_ADD (array
, i
, memmove
, 1, __memmove_erms
)
114 IFUNC_IMPL_ADD (array
, i
, memmove
, 1,
115 __memmove_sse2_unaligned
)
116 IFUNC_IMPL_ADD (array
, i
, memmove
, 1,
117 __memmove_sse2_unaligned_erms
))
119 /* Support sysdeps/x86_64/multiarch/memrchr.c. */
120 IFUNC_IMPL (i
, name
, memrchr
,
121 IFUNC_IMPL_ADD (array
, i
, memrchr
,
122 HAS_ARCH_FEATURE (AVX2_Usable
),
124 IFUNC_IMPL_ADD (array
, i
, memrchr
, 1, __memrchr_sse2
))
127 /* Support sysdeps/x86_64/multiarch/memset_chk.c. */
128 IFUNC_IMPL (i
, name
, __memset_chk
,
129 IFUNC_IMPL_ADD (array
, i
, __memset_chk
, 1,
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
)
135 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
136 HAS_ARCH_FEATURE (AVX2_Usable
),
137 __memset_chk_avx2_unaligned
)
138 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
139 HAS_ARCH_FEATURE (AVX2_Usable
),
140 __memset_chk_avx2_unaligned_erms
)
141 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
142 HAS_ARCH_FEATURE (AVX512F_Usable
),
143 __memset_chk_avx512_unaligned_erms
)
144 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
145 HAS_ARCH_FEATURE (AVX512F_Usable
),
146 __memset_chk_avx512_unaligned
)
147 IFUNC_IMPL_ADD (array
, i
, __memset_chk
,
148 HAS_ARCH_FEATURE (AVX512F_Usable
),
149 __memset_chk_avx512_no_vzeroupper
)
153 /* Support sysdeps/x86_64/multiarch/memset.c. */
154 IFUNC_IMPL (i
, name
, memset
,
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
)
160 IFUNC_IMPL_ADD (array
, i
, memset
,
161 HAS_ARCH_FEATURE (AVX2_Usable
),
162 __memset_avx2_unaligned
)
163 IFUNC_IMPL_ADD (array
, i
, memset
,
164 HAS_ARCH_FEATURE (AVX2_Usable
),
165 __memset_avx2_unaligned_erms
)
166 IFUNC_IMPL_ADD (array
, i
, memset
,
167 HAS_ARCH_FEATURE (AVX512F_Usable
),
168 __memset_avx512_unaligned_erms
)
169 IFUNC_IMPL_ADD (array
, i
, memset
,
170 HAS_ARCH_FEATURE (AVX512F_Usable
),
171 __memset_avx512_unaligned
)
172 IFUNC_IMPL_ADD (array
, i
, memset
,
173 HAS_ARCH_FEATURE (AVX512F_Usable
),
174 __memset_avx512_no_vzeroupper
)
177 /* Support sysdeps/x86_64/multiarch/rawmemchr.c. */
178 IFUNC_IMPL (i
, name
, rawmemchr
,
179 IFUNC_IMPL_ADD (array
, i
, rawmemchr
,
180 HAS_ARCH_FEATURE (AVX2_Usable
),
182 IFUNC_IMPL_ADD (array
, i
, rawmemchr
, 1, __rawmemchr_sse2
))
184 /* Support sysdeps/x86_64/multiarch/strlen.c. */
185 IFUNC_IMPL (i
, name
, strlen
,
186 IFUNC_IMPL_ADD (array
, i
, strlen
,
187 HAS_ARCH_FEATURE (AVX2_Usable
),
189 IFUNC_IMPL_ADD (array
, i
, strlen
, 1, __strlen_sse2
))
191 /* Support sysdeps/x86_64/multiarch/strnlen.c. */
192 IFUNC_IMPL (i
, name
, strnlen
,
193 IFUNC_IMPL_ADD (array
, i
, strnlen
,
194 HAS_ARCH_FEATURE (AVX2_Usable
),
196 IFUNC_IMPL_ADD (array
, i
, strnlen
, 1, __strnlen_sse2
))
198 /* Support sysdeps/x86_64/multiarch/stpncpy.c. */
199 IFUNC_IMPL (i
, name
, stpncpy
,
200 IFUNC_IMPL_ADD (array
, i
, stpncpy
, HAS_CPU_FEATURE (SSSE3
),
202 IFUNC_IMPL_ADD (array
, i
, stpncpy
, HAS_ARCH_FEATURE (AVX2_Usable
),
204 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1,
205 __stpncpy_sse2_unaligned
)
206 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1, __stpncpy_sse2
))
208 /* Support sysdeps/x86_64/multiarch/stpcpy.c. */
209 IFUNC_IMPL (i
, name
, stpcpy
,
210 IFUNC_IMPL_ADD (array
, i
, stpcpy
, HAS_CPU_FEATURE (SSSE3
),
212 IFUNC_IMPL_ADD (array
, i
, stpcpy
, HAS_ARCH_FEATURE (AVX2_Usable
),
214 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, __stpcpy_sse2_unaligned
)
215 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, __stpcpy_sse2
))
217 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
218 IFUNC_IMPL (i
, name
, strcasecmp
,
219 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
220 HAS_ARCH_FEATURE (AVX_Usable
),
222 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
223 HAS_CPU_FEATURE (SSE4_2
),
225 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
226 HAS_CPU_FEATURE (SSSE3
),
228 IFUNC_IMPL_ADD (array
, i
, strcasecmp
, 1, __strcasecmp_sse2
))
230 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
231 IFUNC_IMPL (i
, name
, strcasecmp_l
,
232 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
233 HAS_ARCH_FEATURE (AVX_Usable
),
235 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
236 HAS_CPU_FEATURE (SSE4_2
),
237 __strcasecmp_l_sse42
)
238 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
239 HAS_CPU_FEATURE (SSSE3
),
240 __strcasecmp_l_ssse3
)
241 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
, 1,
242 __strcasecmp_l_sse2
))
244 /* Support sysdeps/x86_64/multiarch/strcat.c. */
245 IFUNC_IMPL (i
, name
, strcat
,
246 IFUNC_IMPL_ADD (array
, i
, strcat
, HAS_ARCH_FEATURE (AVX2_Usable
),
248 IFUNC_IMPL_ADD (array
, i
, strcat
, HAS_CPU_FEATURE (SSSE3
),
250 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, __strcat_sse2_unaligned
)
251 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, __strcat_sse2
))
253 /* Support sysdeps/x86_64/multiarch/strchr.c. */
254 IFUNC_IMPL (i
, name
, strchr
,
255 IFUNC_IMPL_ADD (array
, i
, strchr
,
256 HAS_ARCH_FEATURE (AVX2_Usable
),
258 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, __strchr_sse2_no_bsf
)
259 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, __strchr_sse2
))
261 /* Support sysdeps/x86_64/multiarch/strchrnul.c. */
262 IFUNC_IMPL (i
, name
, strchrnul
,
263 IFUNC_IMPL_ADD (array
, i
, strchrnul
,
264 HAS_ARCH_FEATURE (AVX2_Usable
),
266 IFUNC_IMPL_ADD (array
, i
, strchrnul
, 1, __strchrnul_sse2
))
268 /* Support sysdeps/x86_64/multiarch/strrchr.c. */
269 IFUNC_IMPL (i
, name
, strrchr
,
270 IFUNC_IMPL_ADD (array
, i
, strrchr
,
271 HAS_ARCH_FEATURE (AVX2_Usable
),
273 IFUNC_IMPL_ADD (array
, i
, strrchr
, 1, __strrchr_sse2
))
275 /* Support sysdeps/x86_64/multiarch/strcmp.c. */
276 IFUNC_IMPL (i
, name
, strcmp
,
277 IFUNC_IMPL_ADD (array
, i
, strcmp
,
278 HAS_ARCH_FEATURE (AVX2_Usable
),
280 IFUNC_IMPL_ADD (array
, i
, strcmp
, HAS_CPU_FEATURE (SSE4_2
),
282 IFUNC_IMPL_ADD (array
, i
, strcmp
, HAS_CPU_FEATURE (SSSE3
),
284 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, __strcmp_sse2_unaligned
)
285 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, __strcmp_sse2
))
287 /* Support sysdeps/x86_64/multiarch/strcpy.c. */
288 IFUNC_IMPL (i
, name
, strcpy
,
289 IFUNC_IMPL_ADD (array
, i
, strcpy
, HAS_ARCH_FEATURE (AVX2_Usable
),
291 IFUNC_IMPL_ADD (array
, i
, strcpy
, HAS_CPU_FEATURE (SSSE3
),
293 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, __strcpy_sse2_unaligned
)
294 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, __strcpy_sse2
))
296 /* Support sysdeps/x86_64/multiarch/strcspn.c. */
297 IFUNC_IMPL (i
, name
, strcspn
,
298 IFUNC_IMPL_ADD (array
, i
, strcspn
, HAS_CPU_FEATURE (SSE4_2
),
300 IFUNC_IMPL_ADD (array
, i
, strcspn
, 1, __strcspn_sse2
))
302 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
303 IFUNC_IMPL (i
, name
, strncasecmp
,
304 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
305 HAS_ARCH_FEATURE (AVX_Usable
),
307 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
308 HAS_CPU_FEATURE (SSE4_2
),
310 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
311 HAS_CPU_FEATURE (SSSE3
),
313 IFUNC_IMPL_ADD (array
, i
, strncasecmp
, 1,
316 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
317 IFUNC_IMPL (i
, name
, strncasecmp_l
,
318 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
319 HAS_ARCH_FEATURE (AVX_Usable
),
321 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
322 HAS_CPU_FEATURE (SSE4_2
),
323 __strncasecmp_l_sse42
)
324 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
325 HAS_CPU_FEATURE (SSSE3
),
326 __strncasecmp_l_ssse3
)
327 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
, 1,
328 __strncasecmp_l_sse2
))
330 /* Support sysdeps/x86_64/multiarch/strncat.c. */
331 IFUNC_IMPL (i
, name
, strncat
,
332 IFUNC_IMPL_ADD (array
, i
, strncat
, HAS_ARCH_FEATURE (AVX2_Usable
),
334 IFUNC_IMPL_ADD (array
, i
, strncat
, HAS_CPU_FEATURE (SSSE3
),
336 IFUNC_IMPL_ADD (array
, i
, strncat
, 1,
337 __strncat_sse2_unaligned
)
338 IFUNC_IMPL_ADD (array
, i
, strncat
, 1, __strncat_sse2
))
340 /* Support sysdeps/x86_64/multiarch/strncpy.c. */
341 IFUNC_IMPL (i
, name
, strncpy
,
342 IFUNC_IMPL_ADD (array
, i
, strncpy
, HAS_ARCH_FEATURE (AVX2_Usable
),
344 IFUNC_IMPL_ADD (array
, i
, strncpy
, HAS_CPU_FEATURE (SSSE3
),
346 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1,
347 __strncpy_sse2_unaligned
)
348 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1, __strncpy_sse2
))
350 /* Support sysdeps/x86_64/multiarch/strpbrk.c. */
351 IFUNC_IMPL (i
, name
, strpbrk
,
352 IFUNC_IMPL_ADD (array
, i
, strpbrk
, HAS_CPU_FEATURE (SSE4_2
),
354 IFUNC_IMPL_ADD (array
, i
, strpbrk
, 1, __strpbrk_sse2
))
357 /* Support sysdeps/x86_64/multiarch/strspn.c. */
358 IFUNC_IMPL (i
, name
, strspn
,
359 IFUNC_IMPL_ADD (array
, i
, strspn
, HAS_CPU_FEATURE (SSE4_2
),
361 IFUNC_IMPL_ADD (array
, i
, strspn
, 1, __strspn_sse2
))
363 /* Support sysdeps/x86_64/multiarch/strstr.c. */
364 IFUNC_IMPL (i
, name
, strstr
,
365 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, __strstr_sse2_unaligned
)
366 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, __strstr_sse2
))
368 /* Support sysdeps/x86_64/multiarch/wcschr.c. */
369 IFUNC_IMPL (i
, name
, wcschr
,
370 IFUNC_IMPL_ADD (array
, i
, wcschr
,
371 HAS_ARCH_FEATURE (AVX2_Usable
),
373 IFUNC_IMPL_ADD (array
, i
, wcschr
, 1, __wcschr_sse2
))
375 /* Support sysdeps/x86_64/multiarch/wcsrchr.c. */
376 IFUNC_IMPL (i
, name
, wcsrchr
,
377 IFUNC_IMPL_ADD (array
, i
, wcsrchr
,
378 HAS_ARCH_FEATURE (AVX2_Usable
),
380 IFUNC_IMPL_ADD (array
, i
, wcsrchr
, 1, __wcsrchr_sse2
))
382 /* Support sysdeps/x86_64/multiarch/wcscmp.c. */
383 IFUNC_IMPL (i
, name
, wcscmp
,
384 IFUNC_IMPL_ADD (array
, i
, wcscmp
,
385 HAS_ARCH_FEATURE (AVX2_Usable
),
387 IFUNC_IMPL_ADD (array
, i
, wcscmp
, 1, __wcscmp_sse2
))
389 /* Support sysdeps/x86_64/multiarch/wcsncmp.c. */
390 IFUNC_IMPL (i
, name
, wcsncmp
,
391 IFUNC_IMPL_ADD (array
, i
, wcsncmp
,
392 HAS_ARCH_FEATURE (AVX2_Usable
),
394 IFUNC_IMPL_ADD (array
, i
, wcsncmp
, 1, __wcsncmp_sse2
))
396 /* Support sysdeps/x86_64/multiarch/wcscpy.c. */
397 IFUNC_IMPL (i
, name
, wcscpy
,
398 IFUNC_IMPL_ADD (array
, i
, wcscpy
, HAS_CPU_FEATURE (SSSE3
),
400 IFUNC_IMPL_ADD (array
, i
, wcscpy
, 1, __wcscpy_sse2
))
402 /* Support sysdeps/x86_64/multiarch/wcslen.c. */
403 IFUNC_IMPL (i
, name
, wcslen
,
404 IFUNC_IMPL_ADD (array
, i
, wcslen
,
405 HAS_ARCH_FEATURE (AVX2_Usable
),
407 IFUNC_IMPL_ADD (array
, i
, wcslen
, 1, __wcslen_sse2
))
409 /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */
410 IFUNC_IMPL (i
, name
, wcsnlen
,
411 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
412 HAS_ARCH_FEATURE (AVX2_Usable
),
414 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
415 HAS_CPU_FEATURE (SSE4_1
),
417 IFUNC_IMPL_ADD (array
, i
, wcsnlen
, 1, __wcsnlen_sse2
))
419 /* Support sysdeps/x86_64/multiarch/wmemchr.c. */
420 IFUNC_IMPL (i
, name
, wmemchr
,
421 IFUNC_IMPL_ADD (array
, i
, wmemchr
,
422 HAS_ARCH_FEATURE (AVX2_Usable
),
424 IFUNC_IMPL_ADD (array
, i
, wmemchr
, 1, __wmemchr_sse2
))
426 /* Support sysdeps/x86_64/multiarch/wmemcmp.c. */
427 IFUNC_IMPL (i
, name
, wmemcmp
,
428 IFUNC_IMPL_ADD (array
, i
, wmemcmp
,
429 (HAS_ARCH_FEATURE (AVX2_Usable
)
430 && HAS_CPU_FEATURE (MOVBE
)),
431 __wmemcmp_avx2_movbe
)
432 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, HAS_CPU_FEATURE (SSE4_1
),
434 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, HAS_CPU_FEATURE (SSSE3
),
436 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, 1, __wmemcmp_sse2
))
438 /* Support sysdeps/x86_64/multiarch/wmemset.c. */
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
,
443 HAS_ARCH_FEATURE (AVX2_Usable
),
444 __wmemset_avx2_unaligned
)
445 IFUNC_IMPL_ADD (array
, i
, wmemset
,
446 HAS_ARCH_FEATURE (AVX512F_Usable
),
447 __wmemset_avx512_unaligned
))
450 /* Support sysdeps/x86_64/multiarch/memcpy_chk.c. */
451 IFUNC_IMPL (i
, name
, __memcpy_chk
,
452 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
453 HAS_ARCH_FEATURE (AVX512F_Usable
),
454 __memcpy_chk_avx512_no_vzeroupper
)
455 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
456 HAS_ARCH_FEATURE (AVX512F_Usable
),
457 __memcpy_chk_avx512_unaligned
)
458 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
459 HAS_ARCH_FEATURE (AVX512F_Usable
),
460 __memcpy_chk_avx512_unaligned_erms
)
461 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
462 HAS_ARCH_FEATURE (AVX_Usable
),
463 __memcpy_chk_avx_unaligned
)
464 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
465 HAS_ARCH_FEATURE (AVX_Usable
),
466 __memcpy_chk_avx_unaligned_erms
)
467 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
468 HAS_CPU_FEATURE (SSSE3
),
469 __memcpy_chk_ssse3_back
)
470 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
471 HAS_CPU_FEATURE (SSSE3
),
473 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
474 __memcpy_chk_sse2_unaligned
)
475 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
476 __memcpy_chk_sse2_unaligned_erms
)
477 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
481 /* Support sysdeps/x86_64/multiarch/memcpy.c. */
482 IFUNC_IMPL (i
, name
, memcpy
,
483 IFUNC_IMPL_ADD (array
, i
, memcpy
,
484 HAS_ARCH_FEATURE (AVX_Usable
),
485 __memcpy_avx_unaligned
)
486 IFUNC_IMPL_ADD (array
, i
, memcpy
,
487 HAS_ARCH_FEATURE (AVX_Usable
),
488 __memcpy_avx_unaligned_erms
)
489 IFUNC_IMPL_ADD (array
, i
, memcpy
, HAS_CPU_FEATURE (SSSE3
),
491 IFUNC_IMPL_ADD (array
, i
, memcpy
, HAS_CPU_FEATURE (SSSE3
),
493 IFUNC_IMPL_ADD (array
, i
, memcpy
,
494 HAS_ARCH_FEATURE (AVX512F_Usable
),
495 __memcpy_avx512_no_vzeroupper
)
496 IFUNC_IMPL_ADD (array
, i
, memcpy
,
497 HAS_ARCH_FEATURE (AVX512F_Usable
),
498 __memcpy_avx512_unaligned
)
499 IFUNC_IMPL_ADD (array
, i
, memcpy
,
500 HAS_ARCH_FEATURE (AVX512F_Usable
),
501 __memcpy_avx512_unaligned_erms
)
502 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, __memcpy_sse2_unaligned
)
503 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1,
504 __memcpy_sse2_unaligned_erms
)
505 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, __memcpy_erms
))
508 /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */
509 IFUNC_IMPL (i
, name
, __mempcpy_chk
,
510 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
511 HAS_ARCH_FEATURE (AVX512F_Usable
),
512 __mempcpy_chk_avx512_no_vzeroupper
)
513 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
514 HAS_ARCH_FEATURE (AVX512F_Usable
),
515 __mempcpy_chk_avx512_unaligned
)
516 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
517 HAS_ARCH_FEATURE (AVX512F_Usable
),
518 __mempcpy_chk_avx512_unaligned_erms
)
519 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
520 HAS_ARCH_FEATURE (AVX_Usable
),
521 __mempcpy_chk_avx_unaligned
)
522 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
523 HAS_ARCH_FEATURE (AVX_Usable
),
524 __mempcpy_chk_avx_unaligned_erms
)
525 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
526 HAS_CPU_FEATURE (SSSE3
),
527 __mempcpy_chk_ssse3_back
)
528 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
529 HAS_CPU_FEATURE (SSSE3
),
531 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
532 __mempcpy_chk_sse2_unaligned
)
533 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
534 __mempcpy_chk_sse2_unaligned_erms
)
535 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
539 /* Support sysdeps/x86_64/multiarch/mempcpy.c. */
540 IFUNC_IMPL (i
, name
, mempcpy
,
541 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
542 HAS_ARCH_FEATURE (AVX512F_Usable
),
543 __mempcpy_avx512_no_vzeroupper
)
544 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
545 HAS_ARCH_FEATURE (AVX512F_Usable
),
546 __mempcpy_avx512_unaligned
)
547 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
548 HAS_ARCH_FEATURE (AVX512F_Usable
),
549 __mempcpy_avx512_unaligned_erms
)
550 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
551 HAS_ARCH_FEATURE (AVX_Usable
),
552 __mempcpy_avx_unaligned
)
553 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
554 HAS_ARCH_FEATURE (AVX_Usable
),
555 __mempcpy_avx_unaligned_erms
)
556 IFUNC_IMPL_ADD (array
, i
, mempcpy
, HAS_CPU_FEATURE (SSSE3
),
557 __mempcpy_ssse3_back
)
558 IFUNC_IMPL_ADD (array
, i
, mempcpy
, HAS_CPU_FEATURE (SSSE3
),
560 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1,
561 __mempcpy_sse2_unaligned
)
562 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1,
563 __mempcpy_sse2_unaligned_erms
)
564 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1, __mempcpy_erms
))
566 /* Support sysdeps/x86_64/multiarch/strncmp.c. */
567 IFUNC_IMPL (i
, name
, strncmp
,
568 IFUNC_IMPL_ADD (array
, i
, strncmp
,
569 HAS_ARCH_FEATURE (AVX2_Usable
),
571 IFUNC_IMPL_ADD (array
, i
, strncmp
, HAS_CPU_FEATURE (SSE4_2
),
573 IFUNC_IMPL_ADD (array
, i
, strncmp
, HAS_CPU_FEATURE (SSSE3
),
575 IFUNC_IMPL_ADD (array
, i
, strncmp
, 1, __strncmp_sse2
))
578 /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */
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
,
583 HAS_ARCH_FEATURE (AVX2_Usable
),
584 __wmemset_chk_avx2_unaligned
)
585 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
,
586 HAS_ARCH_FEATURE (AVX512F_Usable
),
587 __wmemset_chk_avx512_unaligned
))