1 /* Enumerate available IFUNC implementations of a function. s390/s390x version.
2 Copyright (C) 2015-2023 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 <cpu-features.h>
23 #include <ifunc-impl-list.h>
24 #include <ifunc-resolve.h>
25 #include <ifunc-memset.h>
26 #include <ifunc-memcmp.h>
27 #include <ifunc-memcpy.h>
28 #include <ifunc-strstr.h>
29 #include <ifunc-memmem.h>
30 #include <ifunc-strlen.h>
31 #include <ifunc-strnlen.h>
32 #include <ifunc-strcpy.h>
33 #include <ifunc-stpcpy.h>
34 #include <ifunc-strncpy.h>
35 #include <ifunc-stpncpy.h>
36 #include <ifunc-strcat.h>
37 #include <ifunc-strncat.h>
38 #include <ifunc-strcmp.h>
39 #include <ifunc-strncmp.h>
40 #include <ifunc-strchr.h>
41 #include <ifunc-strchrnul.h>
42 #include <ifunc-strrchr.h>
43 #include <ifunc-strspn.h>
44 #include <ifunc-strpbrk.h>
45 #include <ifunc-strcspn.h>
46 #include <ifunc-memchr.h>
47 #include <ifunc-rawmemchr.h>
48 #include <ifunc-memccpy.h>
49 #include <ifunc-memrchr.h>
50 #include <ifunc-wcslen.h>
51 #include <ifunc-wcsnlen.h>
52 #include <ifunc-wcscpy.h>
53 #include <ifunc-wcpcpy.h>
54 #include <ifunc-wcsncpy.h>
55 #include <ifunc-wcpncpy.h>
56 #include <ifunc-wcscat.h>
57 #include <ifunc-wcsncat.h>
58 #include <ifunc-wcscmp.h>
59 #include <ifunc-wcsncmp.h>
60 #include <ifunc-wcschr.h>
61 #include <ifunc-wcschrnul.h>
62 #include <ifunc-wcsrchr.h>
63 #include <ifunc-wcsspn.h>
64 #include <ifunc-wcspbrk.h>
65 #include <ifunc-wcscspn.h>
66 #include <ifunc-wmemchr.h>
67 #include <ifunc-wmemset.h>
68 #include <ifunc-wmemcmp.h>
70 /* Fill ARRAY of MAX elements with IFUNC implementations for function
71 NAME supported on target machine and return the number of valid
74 __libc_ifunc_impl_list (const char *name
, struct libc_ifunc_impl
*array
,
77 /* If the architecture level set is high enough, no IFUNCs are used at all
78 and the variable i would be unused. */
79 size_t i
__attribute__ ((unused
)) = max
;
81 /* Get hardware information. */
82 const struct cpu_features
*features
= &GLRO(dl_s390_cpu_features
);
83 unsigned long int dl_hwcap
= features
->hwcap
;
84 const unsigned long long * __attribute__((unused
)) stfle_bits
85 = features
->stfle_bits
;
88 IFUNC_IMPL (i
, name
, memset
,
90 IFUNC_IMPL_ADD (array
, i
, memset
,
91 S390_IS_Z196 (stfle_bits
), MEMSET_Z196
)
94 IFUNC_IMPL_ADD (array
, i
, memset
,
95 S390_IS_Z10 (stfle_bits
), MEMSET_Z10
)
97 # if HAVE_MEMSET_Z900_G5
98 IFUNC_IMPL_ADD (array
, i
, memset
, 1, MEMSET_Z900_G5
)
101 #endif /* HAVE_MEMSET_IFUNC */
103 #if HAVE_MEMCMP_IFUNC
104 IFUNC_IMPL (i
, name
, memcmp
,
105 # if HAVE_MEMCMP_Z196
106 IFUNC_IMPL_ADD (array
, i
, memcmp
,
107 S390_IS_Z196 (stfle_bits
), MEMCMP_Z196
)
110 IFUNC_IMPL_ADD (array
, i
, memcmp
,
111 S390_IS_Z10 (stfle_bits
), MEMCMP_Z10
)
113 # if HAVE_MEMCMP_Z900_G5
114 IFUNC_IMPL_ADD (array
, i
, memcmp
, 1, MEMCMP_Z900_G5
)
117 #endif /* HAVE_MEMCMP_IFUNC */
119 #if HAVE_MEMCPY_IFUNC
120 IFUNC_IMPL (i
, name
, memcpy
,
121 # if HAVE_MEMCPY_Z196
122 IFUNC_IMPL_ADD (array
, i
, memcpy
,
123 S390_IS_Z196 (stfle_bits
), MEMCPY_Z196
)
126 IFUNC_IMPL_ADD (array
, i
, memcpy
,
127 S390_IS_Z10 (stfle_bits
), MEMCPY_Z10
)
129 # if HAVE_MEMCPY_Z900_G5
130 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, MEMCPY_Z900_G5
)
134 IFUNC_IMPL (i
, name
, mempcpy
,
135 # if HAVE_MEMCPY_Z196
136 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
137 S390_IS_Z196 (stfle_bits
), MEMPCPY_Z196
)
140 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
141 S390_IS_Z10 (stfle_bits
), MEMPCPY_Z10
)
143 # if HAVE_MEMCPY_Z900_G5
144 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1, MEMPCPY_Z900_G5
)
147 #endif /* HAVE_MEMCPY_IFUNC */
149 #if HAVE_MEMMOVE_IFUNC
150 IFUNC_IMPL (i
, name
, memmove
,
151 # if HAVE_MEMMOVE_ARCH13
152 IFUNC_IMPL_ADD (array
, i
, memmove
,
153 ((dl_hwcap
& HWCAP_S390_VXRS_EXT2
)
154 && S390_IS_ARCH13_MIE3 (stfle_bits
)),
157 # if HAVE_MEMMOVE_Z13
158 IFUNC_IMPL_ADD (array
, i
, memmove
,
159 dl_hwcap
& HWCAP_S390_VX
, MEMMOVE_Z13
)
162 IFUNC_IMPL_ADD (array
, i
, memmove
, 1, MEMMOVE_C
)
165 #endif /* HAVE_MEMMOVE_IFUNC */
167 #if HAVE_STRSTR_IFUNC
168 IFUNC_IMPL (i
, name
, strstr
,
169 # if HAVE_STRSTR_ARCH13
170 IFUNC_IMPL_ADD (array
, i
, strstr
,
171 dl_hwcap
& HWCAP_S390_VXRS_EXT2
, STRSTR_ARCH13
)
174 IFUNC_IMPL_ADD (array
, i
, strstr
,
175 dl_hwcap
& HWCAP_S390_VX
, STRSTR_Z13
)
178 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, STRSTR_C
)
181 #endif /* HAVE_STRSTR_IFUNC */
183 #if HAVE_MEMMEM_IFUNC
184 IFUNC_IMPL (i
, name
, memmem
,
185 # if HAVE_MEMMEM_ARCH13
186 IFUNC_IMPL_ADD (array
, i
, memmem
,
187 dl_hwcap
& HWCAP_S390_VXRS_EXT2
, MEMMEM_ARCH13
)
190 IFUNC_IMPL_ADD (array
, i
, memmem
,
191 dl_hwcap
& HWCAP_S390_VX
, MEMMEM_Z13
)
194 IFUNC_IMPL_ADD (array
, i
, memmem
, 1, MEMMEM_C
)
197 #endif /* HAVE_MEMMEM_IFUNC */
199 #if HAVE_STRLEN_IFUNC
200 IFUNC_IMPL (i
, name
, strlen
,
202 IFUNC_IMPL_ADD (array
, i
, strlen
,
203 dl_hwcap
& HWCAP_S390_VX
, STRLEN_Z13
)
206 IFUNC_IMPL_ADD (array
, i
, strlen
, 1, STRLEN_C
)
209 #endif /* HAVE_STRLEN_IFUNC */
211 #if HAVE_STRNLEN_IFUNC
212 IFUNC_IMPL (i
, name
, strnlen
,
213 # if HAVE_STRNLEN_Z13
214 IFUNC_IMPL_ADD (array
, i
, strnlen
,
215 dl_hwcap
& HWCAP_S390_VX
, STRNLEN_Z13
)
218 IFUNC_IMPL_ADD (array
, i
, strnlen
, 1, STRNLEN_C
)
221 #endif /* HAVE_STRNLEN_IFUNC */
223 #if HAVE_STRCPY_IFUNC
224 IFUNC_IMPL (i
, name
, strcpy
,
226 IFUNC_IMPL_ADD (array
, i
, strcpy
,
227 dl_hwcap
& HWCAP_S390_VX
, STRCPY_Z13
)
229 # if HAVE_STRCPY_Z900_G5
230 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, STRCPY_Z900_G5
)
233 #endif /* HAVE_STRCPY_IFUNC */
235 #if HAVE_STPCPY_IFUNC
236 IFUNC_IMPL (i
, name
, stpcpy
,
238 IFUNC_IMPL_ADD (array
, i
, stpcpy
,
239 dl_hwcap
& HWCAP_S390_VX
, STPCPY_Z13
)
242 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, STPCPY_C
)
245 #endif /* HAVE_STPCPY_IFUNC */
247 #if HAVE_STRNCPY_IFUNC
248 IFUNC_IMPL (i
, name
, strncpy
,
249 # if HAVE_STRNCPY_Z13
250 IFUNC_IMPL_ADD (array
, i
, strncpy
,
251 dl_hwcap
& HWCAP_S390_VX
, STRNCPY_Z13
)
253 # if HAVE_STRNCPY_Z900_G5
254 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1, STRNCPY_Z900_G5
)
257 #endif /* HAVE_STRNCPY_IFUNC */
259 #if HAVE_STPNCPY_IFUNC
260 IFUNC_IMPL (i
, name
, stpncpy
,
261 # if HAVE_STPNCPY_Z13
262 IFUNC_IMPL_ADD (array
, i
, stpncpy
,
263 dl_hwcap
& HWCAP_S390_VX
, STPNCPY_Z13
)
266 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1, STPNCPY_C
)
269 #endif /* HAVE_STPNCPY_IFUNC */
271 #if HAVE_STRCAT_IFUNC
272 IFUNC_IMPL (i
, name
, strcat
,
274 IFUNC_IMPL_ADD (array
, i
, strcat
,
275 dl_hwcap
& HWCAP_S390_VX
, STRCAT_Z13
)
278 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, STRCAT_C
)
281 #endif /* HAVE_STRCAT_IFUNC */
283 #if HAVE_STRNCAT_IFUNC
284 IFUNC_IMPL (i
, name
, strncat
,
285 # if HAVE_STRNCAT_Z13
286 IFUNC_IMPL_ADD (array
, i
, strncat
,
287 dl_hwcap
& HWCAP_S390_VX
, STRNCAT_Z13
)
290 IFUNC_IMPL_ADD (array
, i
, strncat
, 1, STRNCAT_C
)
293 #endif /* HAVE_STRNCAT_IFUNC */
295 #if HAVE_STRCMP_IFUNC
296 IFUNC_IMPL (i
, name
, strcmp
,
298 IFUNC_IMPL_ADD (array
, i
, strcmp
,
299 dl_hwcap
& HWCAP_S390_VX
, STRCMP_Z13
)
301 # if HAVE_STRCMP_Z900_G5
302 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, STRCMP_Z900_G5
)
305 #endif /* HAVE_STRCMP_IFUNC */
307 #if HAVE_STRNCMP_IFUNC
308 IFUNC_IMPL (i
, name
, strncmp
,
309 # if HAVE_STRNCMP_Z13
310 IFUNC_IMPL_ADD (array
, i
, strncmp
,
311 dl_hwcap
& HWCAP_S390_VX
, STRNCMP_Z13
)
314 IFUNC_IMPL_ADD (array
, i
, strncmp
, 1, STRNCMP_C
)
317 #endif /* HAVE_STRNCMP_IFUNC */
319 #if HAVE_STRCHR_IFUNC
320 IFUNC_IMPL (i
, name
, strchr
,
322 IFUNC_IMPL_ADD (array
, i
, strchr
,
323 dl_hwcap
& HWCAP_S390_VX
, STRCHR_Z13
)
326 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, STRCHR_C
)
329 #endif /* HAVE_STRCHR_IFUNC */
331 #if HAVE_STRCHRNUL_IFUNC
332 IFUNC_IMPL (i
, name
, strchrnul
,
333 # if HAVE_STRCHRNUL_Z13
334 IFUNC_IMPL_ADD (array
, i
, strchrnul
,
335 dl_hwcap
& HWCAP_S390_VX
, STRCHRNUL_Z13
)
337 # if HAVE_STRCHRNUL_C
338 IFUNC_IMPL_ADD (array
, i
, strchrnul
, 1, STRCHRNUL_C
)
341 #endif /* HAVE_STRCHRNUL_IFUNC */
343 #if HAVE_STRRCHR_IFUNC
344 IFUNC_IMPL (i
, name
, strrchr
,
345 # if HAVE_STRRCHR_Z13
346 IFUNC_IMPL_ADD (array
, i
, strrchr
,
347 dl_hwcap
& HWCAP_S390_VX
, STRRCHR_Z13
)
350 IFUNC_IMPL_ADD (array
, i
, strrchr
, 1, STRRCHR_C
)
353 #endif /* HAVE_STRRCHR_IFUNC */
355 #if HAVE_STRSPN_IFUNC
356 IFUNC_IMPL (i
, name
, strspn
,
358 IFUNC_IMPL_ADD (array
, i
, strspn
,
359 dl_hwcap
& HWCAP_S390_VX
, STRSPN_Z13
)
362 IFUNC_IMPL_ADD (array
, i
, strspn
, 1, STRSPN_C
)
365 #endif /* HAVE_STRSPN_IFUNC */
367 #if HAVE_STRPBRK_IFUNC
368 IFUNC_IMPL (i
, name
, strpbrk
,
369 # if HAVE_STRPBRK_Z13
370 IFUNC_IMPL_ADD (array
, i
, strpbrk
,
371 dl_hwcap
& HWCAP_S390_VX
, STRPBRK_Z13
)
374 IFUNC_IMPL_ADD (array
, i
, strpbrk
, 1, STRPBRK_C
)
377 #endif /* HAVE_STRPBRK_IFUNC */
379 #if HAVE_STRCSPN_IFUNC
380 IFUNC_IMPL (i
, name
, strcspn
,
381 # if HAVE_STRCSPN_Z13
382 IFUNC_IMPL_ADD (array
, i
, strcspn
,
383 dl_hwcap
& HWCAP_S390_VX
, STRCSPN_Z13
)
386 IFUNC_IMPL_ADD (array
, i
, strcspn
, 1, STRCSPN_C
)
389 #endif /* HAVE_STRCSPN_IFUNC */
391 #if HAVE_MEMCHR_IFUNC
392 IFUNC_IMPL (i
, name
, memchr
,
394 IFUNC_IMPL_ADD (array
, i
, memchr
,
395 dl_hwcap
& HWCAP_S390_VX
, MEMCHR_Z13
)
397 # if HAVE_MEMCHR_Z900_G5
398 IFUNC_IMPL_ADD (array
, i
, memchr
, 1, MEMCHR_Z900_G5
)
401 #endif /* HAVE_MEMCHR_IFUNC */
403 #if HAVE_RAWMEMCHR_IFUNC
404 IFUNC_IMPL (i
, name
, rawmemchr
,
405 # if HAVE_RAWMEMCHR_Z13
406 IFUNC_IMPL_ADD (array
, i
, rawmemchr
,
407 dl_hwcap
& HWCAP_S390_VX
, RAWMEMCHR_Z13
)
409 # if HAVE_RAWMEMCHR_C
410 IFUNC_IMPL_ADD (array
, i
, rawmemchr
, 1, RAWMEMCHR_C
)
413 #endif /* HAVE_RAWMEMCHR_IFUNC */
415 #if HAVE_MEMCCPY_IFUNC
416 IFUNC_IMPL (i
, name
, memccpy
,
417 # if HAVE_MEMCCPY_Z13
418 IFUNC_IMPL_ADD (array
, i
, memccpy
,
419 dl_hwcap
& HWCAP_S390_VX
, MEMCCPY_Z13
)
422 IFUNC_IMPL_ADD (array
, i
, memccpy
, 1, MEMCCPY_C
)
425 #endif /* HAVE_MEMCCPY_IFUNC */
427 #if HAVE_MEMRCHR_IFUNC
428 IFUNC_IMPL (i
, name
, memrchr
,
429 # if HAVE_MEMRCHR_Z13
430 IFUNC_IMPL_ADD (array
, i
, memrchr
,
431 dl_hwcap
& HWCAP_S390_VX
, MEMRCHR_Z13
)
434 IFUNC_IMPL_ADD (array
, i
, memrchr
, 1, MEMRCHR_C
)
437 #endif /* HAVE_MEMRCHR_IFUNC */
439 #if HAVE_WCSLEN_IFUNC
440 IFUNC_IMPL (i
, name
, wcslen
,
442 IFUNC_IMPL_ADD (array
, i
, wcslen
,
443 dl_hwcap
& HWCAP_S390_VX
, WCSLEN_Z13
)
446 IFUNC_IMPL_ADD (array
, i
, wcslen
, 1, WCSLEN_C
)
449 #endif /* HAVE_WCSLEN_IFUNC */
451 #if HAVE_WCSNLEN_IFUNC
452 IFUNC_IMPL (i
, name
, wcsnlen
,
453 # if HAVE_WCSNLEN_Z13
454 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
455 dl_hwcap
& HWCAP_S390_VX
, WCSNLEN_Z13
)
458 IFUNC_IMPL_ADD (array
, i
, wcsnlen
, 1, WCSNLEN_C
)
461 #endif /* HAVE_WCSNLEN_IFUNC */
463 #if HAVE_WCSCPY_IFUNC
464 IFUNC_IMPL (i
, name
, wcscpy
,
466 IFUNC_IMPL_ADD (array
, i
, wcscpy
,
467 dl_hwcap
& HWCAP_S390_VX
, WCSCPY_Z13
)
470 IFUNC_IMPL_ADD (array
, i
, wcscpy
, 1, WCSCPY_C
)
473 #endif /* HAVE_WCSCPY_IFUNC */
475 #if HAVE_WCPCPY_IFUNC
476 IFUNC_IMPL (i
, name
, wcpcpy
,
478 IFUNC_IMPL_ADD (array
, i
, wcpcpy
,
479 dl_hwcap
& HWCAP_S390_VX
, WCPCPY_Z13
)
482 IFUNC_IMPL_ADD (array
, i
, wcpcpy
, 1, WCPCPY_C
)
485 #endif /* HAVE_WCPCPY_IFUNC */
487 #if HAVE_WCSNCPY_IFUNC
488 IFUNC_IMPL (i
, name
, wcsncpy
,
489 # if HAVE_WCSNCPY_Z13
490 IFUNC_IMPL_ADD (array
, i
, wcsncpy
,
491 dl_hwcap
& HWCAP_S390_VX
, WCSNCPY_Z13
)
494 IFUNC_IMPL_ADD (array
, i
, wcsncpy
, 1, WCSNCPY_C
)
497 #endif /* HAVE_WCSNCPY_IFUNC */
499 #if HAVE_WCPNCPY_IFUNC
500 IFUNC_IMPL (i
, name
, wcpncpy
,
501 # if HAVE_WCPNCPY_Z13
502 IFUNC_IMPL_ADD (array
, i
, wcpncpy
,
503 dl_hwcap
& HWCAP_S390_VX
, WCPNCPY_Z13
)
506 IFUNC_IMPL_ADD (array
, i
, wcpncpy
, 1, WCPNCPY_C
)
509 #endif /* HAVE_WCPNCPY_IFUNC */
511 #if HAVE_WCSCAT_IFUNC
512 IFUNC_IMPL (i
, name
, wcscat
,
514 IFUNC_IMPL_ADD (array
, i
, wcscat
,
515 dl_hwcap
& HWCAP_S390_VX
, WCSCAT_Z13
)
518 IFUNC_IMPL_ADD (array
, i
, wcscat
, 1, WCSCAT_C
)
521 #endif /* HAVE_WCSCAT_IFUNC */
523 #if HAVE_WCSNCAT_IFUNC
524 IFUNC_IMPL (i
, name
, wcsncat
,
525 # if HAVE_WCSNCAT_Z13
526 IFUNC_IMPL_ADD (array
, i
, wcsncat
,
527 dl_hwcap
& HWCAP_S390_VX
, WCSNCAT_Z13
)
530 IFUNC_IMPL_ADD (array
, i
, wcsncat
, 1, WCSNCAT_C
)
533 #endif /* HAVE_WCSNCAT_IFUNC */
535 #if HAVE_WCSCMP_IFUNC
536 IFUNC_IMPL (i
, name
, wcscmp
,
538 IFUNC_IMPL_ADD (array
, i
, wcscmp
,
539 dl_hwcap
& HWCAP_S390_VX
, WCSCMP_Z13
)
542 IFUNC_IMPL_ADD (array
, i
, wcscmp
, 1, WCSCMP_C
)
545 #endif /* HAVE_WCSCMP_IFUNC */
547 #if HAVE_WCSNCMP_IFUNC
548 IFUNC_IMPL (i
, name
, wcsncmp
,
549 # if HAVE_WCSNCMP_Z13
550 IFUNC_IMPL_ADD (array
, i
, wcsncmp
,
551 dl_hwcap
& HWCAP_S390_VX
, WCSNCMP_Z13
)
554 IFUNC_IMPL_ADD (array
, i
, wcsncmp
, 1, WCSNCMP_C
)
557 #endif /* HAVE_WCSNCMP_IFUNC */
559 #if HAVE_WCSCHR_IFUNC
560 IFUNC_IMPL (i
, name
, wcschr
,
562 IFUNC_IMPL_ADD (array
, i
, wcschr
,
563 dl_hwcap
& HWCAP_S390_VX
, WCSCHR_Z13
)
566 IFUNC_IMPL_ADD (array
, i
, wcschr
, 1, WCSCHR_C
)
569 #endif /* HAVE_WCSCHR_IFUNC */
571 #if HAVE_WCSCHRNUL_IFUNC
572 IFUNC_IMPL (i
, name
, wcschrnul
,
573 # if HAVE_WCSCHRNUL_Z13
574 IFUNC_IMPL_ADD (array
, i
, wcschrnul
,
575 dl_hwcap
& HWCAP_S390_VX
, WCSCHRNUL_Z13
)
577 # if HAVE_WCSCHRNUL_C
578 IFUNC_IMPL_ADD (array
, i
, wcschrnul
, 1, WCSCHRNUL_C
)
581 #endif /* HAVE_WCSCHRNUL_IFUNC */
583 #if HAVE_WCSRCHR_IFUNC
584 IFUNC_IMPL (i
, name
, wcsrchr
,
585 # if HAVE_WCSRCHR_Z13
586 IFUNC_IMPL_ADD (array
, i
, wcsrchr
,
587 dl_hwcap
& HWCAP_S390_VX
, WCSRCHR_Z13
)
590 IFUNC_IMPL_ADD (array
, i
, wcsrchr
, 1, WCSRCHR_C
)
593 #endif /* HAVE_WCSRCHR_IFUNC */
595 #if HAVE_WCSSPN_IFUNC
596 IFUNC_IMPL (i
, name
, wcsspn
,
598 IFUNC_IMPL_ADD (array
, i
, wcsspn
,
599 dl_hwcap
& HWCAP_S390_VX
, WCSSPN_Z13
)
602 IFUNC_IMPL_ADD (array
, i
, wcsspn
, 1, WCSSPN_C
)
605 #endif /* HAVE_WCSSPN_IFUNC */
607 #if HAVE_WCSPBRK_IFUNC
608 IFUNC_IMPL (i
, name
, wcspbrk
,
609 # if HAVE_WCSPBRK_Z13
610 IFUNC_IMPL_ADD (array
, i
, wcspbrk
,
611 dl_hwcap
& HWCAP_S390_VX
, WCSPBRK_Z13
)
614 IFUNC_IMPL_ADD (array
, i
, wcspbrk
, 1, WCSPBRK_C
)
617 #endif /* HAVE_WCSPBRK_IFUNC */
619 #if HAVE_WCSCSPN_IFUNC
620 IFUNC_IMPL (i
, name
, wcscspn
,
621 # if HAVE_WCSCSPN_Z13
622 IFUNC_IMPL_ADD (array
, i
, wcscspn
,
623 dl_hwcap
& HWCAP_S390_VX
, WCSCSPN_Z13
)
626 IFUNC_IMPL_ADD (array
, i
, wcscspn
, 1, WCSCSPN_C
)
629 #endif /* HAVE_WCSCSPN_IFUNC */
631 #if HAVE_WMEMCHR_IFUNC
632 IFUNC_IMPL (i
, name
, wmemchr
,
633 # if HAVE_WMEMCHR_Z13
634 IFUNC_IMPL_ADD (array
, i
, wmemchr
,
635 dl_hwcap
& HWCAP_S390_VX
, WMEMCHR_Z13
)
638 IFUNC_IMPL_ADD (array
, i
, wmemchr
, 1, WMEMCHR_C
)
641 #endif /* HAVE_WMEMCHR_IFUNC */
643 #if HAVE_WMEMSET_IFUNC
644 IFUNC_IMPL (i
, name
, wmemset
,
645 # if HAVE_WMEMSET_Z13
646 IFUNC_IMPL_ADD (array
, i
, wmemset
,
647 dl_hwcap
& HWCAP_S390_VX
, WMEMSET_Z13
)
650 IFUNC_IMPL_ADD (array
, i
, wmemset
, 1, WMEMSET_C
)
653 #endif /* HAVE_WMEMSET_IFUNC */
655 #if HAVE_WMEMCMP_IFUNC
656 IFUNC_IMPL (i
, name
, wmemcmp
,
657 # if HAVE_WMEMCMP_Z13
658 IFUNC_IMPL_ADD (array
, i
, wmemcmp
,
659 dl_hwcap
& HWCAP_S390_VX
, WMEMCMP_Z13
)
662 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, 1, WMEMCMP_C
)
665 #endif /* HAVE_WMEMCMP_IFUNC */