1 /* Enumerate available IFUNC implementations of a function. s390/s390x version.
2 Copyright (C) 2015-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>
23 #include <ifunc-resolve.h>
24 #include <ifunc-memset.h>
25 #include <ifunc-memcmp.h>
26 #include <ifunc-memcpy.h>
27 #include <ifunc-strstr.h>
28 #include <ifunc-memmem.h>
29 #include <ifunc-strlen.h>
30 #include <ifunc-strnlen.h>
31 #include <ifunc-strcpy.h>
32 #include <ifunc-stpcpy.h>
33 #include <ifunc-strncpy.h>
34 #include <ifunc-stpncpy.h>
35 #include <ifunc-strcat.h>
36 #include <ifunc-strncat.h>
37 #include <ifunc-strcmp.h>
38 #include <ifunc-strncmp.h>
39 #include <ifunc-strchr.h>
40 #include <ifunc-strchrnul.h>
41 #include <ifunc-strrchr.h>
42 #include <ifunc-strspn.h>
43 #include <ifunc-strpbrk.h>
44 #include <ifunc-strcspn.h>
45 #include <ifunc-memchr.h>
46 #include <ifunc-rawmemchr.h>
47 #include <ifunc-memccpy.h>
48 #include <ifunc-memrchr.h>
49 #include <ifunc-wcslen.h>
50 #include <ifunc-wcsnlen.h>
51 #include <ifunc-wcscpy.h>
52 #include <ifunc-wcpcpy.h>
53 #include <ifunc-wcsncpy.h>
54 #include <ifunc-wcpncpy.h>
55 #include <ifunc-wcscat.h>
56 #include <ifunc-wcsncat.h>
57 #include <ifunc-wcscmp.h>
58 #include <ifunc-wcsncmp.h>
59 #include <ifunc-wcschr.h>
60 #include <ifunc-wcschrnul.h>
61 #include <ifunc-wcsrchr.h>
62 #include <ifunc-wcsspn.h>
63 #include <ifunc-wcspbrk.h>
64 #include <ifunc-wcscspn.h>
65 #include <ifunc-wmemchr.h>
66 #include <ifunc-wmemset.h>
67 #include <ifunc-wmemcmp.h>
69 /* Maximum number of IFUNC implementations. */
72 /* Fill ARRAY of MAX elements with IFUNC implementations for function
73 NAME supported on target machine and return the number of valid
76 __libc_ifunc_impl_list (const char *name
, struct libc_ifunc_impl
*array
,
79 assert (max
>= MAX_IFUNC
);
83 /* Get hardware information. */
84 unsigned long int dl_hwcap
= GLRO (dl_hwcap
);
85 unsigned long long stfle_bits
= 0ULL;
86 if ((dl_hwcap
& HWCAP_S390_STFLE
)
87 && (dl_hwcap
& HWCAP_S390_ZARCH
)
88 && (dl_hwcap
& HWCAP_S390_HIGH_GPRS
))
90 S390_STORE_STFLE (stfle_bits
);
94 IFUNC_IMPL (i
, name
, memset
,
96 IFUNC_IMPL_ADD (array
, i
, memset
,
97 S390_IS_Z196 (stfle_bits
), MEMSET_Z196
)
100 IFUNC_IMPL_ADD (array
, i
, memset
,
101 S390_IS_Z10 (stfle_bits
), MEMSET_Z10
)
103 # if HAVE_MEMSET_Z900_G5
104 IFUNC_IMPL_ADD (array
, i
, memset
, 1, MEMSET_Z900_G5
)
108 /* Note: bzero is implemented in memset. */
109 IFUNC_IMPL (i
, name
, bzero
,
110 # if HAVE_MEMSET_Z196
111 IFUNC_IMPL_ADD (array
, i
, bzero
,
112 S390_IS_Z196 (stfle_bits
), BZERO_Z196
)
115 IFUNC_IMPL_ADD (array
, i
, bzero
,
116 S390_IS_Z10 (stfle_bits
), BZERO_Z10
)
118 # if HAVE_MEMSET_Z900_G5
119 IFUNC_IMPL_ADD (array
, i
, bzero
, 1, BZERO_Z900_G5
)
122 #endif /* HAVE_MEMSET_IFUNC */
124 #if HAVE_MEMCMP_IFUNC
125 IFUNC_IMPL (i
, name
, memcmp
,
126 # if HAVE_MEMCMP_Z196
127 IFUNC_IMPL_ADD (array
, i
, memcmp
,
128 S390_IS_Z196 (stfle_bits
), MEMCMP_Z196
)
131 IFUNC_IMPL_ADD (array
, i
, memcmp
,
132 S390_IS_Z10 (stfle_bits
), MEMCMP_Z10
)
134 # if HAVE_MEMCMP_Z900_G5
135 IFUNC_IMPL_ADD (array
, i
, memcmp
, 1, MEMCMP_Z900_G5
)
138 #endif /* HAVE_MEMCMP_IFUNC */
140 #if HAVE_MEMCPY_IFUNC
141 IFUNC_IMPL (i
, name
, memcpy
,
142 # if HAVE_MEMCPY_Z196
143 IFUNC_IMPL_ADD (array
, i
, memcpy
,
144 S390_IS_Z196 (stfle_bits
), MEMCPY_Z196
)
147 IFUNC_IMPL_ADD (array
, i
, memcpy
,
148 S390_IS_Z10 (stfle_bits
), MEMCPY_Z10
)
150 # if HAVE_MEMCPY_Z900_G5
151 IFUNC_IMPL_ADD (array
, i
, memcpy
, 1, MEMCPY_Z900_G5
)
155 IFUNC_IMPL (i
, name
, mempcpy
,
156 # if HAVE_MEMCPY_Z196
157 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
158 S390_IS_Z196 (stfle_bits
), MEMPCPY_Z196
)
161 IFUNC_IMPL_ADD (array
, i
, mempcpy
,
162 S390_IS_Z10 (stfle_bits
), MEMPCPY_Z10
)
164 # if HAVE_MEMCPY_Z900_G5
165 IFUNC_IMPL_ADD (array
, i
, mempcpy
, 1, MEMPCPY_Z900_G5
)
168 #endif /* HAVE_MEMCPY_IFUNC */
170 #if HAVE_MEMMOVE_IFUNC
171 IFUNC_IMPL (i
, name
, memmove
,
172 # if HAVE_MEMMOVE_ARCH13
173 IFUNC_IMPL_ADD (array
, i
, memmove
,
174 ((dl_hwcap
& HWCAP_S390_VXRS_EXT2
)
175 && S390_IS_ARCH13_MIE3 (stfle_bits
)),
178 # if HAVE_MEMMOVE_Z13
179 IFUNC_IMPL_ADD (array
, i
, memmove
,
180 dl_hwcap
& HWCAP_S390_VX
, MEMMOVE_Z13
)
183 IFUNC_IMPL_ADD (array
, i
, memmove
, 1, MEMMOVE_C
)
186 #endif /* HAVE_MEMMOVE_IFUNC */
188 #if HAVE_STRSTR_IFUNC
189 IFUNC_IMPL (i
, name
, strstr
,
190 # if HAVE_STRSTR_ARCH13
191 IFUNC_IMPL_ADD (array
, i
, strstr
,
192 dl_hwcap
& HWCAP_S390_VXRS_EXT2
, STRSTR_ARCH13
)
195 IFUNC_IMPL_ADD (array
, i
, strstr
,
196 dl_hwcap
& HWCAP_S390_VX
, STRSTR_Z13
)
199 IFUNC_IMPL_ADD (array
, i
, strstr
, 1, STRSTR_C
)
202 #endif /* HAVE_STRSTR_IFUNC */
204 #if HAVE_MEMMEM_IFUNC
205 IFUNC_IMPL (i
, name
, memmem
,
206 # if HAVE_MEMMEM_ARCH13
207 IFUNC_IMPL_ADD (array
, i
, memmem
,
208 dl_hwcap
& HWCAP_S390_VXRS_EXT2
, MEMMEM_ARCH13
)
211 IFUNC_IMPL_ADD (array
, i
, memmem
,
212 dl_hwcap
& HWCAP_S390_VX
, MEMMEM_Z13
)
215 IFUNC_IMPL_ADD (array
, i
, memmem
, 1, MEMMEM_C
)
218 #endif /* HAVE_MEMMEM_IFUNC */
220 #if HAVE_STRLEN_IFUNC
221 IFUNC_IMPL (i
, name
, strlen
,
223 IFUNC_IMPL_ADD (array
, i
, strlen
,
224 dl_hwcap
& HWCAP_S390_VX
, STRLEN_Z13
)
227 IFUNC_IMPL_ADD (array
, i
, strlen
, 1, STRLEN_C
)
230 #endif /* HAVE_STRLEN_IFUNC */
232 #if HAVE_STRNLEN_IFUNC
233 IFUNC_IMPL (i
, name
, strnlen
,
234 # if HAVE_STRNLEN_Z13
235 IFUNC_IMPL_ADD (array
, i
, strnlen
,
236 dl_hwcap
& HWCAP_S390_VX
, STRNLEN_Z13
)
239 IFUNC_IMPL_ADD (array
, i
, strnlen
, 1, STRNLEN_C
)
242 #endif /* HAVE_STRNLEN_IFUNC */
244 #if HAVE_STRCPY_IFUNC
245 IFUNC_IMPL (i
, name
, strcpy
,
247 IFUNC_IMPL_ADD (array
, i
, strcpy
,
248 dl_hwcap
& HWCAP_S390_VX
, STRCPY_Z13
)
250 # if HAVE_STRCPY_Z900_G5
251 IFUNC_IMPL_ADD (array
, i
, strcpy
, 1, STRCPY_Z900_G5
)
254 #endif /* HAVE_STRCPY_IFUNC */
256 #if HAVE_STPCPY_IFUNC
257 IFUNC_IMPL (i
, name
, stpcpy
,
259 IFUNC_IMPL_ADD (array
, i
, stpcpy
,
260 dl_hwcap
& HWCAP_S390_VX
, STPCPY_Z13
)
263 IFUNC_IMPL_ADD (array
, i
, stpcpy
, 1, STPCPY_C
)
266 #endif /* HAVE_STPCPY_IFUNC */
268 #if HAVE_STRNCPY_IFUNC
269 IFUNC_IMPL (i
, name
, strncpy
,
270 # if HAVE_STRNCPY_Z13
271 IFUNC_IMPL_ADD (array
, i
, strncpy
,
272 dl_hwcap
& HWCAP_S390_VX
, STRNCPY_Z13
)
274 # if HAVE_STRNCPY_Z900_G5
275 IFUNC_IMPL_ADD (array
, i
, strncpy
, 1, STRNCPY_Z900_G5
)
278 #endif /* HAVE_STRNCPY_IFUNC */
280 #if HAVE_STPNCPY_IFUNC
281 IFUNC_IMPL (i
, name
, stpncpy
,
282 # if HAVE_STPNCPY_Z13
283 IFUNC_IMPL_ADD (array
, i
, stpncpy
,
284 dl_hwcap
& HWCAP_S390_VX
, STPNCPY_Z13
)
287 IFUNC_IMPL_ADD (array
, i
, stpncpy
, 1, STPNCPY_C
)
290 #endif /* HAVE_STPNCPY_IFUNC */
292 #if HAVE_STRCAT_IFUNC
293 IFUNC_IMPL (i
, name
, strcat
,
295 IFUNC_IMPL_ADD (array
, i
, strcat
,
296 dl_hwcap
& HWCAP_S390_VX
, STRCAT_Z13
)
299 IFUNC_IMPL_ADD (array
, i
, strcat
, 1, STRCAT_C
)
302 #endif /* HAVE_STRCAT_IFUNC */
304 #if HAVE_STRNCAT_IFUNC
305 IFUNC_IMPL (i
, name
, strncat
,
306 # if HAVE_STRNCAT_Z13
307 IFUNC_IMPL_ADD (array
, i
, strncat
,
308 dl_hwcap
& HWCAP_S390_VX
, STRNCAT_Z13
)
311 IFUNC_IMPL_ADD (array
, i
, strncat
, 1, STRNCAT_C
)
314 #endif /* HAVE_STRNCAT_IFUNC */
316 #if HAVE_STRCMP_IFUNC
317 IFUNC_IMPL (i
, name
, strcmp
,
319 IFUNC_IMPL_ADD (array
, i
, strcmp
,
320 dl_hwcap
& HWCAP_S390_VX
, STRCMP_Z13
)
322 # if HAVE_STRCMP_Z900_G5
323 IFUNC_IMPL_ADD (array
, i
, strcmp
, 1, STRCMP_Z900_G5
)
326 #endif /* HAVE_STRCMP_IFUNC */
328 #if HAVE_STRNCMP_IFUNC
329 IFUNC_IMPL (i
, name
, strncmp
,
330 # if HAVE_STRNCMP_Z13
331 IFUNC_IMPL_ADD (array
, i
, strncmp
,
332 dl_hwcap
& HWCAP_S390_VX
, STRNCMP_Z13
)
335 IFUNC_IMPL_ADD (array
, i
, strncmp
, 1, STRNCMP_C
)
338 #endif /* HAVE_STRNCMP_IFUNC */
340 #if HAVE_STRCHR_IFUNC
341 IFUNC_IMPL (i
, name
, strchr
,
343 IFUNC_IMPL_ADD (array
, i
, strchr
,
344 dl_hwcap
& HWCAP_S390_VX
, STRCHR_Z13
)
347 IFUNC_IMPL_ADD (array
, i
, strchr
, 1, STRCHR_C
)
350 #endif /* HAVE_STRCHR_IFUNC */
352 #if HAVE_STRCHRNUL_IFUNC
353 IFUNC_IMPL (i
, name
, strchrnul
,
354 # if HAVE_STRCHRNUL_Z13
355 IFUNC_IMPL_ADD (array
, i
, strchrnul
,
356 dl_hwcap
& HWCAP_S390_VX
, STRCHRNUL_Z13
)
358 # if HAVE_STRCHRNUL_C
359 IFUNC_IMPL_ADD (array
, i
, strchrnul
, 1, STRCHRNUL_C
)
362 #endif /* HAVE_STRCHRNUL_IFUNC */
364 #if HAVE_STRRCHR_IFUNC
365 IFUNC_IMPL (i
, name
, strrchr
,
366 # if HAVE_STRRCHR_Z13
367 IFUNC_IMPL_ADD (array
, i
, strrchr
,
368 dl_hwcap
& HWCAP_S390_VX
, STRRCHR_Z13
)
371 IFUNC_IMPL_ADD (array
, i
, strrchr
, 1, STRRCHR_C
)
374 #endif /* HAVE_STRRCHR_IFUNC */
376 #if HAVE_STRSPN_IFUNC
377 IFUNC_IMPL (i
, name
, strspn
,
379 IFUNC_IMPL_ADD (array
, i
, strspn
,
380 dl_hwcap
& HWCAP_S390_VX
, STRSPN_Z13
)
383 IFUNC_IMPL_ADD (array
, i
, strspn
, 1, STRSPN_C
)
386 #endif /* HAVE_STRSPN_IFUNC */
388 #if HAVE_STRPBRK_IFUNC
389 IFUNC_IMPL (i
, name
, strpbrk
,
390 # if HAVE_STRPBRK_Z13
391 IFUNC_IMPL_ADD (array
, i
, strpbrk
,
392 dl_hwcap
& HWCAP_S390_VX
, STRPBRK_Z13
)
395 IFUNC_IMPL_ADD (array
, i
, strpbrk
, 1, STRPBRK_C
)
398 #endif /* HAVE_STRPBRK_IFUNC */
400 #if HAVE_STRCSPN_IFUNC
401 IFUNC_IMPL (i
, name
, strcspn
,
402 # if HAVE_STRCSPN_Z13
403 IFUNC_IMPL_ADD (array
, i
, strcspn
,
404 dl_hwcap
& HWCAP_S390_VX
, STRCSPN_Z13
)
407 IFUNC_IMPL_ADD (array
, i
, strcspn
, 1, STRCSPN_C
)
410 #endif /* HAVE_STRCSPN_IFUNC */
412 #if HAVE_MEMCHR_IFUNC
413 IFUNC_IMPL (i
, name
, memchr
,
415 IFUNC_IMPL_ADD (array
, i
, memchr
,
416 dl_hwcap
& HWCAP_S390_VX
, MEMCHR_Z13
)
418 # if HAVE_MEMCHR_Z900_G5
419 IFUNC_IMPL_ADD (array
, i
, memchr
, 1, MEMCHR_Z900_G5
)
422 #endif /* HAVE_MEMCHR_IFUNC */
424 #if HAVE_RAWMEMCHR_IFUNC
425 IFUNC_IMPL (i
, name
, rawmemchr
,
426 # if HAVE_RAWMEMCHR_Z13
427 IFUNC_IMPL_ADD (array
, i
, rawmemchr
,
428 dl_hwcap
& HWCAP_S390_VX
, RAWMEMCHR_Z13
)
430 # if HAVE_RAWMEMCHR_C
431 IFUNC_IMPL_ADD (array
, i
, rawmemchr
, 1, RAWMEMCHR_C
)
434 #endif /* HAVE_RAWMEMCHR_IFUNC */
436 #if HAVE_MEMCCPY_IFUNC
437 IFUNC_IMPL (i
, name
, memccpy
,
438 # if HAVE_MEMCCPY_Z13
439 IFUNC_IMPL_ADD (array
, i
, memccpy
,
440 dl_hwcap
& HWCAP_S390_VX
, MEMCCPY_Z13
)
443 IFUNC_IMPL_ADD (array
, i
, memccpy
, 1, MEMCCPY_C
)
446 #endif /* HAVE_MEMCCPY_IFUNC */
448 #if HAVE_MEMRCHR_IFUNC
449 IFUNC_IMPL (i
, name
, memrchr
,
450 # if HAVE_MEMRCHR_Z13
451 IFUNC_IMPL_ADD (array
, i
, memrchr
,
452 dl_hwcap
& HWCAP_S390_VX
, MEMRCHR_Z13
)
455 IFUNC_IMPL_ADD (array
, i
, memrchr
, 1, MEMRCHR_C
)
458 #endif /* HAVE_MEMRCHR_IFUNC */
460 #if HAVE_WCSLEN_IFUNC
461 IFUNC_IMPL (i
, name
, wcslen
,
463 IFUNC_IMPL_ADD (array
, i
, wcslen
,
464 dl_hwcap
& HWCAP_S390_VX
, WCSLEN_Z13
)
467 IFUNC_IMPL_ADD (array
, i
, wcslen
, 1, WCSLEN_C
)
470 #endif /* HAVE_WCSLEN_IFUNC */
472 #if HAVE_WCSNLEN_IFUNC
473 IFUNC_IMPL (i
, name
, wcsnlen
,
474 # if HAVE_WCSNLEN_Z13
475 IFUNC_IMPL_ADD (array
, i
, wcsnlen
,
476 dl_hwcap
& HWCAP_S390_VX
, WCSNLEN_Z13
)
479 IFUNC_IMPL_ADD (array
, i
, wcsnlen
, 1, WCSNLEN_C
)
482 #endif /* HAVE_WCSNLEN_IFUNC */
484 #if HAVE_WCSCPY_IFUNC
485 IFUNC_IMPL (i
, name
, wcscpy
,
487 IFUNC_IMPL_ADD (array
, i
, wcscpy
,
488 dl_hwcap
& HWCAP_S390_VX
, WCSCPY_Z13
)
491 IFUNC_IMPL_ADD (array
, i
, wcscpy
, 1, WCSCPY_C
)
494 #endif /* HAVE_WCSCPY_IFUNC */
496 #if HAVE_WCPCPY_IFUNC
497 IFUNC_IMPL (i
, name
, wcpcpy
,
499 IFUNC_IMPL_ADD (array
, i
, wcpcpy
,
500 dl_hwcap
& HWCAP_S390_VX
, WCPCPY_Z13
)
503 IFUNC_IMPL_ADD (array
, i
, wcpcpy
, 1, WCPCPY_C
)
506 #endif /* HAVE_WCPCPY_IFUNC */
508 #if HAVE_WCSNCPY_IFUNC
509 IFUNC_IMPL (i
, name
, wcsncpy
,
510 # if HAVE_WCSNCPY_Z13
511 IFUNC_IMPL_ADD (array
, i
, wcsncpy
,
512 dl_hwcap
& HWCAP_S390_VX
, WCSNCPY_Z13
)
515 IFUNC_IMPL_ADD (array
, i
, wcsncpy
, 1, WCSNCPY_C
)
518 #endif /* HAVE_WCSNCPY_IFUNC */
520 #if HAVE_WCPNCPY_IFUNC
521 IFUNC_IMPL (i
, name
, wcpncpy
,
522 # if HAVE_WCPNCPY_Z13
523 IFUNC_IMPL_ADD (array
, i
, wcpncpy
,
524 dl_hwcap
& HWCAP_S390_VX
, WCPNCPY_Z13
)
527 IFUNC_IMPL_ADD (array
, i
, wcpncpy
, 1, WCPNCPY_C
)
530 #endif /* HAVE_WCPNCPY_IFUNC */
532 #if HAVE_WCSCAT_IFUNC
533 IFUNC_IMPL (i
, name
, wcscat
,
535 IFUNC_IMPL_ADD (array
, i
, wcscat
,
536 dl_hwcap
& HWCAP_S390_VX
, WCSCAT_Z13
)
539 IFUNC_IMPL_ADD (array
, i
, wcscat
, 1, WCSCAT_C
)
542 #endif /* HAVE_WCSCAT_IFUNC */
544 #if HAVE_WCSNCAT_IFUNC
545 IFUNC_IMPL (i
, name
, wcsncat
,
546 # if HAVE_WCSNCAT_Z13
547 IFUNC_IMPL_ADD (array
, i
, wcsncat
,
548 dl_hwcap
& HWCAP_S390_VX
, WCSNCAT_Z13
)
551 IFUNC_IMPL_ADD (array
, i
, wcsncat
, 1, WCSNCAT_C
)
554 #endif /* HAVE_WCSNCAT_IFUNC */
556 #if HAVE_WCSCMP_IFUNC
557 IFUNC_IMPL (i
, name
, wcscmp
,
559 IFUNC_IMPL_ADD (array
, i
, wcscmp
,
560 dl_hwcap
& HWCAP_S390_VX
, WCSCMP_Z13
)
563 IFUNC_IMPL_ADD (array
, i
, wcscmp
, 1, WCSCMP_C
)
566 #endif /* HAVE_WCSCMP_IFUNC */
568 #if HAVE_WCSNCMP_IFUNC
569 IFUNC_IMPL (i
, name
, wcsncmp
,
570 # if HAVE_WCSNCMP_Z13
571 IFUNC_IMPL_ADD (array
, i
, wcsncmp
,
572 dl_hwcap
& HWCAP_S390_VX
, WCSNCMP_Z13
)
575 IFUNC_IMPL_ADD (array
, i
, wcsncmp
, 1, WCSNCMP_C
)
578 #endif /* HAVE_WCSNCMP_IFUNC */
580 #if HAVE_WCSCHR_IFUNC
581 IFUNC_IMPL (i
, name
, wcschr
,
583 IFUNC_IMPL_ADD (array
, i
, wcschr
,
584 dl_hwcap
& HWCAP_S390_VX
, WCSCHR_Z13
)
587 IFUNC_IMPL_ADD (array
, i
, wcschr
, 1, WCSCHR_C
)
590 #endif /* HAVE_WCSCHR_IFUNC */
592 #if HAVE_WCSCHRNUL_IFUNC
593 IFUNC_IMPL (i
, name
, wcschrnul
,
594 # if HAVE_WCSCHRNUL_Z13
595 IFUNC_IMPL_ADD (array
, i
, wcschrnul
,
596 dl_hwcap
& HWCAP_S390_VX
, WCSCHRNUL_Z13
)
598 # if HAVE_WCSCHRNUL_C
599 IFUNC_IMPL_ADD (array
, i
, wcschrnul
, 1, WCSCHRNUL_C
)
602 #endif /* HAVE_WCSCHRNUL_IFUNC */
604 #if HAVE_WCSRCHR_IFUNC
605 IFUNC_IMPL (i
, name
, wcsrchr
,
606 # if HAVE_WCSRCHR_Z13
607 IFUNC_IMPL_ADD (array
, i
, wcsrchr
,
608 dl_hwcap
& HWCAP_S390_VX
, WCSRCHR_Z13
)
611 IFUNC_IMPL_ADD (array
, i
, wcsrchr
, 1, WCSRCHR_C
)
614 #endif /* HAVE_WCSRCHR_IFUNC */
616 #if HAVE_WCSSPN_IFUNC
617 IFUNC_IMPL (i
, name
, wcsspn
,
619 IFUNC_IMPL_ADD (array
, i
, wcsspn
,
620 dl_hwcap
& HWCAP_S390_VX
, WCSSPN_Z13
)
623 IFUNC_IMPL_ADD (array
, i
, wcsspn
, 1, WCSSPN_C
)
626 #endif /* HAVE_WCSSPN_IFUNC */
628 #if HAVE_WCSPBRK_IFUNC
629 IFUNC_IMPL (i
, name
, wcspbrk
,
630 # if HAVE_WCSPBRK_Z13
631 IFUNC_IMPL_ADD (array
, i
, wcspbrk
,
632 dl_hwcap
& HWCAP_S390_VX
, WCSPBRK_Z13
)
635 IFUNC_IMPL_ADD (array
, i
, wcspbrk
, 1, WCSPBRK_C
)
638 #endif /* HAVE_WCSPBRK_IFUNC */
640 #if HAVE_WCSCSPN_IFUNC
641 IFUNC_IMPL (i
, name
, wcscspn
,
642 # if HAVE_WCSCSPN_Z13
643 IFUNC_IMPL_ADD (array
, i
, wcscspn
,
644 dl_hwcap
& HWCAP_S390_VX
, WCSCSPN_Z13
)
647 IFUNC_IMPL_ADD (array
, i
, wcscspn
, 1, WCSCSPN_C
)
650 #endif /* HAVE_WCSCSPN_IFUNC */
652 #if HAVE_WMEMCHR_IFUNC
653 IFUNC_IMPL (i
, name
, wmemchr
,
654 # if HAVE_WMEMCHR_Z13
655 IFUNC_IMPL_ADD (array
, i
, wmemchr
,
656 dl_hwcap
& HWCAP_S390_VX
, WMEMCHR_Z13
)
659 IFUNC_IMPL_ADD (array
, i
, wmemchr
, 1, WMEMCHR_C
)
662 #endif /* HAVE_WMEMCHR_IFUNC */
664 #if HAVE_WMEMSET_IFUNC
665 IFUNC_IMPL (i
, name
, wmemset
,
666 # if HAVE_WMEMSET_Z13
667 IFUNC_IMPL_ADD (array
, i
, wmemset
,
668 dl_hwcap
& HWCAP_S390_VX
, WMEMSET_Z13
)
671 IFUNC_IMPL_ADD (array
, i
, wmemset
, 1, WMEMSET_C
)
674 #endif /* HAVE_WMEMSET_IFUNC */
676 #if HAVE_WMEMCMP_IFUNC
677 IFUNC_IMPL (i
, name
, wmemcmp
,
678 # if HAVE_WMEMCMP_Z13
679 IFUNC_IMPL_ADD (array
, i
, wmemcmp
,
680 dl_hwcap
& HWCAP_S390_VX
, WMEMCMP_Z13
)
683 IFUNC_IMPL_ADD (array
, i
, wmemcmp
, 1, WMEMCMP_C
)
686 #endif /* HAVE_WMEMCMP_IFUNC */