S390: Influence hwcaps/stfle via GLIBC_TUNABLES.
[glibc.git] / sysdeps / s390 / multiarch / ifunc-impl-list.c
blob1532258af2c3efe0ec04e61d5da5ade3a4dab67f
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/>. */
19 #include <assert.h>
20 #include <string.h>
21 #include <wchar.h>
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
72 entries. */
73 size_t
74 __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
75 size_t max)
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;
87 #if HAVE_MEMSET_IFUNC
88 IFUNC_IMPL (i, name, memset,
89 # if HAVE_MEMSET_Z196
90 IFUNC_IMPL_ADD (array, i, memset,
91 S390_IS_Z196 (stfle_bits), MEMSET_Z196)
92 # endif
93 # if HAVE_MEMSET_Z10
94 IFUNC_IMPL_ADD (array, i, memset,
95 S390_IS_Z10 (stfle_bits), MEMSET_Z10)
96 # endif
97 # if HAVE_MEMSET_Z900_G5
98 IFUNC_IMPL_ADD (array, i, memset, 1, MEMSET_Z900_G5)
99 # endif
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)
108 # endif
109 # if HAVE_MEMCMP_Z10
110 IFUNC_IMPL_ADD (array, i, memcmp,
111 S390_IS_Z10 (stfle_bits), MEMCMP_Z10)
112 # endif
113 # if HAVE_MEMCMP_Z900_G5
114 IFUNC_IMPL_ADD (array, i, memcmp, 1, MEMCMP_Z900_G5)
115 # endif
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)
124 # endif
125 # if HAVE_MEMCPY_Z10
126 IFUNC_IMPL_ADD (array, i, memcpy,
127 S390_IS_Z10 (stfle_bits), MEMCPY_Z10)
128 # endif
129 # if HAVE_MEMCPY_Z900_G5
130 IFUNC_IMPL_ADD (array, i, memcpy, 1, MEMCPY_Z900_G5)
131 # endif
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)
138 # endif
139 # if HAVE_MEMCPY_Z10
140 IFUNC_IMPL_ADD (array, i, mempcpy,
141 S390_IS_Z10 (stfle_bits), MEMPCPY_Z10)
142 # endif
143 # if HAVE_MEMCPY_Z900_G5
144 IFUNC_IMPL_ADD (array, i, mempcpy, 1, MEMPCPY_Z900_G5)
145 # endif
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)),
155 MEMMOVE_ARCH13)
156 # endif
157 # if HAVE_MEMMOVE_Z13
158 IFUNC_IMPL_ADD (array, i, memmove,
159 dl_hwcap & HWCAP_S390_VX, MEMMOVE_Z13)
160 # endif
161 # if HAVE_MEMMOVE_C
162 IFUNC_IMPL_ADD (array, i, memmove, 1, MEMMOVE_C)
163 # endif
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)
172 # endif
173 # if HAVE_STRSTR_Z13
174 IFUNC_IMPL_ADD (array, i, strstr,
175 dl_hwcap & HWCAP_S390_VX, STRSTR_Z13)
176 # endif
177 # if HAVE_STRSTR_C
178 IFUNC_IMPL_ADD (array, i, strstr, 1, STRSTR_C)
179 # endif
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)
188 # endif
189 # if HAVE_MEMMEM_Z13
190 IFUNC_IMPL_ADD (array, i, memmem,
191 dl_hwcap & HWCAP_S390_VX, MEMMEM_Z13)
192 # endif
193 # if HAVE_MEMMEM_C
194 IFUNC_IMPL_ADD (array, i, memmem, 1, MEMMEM_C)
195 # endif
197 #endif /* HAVE_MEMMEM_IFUNC */
199 #if HAVE_STRLEN_IFUNC
200 IFUNC_IMPL (i, name, strlen,
201 # if HAVE_STRLEN_Z13
202 IFUNC_IMPL_ADD (array, i, strlen,
203 dl_hwcap & HWCAP_S390_VX, STRLEN_Z13)
204 # endif
205 # if HAVE_STRLEN_C
206 IFUNC_IMPL_ADD (array, i, strlen, 1, STRLEN_C)
207 # endif
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)
216 # endif
217 # if HAVE_STRNLEN_C
218 IFUNC_IMPL_ADD (array, i, strnlen, 1, STRNLEN_C)
219 # endif
221 #endif /* HAVE_STRNLEN_IFUNC */
223 #if HAVE_STRCPY_IFUNC
224 IFUNC_IMPL (i, name, strcpy,
225 # if HAVE_STRCPY_Z13
226 IFUNC_IMPL_ADD (array, i, strcpy,
227 dl_hwcap & HWCAP_S390_VX, STRCPY_Z13)
228 # endif
229 # if HAVE_STRCPY_Z900_G5
230 IFUNC_IMPL_ADD (array, i, strcpy, 1, STRCPY_Z900_G5)
231 # endif
233 #endif /* HAVE_STRCPY_IFUNC */
235 #if HAVE_STPCPY_IFUNC
236 IFUNC_IMPL (i, name, stpcpy,
237 # if HAVE_STPCPY_Z13
238 IFUNC_IMPL_ADD (array, i, stpcpy,
239 dl_hwcap & HWCAP_S390_VX, STPCPY_Z13)
240 # endif
241 # if HAVE_STPCPY_C
242 IFUNC_IMPL_ADD (array, i, stpcpy, 1, STPCPY_C)
243 # endif
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)
252 # endif
253 # if HAVE_STRNCPY_Z900_G5
254 IFUNC_IMPL_ADD (array, i, strncpy, 1, STRNCPY_Z900_G5)
255 # endif
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)
264 # endif
265 # if HAVE_STPNCPY_C
266 IFUNC_IMPL_ADD (array, i, stpncpy, 1, STPNCPY_C)
267 # endif
269 #endif /* HAVE_STPNCPY_IFUNC */
271 #if HAVE_STRCAT_IFUNC
272 IFUNC_IMPL (i, name, strcat,
273 # if HAVE_STRCAT_Z13
274 IFUNC_IMPL_ADD (array, i, strcat,
275 dl_hwcap & HWCAP_S390_VX, STRCAT_Z13)
276 # endif
277 # if HAVE_STRCAT_C
278 IFUNC_IMPL_ADD (array, i, strcat, 1, STRCAT_C)
279 # endif
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)
288 # endif
289 # if HAVE_STRNCAT_C
290 IFUNC_IMPL_ADD (array, i, strncat, 1, STRNCAT_C)
291 # endif
293 #endif /* HAVE_STRNCAT_IFUNC */
295 #if HAVE_STRCMP_IFUNC
296 IFUNC_IMPL (i, name, strcmp,
297 # if HAVE_STRCMP_Z13
298 IFUNC_IMPL_ADD (array, i, strcmp,
299 dl_hwcap & HWCAP_S390_VX, STRCMP_Z13)
300 # endif
301 # if HAVE_STRCMP_Z900_G5
302 IFUNC_IMPL_ADD (array, i, strcmp, 1, STRCMP_Z900_G5)
303 # endif
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)
312 # endif
313 # if HAVE_STRNCMP_C
314 IFUNC_IMPL_ADD (array, i, strncmp, 1, STRNCMP_C)
315 # endif
317 #endif /* HAVE_STRNCMP_IFUNC */
319 #if HAVE_STRCHR_IFUNC
320 IFUNC_IMPL (i, name, strchr,
321 # if HAVE_STRCHR_Z13
322 IFUNC_IMPL_ADD (array, i, strchr,
323 dl_hwcap & HWCAP_S390_VX, STRCHR_Z13)
324 # endif
325 # if HAVE_STRCHR_C
326 IFUNC_IMPL_ADD (array, i, strchr, 1, STRCHR_C)
327 # endif
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)
336 # endif
337 # if HAVE_STRCHRNUL_C
338 IFUNC_IMPL_ADD (array, i, strchrnul, 1, STRCHRNUL_C)
339 # endif
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)
348 # endif
349 # if HAVE_STRRCHR_C
350 IFUNC_IMPL_ADD (array, i, strrchr, 1, STRRCHR_C)
351 # endif
353 #endif /* HAVE_STRRCHR_IFUNC */
355 #if HAVE_STRSPN_IFUNC
356 IFUNC_IMPL (i, name, strspn,
357 # if HAVE_STRSPN_Z13
358 IFUNC_IMPL_ADD (array, i, strspn,
359 dl_hwcap & HWCAP_S390_VX, STRSPN_Z13)
360 # endif
361 # if HAVE_STRSPN_C
362 IFUNC_IMPL_ADD (array, i, strspn, 1, STRSPN_C)
363 # endif
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)
372 # endif
373 # if HAVE_STRPBRK_C
374 IFUNC_IMPL_ADD (array, i, strpbrk, 1, STRPBRK_C)
375 # endif
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)
384 # endif
385 # if HAVE_STRCSPN_C
386 IFUNC_IMPL_ADD (array, i, strcspn, 1, STRCSPN_C)
387 # endif
389 #endif /* HAVE_STRCSPN_IFUNC */
391 #if HAVE_MEMCHR_IFUNC
392 IFUNC_IMPL (i, name, memchr,
393 # if HAVE_MEMCHR_Z13
394 IFUNC_IMPL_ADD (array, i, memchr,
395 dl_hwcap & HWCAP_S390_VX, MEMCHR_Z13)
396 # endif
397 # if HAVE_MEMCHR_Z900_G5
398 IFUNC_IMPL_ADD (array, i, memchr, 1, MEMCHR_Z900_G5)
399 # endif
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)
408 # endif
409 # if HAVE_RAWMEMCHR_C
410 IFUNC_IMPL_ADD (array, i, rawmemchr, 1, RAWMEMCHR_C)
411 # endif
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)
420 # endif
421 # if HAVE_MEMCCPY_C
422 IFUNC_IMPL_ADD (array, i, memccpy, 1, MEMCCPY_C)
423 # endif
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)
432 # endif
433 # if HAVE_MEMRCHR_C
434 IFUNC_IMPL_ADD (array, i, memrchr, 1, MEMRCHR_C)
435 # endif
437 #endif /* HAVE_MEMRCHR_IFUNC */
439 #if HAVE_WCSLEN_IFUNC
440 IFUNC_IMPL (i, name, wcslen,
441 # if HAVE_WCSLEN_Z13
442 IFUNC_IMPL_ADD (array, i, wcslen,
443 dl_hwcap & HWCAP_S390_VX, WCSLEN_Z13)
444 # endif
445 # if HAVE_WCSLEN_C
446 IFUNC_IMPL_ADD (array, i, wcslen, 1, WCSLEN_C)
447 # endif
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)
456 # endif
457 # if HAVE_WCSNLEN_C
458 IFUNC_IMPL_ADD (array, i, wcsnlen, 1, WCSNLEN_C)
459 # endif
461 #endif /* HAVE_WCSNLEN_IFUNC */
463 #if HAVE_WCSCPY_IFUNC
464 IFUNC_IMPL (i, name, wcscpy,
465 # if HAVE_WCSCPY_Z13
466 IFUNC_IMPL_ADD (array, i, wcscpy,
467 dl_hwcap & HWCAP_S390_VX, WCSCPY_Z13)
468 # endif
469 # if HAVE_WCSCPY_C
470 IFUNC_IMPL_ADD (array, i, wcscpy, 1, WCSCPY_C)
471 # endif
473 #endif /* HAVE_WCSCPY_IFUNC */
475 #if HAVE_WCPCPY_IFUNC
476 IFUNC_IMPL (i, name, wcpcpy,
477 # if HAVE_WCPCPY_Z13
478 IFUNC_IMPL_ADD (array, i, wcpcpy,
479 dl_hwcap & HWCAP_S390_VX, WCPCPY_Z13)
480 # endif
481 # if HAVE_WCPCPY_C
482 IFUNC_IMPL_ADD (array, i, wcpcpy, 1, WCPCPY_C)
483 # endif
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)
492 # endif
493 # if HAVE_WCSNCPY_C
494 IFUNC_IMPL_ADD (array, i, wcsncpy, 1, WCSNCPY_C)
495 # endif
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)
504 # endif
505 # if HAVE_WCPNCPY_C
506 IFUNC_IMPL_ADD (array, i, wcpncpy, 1, WCPNCPY_C)
507 # endif
509 #endif /* HAVE_WCPNCPY_IFUNC */
511 #if HAVE_WCSCAT_IFUNC
512 IFUNC_IMPL (i, name, wcscat,
513 # if HAVE_WCSCAT_Z13
514 IFUNC_IMPL_ADD (array, i, wcscat,
515 dl_hwcap & HWCAP_S390_VX, WCSCAT_Z13)
516 # endif
517 # if HAVE_WCSCAT_C
518 IFUNC_IMPL_ADD (array, i, wcscat, 1, WCSCAT_C)
519 # endif
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)
528 # endif
529 # if HAVE_WCSNCAT_C
530 IFUNC_IMPL_ADD (array, i, wcsncat, 1, WCSNCAT_C)
531 # endif
533 #endif /* HAVE_WCSNCAT_IFUNC */
535 #if HAVE_WCSCMP_IFUNC
536 IFUNC_IMPL (i, name, wcscmp,
537 # if HAVE_WCSCMP_Z13
538 IFUNC_IMPL_ADD (array, i, wcscmp,
539 dl_hwcap & HWCAP_S390_VX, WCSCMP_Z13)
540 # endif
541 # if HAVE_WCSCMP_C
542 IFUNC_IMPL_ADD (array, i, wcscmp, 1, WCSCMP_C)
543 # endif
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)
552 # endif
553 # if HAVE_WCSNCMP_C
554 IFUNC_IMPL_ADD (array, i, wcsncmp, 1, WCSNCMP_C)
555 # endif
557 #endif /* HAVE_WCSNCMP_IFUNC */
559 #if HAVE_WCSCHR_IFUNC
560 IFUNC_IMPL (i, name, wcschr,
561 # if HAVE_WCSCHR_Z13
562 IFUNC_IMPL_ADD (array, i, wcschr,
563 dl_hwcap & HWCAP_S390_VX, WCSCHR_Z13)
564 # endif
565 # if HAVE_WCSCHR_C
566 IFUNC_IMPL_ADD (array, i, wcschr, 1, WCSCHR_C)
567 # endif
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)
576 # endif
577 # if HAVE_WCSCHRNUL_C
578 IFUNC_IMPL_ADD (array, i, wcschrnul, 1, WCSCHRNUL_C)
579 # endif
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)
588 # endif
589 # if HAVE_WCSRCHR_C
590 IFUNC_IMPL_ADD (array, i, wcsrchr, 1, WCSRCHR_C)
591 # endif
593 #endif /* HAVE_WCSRCHR_IFUNC */
595 #if HAVE_WCSSPN_IFUNC
596 IFUNC_IMPL (i, name, wcsspn,
597 # if HAVE_WCSSPN_Z13
598 IFUNC_IMPL_ADD (array, i, wcsspn,
599 dl_hwcap & HWCAP_S390_VX, WCSSPN_Z13)
600 # endif
601 # if HAVE_WCSSPN_C
602 IFUNC_IMPL_ADD (array, i, wcsspn, 1, WCSSPN_C)
603 # endif
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)
612 # endif
613 # if HAVE_WCSPBRK_C
614 IFUNC_IMPL_ADD (array, i, wcspbrk, 1, WCSPBRK_C)
615 # endif
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)
624 # endif
625 # if HAVE_WCSCSPN_C
626 IFUNC_IMPL_ADD (array, i, wcscspn, 1, WCSCSPN_C)
627 # endif
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)
636 # endif
637 # if HAVE_WMEMCHR_C
638 IFUNC_IMPL_ADD (array, i, wmemchr, 1, WMEMCHR_C)
639 # endif
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)
648 # endif
649 # if HAVE_WMEMSET_C
650 IFUNC_IMPL_ADD (array, i, wmemset, 1, WMEMSET_C)
651 # endif
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)
660 # endif
661 # if HAVE_WMEMCMP_C
662 IFUNC_IMPL_ADD (array, i, wmemcmp, 1, WMEMCMP_C)
663 # endif
665 #endif /* HAVE_WMEMCMP_IFUNC */
667 return 0;