1 /* Enumerate available IFUNC implementations of a function. x86-64 version.
2 Copyright (C) 2012-2017 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 <http://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
, 1,
203 __stpncpy_sse2_unaligned
)
204 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1, __stpncpy_sse2
))
206 /* Support sysdeps/x86_64/multiarch/stpcpy.c. */
207 IFUNC_IMPL (i
, name
, stpcpy
,
208 IFUNC_IMPL_ADD (array
, i
, stpcpy
, HAS_CPU_FEATURE (SSSE3
),
210 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, __stpcpy_sse2_unaligned
)
211 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, __stpcpy_sse2
))
213 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
214 IFUNC_IMPL (i
, name
, strcasecmp
,
215 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
216 HAS_ARCH_FEATURE (AVX_Usable
),
218 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
219 HAS_CPU_FEATURE (SSE4_2
),
221 IFUNC_IMPL_ADD (array
, i
, strcasecmp
,
222 HAS_CPU_FEATURE (SSSE3
),
224 IFUNC_IMPL_ADD (array
, i
, strcasecmp
, 1, __strcasecmp_sse2
))
226 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
227 IFUNC_IMPL (i
, name
, strcasecmp_l
,
228 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
229 HAS_ARCH_FEATURE (AVX_Usable
),
231 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
232 HAS_CPU_FEATURE (SSE4_2
),
233 __strcasecmp_l_sse42
)
234 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
,
235 HAS_CPU_FEATURE (SSSE3
),
236 __strcasecmp_l_ssse3
)
237 IFUNC_IMPL_ADD (array
, i
, strcasecmp_l
, 1,
238 __strcasecmp_l_sse2
))
240 /* Support sysdeps/x86_64/multiarch/strcat.c. */
241 IFUNC_IMPL (i
, name
, strcat
,
242 IFUNC_IMPL_ADD (array
, i
, strcat
, HAS_CPU_FEATURE (SSSE3
),
244 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, __strcat_sse2_unaligned
)
245 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, __strcat_sse2
))
247 /* Support sysdeps/x86_64/multiarch/strchr.c. */
248 IFUNC_IMPL (i
, name
, strchr
,
249 IFUNC_IMPL_ADD (array
, i
, strchr
,
250 HAS_ARCH_FEATURE (AVX2_Usable
),
252 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, __strchr_sse2_no_bsf
)
253 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, __strchr_sse2
))
255 /* Support sysdeps/x86_64/multiarch/strchrnul.c. */
256 IFUNC_IMPL (i
, name
, strchrnul
,
257 IFUNC_IMPL_ADD (array
, i
, strchrnul
,
258 HAS_ARCH_FEATURE (AVX2_Usable
),
260 IFUNC_IMPL_ADD (array
, i
, strchrnul
, 1, __strchrnul_sse2
))
262 /* Support sysdeps/x86_64/multiarch/strrchr.c. */
263 IFUNC_IMPL (i
, name
, strrchr
,
264 IFUNC_IMPL_ADD (array
, i
, strrchr
,
265 HAS_ARCH_FEATURE (AVX2_Usable
),
267 IFUNC_IMPL_ADD (array
, i
, strrchr
, 1, __strrchr_sse2
))
269 /* Support sysdeps/x86_64/multiarch/strcmp.c. */
270 IFUNC_IMPL (i
, name
, strcmp
,
271 IFUNC_IMPL_ADD (array
, i
, strcmp
, HAS_CPU_FEATURE (SSE4_2
),
273 IFUNC_IMPL_ADD (array
, i
, strcmp
, HAS_CPU_FEATURE (SSSE3
),
275 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, __strcmp_sse2_unaligned
)
276 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, __strcmp_sse2
))
278 /* Support sysdeps/x86_64/multiarch/strcpy.c. */
279 IFUNC_IMPL (i
, name
, strcpy
,
280 IFUNC_IMPL_ADD (array
, i
, strcpy
, HAS_CPU_FEATURE (SSSE3
),
282 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, __strcpy_sse2_unaligned
)
283 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, __strcpy_sse2
))
285 /* Support sysdeps/x86_64/multiarch/strcspn.c. */
286 IFUNC_IMPL (i
, name
, strcspn
,
287 IFUNC_IMPL_ADD (array
, i
, strcspn
, HAS_CPU_FEATURE (SSE4_2
),
289 IFUNC_IMPL_ADD (array
, i
, strcspn
, 1, __strcspn_sse2
))
291 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
292 IFUNC_IMPL (i
, name
, strncasecmp
,
293 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
294 HAS_ARCH_FEATURE (AVX_Usable
),
296 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
297 HAS_CPU_FEATURE (SSE4_2
),
299 IFUNC_IMPL_ADD (array
, i
, strncasecmp
,
300 HAS_CPU_FEATURE (SSSE3
),
302 IFUNC_IMPL_ADD (array
, i
, strncasecmp
, 1,
305 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
306 IFUNC_IMPL (i
, name
, strncasecmp_l
,
307 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
308 HAS_ARCH_FEATURE (AVX_Usable
),
310 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
311 HAS_CPU_FEATURE (SSE4_2
),
312 __strncasecmp_l_sse42
)
313 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
,
314 HAS_CPU_FEATURE (SSSE3
),
315 __strncasecmp_l_ssse3
)
316 IFUNC_IMPL_ADD (array
, i
, strncasecmp_l
, 1,
317 __strncasecmp_l_sse2
))
319 /* Support sysdeps/x86_64/multiarch/strncat.c. */
320 IFUNC_IMPL (i
, name
, strncat
,
321 IFUNC_IMPL_ADD (array
, i
, strncat
, HAS_CPU_FEATURE (SSSE3
),
323 IFUNC_IMPL_ADD (array
, i
, strncat
, 1,
324 __strncat_sse2_unaligned
)
325 IFUNC_IMPL_ADD (array
, i
, strncat
, 1, __strncat_sse2
))
327 /* Support sysdeps/x86_64/multiarch/strncpy.c. */
328 IFUNC_IMPL (i
, name
, strncpy
,
329 IFUNC_IMPL_ADD (array
, i
, strncpy
, HAS_CPU_FEATURE (SSSE3
),
331 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1,
332 __strncpy_sse2_unaligned
)
333 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1, __strncpy_sse2
))
335 /* Support sysdeps/x86_64/multiarch/strpbrk.c. */
336 IFUNC_IMPL (i
, name
, strpbrk
,
337 IFUNC_IMPL_ADD (array
, i
, strpbrk
, HAS_CPU_FEATURE (SSE4_2
),
339 IFUNC_IMPL_ADD (array
, i
, strpbrk
, 1, __strpbrk_sse2
))
342 /* Support sysdeps/x86_64/multiarch/strspn.c. */
343 IFUNC_IMPL (i
, name
, strspn
,
344 IFUNC_IMPL_ADD (array
, i
, strspn
, HAS_CPU_FEATURE (SSE4_2
),
346 IFUNC_IMPL_ADD (array
, i
, strspn
, 1, __strspn_sse2
))
348 /* Support sysdeps/x86_64/multiarch/strstr.c. */
349 IFUNC_IMPL (i
, name
, strstr
,
350 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, __strstr_sse2_unaligned
)
351 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, __strstr_sse2
))
353 /* Support sysdeps/x86_64/multiarch/wcschr.c. */
354 IFUNC_IMPL (i
, name
, wcschr
,
355 IFUNC_IMPL_ADD (array
, i
, wcschr
,
356 HAS_ARCH_FEATURE (AVX2_Usable
),
358 IFUNC_IMPL_ADD (array
, i
, wcschr
, 1, __wcschr_sse2
))
360 /* Support sysdeps/x86_64/multiarch/wcsrchr.c. */
361 IFUNC_IMPL (i
, name
, wcsrchr
,
362 IFUNC_IMPL_ADD (array
, i
, wcsrchr
,
363 HAS_ARCH_FEATURE (AVX2_Usable
),
365 IFUNC_IMPL_ADD (array
, i
, wcsrchr
, 1, __wcsrchr_sse2
))
367 /* Support sysdeps/x86_64/multiarch/wcscpy.c. */
368 IFUNC_IMPL (i
, name
, wcscpy
,
369 IFUNC_IMPL_ADD (array
, i
, wcscpy
, HAS_CPU_FEATURE (SSSE3
),
371 IFUNC_IMPL_ADD (array
, i
, wcscpy
, 1, __wcscpy_sse2
))
373 /* Support sysdeps/x86_64/multiarch/wcslen.c. */
374 IFUNC_IMPL (i
, name
, wcslen
,
375 IFUNC_IMPL_ADD (array
, i
, wcslen
,
376 HAS_ARCH_FEATURE (AVX2_Usable
),
378 IFUNC_IMPL_ADD (array
, i
, wcslen
, 1, __wcslen_sse2
))
380 /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */
381 IFUNC_IMPL (i
, name
, wcsnlen
,
382 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
383 HAS_ARCH_FEATURE (AVX2_Usable
),
385 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
386 HAS_CPU_FEATURE (SSE4_1
),
388 IFUNC_IMPL_ADD (array
, i
, wcsnlen
, 1, __wcsnlen_sse2
))
390 /* Support sysdeps/x86_64/multiarch/wmemchr.c. */
391 IFUNC_IMPL (i
, name
, wmemchr
,
392 IFUNC_IMPL_ADD (array
, i
, wmemchr
,
393 HAS_ARCH_FEATURE (AVX2_Usable
),
395 IFUNC_IMPL_ADD (array
, i
, wmemchr
, 1, __wmemchr_sse2
))
397 /* Support sysdeps/x86_64/multiarch/wmemcmp.c. */
398 IFUNC_IMPL (i
, name
, wmemcmp
,
399 IFUNC_IMPL_ADD (array
, i
, wmemcmp
,
400 (HAS_ARCH_FEATURE (AVX2_Usable
)
401 && HAS_CPU_FEATURE (MOVBE
)),
402 __wmemcmp_avx2_movbe
)
403 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, HAS_CPU_FEATURE (SSE4_1
),
405 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, HAS_CPU_FEATURE (SSSE3
),
407 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, 1, __wmemcmp_sse2
))
409 /* Support sysdeps/x86_64/multiarch/wmemset.c. */
410 IFUNC_IMPL (i
, name
, wmemset
,
411 IFUNC_IMPL_ADD (array
, i
, wmemset
, 1,
412 __wmemset_sse2_unaligned
)
413 IFUNC_IMPL_ADD (array
, i
, wmemset
,
414 HAS_ARCH_FEATURE (AVX2_Usable
),
415 __wmemset_avx2_unaligned
)
416 IFUNC_IMPL_ADD (array
, i
, wmemset
,
417 HAS_ARCH_FEATURE (AVX512F_Usable
),
418 __wmemset_avx512_unaligned
))
421 /* Support sysdeps/x86_64/multiarch/memcpy_chk.c. */
422 IFUNC_IMPL (i
, name
, __memcpy_chk
,
423 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
424 HAS_ARCH_FEATURE (AVX512F_Usable
),
425 __memcpy_chk_avx512_no_vzeroupper
)
426 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
427 HAS_ARCH_FEATURE (AVX512F_Usable
),
428 __memcpy_chk_avx512_unaligned
)
429 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
430 HAS_ARCH_FEATURE (AVX512F_Usable
),
431 __memcpy_chk_avx512_unaligned_erms
)
432 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
433 HAS_ARCH_FEATURE (AVX_Usable
),
434 __memcpy_chk_avx_unaligned
)
435 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
436 HAS_ARCH_FEATURE (AVX_Usable
),
437 __memcpy_chk_avx_unaligned_erms
)
438 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
439 HAS_CPU_FEATURE (SSSE3
),
440 __memcpy_chk_ssse3_back
)
441 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
,
442 HAS_CPU_FEATURE (SSSE3
),
444 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
445 __memcpy_chk_sse2_unaligned
)
446 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
447 __memcpy_chk_sse2_unaligned_erms
)
448 IFUNC_IMPL_ADD (array
, i
, __memcpy_chk
, 1,
452 /* Support sysdeps/x86_64/multiarch/memcpy.c. */
453 IFUNC_IMPL (i
, name
, memcpy
,
454 IFUNC_IMPL_ADD (array
, i
, memcpy
,
455 HAS_ARCH_FEATURE (AVX_Usable
),
456 __memcpy_avx_unaligned
)
457 IFUNC_IMPL_ADD (array
, i
, memcpy
,
458 HAS_ARCH_FEATURE (AVX_Usable
),
459 __memcpy_avx_unaligned_erms
)
460 IFUNC_IMPL_ADD (array
, i
, memcpy
, HAS_CPU_FEATURE (SSSE3
),
462 IFUNC_IMPL_ADD (array
, i
, memcpy
, HAS_CPU_FEATURE (SSSE3
),
464 IFUNC_IMPL_ADD (array
, i
, memcpy
,
465 HAS_ARCH_FEATURE (AVX512F_Usable
),
466 __memcpy_avx512_no_vzeroupper
)
467 IFUNC_IMPL_ADD (array
, i
, memcpy
,
468 HAS_ARCH_FEATURE (AVX512F_Usable
),
469 __memcpy_avx512_unaligned
)
470 IFUNC_IMPL_ADD (array
, i
, memcpy
,
471 HAS_ARCH_FEATURE (AVX512F_Usable
),
472 __memcpy_avx512_unaligned_erms
)
473 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, __memcpy_sse2_unaligned
)
474 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1,
475 __memcpy_sse2_unaligned_erms
)
476 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, __memcpy_erms
))
479 /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */
480 IFUNC_IMPL (i
, name
, __mempcpy_chk
,
481 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
482 HAS_ARCH_FEATURE (AVX512F_Usable
),
483 __mempcpy_chk_avx512_no_vzeroupper
)
484 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
485 HAS_ARCH_FEATURE (AVX512F_Usable
),
486 __mempcpy_chk_avx512_unaligned
)
487 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
488 HAS_ARCH_FEATURE (AVX512F_Usable
),
489 __mempcpy_chk_avx512_unaligned_erms
)
490 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
491 HAS_ARCH_FEATURE (AVX_Usable
),
492 __mempcpy_chk_avx_unaligned
)
493 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
494 HAS_ARCH_FEATURE (AVX_Usable
),
495 __mempcpy_chk_avx_unaligned_erms
)
496 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
497 HAS_CPU_FEATURE (SSSE3
),
498 __mempcpy_chk_ssse3_back
)
499 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
,
500 HAS_CPU_FEATURE (SSSE3
),
502 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
503 __mempcpy_chk_sse2_unaligned
)
504 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
505 __mempcpy_chk_sse2_unaligned_erms
)
506 IFUNC_IMPL_ADD (array
, i
, __mempcpy_chk
, 1,
510 /* Support sysdeps/x86_64/multiarch/mempcpy.c. */
511 IFUNC_IMPL (i
, name
, mempcpy
,
512 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
513 HAS_ARCH_FEATURE (AVX512F_Usable
),
514 __mempcpy_avx512_no_vzeroupper
)
515 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
516 HAS_ARCH_FEATURE (AVX512F_Usable
),
517 __mempcpy_avx512_unaligned
)
518 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
519 HAS_ARCH_FEATURE (AVX512F_Usable
),
520 __mempcpy_avx512_unaligned_erms
)
521 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
522 HAS_ARCH_FEATURE (AVX_Usable
),
523 __mempcpy_avx_unaligned
)
524 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
525 HAS_ARCH_FEATURE (AVX_Usable
),
526 __mempcpy_avx_unaligned_erms
)
527 IFUNC_IMPL_ADD (array
, i
, mempcpy
, HAS_CPU_FEATURE (SSSE3
),
528 __mempcpy_ssse3_back
)
529 IFUNC_IMPL_ADD (array
, i
, mempcpy
, HAS_CPU_FEATURE (SSSE3
),
531 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1,
532 __mempcpy_sse2_unaligned
)
533 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1,
534 __mempcpy_sse2_unaligned_erms
)
535 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1, __mempcpy_erms
))
537 /* Support sysdeps/x86_64/multiarch/strncmp.c. */
538 IFUNC_IMPL (i
, name
, strncmp
,
539 IFUNC_IMPL_ADD (array
, i
, strncmp
, HAS_CPU_FEATURE (SSE4_2
),
541 IFUNC_IMPL_ADD (array
, i
, strncmp
, HAS_CPU_FEATURE (SSSE3
),
543 IFUNC_IMPL_ADD (array
, i
, strncmp
, 1, __strncmp_sse2
))
546 /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */
547 IFUNC_IMPL (i
, name
, __wmemset_chk
,
548 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
, 1,
549 __wmemset_chk_sse2_unaligned
)
550 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
,
551 HAS_ARCH_FEATURE (AVX2_Usable
),
552 __wmemset_chk_avx2_unaligned
)
553 IFUNC_IMPL_ADD (array
, i
, __wmemset_chk
,
554 HAS_ARCH_FEATURE (AVX512F_Usable
),
555 __wmemset_chk_avx512_unaligned
))