]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/s390/multiarch/ifunc-impl-list.c
S390: Add arch13 strstr ifunc variant.
[thirdparty/glibc.git] / sysdeps / s390 / multiarch / ifunc-impl-list.c
CommitLineData
31556246 1/* Enumerate available IFUNC implementations of a function. s390/s390x version.
04277e02 2 Copyright (C) 2015-2019 Free Software Foundation, Inc.
31556246
SL
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 <http://www.gnu.org/licenses/>. */
18
19#include <assert.h>
20#include <string.h>
9472f35a 21#include <wchar.h>
31556246
SL
22#include <ifunc-impl-list.h>
23#include <ifunc-resolve.h>
712a254a 24#include <ifunc-memset.h>
b7e024a8 25#include <ifunc-memcmp.h>
18eb862d 26#include <ifunc-memcpy.h>
8c25dddd 27#include <ifunc-strstr.h>
d2c4c403 28#include <ifunc-memmem.h>
ff3ca374 29#include <ifunc-strlen.h>
de10e44d 30#include <ifunc-strnlen.h>
914a4e05 31#include <ifunc-strcpy.h>
97044931 32#include <ifunc-stpcpy.h>
d1bdbf38 33#include <ifunc-strncpy.h>
25218822 34#include <ifunc-stpncpy.h>
8e5a0afb 35#include <ifunc-strcat.h>
b9353351 36#include <ifunc-strncat.h>
cdab85fe 37#include <ifunc-strcmp.h>
316b8842 38#include <ifunc-strncmp.h>
32f12653 39#include <ifunc-strchr.h>
a1361e65 40#include <ifunc-strchrnul.h>
26ea8760 41#include <ifunc-strrchr.h>
483fc569 42#include <ifunc-strspn.h>
572cca93 43#include <ifunc-strpbrk.h>
5d2ec20a 44#include <ifunc-strcspn.h>
581a051c 45#include <ifunc-memchr.h>
4c7b3cec 46#include <ifunc-rawmemchr.h>
196655ba 47#include <ifunc-memccpy.h>
89bfcbdf 48#include <ifunc-memrchr.h>
2e02d0b7 49#include <ifunc-wcslen.h>
c7e7cd26 50#include <ifunc-wcsnlen.h>
804f2e5c 51#include <ifunc-wcscpy.h>
0582e428 52#include <ifunc-wcpcpy.h>
0966dd86 53#include <ifunc-wcsncpy.h>
c3081bcb 54#include <ifunc-wcpncpy.h>
3389cae4 55#include <ifunc-wcscat.h>
814a76e1 56#include <ifunc-wcsncat.h>
3459e23d 57#include <ifunc-wcscmp.h>
e9873e1d 58#include <ifunc-wcsncmp.h>
cf3ccc31 59#include <ifunc-wcschr.h>
c09c1b6f 60#include <ifunc-wcschrnul.h>
4753713a 61#include <ifunc-wcsrchr.h>
8507e831 62#include <ifunc-wcsspn.h>
8e87c1f6 63#include <ifunc-wcspbrk.h>
79b44cf6 64#include <ifunc-wcscspn.h>
c62534ae 65#include <ifunc-wmemchr.h>
d2a7436c 66#include <ifunc-wmemset.h>
25654a8c 67#include <ifunc-wmemcmp.h>
31556246
SL
68
69/* Maximum number of IFUNC implementations. */
70#define MAX_IFUNC 3
71
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. */
75size_t
76__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
77 size_t max)
78{
79 assert (max >= MAX_IFUNC);
80
81 size_t i = 0;
82
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))
89 {
90 S390_STORE_STFLE (stfle_bits);
91 }
92
712a254a 93#if HAVE_MEMSET_IFUNC
31556246 94 IFUNC_IMPL (i, name, memset,
712a254a 95# if HAVE_MEMSET_Z196
31556246 96 IFUNC_IMPL_ADD (array, i, memset,
712a254a
SL
97 S390_IS_Z196 (stfle_bits), MEMSET_Z196)
98# endif
99# if HAVE_MEMSET_Z10
31556246 100 IFUNC_IMPL_ADD (array, i, memset,
712a254a
SL
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)
07be3928
SL
105# endif
106 )
107
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)
712a254a
SL
120# endif
121 )
122#endif /* HAVE_MEMSET_IFUNC */
31556246 123
b7e024a8 124#if HAVE_MEMCMP_IFUNC
31556246 125 IFUNC_IMPL (i, name, memcmp,
b7e024a8 126# if HAVE_MEMCMP_Z196
31556246 127 IFUNC_IMPL_ADD (array, i, memcmp,
b7e024a8
SL
128 S390_IS_Z196 (stfle_bits), MEMCMP_Z196)
129# endif
130# if HAVE_MEMCMP_Z10
31556246 131 IFUNC_IMPL_ADD (array, i, memcmp,
b7e024a8
SL
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
137 )
138#endif /* HAVE_MEMCMP_IFUNC */
31556246 139
18eb862d 140#if HAVE_MEMCPY_IFUNC
31556246 141 IFUNC_IMPL (i, name, memcpy,
18eb862d 142# if HAVE_MEMCPY_Z196
31556246 143 IFUNC_IMPL_ADD (array, i, memcpy,
18eb862d
SL
144 S390_IS_Z196 (stfle_bits), MEMCPY_Z196)
145# endif
146# if HAVE_MEMCPY_Z10
31556246 147 IFUNC_IMPL_ADD (array, i, memcpy,
18eb862d
SL
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
153 )
31556246 154
4c011268 155 IFUNC_IMPL (i, name, mempcpy,
18eb862d 156# if HAVE_MEMCPY_Z196
4c011268 157 IFUNC_IMPL_ADD (array, i, mempcpy,
18eb862d
SL
158 S390_IS_Z196 (stfle_bits), MEMPCPY_Z196)
159# endif
160# if HAVE_MEMCPY_Z10
4c011268 161 IFUNC_IMPL_ADD (array, i, mempcpy,
18eb862d
SL
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
167 )
168#endif /* HAVE_MEMCPY_IFUNC */
31556246 169
cdd927d9
SL
170#if HAVE_MEMMOVE_IFUNC
171 IFUNC_IMPL (i, name, memmove,
96fbb9a3
SL
172# if HAVE_MEMMOVE_ARCH13
173 IFUNC_IMPL_ADD (array, i, memmove,
174 S390_IS_ARCH13_MIE3 (stfle_bits),
175 MEMMOVE_ARCH13)
176# endif
cdd927d9
SL
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
184 )
185#endif /* HAVE_MEMMOVE_IFUNC */
186
8c25dddd
SL
187#if HAVE_STRSTR_IFUNC
188 IFUNC_IMPL (i, name, strstr,
6f47401b
SL
189# if HAVE_STRSTR_ARCH13
190 IFUNC_IMPL_ADD (array, i, strstr,
191 dl_hwcap & HWCAP_S390_VXRS_EXT2, STRSTR_ARCH13)
192# endif
8c25dddd
SL
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
200 )
201#endif /* HAVE_STRSTR_IFUNC */
202
d2c4c403
SL
203#if HAVE_MEMMEM_IFUNC
204 IFUNC_IMPL (i, name, memmem,
205# if HAVE_MEMMEM_Z13
206 IFUNC_IMPL_ADD (array, i, memmem,
207 dl_hwcap & HWCAP_S390_VX, MEMMEM_Z13)
208# endif
209# if HAVE_MEMMEM_C
210 IFUNC_IMPL_ADD (array, i, memmem, 1, MEMMEM_C)
211# endif
212 )
213#endif /* HAVE_MEMMEM_IFUNC */
214
ff3ca374
SL
215#if HAVE_STRLEN_IFUNC
216 IFUNC_IMPL (i, name, strlen,
217# if HAVE_STRLEN_Z13
218 IFUNC_IMPL_ADD (array, i, strlen,
219 dl_hwcap & HWCAP_S390_VX, STRLEN_Z13)
220# endif
221# if HAVE_STRLEN_C
222 IFUNC_IMPL_ADD (array, i, strlen, 1, STRLEN_C)
223# endif
224 )
225#endif /* HAVE_STRLEN_IFUNC */
226
de10e44d
SL
227#if HAVE_STRNLEN_IFUNC
228 IFUNC_IMPL (i, name, strnlen,
229# if HAVE_STRNLEN_Z13
230 IFUNC_IMPL_ADD (array, i, strnlen,
231 dl_hwcap & HWCAP_S390_VX, STRNLEN_Z13)
232# endif
233# if HAVE_STRNLEN_C
234 IFUNC_IMPL_ADD (array, i, strnlen, 1, STRNLEN_C)
235# endif
236 )
237#endif /* HAVE_STRNLEN_IFUNC */
238
914a4e05
SL
239#if HAVE_STRCPY_IFUNC
240 IFUNC_IMPL (i, name, strcpy,
241# if HAVE_STRCPY_Z13
242 IFUNC_IMPL_ADD (array, i, strcpy,
243 dl_hwcap & HWCAP_S390_VX, STRCPY_Z13)
244# endif
245# if HAVE_STRCPY_Z900_G5
246 IFUNC_IMPL_ADD (array, i, strcpy, 1, STRCPY_Z900_G5)
247# endif
248 )
249#endif /* HAVE_STRCPY_IFUNC */
250
97044931
SL
251#if HAVE_STPCPY_IFUNC
252 IFUNC_IMPL (i, name, stpcpy,
253# if HAVE_STPCPY_Z13
254 IFUNC_IMPL_ADD (array, i, stpcpy,
255 dl_hwcap & HWCAP_S390_VX, STPCPY_Z13)
256# endif
257# if HAVE_STPCPY_C
258 IFUNC_IMPL_ADD (array, i, stpcpy, 1, STPCPY_C)
259# endif
260 )
261#endif /* HAVE_STPCPY_IFUNC */
262
d1bdbf38
SL
263#if HAVE_STRNCPY_IFUNC
264 IFUNC_IMPL (i, name, strncpy,
265# if HAVE_STRNCPY_Z13
266 IFUNC_IMPL_ADD (array, i, strncpy,
267 dl_hwcap & HWCAP_S390_VX, STRNCPY_Z13)
268# endif
269# if HAVE_STRNCPY_Z900_G5
270 IFUNC_IMPL_ADD (array, i, strncpy, 1, STRNCPY_Z900_G5)
271# endif
272 )
273#endif /* HAVE_STRNCPY_IFUNC */
274
25218822
SL
275#if HAVE_STPNCPY_IFUNC
276 IFUNC_IMPL (i, name, stpncpy,
277# if HAVE_STPNCPY_Z13
278 IFUNC_IMPL_ADD (array, i, stpncpy,
279 dl_hwcap & HWCAP_S390_VX, STPNCPY_Z13)
280# endif
281# if HAVE_STPNCPY_C
282 IFUNC_IMPL_ADD (array, i, stpncpy, 1, STPNCPY_C)
283# endif
284 )
285#endif /* HAVE_STPNCPY_IFUNC */
286
8e5a0afb
SL
287#if HAVE_STRCAT_IFUNC
288 IFUNC_IMPL (i, name, strcat,
289# if HAVE_STRCAT_Z13
290 IFUNC_IMPL_ADD (array, i, strcat,
291 dl_hwcap & HWCAP_S390_VX, STRCAT_Z13)
292# endif
293# if HAVE_STRCAT_C
294 IFUNC_IMPL_ADD (array, i, strcat, 1, STRCAT_C)
295# endif
296 )
297#endif /* HAVE_STRCAT_IFUNC */
d1bdbf38 298
b9353351
SL
299#if HAVE_STRNCAT_IFUNC
300 IFUNC_IMPL (i, name, strncat,
301# if HAVE_STRNCAT_Z13
302 IFUNC_IMPL_ADD (array, i, strncat,
303 dl_hwcap & HWCAP_S390_VX, STRNCAT_Z13)
304# endif
305# if HAVE_STRNCAT_C
306 IFUNC_IMPL_ADD (array, i, strncat, 1, STRNCAT_C)
307# endif
308 )
309#endif /* HAVE_STRNCAT_IFUNC */
310
cdab85fe
SL
311#if HAVE_STRCMP_IFUNC
312 IFUNC_IMPL (i, name, strcmp,
313# if HAVE_STRCMP_Z13
314 IFUNC_IMPL_ADD (array, i, strcmp,
315 dl_hwcap & HWCAP_S390_VX, STRCMP_Z13)
316# endif
317# if HAVE_STRCMP_Z900_G5
318 IFUNC_IMPL_ADD (array, i, strcmp, 1, STRCMP_Z900_G5)
319# endif
320 )
321#endif /* HAVE_STRCMP_IFUNC */
322
316b8842
SL
323#if HAVE_STRNCMP_IFUNC
324 IFUNC_IMPL (i, name, strncmp,
325# if HAVE_STRNCMP_Z13
326 IFUNC_IMPL_ADD (array, i, strncmp,
327 dl_hwcap & HWCAP_S390_VX, STRNCMP_Z13)
328# endif
329# if HAVE_STRNCMP_C
330 IFUNC_IMPL_ADD (array, i, strncmp, 1, STRNCMP_C)
331# endif
332 )
333#endif /* HAVE_STRNCMP_IFUNC */
334
32f12653
SL
335#if HAVE_STRCHR_IFUNC
336 IFUNC_IMPL (i, name, strchr,
337# if HAVE_STRCHR_Z13
338 IFUNC_IMPL_ADD (array, i, strchr,
339 dl_hwcap & HWCAP_S390_VX, STRCHR_Z13)
340# endif
341# if HAVE_STRCHR_C
342 IFUNC_IMPL_ADD (array, i, strchr, 1, STRCHR_C)
343# endif
344 )
345#endif /* HAVE_STRCHR_IFUNC */
346
a1361e65
SL
347#if HAVE_STRCHRNUL_IFUNC
348 IFUNC_IMPL (i, name, strchrnul,
349# if HAVE_STRCHRNUL_Z13
350 IFUNC_IMPL_ADD (array, i, strchrnul,
351 dl_hwcap & HWCAP_S390_VX, STRCHRNUL_Z13)
352# endif
353# if HAVE_STRCHRNUL_C
354 IFUNC_IMPL_ADD (array, i, strchrnul, 1, STRCHRNUL_C)
355# endif
356 )
357#endif /* HAVE_STRCHRNUL_IFUNC */
358
26ea8760
SL
359#if HAVE_STRRCHR_IFUNC
360 IFUNC_IMPL (i, name, strrchr,
361# if HAVE_STRRCHR_Z13
362 IFUNC_IMPL_ADD (array, i, strrchr,
363 dl_hwcap & HWCAP_S390_VX, STRRCHR_Z13)
364# endif
365# if HAVE_STRRCHR_C
366 IFUNC_IMPL_ADD (array, i, strrchr, 1, STRRCHR_C)
367# endif
368 )
369#endif /* HAVE_STRRCHR_IFUNC */
370
483fc569
SL
371#if HAVE_STRSPN_IFUNC
372 IFUNC_IMPL (i, name, strspn,
373# if HAVE_STRSPN_Z13
374 IFUNC_IMPL_ADD (array, i, strspn,
375 dl_hwcap & HWCAP_S390_VX, STRSPN_Z13)
376# endif
377# if HAVE_STRSPN_C
378 IFUNC_IMPL_ADD (array, i, strspn, 1, STRSPN_C)
379# endif
380 )
381#endif /* HAVE_STRSPN_IFUNC */
382
572cca93
SL
383#if HAVE_STRPBRK_IFUNC
384 IFUNC_IMPL (i, name, strpbrk,
385# if HAVE_STRPBRK_Z13
386 IFUNC_IMPL_ADD (array, i, strpbrk,
387 dl_hwcap & HWCAP_S390_VX, STRPBRK_Z13)
388# endif
389# if HAVE_STRPBRK_C
390 IFUNC_IMPL_ADD (array, i, strpbrk, 1, STRPBRK_C)
391# endif
392 )
393#endif /* HAVE_STRPBRK_IFUNC */
394
5d2ec20a
SL
395#if HAVE_STRCSPN_IFUNC
396 IFUNC_IMPL (i, name, strcspn,
397# if HAVE_STRCSPN_Z13
398 IFUNC_IMPL_ADD (array, i, strcspn,
399 dl_hwcap & HWCAP_S390_VX, STRCSPN_Z13)
400# endif
401# if HAVE_STRCSPN_C
402 IFUNC_IMPL_ADD (array, i, strcspn, 1, STRCSPN_C)
403# endif
404 )
405#endif /* HAVE_STRCSPN_IFUNC */
406
581a051c
SL
407#if HAVE_MEMCHR_IFUNC
408 IFUNC_IMPL (i, name, memchr,
409# if HAVE_MEMCHR_Z13
410 IFUNC_IMPL_ADD (array, i, memchr,
411 dl_hwcap & HWCAP_S390_VX, MEMCHR_Z13)
412# endif
413# if HAVE_MEMCHR_Z900_G5
414 IFUNC_IMPL_ADD (array, i, memchr, 1, MEMCHR_Z900_G5)
415# endif
416 )
417#endif /* HAVE_MEMCHR_IFUNC */
418
4c7b3cec
SL
419#if HAVE_RAWMEMCHR_IFUNC
420 IFUNC_IMPL (i, name, rawmemchr,
421# if HAVE_RAWMEMCHR_Z13
422 IFUNC_IMPL_ADD (array, i, rawmemchr,
423 dl_hwcap & HWCAP_S390_VX, RAWMEMCHR_Z13)
424# endif
425# if HAVE_RAWMEMCHR_C
426 IFUNC_IMPL_ADD (array, i, rawmemchr, 1, RAWMEMCHR_C)
427# endif
428 )
429#endif /* HAVE_RAWMEMCHR_IFUNC */
430
196655ba
SL
431#if HAVE_MEMCCPY_IFUNC
432 IFUNC_IMPL (i, name, memccpy,
433# if HAVE_MEMCCPY_Z13
434 IFUNC_IMPL_ADD (array, i, memccpy,
435 dl_hwcap & HWCAP_S390_VX, MEMCCPY_Z13)
436# endif
437# if HAVE_MEMCCPY_C
438 IFUNC_IMPL_ADD (array, i, memccpy, 1, MEMCCPY_C)
439# endif
440 )
441#endif /* HAVE_MEMCCPY_IFUNC */
442
89bfcbdf
SL
443#if HAVE_MEMRCHR_IFUNC
444 IFUNC_IMPL (i, name, memrchr,
445# if HAVE_MEMRCHR_Z13
446 IFUNC_IMPL_ADD (array, i, memrchr,
447 dl_hwcap & HWCAP_S390_VX, MEMRCHR_Z13)
448# endif
449# if HAVE_MEMRCHR_C
450 IFUNC_IMPL_ADD (array, i, memrchr, 1, MEMRCHR_C)
451# endif
452 )
453#endif /* HAVE_MEMRCHR_IFUNC */
454
2e02d0b7
SL
455#if HAVE_WCSLEN_IFUNC
456 IFUNC_IMPL (i, name, wcslen,
457# if HAVE_WCSLEN_Z13
458 IFUNC_IMPL_ADD (array, i, wcslen,
459 dl_hwcap & HWCAP_S390_VX, WCSLEN_Z13)
460# endif
461# if HAVE_WCSLEN_C
462 IFUNC_IMPL_ADD (array, i, wcslen, 1, WCSLEN_C)
463# endif
464 )
465#endif /* HAVE_WCSLEN_IFUNC */
466
c7e7cd26
SL
467#if HAVE_WCSNLEN_IFUNC
468 IFUNC_IMPL (i, name, wcsnlen,
469# if HAVE_WCSNLEN_Z13
470 IFUNC_IMPL_ADD (array, i, wcsnlen,
471 dl_hwcap & HWCAP_S390_VX, WCSNLEN_Z13)
472# endif
473# if HAVE_WCSNLEN_C
474 IFUNC_IMPL_ADD (array, i, wcsnlen, 1, WCSNLEN_C)
475# endif
476 )
477#endif /* HAVE_WCSNLEN_IFUNC */
478
804f2e5c
SL
479#if HAVE_WCSCPY_IFUNC
480 IFUNC_IMPL (i, name, wcscpy,
481# if HAVE_WCSCPY_Z13
482 IFUNC_IMPL_ADD (array, i, wcscpy,
483 dl_hwcap & HWCAP_S390_VX, WCSCPY_Z13)
484# endif
485# if HAVE_WCSCPY_C
486 IFUNC_IMPL_ADD (array, i, wcscpy, 1, WCSCPY_C)
487# endif
488 )
489#endif /* HAVE_WCSCPY_IFUNC */
490
0582e428
SL
491#if HAVE_WCPCPY_IFUNC
492 IFUNC_IMPL (i, name, wcpcpy,
493# if HAVE_WCPCPY_Z13
494 IFUNC_IMPL_ADD (array, i, wcpcpy,
495 dl_hwcap & HWCAP_S390_VX, WCPCPY_Z13)
496# endif
497# if HAVE_WCPCPY_C
498 IFUNC_IMPL_ADD (array, i, wcpcpy, 1, WCPCPY_C)
499# endif
500 )
501#endif /* HAVE_WCPCPY_IFUNC */
502
0966dd86
SL
503#if HAVE_WCSNCPY_IFUNC
504 IFUNC_IMPL (i, name, wcsncpy,
505# if HAVE_WCSNCPY_Z13
506 IFUNC_IMPL_ADD (array, i, wcsncpy,
507 dl_hwcap & HWCAP_S390_VX, WCSNCPY_Z13)
508# endif
509# if HAVE_WCSNCPY_C
510 IFUNC_IMPL_ADD (array, i, wcsncpy, 1, WCSNCPY_C)
511# endif
512 )
513#endif /* HAVE_WCSNCPY_IFUNC */
514
c3081bcb
SL
515#if HAVE_WCPNCPY_IFUNC
516 IFUNC_IMPL (i, name, wcpncpy,
517# if HAVE_WCPNCPY_Z13
518 IFUNC_IMPL_ADD (array, i, wcpncpy,
519 dl_hwcap & HWCAP_S390_VX, WCPNCPY_Z13)
520# endif
521# if HAVE_WCPNCPY_C
522 IFUNC_IMPL_ADD (array, i, wcpncpy, 1, WCPNCPY_C)
523# endif
524 )
525#endif /* HAVE_WCPNCPY_IFUNC */
526
3389cae4
SL
527#if HAVE_WCSCAT_IFUNC
528 IFUNC_IMPL (i, name, wcscat,
529# if HAVE_WCSCAT_Z13
530 IFUNC_IMPL_ADD (array, i, wcscat,
531 dl_hwcap & HWCAP_S390_VX, WCSCAT_Z13)
532# endif
533# if HAVE_WCSCAT_C
534 IFUNC_IMPL_ADD (array, i, wcscat, 1, WCSCAT_C)
535# endif
536 )
537#endif /* HAVE_WCSCAT_IFUNC */
538
814a76e1
SL
539#if HAVE_WCSNCAT_IFUNC
540 IFUNC_IMPL (i, name, wcsncat,
541# if HAVE_WCSNCAT_Z13
542 IFUNC_IMPL_ADD (array, i, wcsncat,
543 dl_hwcap & HWCAP_S390_VX, WCSNCAT_Z13)
544# endif
545# if HAVE_WCSNCAT_C
546 IFUNC_IMPL_ADD (array, i, wcsncat, 1, WCSNCAT_C)
547# endif
548 )
549#endif /* HAVE_WCSNCAT_IFUNC */
550
3459e23d
SL
551#if HAVE_WCSCMP_IFUNC
552 IFUNC_IMPL (i, name, wcscmp,
553# if HAVE_WCSCMP_Z13
554 IFUNC_IMPL_ADD (array, i, wcscmp,
555 dl_hwcap & HWCAP_S390_VX, WCSCMP_Z13)
556# endif
557# if HAVE_WCSCMP_C
558 IFUNC_IMPL_ADD (array, i, wcscmp, 1, WCSCMP_C)
559# endif
560 )
561#endif /* HAVE_WCSCMP_IFUNC */
562
e9873e1d
SL
563#if HAVE_WCSNCMP_IFUNC
564 IFUNC_IMPL (i, name, wcsncmp,
565# if HAVE_WCSNCMP_Z13
566 IFUNC_IMPL_ADD (array, i, wcsncmp,
567 dl_hwcap & HWCAP_S390_VX, WCSNCMP_Z13)
568# endif
569# if HAVE_WCSNCMP_C
570 IFUNC_IMPL_ADD (array, i, wcsncmp, 1, WCSNCMP_C)
571# endif
572 )
573#endif /* HAVE_WCSNCMP_IFUNC */
574
cf3ccc31
SL
575#if HAVE_WCSCHR_IFUNC
576 IFUNC_IMPL (i, name, wcschr,
577# if HAVE_WCSCHR_Z13
578 IFUNC_IMPL_ADD (array, i, wcschr,
579 dl_hwcap & HWCAP_S390_VX, WCSCHR_Z13)
580# endif
581# if HAVE_WCSCHR_C
582 IFUNC_IMPL_ADD (array, i, wcschr, 1, WCSCHR_C)
583# endif
584 )
585#endif /* HAVE_WCSCHR_IFUNC */
586
c09c1b6f
SL
587#if HAVE_WCSCHRNUL_IFUNC
588 IFUNC_IMPL (i, name, wcschrnul,
589# if HAVE_WCSCHRNUL_Z13
590 IFUNC_IMPL_ADD (array, i, wcschrnul,
591 dl_hwcap & HWCAP_S390_VX, WCSCHRNUL_Z13)
592# endif
593# if HAVE_WCSCHRNUL_C
594 IFUNC_IMPL_ADD (array, i, wcschrnul, 1, WCSCHRNUL_C)
595# endif
596 )
597#endif /* HAVE_WCSCHRNUL_IFUNC */
598
4753713a
SL
599#if HAVE_WCSRCHR_IFUNC
600 IFUNC_IMPL (i, name, wcsrchr,
601# if HAVE_WCSRCHR_Z13
602 IFUNC_IMPL_ADD (array, i, wcsrchr,
603 dl_hwcap & HWCAP_S390_VX, WCSRCHR_Z13)
604# endif
605# if HAVE_WCSRCHR_C
606 IFUNC_IMPL_ADD (array, i, wcsrchr, 1, WCSRCHR_C)
607# endif
608 )
609#endif /* HAVE_WCSRCHR_IFUNC */
610
8507e831
SL
611#if HAVE_WCSSPN_IFUNC
612 IFUNC_IMPL (i, name, wcsspn,
613# if HAVE_WCSSPN_Z13
614 IFUNC_IMPL_ADD (array, i, wcsspn,
615 dl_hwcap & HWCAP_S390_VX, WCSSPN_Z13)
616# endif
617# if HAVE_WCSSPN_C
618 IFUNC_IMPL_ADD (array, i, wcsspn, 1, WCSSPN_C)
619# endif
620 )
621#endif /* HAVE_WCSSPN_IFUNC */
622
8e87c1f6
SL
623#if HAVE_WCSPBRK_IFUNC
624 IFUNC_IMPL (i, name, wcspbrk,
625# if HAVE_WCSPBRK_Z13
626 IFUNC_IMPL_ADD (array, i, wcspbrk,
627 dl_hwcap & HWCAP_S390_VX, WCSPBRK_Z13)
628# endif
629# if HAVE_WCSPBRK_C
630 IFUNC_IMPL_ADD (array, i, wcspbrk, 1, WCSPBRK_C)
631# endif
632 )
633#endif /* HAVE_WCSPBRK_IFUNC */
634
79b44cf6
SL
635#if HAVE_WCSCSPN_IFUNC
636 IFUNC_IMPL (i, name, wcscspn,
637# if HAVE_WCSCSPN_Z13
638 IFUNC_IMPL_ADD (array, i, wcscspn,
639 dl_hwcap & HWCAP_S390_VX, WCSCSPN_Z13)
640# endif
641# if HAVE_WCSCSPN_C
642 IFUNC_IMPL_ADD (array, i, wcscspn, 1, WCSCSPN_C)
643# endif
644 )
645#endif /* HAVE_WCSCSPN_IFUNC */
646
c62534ae
SL
647#if HAVE_WMEMCHR_IFUNC
648 IFUNC_IMPL (i, name, wmemchr,
649# if HAVE_WMEMCHR_Z13
650 IFUNC_IMPL_ADD (array, i, wmemchr,
651 dl_hwcap & HWCAP_S390_VX, WMEMCHR_Z13)
652# endif
653# if HAVE_WMEMCHR_C
654 IFUNC_IMPL_ADD (array, i, wmemchr, 1, WMEMCHR_C)
655# endif
656 )
657#endif /* HAVE_WMEMCHR_IFUNC */
658
d2a7436c
SL
659#if HAVE_WMEMSET_IFUNC
660 IFUNC_IMPL (i, name, wmemset,
661# if HAVE_WMEMSET_Z13
662 IFUNC_IMPL_ADD (array, i, wmemset,
663 dl_hwcap & HWCAP_S390_VX, WMEMSET_Z13)
664# endif
665# if HAVE_WMEMSET_C
666 IFUNC_IMPL_ADD (array, i, wmemset, 1, WMEMSET_C)
667# endif
668 )
669#endif /* HAVE_WMEMSET_IFUNC */
670
25654a8c
SL
671#if HAVE_WMEMCMP_IFUNC
672 IFUNC_IMPL (i, name, wmemcmp,
673# if HAVE_WMEMCMP_Z13
674 IFUNC_IMPL_ADD (array, i, wmemcmp,
675 dl_hwcap & HWCAP_S390_VX, WMEMCMP_Z13)
676# endif
677# if HAVE_WMEMCMP_C
678 IFUNC_IMPL_ADD (array, i, wmemcmp, 1, WMEMCMP_C)
679# endif
680 )
681#endif /* HAVE_WMEMCMP_IFUNC */
9472f35a 682
31556246
SL
683 return i;
684}