]>
Commit | Line | Data |
---|---|---|
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. */ | |
75 | size_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 | } |