(root)/
glibc-2.38/
sysdeps/
s390/
multiarch/
ifunc-impl-list.c
       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.
       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  }