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. */ |
73 | size_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 | |