S390: Also check vector support in memmove ifunc-selector [BZ #27511]
[glibc.git] / sysdeps / s390 / multiarch / ifunc-impl-list.c
blob2ef38b72ddac7c18d95e1e84fd5da326cc034b5d
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/>. */
19 #include <assert.h>
20 #include <string.h>
21 #include <wchar.h>
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. */
70 #define MAX_IFUNC 3
72 /* Fill ARRAY of MAX elements with IFUNC implementations for function
73 NAME supported on target machine and return the number of valid
74 entries. */
75 size_t
76 __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
77 size_t max)
79 assert (max >= MAX_IFUNC);
81 size_t i = 0;
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);
93 #if HAVE_MEMSET_IFUNC
94 IFUNC_IMPL (i, name, memset,
95 # if HAVE_MEMSET_Z196
96 IFUNC_IMPL_ADD (array, i, memset,
97 S390_IS_Z196 (stfle_bits), MEMSET_Z196)
98 # endif
99 # if HAVE_MEMSET_Z10
100 IFUNC_IMPL_ADD (array, i, memset,
101 S390_IS_Z10 (stfle_bits), MEMSET_Z10)
102 # endif
103 # if HAVE_MEMSET_Z900_G5
104 IFUNC_IMPL_ADD (array, i, memset, 1, MEMSET_Z900_G5)
105 # endif
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)
113 # endif
114 # if HAVE_MEMSET_Z10
115 IFUNC_IMPL_ADD (array, i, bzero,
116 S390_IS_Z10 (stfle_bits), BZERO_Z10)
117 # endif
118 # if HAVE_MEMSET_Z900_G5
119 IFUNC_IMPL_ADD (array, i, bzero, 1, BZERO_Z900_G5)
120 # endif
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)
129 # endif
130 # if HAVE_MEMCMP_Z10
131 IFUNC_IMPL_ADD (array, i, memcmp,
132 S390_IS_Z10 (stfle_bits), MEMCMP_Z10)
133 # endif
134 # if HAVE_MEMCMP_Z900_G5
135 IFUNC_IMPL_ADD (array, i, memcmp, 1, MEMCMP_Z900_G5)
136 # endif
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)
145 # endif
146 # if HAVE_MEMCPY_Z10
147 IFUNC_IMPL_ADD (array, i, memcpy,
148 S390_IS_Z10 (stfle_bits), MEMCPY_Z10)
149 # endif
150 # if HAVE_MEMCPY_Z900_G5
151 IFUNC_IMPL_ADD (array, i, memcpy, 1, MEMCPY_Z900_G5)
152 # endif
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)
159 # endif
160 # if HAVE_MEMCPY_Z10
161 IFUNC_IMPL_ADD (array, i, mempcpy,
162 S390_IS_Z10 (stfle_bits), MEMPCPY_Z10)
163 # endif
164 # if HAVE_MEMCPY_Z900_G5
165 IFUNC_IMPL_ADD (array, i, mempcpy, 1, MEMPCPY_Z900_G5)
166 # endif
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)),
176 MEMMOVE_ARCH13)
177 # endif
178 # if HAVE_MEMMOVE_Z13
179 IFUNC_IMPL_ADD (array, i, memmove,
180 dl_hwcap & HWCAP_S390_VX, MEMMOVE_Z13)
181 # endif
182 # if HAVE_MEMMOVE_C
183 IFUNC_IMPL_ADD (array, i, memmove, 1, MEMMOVE_C)
184 # endif
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)
193 # endif
194 # if HAVE_STRSTR_Z13
195 IFUNC_IMPL_ADD (array, i, strstr,
196 dl_hwcap & HWCAP_S390_VX, STRSTR_Z13)
197 # endif
198 # if HAVE_STRSTR_C
199 IFUNC_IMPL_ADD (array, i, strstr, 1, STRSTR_C)
200 # endif
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)
209 # endif
210 # if HAVE_MEMMEM_Z13
211 IFUNC_IMPL_ADD (array, i, memmem,
212 dl_hwcap & HWCAP_S390_VX, MEMMEM_Z13)
213 # endif
214 # if HAVE_MEMMEM_C
215 IFUNC_IMPL_ADD (array, i, memmem, 1, MEMMEM_C)
216 # endif
218 #endif /* HAVE_MEMMEM_IFUNC */
220 #if HAVE_STRLEN_IFUNC
221 IFUNC_IMPL (i, name, strlen,
222 # if HAVE_STRLEN_Z13
223 IFUNC_IMPL_ADD (array, i, strlen,
224 dl_hwcap & HWCAP_S390_VX, STRLEN_Z13)
225 # endif
226 # if HAVE_STRLEN_C
227 IFUNC_IMPL_ADD (array, i, strlen, 1, STRLEN_C)
228 # endif
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)
237 # endif
238 # if HAVE_STRNLEN_C
239 IFUNC_IMPL_ADD (array, i, strnlen, 1, STRNLEN_C)
240 # endif
242 #endif /* HAVE_STRNLEN_IFUNC */
244 #if HAVE_STRCPY_IFUNC
245 IFUNC_IMPL (i, name, strcpy,
246 # if HAVE_STRCPY_Z13
247 IFUNC_IMPL_ADD (array, i, strcpy,
248 dl_hwcap & HWCAP_S390_VX, STRCPY_Z13)
249 # endif
250 # if HAVE_STRCPY_Z900_G5
251 IFUNC_IMPL_ADD (array, i, strcpy, 1, STRCPY_Z900_G5)
252 # endif
254 #endif /* HAVE_STRCPY_IFUNC */
256 #if HAVE_STPCPY_IFUNC
257 IFUNC_IMPL (i, name, stpcpy,
258 # if HAVE_STPCPY_Z13
259 IFUNC_IMPL_ADD (array, i, stpcpy,
260 dl_hwcap & HWCAP_S390_VX, STPCPY_Z13)
261 # endif
262 # if HAVE_STPCPY_C
263 IFUNC_IMPL_ADD (array, i, stpcpy, 1, STPCPY_C)
264 # endif
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)
273 # endif
274 # if HAVE_STRNCPY_Z900_G5
275 IFUNC_IMPL_ADD (array, i, strncpy, 1, STRNCPY_Z900_G5)
276 # endif
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)
285 # endif
286 # if HAVE_STPNCPY_C
287 IFUNC_IMPL_ADD (array, i, stpncpy, 1, STPNCPY_C)
288 # endif
290 #endif /* HAVE_STPNCPY_IFUNC */
292 #if HAVE_STRCAT_IFUNC
293 IFUNC_IMPL (i, name, strcat,
294 # if HAVE_STRCAT_Z13
295 IFUNC_IMPL_ADD (array, i, strcat,
296 dl_hwcap & HWCAP_S390_VX, STRCAT_Z13)
297 # endif
298 # if HAVE_STRCAT_C
299 IFUNC_IMPL_ADD (array, i, strcat, 1, STRCAT_C)
300 # endif
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)
309 # endif
310 # if HAVE_STRNCAT_C
311 IFUNC_IMPL_ADD (array, i, strncat, 1, STRNCAT_C)
312 # endif
314 #endif /* HAVE_STRNCAT_IFUNC */
316 #if HAVE_STRCMP_IFUNC
317 IFUNC_IMPL (i, name, strcmp,
318 # if HAVE_STRCMP_Z13
319 IFUNC_IMPL_ADD (array, i, strcmp,
320 dl_hwcap & HWCAP_S390_VX, STRCMP_Z13)
321 # endif
322 # if HAVE_STRCMP_Z900_G5
323 IFUNC_IMPL_ADD (array, i, strcmp, 1, STRCMP_Z900_G5)
324 # endif
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)
333 # endif
334 # if HAVE_STRNCMP_C
335 IFUNC_IMPL_ADD (array, i, strncmp, 1, STRNCMP_C)
336 # endif
338 #endif /* HAVE_STRNCMP_IFUNC */
340 #if HAVE_STRCHR_IFUNC
341 IFUNC_IMPL (i, name, strchr,
342 # if HAVE_STRCHR_Z13
343 IFUNC_IMPL_ADD (array, i, strchr,
344 dl_hwcap & HWCAP_S390_VX, STRCHR_Z13)
345 # endif
346 # if HAVE_STRCHR_C
347 IFUNC_IMPL_ADD (array, i, strchr, 1, STRCHR_C)
348 # endif
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)
357 # endif
358 # if HAVE_STRCHRNUL_C
359 IFUNC_IMPL_ADD (array, i, strchrnul, 1, STRCHRNUL_C)
360 # endif
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)
369 # endif
370 # if HAVE_STRRCHR_C
371 IFUNC_IMPL_ADD (array, i, strrchr, 1, STRRCHR_C)
372 # endif
374 #endif /* HAVE_STRRCHR_IFUNC */
376 #if HAVE_STRSPN_IFUNC
377 IFUNC_IMPL (i, name, strspn,
378 # if HAVE_STRSPN_Z13
379 IFUNC_IMPL_ADD (array, i, strspn,
380 dl_hwcap & HWCAP_S390_VX, STRSPN_Z13)
381 # endif
382 # if HAVE_STRSPN_C
383 IFUNC_IMPL_ADD (array, i, strspn, 1, STRSPN_C)
384 # endif
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)
393 # endif
394 # if HAVE_STRPBRK_C
395 IFUNC_IMPL_ADD (array, i, strpbrk, 1, STRPBRK_C)
396 # endif
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)
405 # endif
406 # if HAVE_STRCSPN_C
407 IFUNC_IMPL_ADD (array, i, strcspn, 1, STRCSPN_C)
408 # endif
410 #endif /* HAVE_STRCSPN_IFUNC */
412 #if HAVE_MEMCHR_IFUNC
413 IFUNC_IMPL (i, name, memchr,
414 # if HAVE_MEMCHR_Z13
415 IFUNC_IMPL_ADD (array, i, memchr,
416 dl_hwcap & HWCAP_S390_VX, MEMCHR_Z13)
417 # endif
418 # if HAVE_MEMCHR_Z900_G5
419 IFUNC_IMPL_ADD (array, i, memchr, 1, MEMCHR_Z900_G5)
420 # endif
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)
429 # endif
430 # if HAVE_RAWMEMCHR_C
431 IFUNC_IMPL_ADD (array, i, rawmemchr, 1, RAWMEMCHR_C)
432 # endif
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)
441 # endif
442 # if HAVE_MEMCCPY_C
443 IFUNC_IMPL_ADD (array, i, memccpy, 1, MEMCCPY_C)
444 # endif
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)
453 # endif
454 # if HAVE_MEMRCHR_C
455 IFUNC_IMPL_ADD (array, i, memrchr, 1, MEMRCHR_C)
456 # endif
458 #endif /* HAVE_MEMRCHR_IFUNC */
460 #if HAVE_WCSLEN_IFUNC
461 IFUNC_IMPL (i, name, wcslen,
462 # if HAVE_WCSLEN_Z13
463 IFUNC_IMPL_ADD (array, i, wcslen,
464 dl_hwcap & HWCAP_S390_VX, WCSLEN_Z13)
465 # endif
466 # if HAVE_WCSLEN_C
467 IFUNC_IMPL_ADD (array, i, wcslen, 1, WCSLEN_C)
468 # endif
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)
477 # endif
478 # if HAVE_WCSNLEN_C
479 IFUNC_IMPL_ADD (array, i, wcsnlen, 1, WCSNLEN_C)
480 # endif
482 #endif /* HAVE_WCSNLEN_IFUNC */
484 #if HAVE_WCSCPY_IFUNC
485 IFUNC_IMPL (i, name, wcscpy,
486 # if HAVE_WCSCPY_Z13
487 IFUNC_IMPL_ADD (array, i, wcscpy,
488 dl_hwcap & HWCAP_S390_VX, WCSCPY_Z13)
489 # endif
490 # if HAVE_WCSCPY_C
491 IFUNC_IMPL_ADD (array, i, wcscpy, 1, WCSCPY_C)
492 # endif
494 #endif /* HAVE_WCSCPY_IFUNC */
496 #if HAVE_WCPCPY_IFUNC
497 IFUNC_IMPL (i, name, wcpcpy,
498 # if HAVE_WCPCPY_Z13
499 IFUNC_IMPL_ADD (array, i, wcpcpy,
500 dl_hwcap & HWCAP_S390_VX, WCPCPY_Z13)
501 # endif
502 # if HAVE_WCPCPY_C
503 IFUNC_IMPL_ADD (array, i, wcpcpy, 1, WCPCPY_C)
504 # endif
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)
513 # endif
514 # if HAVE_WCSNCPY_C
515 IFUNC_IMPL_ADD (array, i, wcsncpy, 1, WCSNCPY_C)
516 # endif
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)
525 # endif
526 # if HAVE_WCPNCPY_C
527 IFUNC_IMPL_ADD (array, i, wcpncpy, 1, WCPNCPY_C)
528 # endif
530 #endif /* HAVE_WCPNCPY_IFUNC */
532 #if HAVE_WCSCAT_IFUNC
533 IFUNC_IMPL (i, name, wcscat,
534 # if HAVE_WCSCAT_Z13
535 IFUNC_IMPL_ADD (array, i, wcscat,
536 dl_hwcap & HWCAP_S390_VX, WCSCAT_Z13)
537 # endif
538 # if HAVE_WCSCAT_C
539 IFUNC_IMPL_ADD (array, i, wcscat, 1, WCSCAT_C)
540 # endif
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)
549 # endif
550 # if HAVE_WCSNCAT_C
551 IFUNC_IMPL_ADD (array, i, wcsncat, 1, WCSNCAT_C)
552 # endif
554 #endif /* HAVE_WCSNCAT_IFUNC */
556 #if HAVE_WCSCMP_IFUNC
557 IFUNC_IMPL (i, name, wcscmp,
558 # if HAVE_WCSCMP_Z13
559 IFUNC_IMPL_ADD (array, i, wcscmp,
560 dl_hwcap & HWCAP_S390_VX, WCSCMP_Z13)
561 # endif
562 # if HAVE_WCSCMP_C
563 IFUNC_IMPL_ADD (array, i, wcscmp, 1, WCSCMP_C)
564 # endif
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)
573 # endif
574 # if HAVE_WCSNCMP_C
575 IFUNC_IMPL_ADD (array, i, wcsncmp, 1, WCSNCMP_C)
576 # endif
578 #endif /* HAVE_WCSNCMP_IFUNC */
580 #if HAVE_WCSCHR_IFUNC
581 IFUNC_IMPL (i, name, wcschr,
582 # if HAVE_WCSCHR_Z13
583 IFUNC_IMPL_ADD (array, i, wcschr,
584 dl_hwcap & HWCAP_S390_VX, WCSCHR_Z13)
585 # endif
586 # if HAVE_WCSCHR_C
587 IFUNC_IMPL_ADD (array, i, wcschr, 1, WCSCHR_C)
588 # endif
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)
597 # endif
598 # if HAVE_WCSCHRNUL_C
599 IFUNC_IMPL_ADD (array, i, wcschrnul, 1, WCSCHRNUL_C)
600 # endif
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)
609 # endif
610 # if HAVE_WCSRCHR_C
611 IFUNC_IMPL_ADD (array, i, wcsrchr, 1, WCSRCHR_C)
612 # endif
614 #endif /* HAVE_WCSRCHR_IFUNC */
616 #if HAVE_WCSSPN_IFUNC
617 IFUNC_IMPL (i, name, wcsspn,
618 # if HAVE_WCSSPN_Z13
619 IFUNC_IMPL_ADD (array, i, wcsspn,
620 dl_hwcap & HWCAP_S390_VX, WCSSPN_Z13)
621 # endif
622 # if HAVE_WCSSPN_C
623 IFUNC_IMPL_ADD (array, i, wcsspn, 1, WCSSPN_C)
624 # endif
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)
633 # endif
634 # if HAVE_WCSPBRK_C
635 IFUNC_IMPL_ADD (array, i, wcspbrk, 1, WCSPBRK_C)
636 # endif
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)
645 # endif
646 # if HAVE_WCSCSPN_C
647 IFUNC_IMPL_ADD (array, i, wcscspn, 1, WCSCSPN_C)
648 # endif
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)
657 # endif
658 # if HAVE_WMEMCHR_C
659 IFUNC_IMPL_ADD (array, i, wmemchr, 1, WMEMCHR_C)
660 # endif
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)
669 # endif
670 # if HAVE_WMEMSET_C
671 IFUNC_IMPL_ADD (array, i, wmemset, 1, WMEMSET_C)
672 # endif
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)
681 # endif
682 # if HAVE_WMEMCMP_C
683 IFUNC_IMPL_ADD (array, i, wmemcmp, 1, WMEMCMP_C)
684 # endif
686 #endif /* HAVE_WMEMCMP_IFUNC */
688 return i;