1/* Enumerate available IFUNC implementations of a function. s390/s390x version.
2 Copyright (C) 2015-2024 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
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.
9
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.
14
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/>. */
18
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>
69
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. */
73size_t
74__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
75 size_t max)
76{
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;
80
81 /* Get hardware information. */
82 const struct cpu_features *features = &GLRO(dl_s390_cpu_features);
83 unsigned long int dl_hwcap __attribute__ ((unused)) = features->hwcap;
84 const unsigned long long * __attribute__((unused)) stfle_bits
85 = features->stfle_bits;
86
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
100 )
101#endif /* HAVE_MEMSET_IFUNC */
102
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
116 )
117#endif /* HAVE_MEMCMP_IFUNC */
118
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
132 )
133
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
146 )
147#endif /* HAVE_MEMCPY_IFUNC */
148
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
164 )
165#endif /* HAVE_MEMMOVE_IFUNC */
166
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
180 )
181#endif /* HAVE_STRSTR_IFUNC */
182
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
196 )
197#endif /* HAVE_MEMMEM_IFUNC */
198
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
208 )
209#endif /* HAVE_STRLEN_IFUNC */
210
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
220 )
221#endif /* HAVE_STRNLEN_IFUNC */
222
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
232 )
233#endif /* HAVE_STRCPY_IFUNC */
234
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
244 )
245#endif /* HAVE_STPCPY_IFUNC */
246
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
256 )
257#endif /* HAVE_STRNCPY_IFUNC */
258
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
268 )
269#endif /* HAVE_STPNCPY_IFUNC */
270
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
280 )
281#endif /* HAVE_STRCAT_IFUNC */
282
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
292 )
293#endif /* HAVE_STRNCAT_IFUNC */
294
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
304 )
305#endif /* HAVE_STRCMP_IFUNC */
306
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
316 )
317#endif /* HAVE_STRNCMP_IFUNC */
318
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
328 )
329#endif /* HAVE_STRCHR_IFUNC */
330
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
340 )
341#endif /* HAVE_STRCHRNUL_IFUNC */
342
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
352 )
353#endif /* HAVE_STRRCHR_IFUNC */
354
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
364 )
365#endif /* HAVE_STRSPN_IFUNC */
366
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
376 )
377#endif /* HAVE_STRPBRK_IFUNC */
378
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
388 )
389#endif /* HAVE_STRCSPN_IFUNC */
390
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
400 )
401#endif /* HAVE_MEMCHR_IFUNC */
402
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
412 )
413#endif /* HAVE_RAWMEMCHR_IFUNC */
414
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
424 )
425#endif /* HAVE_MEMCCPY_IFUNC */
426
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
436 )
437#endif /* HAVE_MEMRCHR_IFUNC */
438
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
448 )
449#endif /* HAVE_WCSLEN_IFUNC */
450
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
460 )
461#endif /* HAVE_WCSNLEN_IFUNC */
462
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
472 )
473#endif /* HAVE_WCSCPY_IFUNC */
474
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
484 )
485#endif /* HAVE_WCPCPY_IFUNC */
486
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
496 )
497#endif /* HAVE_WCSNCPY_IFUNC */
498
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
508 )
509#endif /* HAVE_WCPNCPY_IFUNC */
510
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
520 )
521#endif /* HAVE_WCSCAT_IFUNC */
522
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
532 )
533#endif /* HAVE_WCSNCAT_IFUNC */
534
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
544 )
545#endif /* HAVE_WCSCMP_IFUNC */
546
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
556 )
557#endif /* HAVE_WCSNCMP_IFUNC */
558
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
568 )
569#endif /* HAVE_WCSCHR_IFUNC */
570
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
580 )
581#endif /* HAVE_WCSCHRNUL_IFUNC */
582
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
592 )
593#endif /* HAVE_WCSRCHR_IFUNC */
594
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
604 )
605#endif /* HAVE_WCSSPN_IFUNC */
606
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
616 )
617#endif /* HAVE_WCSPBRK_IFUNC */
618
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
628 )
629#endif /* HAVE_WCSCSPN_IFUNC */
630
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
640 )
641#endif /* HAVE_WMEMCHR_IFUNC */
642
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
652 )
653#endif /* HAVE_WMEMSET_IFUNC */
654
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
664 )
665#endif /* HAVE_WMEMCMP_IFUNC */
666
667 return 0;
668}
669

source code of glibc/sysdeps/s390/multiarch/ifunc-impl-list.c