S390: Add arch13 memmem ifunc variant.
[glibc.git] / sysdeps / s390 / multiarch / ifunc-impl-list.c
blob1948436417db1ad2a1d7cebd6dfcb50ef33643a7
1 /* Enumerate available IFUNC implementations of a function. s390/s390x version.
2 Copyright (C) 2015-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 <http://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 S390_IS_ARCH13_MIE3 (stfle_bits),
175 MEMMOVE_ARCH13)
176 # endif
177 # if HAVE_MEMMOVE_Z13
178 IFUNC_IMPL_ADD (array, i, memmove,
179 dl_hwcap & HWCAP_S390_VX, MEMMOVE_Z13)
180 # endif
181 # if HAVE_MEMMOVE_C
182 IFUNC_IMPL_ADD (array, i, memmove, 1, MEMMOVE_C)
183 # endif
185 #endif /* HAVE_MEMMOVE_IFUNC */
187 #if HAVE_STRSTR_IFUNC
188 IFUNC_IMPL (i, name, strstr,
189 # if HAVE_STRSTR_ARCH13
190 IFUNC_IMPL_ADD (array, i, strstr,
191 dl_hwcap & HWCAP_S390_VXRS_EXT2, STRSTR_ARCH13)
192 # endif
193 # if HAVE_STRSTR_Z13
194 IFUNC_IMPL_ADD (array, i, strstr,
195 dl_hwcap & HWCAP_S390_VX, STRSTR_Z13)
196 # endif
197 # if HAVE_STRSTR_C
198 IFUNC_IMPL_ADD (array, i, strstr, 1, STRSTR_C)
199 # endif
201 #endif /* HAVE_STRSTR_IFUNC */
203 #if HAVE_MEMMEM_IFUNC
204 IFUNC_IMPL (i, name, memmem,
205 # if HAVE_MEMMEM_ARCH13
206 IFUNC_IMPL_ADD (array, i, memmem,
207 dl_hwcap & HWCAP_S390_VXRS_EXT2, MEMMEM_ARCH13)
208 # endif
209 # if HAVE_MEMMEM_Z13
210 IFUNC_IMPL_ADD (array, i, memmem,
211 dl_hwcap & HWCAP_S390_VX, MEMMEM_Z13)
212 # endif
213 # if HAVE_MEMMEM_C
214 IFUNC_IMPL_ADD (array, i, memmem, 1, MEMMEM_C)
215 # endif
217 #endif /* HAVE_MEMMEM_IFUNC */
219 #if HAVE_STRLEN_IFUNC
220 IFUNC_IMPL (i, name, strlen,
221 # if HAVE_STRLEN_Z13
222 IFUNC_IMPL_ADD (array, i, strlen,
223 dl_hwcap & HWCAP_S390_VX, STRLEN_Z13)
224 # endif
225 # if HAVE_STRLEN_C
226 IFUNC_IMPL_ADD (array, i, strlen, 1, STRLEN_C)
227 # endif
229 #endif /* HAVE_STRLEN_IFUNC */
231 #if HAVE_STRNLEN_IFUNC
232 IFUNC_IMPL (i, name, strnlen,
233 # if HAVE_STRNLEN_Z13
234 IFUNC_IMPL_ADD (array, i, strnlen,
235 dl_hwcap & HWCAP_S390_VX, STRNLEN_Z13)
236 # endif
237 # if HAVE_STRNLEN_C
238 IFUNC_IMPL_ADD (array, i, strnlen, 1, STRNLEN_C)
239 # endif
241 #endif /* HAVE_STRNLEN_IFUNC */
243 #if HAVE_STRCPY_IFUNC
244 IFUNC_IMPL (i, name, strcpy,
245 # if HAVE_STRCPY_Z13
246 IFUNC_IMPL_ADD (array, i, strcpy,
247 dl_hwcap & HWCAP_S390_VX, STRCPY_Z13)
248 # endif
249 # if HAVE_STRCPY_Z900_G5
250 IFUNC_IMPL_ADD (array, i, strcpy, 1, STRCPY_Z900_G5)
251 # endif
253 #endif /* HAVE_STRCPY_IFUNC */
255 #if HAVE_STPCPY_IFUNC
256 IFUNC_IMPL (i, name, stpcpy,
257 # if HAVE_STPCPY_Z13
258 IFUNC_IMPL_ADD (array, i, stpcpy,
259 dl_hwcap & HWCAP_S390_VX, STPCPY_Z13)
260 # endif
261 # if HAVE_STPCPY_C
262 IFUNC_IMPL_ADD (array, i, stpcpy, 1, STPCPY_C)
263 # endif
265 #endif /* HAVE_STPCPY_IFUNC */
267 #if HAVE_STRNCPY_IFUNC
268 IFUNC_IMPL (i, name, strncpy,
269 # if HAVE_STRNCPY_Z13
270 IFUNC_IMPL_ADD (array, i, strncpy,
271 dl_hwcap & HWCAP_S390_VX, STRNCPY_Z13)
272 # endif
273 # if HAVE_STRNCPY_Z900_G5
274 IFUNC_IMPL_ADD (array, i, strncpy, 1, STRNCPY_Z900_G5)
275 # endif
277 #endif /* HAVE_STRNCPY_IFUNC */
279 #if HAVE_STPNCPY_IFUNC
280 IFUNC_IMPL (i, name, stpncpy,
281 # if HAVE_STPNCPY_Z13
282 IFUNC_IMPL_ADD (array, i, stpncpy,
283 dl_hwcap & HWCAP_S390_VX, STPNCPY_Z13)
284 # endif
285 # if HAVE_STPNCPY_C
286 IFUNC_IMPL_ADD (array, i, stpncpy, 1, STPNCPY_C)
287 # endif
289 #endif /* HAVE_STPNCPY_IFUNC */
291 #if HAVE_STRCAT_IFUNC
292 IFUNC_IMPL (i, name, strcat,
293 # if HAVE_STRCAT_Z13
294 IFUNC_IMPL_ADD (array, i, strcat,
295 dl_hwcap & HWCAP_S390_VX, STRCAT_Z13)
296 # endif
297 # if HAVE_STRCAT_C
298 IFUNC_IMPL_ADD (array, i, strcat, 1, STRCAT_C)
299 # endif
301 #endif /* HAVE_STRCAT_IFUNC */
303 #if HAVE_STRNCAT_IFUNC
304 IFUNC_IMPL (i, name, strncat,
305 # if HAVE_STRNCAT_Z13
306 IFUNC_IMPL_ADD (array, i, strncat,
307 dl_hwcap & HWCAP_S390_VX, STRNCAT_Z13)
308 # endif
309 # if HAVE_STRNCAT_C
310 IFUNC_IMPL_ADD (array, i, strncat, 1, STRNCAT_C)
311 # endif
313 #endif /* HAVE_STRNCAT_IFUNC */
315 #if HAVE_STRCMP_IFUNC
316 IFUNC_IMPL (i, name, strcmp,
317 # if HAVE_STRCMP_Z13
318 IFUNC_IMPL_ADD (array, i, strcmp,
319 dl_hwcap & HWCAP_S390_VX, STRCMP_Z13)
320 # endif
321 # if HAVE_STRCMP_Z900_G5
322 IFUNC_IMPL_ADD (array, i, strcmp, 1, STRCMP_Z900_G5)
323 # endif
325 #endif /* HAVE_STRCMP_IFUNC */
327 #if HAVE_STRNCMP_IFUNC
328 IFUNC_IMPL (i, name, strncmp,
329 # if HAVE_STRNCMP_Z13
330 IFUNC_IMPL_ADD (array, i, strncmp,
331 dl_hwcap & HWCAP_S390_VX, STRNCMP_Z13)
332 # endif
333 # if HAVE_STRNCMP_C
334 IFUNC_IMPL_ADD (array, i, strncmp, 1, STRNCMP_C)
335 # endif
337 #endif /* HAVE_STRNCMP_IFUNC */
339 #if HAVE_STRCHR_IFUNC
340 IFUNC_IMPL (i, name, strchr,
341 # if HAVE_STRCHR_Z13
342 IFUNC_IMPL_ADD (array, i, strchr,
343 dl_hwcap & HWCAP_S390_VX, STRCHR_Z13)
344 # endif
345 # if HAVE_STRCHR_C
346 IFUNC_IMPL_ADD (array, i, strchr, 1, STRCHR_C)
347 # endif
349 #endif /* HAVE_STRCHR_IFUNC */
351 #if HAVE_STRCHRNUL_IFUNC
352 IFUNC_IMPL (i, name, strchrnul,
353 # if HAVE_STRCHRNUL_Z13
354 IFUNC_IMPL_ADD (array, i, strchrnul,
355 dl_hwcap & HWCAP_S390_VX, STRCHRNUL_Z13)
356 # endif
357 # if HAVE_STRCHRNUL_C
358 IFUNC_IMPL_ADD (array, i, strchrnul, 1, STRCHRNUL_C)
359 # endif
361 #endif /* HAVE_STRCHRNUL_IFUNC */
363 #if HAVE_STRRCHR_IFUNC
364 IFUNC_IMPL (i, name, strrchr,
365 # if HAVE_STRRCHR_Z13
366 IFUNC_IMPL_ADD (array, i, strrchr,
367 dl_hwcap & HWCAP_S390_VX, STRRCHR_Z13)
368 # endif
369 # if HAVE_STRRCHR_C
370 IFUNC_IMPL_ADD (array, i, strrchr, 1, STRRCHR_C)
371 # endif
373 #endif /* HAVE_STRRCHR_IFUNC */
375 #if HAVE_STRSPN_IFUNC
376 IFUNC_IMPL (i, name, strspn,
377 # if HAVE_STRSPN_Z13
378 IFUNC_IMPL_ADD (array, i, strspn,
379 dl_hwcap & HWCAP_S390_VX, STRSPN_Z13)
380 # endif
381 # if HAVE_STRSPN_C
382 IFUNC_IMPL_ADD (array, i, strspn, 1, STRSPN_C)
383 # endif
385 #endif /* HAVE_STRSPN_IFUNC */
387 #if HAVE_STRPBRK_IFUNC
388 IFUNC_IMPL (i, name, strpbrk,
389 # if HAVE_STRPBRK_Z13
390 IFUNC_IMPL_ADD (array, i, strpbrk,
391 dl_hwcap & HWCAP_S390_VX, STRPBRK_Z13)
392 # endif
393 # if HAVE_STRPBRK_C
394 IFUNC_IMPL_ADD (array, i, strpbrk, 1, STRPBRK_C)
395 # endif
397 #endif /* HAVE_STRPBRK_IFUNC */
399 #if HAVE_STRCSPN_IFUNC
400 IFUNC_IMPL (i, name, strcspn,
401 # if HAVE_STRCSPN_Z13
402 IFUNC_IMPL_ADD (array, i, strcspn,
403 dl_hwcap & HWCAP_S390_VX, STRCSPN_Z13)
404 # endif
405 # if HAVE_STRCSPN_C
406 IFUNC_IMPL_ADD (array, i, strcspn, 1, STRCSPN_C)
407 # endif
409 #endif /* HAVE_STRCSPN_IFUNC */
411 #if HAVE_MEMCHR_IFUNC
412 IFUNC_IMPL (i, name, memchr,
413 # if HAVE_MEMCHR_Z13
414 IFUNC_IMPL_ADD (array, i, memchr,
415 dl_hwcap & HWCAP_S390_VX, MEMCHR_Z13)
416 # endif
417 # if HAVE_MEMCHR_Z900_G5
418 IFUNC_IMPL_ADD (array, i, memchr, 1, MEMCHR_Z900_G5)
419 # endif
421 #endif /* HAVE_MEMCHR_IFUNC */
423 #if HAVE_RAWMEMCHR_IFUNC
424 IFUNC_IMPL (i, name, rawmemchr,
425 # if HAVE_RAWMEMCHR_Z13
426 IFUNC_IMPL_ADD (array, i, rawmemchr,
427 dl_hwcap & HWCAP_S390_VX, RAWMEMCHR_Z13)
428 # endif
429 # if HAVE_RAWMEMCHR_C
430 IFUNC_IMPL_ADD (array, i, rawmemchr, 1, RAWMEMCHR_C)
431 # endif
433 #endif /* HAVE_RAWMEMCHR_IFUNC */
435 #if HAVE_MEMCCPY_IFUNC
436 IFUNC_IMPL (i, name, memccpy,
437 # if HAVE_MEMCCPY_Z13
438 IFUNC_IMPL_ADD (array, i, memccpy,
439 dl_hwcap & HWCAP_S390_VX, MEMCCPY_Z13)
440 # endif
441 # if HAVE_MEMCCPY_C
442 IFUNC_IMPL_ADD (array, i, memccpy, 1, MEMCCPY_C)
443 # endif
445 #endif /* HAVE_MEMCCPY_IFUNC */
447 #if HAVE_MEMRCHR_IFUNC
448 IFUNC_IMPL (i, name, memrchr,
449 # if HAVE_MEMRCHR_Z13
450 IFUNC_IMPL_ADD (array, i, memrchr,
451 dl_hwcap & HWCAP_S390_VX, MEMRCHR_Z13)
452 # endif
453 # if HAVE_MEMRCHR_C
454 IFUNC_IMPL_ADD (array, i, memrchr, 1, MEMRCHR_C)
455 # endif
457 #endif /* HAVE_MEMRCHR_IFUNC */
459 #if HAVE_WCSLEN_IFUNC
460 IFUNC_IMPL (i, name, wcslen,
461 # if HAVE_WCSLEN_Z13
462 IFUNC_IMPL_ADD (array, i, wcslen,
463 dl_hwcap & HWCAP_S390_VX, WCSLEN_Z13)
464 # endif
465 # if HAVE_WCSLEN_C
466 IFUNC_IMPL_ADD (array, i, wcslen, 1, WCSLEN_C)
467 # endif
469 #endif /* HAVE_WCSLEN_IFUNC */
471 #if HAVE_WCSNLEN_IFUNC
472 IFUNC_IMPL (i, name, wcsnlen,
473 # if HAVE_WCSNLEN_Z13
474 IFUNC_IMPL_ADD (array, i, wcsnlen,
475 dl_hwcap & HWCAP_S390_VX, WCSNLEN_Z13)
476 # endif
477 # if HAVE_WCSNLEN_C
478 IFUNC_IMPL_ADD (array, i, wcsnlen, 1, WCSNLEN_C)
479 # endif
481 #endif /* HAVE_WCSNLEN_IFUNC */
483 #if HAVE_WCSCPY_IFUNC
484 IFUNC_IMPL (i, name, wcscpy,
485 # if HAVE_WCSCPY_Z13
486 IFUNC_IMPL_ADD (array, i, wcscpy,
487 dl_hwcap & HWCAP_S390_VX, WCSCPY_Z13)
488 # endif
489 # if HAVE_WCSCPY_C
490 IFUNC_IMPL_ADD (array, i, wcscpy, 1, WCSCPY_C)
491 # endif
493 #endif /* HAVE_WCSCPY_IFUNC */
495 #if HAVE_WCPCPY_IFUNC
496 IFUNC_IMPL (i, name, wcpcpy,
497 # if HAVE_WCPCPY_Z13
498 IFUNC_IMPL_ADD (array, i, wcpcpy,
499 dl_hwcap & HWCAP_S390_VX, WCPCPY_Z13)
500 # endif
501 # if HAVE_WCPCPY_C
502 IFUNC_IMPL_ADD (array, i, wcpcpy, 1, WCPCPY_C)
503 # endif
505 #endif /* HAVE_WCPCPY_IFUNC */
507 #if HAVE_WCSNCPY_IFUNC
508 IFUNC_IMPL (i, name, wcsncpy,
509 # if HAVE_WCSNCPY_Z13
510 IFUNC_IMPL_ADD (array, i, wcsncpy,
511 dl_hwcap & HWCAP_S390_VX, WCSNCPY_Z13)
512 # endif
513 # if HAVE_WCSNCPY_C
514 IFUNC_IMPL_ADD (array, i, wcsncpy, 1, WCSNCPY_C)
515 # endif
517 #endif /* HAVE_WCSNCPY_IFUNC */
519 #if HAVE_WCPNCPY_IFUNC
520 IFUNC_IMPL (i, name, wcpncpy,
521 # if HAVE_WCPNCPY_Z13
522 IFUNC_IMPL_ADD (array, i, wcpncpy,
523 dl_hwcap & HWCAP_S390_VX, WCPNCPY_Z13)
524 # endif
525 # if HAVE_WCPNCPY_C
526 IFUNC_IMPL_ADD (array, i, wcpncpy, 1, WCPNCPY_C)
527 # endif
529 #endif /* HAVE_WCPNCPY_IFUNC */
531 #if HAVE_WCSCAT_IFUNC
532 IFUNC_IMPL (i, name, wcscat,
533 # if HAVE_WCSCAT_Z13
534 IFUNC_IMPL_ADD (array, i, wcscat,
535 dl_hwcap & HWCAP_S390_VX, WCSCAT_Z13)
536 # endif
537 # if HAVE_WCSCAT_C
538 IFUNC_IMPL_ADD (array, i, wcscat, 1, WCSCAT_C)
539 # endif
541 #endif /* HAVE_WCSCAT_IFUNC */
543 #if HAVE_WCSNCAT_IFUNC
544 IFUNC_IMPL (i, name, wcsncat,
545 # if HAVE_WCSNCAT_Z13
546 IFUNC_IMPL_ADD (array, i, wcsncat,
547 dl_hwcap & HWCAP_S390_VX, WCSNCAT_Z13)
548 # endif
549 # if HAVE_WCSNCAT_C
550 IFUNC_IMPL_ADD (array, i, wcsncat, 1, WCSNCAT_C)
551 # endif
553 #endif /* HAVE_WCSNCAT_IFUNC */
555 #if HAVE_WCSCMP_IFUNC
556 IFUNC_IMPL (i, name, wcscmp,
557 # if HAVE_WCSCMP_Z13
558 IFUNC_IMPL_ADD (array, i, wcscmp,
559 dl_hwcap & HWCAP_S390_VX, WCSCMP_Z13)
560 # endif
561 # if HAVE_WCSCMP_C
562 IFUNC_IMPL_ADD (array, i, wcscmp, 1, WCSCMP_C)
563 # endif
565 #endif /* HAVE_WCSCMP_IFUNC */
567 #if HAVE_WCSNCMP_IFUNC
568 IFUNC_IMPL (i, name, wcsncmp,
569 # if HAVE_WCSNCMP_Z13
570 IFUNC_IMPL_ADD (array, i, wcsncmp,
571 dl_hwcap & HWCAP_S390_VX, WCSNCMP_Z13)
572 # endif
573 # if HAVE_WCSNCMP_C
574 IFUNC_IMPL_ADD (array, i, wcsncmp, 1, WCSNCMP_C)
575 # endif
577 #endif /* HAVE_WCSNCMP_IFUNC */
579 #if HAVE_WCSCHR_IFUNC
580 IFUNC_IMPL (i, name, wcschr,
581 # if HAVE_WCSCHR_Z13
582 IFUNC_IMPL_ADD (array, i, wcschr,
583 dl_hwcap & HWCAP_S390_VX, WCSCHR_Z13)
584 # endif
585 # if HAVE_WCSCHR_C
586 IFUNC_IMPL_ADD (array, i, wcschr, 1, WCSCHR_C)
587 # endif
589 #endif /* HAVE_WCSCHR_IFUNC */
591 #if HAVE_WCSCHRNUL_IFUNC
592 IFUNC_IMPL (i, name, wcschrnul,
593 # if HAVE_WCSCHRNUL_Z13
594 IFUNC_IMPL_ADD (array, i, wcschrnul,
595 dl_hwcap & HWCAP_S390_VX, WCSCHRNUL_Z13)
596 # endif
597 # if HAVE_WCSCHRNUL_C
598 IFUNC_IMPL_ADD (array, i, wcschrnul, 1, WCSCHRNUL_C)
599 # endif
601 #endif /* HAVE_WCSCHRNUL_IFUNC */
603 #if HAVE_WCSRCHR_IFUNC
604 IFUNC_IMPL (i, name, wcsrchr,
605 # if HAVE_WCSRCHR_Z13
606 IFUNC_IMPL_ADD (array, i, wcsrchr,
607 dl_hwcap & HWCAP_S390_VX, WCSRCHR_Z13)
608 # endif
609 # if HAVE_WCSRCHR_C
610 IFUNC_IMPL_ADD (array, i, wcsrchr, 1, WCSRCHR_C)
611 # endif
613 #endif /* HAVE_WCSRCHR_IFUNC */
615 #if HAVE_WCSSPN_IFUNC
616 IFUNC_IMPL (i, name, wcsspn,
617 # if HAVE_WCSSPN_Z13
618 IFUNC_IMPL_ADD (array, i, wcsspn,
619 dl_hwcap & HWCAP_S390_VX, WCSSPN_Z13)
620 # endif
621 # if HAVE_WCSSPN_C
622 IFUNC_IMPL_ADD (array, i, wcsspn, 1, WCSSPN_C)
623 # endif
625 #endif /* HAVE_WCSSPN_IFUNC */
627 #if HAVE_WCSPBRK_IFUNC
628 IFUNC_IMPL (i, name, wcspbrk,
629 # if HAVE_WCSPBRK_Z13
630 IFUNC_IMPL_ADD (array, i, wcspbrk,
631 dl_hwcap & HWCAP_S390_VX, WCSPBRK_Z13)
632 # endif
633 # if HAVE_WCSPBRK_C
634 IFUNC_IMPL_ADD (array, i, wcspbrk, 1, WCSPBRK_C)
635 # endif
637 #endif /* HAVE_WCSPBRK_IFUNC */
639 #if HAVE_WCSCSPN_IFUNC
640 IFUNC_IMPL (i, name, wcscspn,
641 # if HAVE_WCSCSPN_Z13
642 IFUNC_IMPL_ADD (array, i, wcscspn,
643 dl_hwcap & HWCAP_S390_VX, WCSCSPN_Z13)
644 # endif
645 # if HAVE_WCSCSPN_C
646 IFUNC_IMPL_ADD (array, i, wcscspn, 1, WCSCSPN_C)
647 # endif
649 #endif /* HAVE_WCSCSPN_IFUNC */
651 #if HAVE_WMEMCHR_IFUNC
652 IFUNC_IMPL (i, name, wmemchr,
653 # if HAVE_WMEMCHR_Z13
654 IFUNC_IMPL_ADD (array, i, wmemchr,
655 dl_hwcap & HWCAP_S390_VX, WMEMCHR_Z13)
656 # endif
657 # if HAVE_WMEMCHR_C
658 IFUNC_IMPL_ADD (array, i, wmemchr, 1, WMEMCHR_C)
659 # endif
661 #endif /* HAVE_WMEMCHR_IFUNC */
663 #if HAVE_WMEMSET_IFUNC
664 IFUNC_IMPL (i, name, wmemset,
665 # if HAVE_WMEMSET_Z13
666 IFUNC_IMPL_ADD (array, i, wmemset,
667 dl_hwcap & HWCAP_S390_VX, WMEMSET_Z13)
668 # endif
669 # if HAVE_WMEMSET_C
670 IFUNC_IMPL_ADD (array, i, wmemset, 1, WMEMSET_C)
671 # endif
673 #endif /* HAVE_WMEMSET_IFUNC */
675 #if HAVE_WMEMCMP_IFUNC
676 IFUNC_IMPL (i, name, wmemcmp,
677 # if HAVE_WMEMCMP_Z13
678 IFUNC_IMPL_ADD (array, i, wmemcmp,
679 dl_hwcap & HWCAP_S390_VX, WMEMCMP_Z13)
680 # endif
681 # if HAVE_WMEMCMP_C
682 IFUNC_IMPL_ADD (array, i, wmemcmp, 1, WMEMCMP_C)
683 # endif
685 #endif /* HAVE_WMEMCMP_IFUNC */
687 return i;