(root)/
glibc-2.38/
sysdeps/
powerpc/
powerpc64/
multiarch/
ifunc-impl-list.c
       1  /* Enumerate available IFUNC implementations of a function.  PowerPC64 version.
       2     Copyright (C) 2013-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 <ldsodefs.h>
      23  #include <ifunc-impl-list.h>
      24  
      25  size_t
      26  __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
      27  			size_t max)
      28  {
      29    size_t i = max;
      30  
      31    unsigned long int hwcap = GLRO(dl_hwcap);
      32    unsigned long int hwcap2 = GLRO(dl_hwcap2);
      33  #ifdef SHARED
      34    int cacheline_size = GLRO(dl_cache_line_size);
      35  #endif
      36  
      37    /* hwcap contains only the latest supported ISA, the code checks which is
      38       and fills the previous supported ones.  */
      39    if (hwcap & PPC_FEATURE_ARCH_2_06)
      40      hwcap |= PPC_FEATURE_ARCH_2_05 | PPC_FEATURE_POWER5_PLUS |
      41               PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4;
      42    else if (hwcap & PPC_FEATURE_ARCH_2_05)
      43      hwcap |= PPC_FEATURE_POWER5_PLUS | PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4;
      44    else if (hwcap & PPC_FEATURE_POWER5_PLUS)
      45      hwcap |= PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4;
      46    else if (hwcap & PPC_FEATURE_POWER5)
      47      hwcap |= PPC_FEATURE_POWER4;
      48  
      49  #ifdef SHARED
      50    /* Support sysdeps/powerpc/powerpc64/multiarch/memcpy.c.  */
      51    IFUNC_IMPL (i, name, memcpy,
      52  #ifdef __LITTLE_ENDIAN__
      53  	      IFUNC_IMPL_ADD (array, i, memcpy,
      54  			      hwcap2 & PPC_FEATURE2_ARCH_3_1
      55  			      && hwcap & PPC_FEATURE_HAS_VSX,
      56  			      __memcpy_power10)
      57  #endif
      58  	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07
      59  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
      60  			      __memcpy_power8_cached)
      61  	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06
      62  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
      63  			      __memcpy_power7)
      64  	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06,
      65  			      __memcpy_a2)
      66  	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_05,
      67  			      __memcpy_power6)
      68  	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_CELL_BE,
      69  			      __memcpy_cell)
      70  	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_POWER4,
      71  			      __memcpy_power4)
      72  	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ppc))
      73  
      74    /* Support sysdeps/powerpc/powerpc64/multiarch/memmove.c.  */
      75    IFUNC_IMPL (i, name, memmove,
      76  #ifdef __LITTLE_ENDIAN__
      77  	      IFUNC_IMPL_ADD (array, i, memmove,
      78  			      hwcap2 & PPC_FEATURE2_ARCH_3_1
      79  			      && hwcap2 & PPC_FEATURE2_HAS_ISEL
      80  			      && hwcap & PPC_FEATURE_HAS_VSX,
      81  			      __memmove_power10)
      82  #endif
      83  	      IFUNC_IMPL_ADD (array, i, memmove, hwcap & PPC_FEATURE_ARCH_2_06
      84  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
      85  			      __memmove_power7)
      86  	      IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_ppc))
      87  
      88    /* Support sysdeps/powerpc/powerpc64/multiarch/memset.c.  */
      89    IFUNC_IMPL (i, name, memset,
      90  #ifdef __LITTLE_ENDIAN__
      91  	      IFUNC_IMPL_ADD (array, i, memset,
      92  			      hwcap2 & PPC_FEATURE2_ARCH_3_1
      93  			      && hwcap2 & PPC_FEATURE2_HAS_ISEL
      94  			      && hwcap & PPC_FEATURE_HAS_VSX
      95  			      && cacheline_size == 128,
      96  			      __memset_power10)
      97  #endif
      98  	      IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07
      99  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC
     100  			      && cacheline_size == 128,
     101  			      __memset_power8)
     102  	      IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_06
     103  			      && cacheline_size == 128,
     104  			      __memset_power7)
     105  	      IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05
     106  			      && cacheline_size == 128,
     107  			      __memset_power6)
     108  	      IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_POWER4
     109  			      && cacheline_size == 128,
     110  			      __memset_power4)
     111  	      IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ppc))
     112  
     113    /* Support sysdeps/powerpc/powerpc64/multiarch/strcpy.c.  */
     114    IFUNC_IMPL (i, name, strcpy,
     115  #ifdef __LITTLE_ENDIAN__
     116  	      IFUNC_IMPL_ADD (array, i, strcpy, hwcap2 & PPC_FEATURE2_ARCH_3_00
     117  			      && hwcap & PPC_FEATURE_HAS_VSX,
     118  			      __strcpy_power9)
     119  #endif
     120  	      IFUNC_IMPL_ADD (array, i, strcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07
     121  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     122  			      __strcpy_power8)
     123  	      IFUNC_IMPL_ADD (array, i, strcpy, hwcap & PPC_FEATURE_ARCH_2_06
     124  			      && hwcap & PPC_FEATURE_HAS_VSX,
     125  			      __strcpy_power7)
     126  	      IFUNC_IMPL_ADD (array, i, strcpy, 1,
     127  			      __strcpy_ppc))
     128  
     129    /* Support sysdeps/powerpc/powerpc64/multiarch/stpcpy.c.  */
     130    IFUNC_IMPL (i, name, stpcpy,
     131  #ifdef __LITTLE_ENDIAN__
     132  	      IFUNC_IMPL_ADD (array, i, stpcpy, hwcap2 & PPC_FEATURE2_ARCH_3_00
     133  			      && hwcap & PPC_FEATURE_HAS_VSX,
     134  			      __stpcpy_power9)
     135  #endif
     136  	      IFUNC_IMPL_ADD (array, i, stpcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07
     137  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     138  			      __stpcpy_power8)
     139  	      IFUNC_IMPL_ADD (array, i, stpcpy, hwcap & PPC_FEATURE_ARCH_2_06
     140  			      && hwcap & PPC_FEATURE_HAS_VSX,
     141  			      __stpcpy_power7)
     142  	      IFUNC_IMPL_ADD (array, i, stpcpy, 1,
     143  			      __stpcpy_ppc))
     144  
     145    /* Support sysdeps/powerpc/powerpc64/multiarch/strlen.c.  */
     146    IFUNC_IMPL (i, name, strlen,
     147  #ifdef __LITTLE_ENDIAN__
     148  	      IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_3_1
     149  			      && hwcap & PPC_FEATURE_HAS_VSX,
     150  			      __strlen_power10)
     151  	      IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_3_00
     152  			      && hwcap & PPC_FEATURE_HAS_VSX,
     153  			      __strlen_power9)
     154  #endif
     155  	      IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_2_07
     156  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     157  			      __strlen_power8)
     158  	      IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_ARCH_2_06,
     159  			      __strlen_power7)
     160  	      IFUNC_IMPL_ADD (array, i, strlen, 1,
     161  			      __strlen_ppc))
     162  
     163    /* Support sysdeps/powerpc/powerpc64/multiarch/strncmp.c.  */
     164    IFUNC_IMPL (i, name, strncmp,
     165  #ifdef __LITTLE_ENDIAN__
     166  	      IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_00
     167  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     168  			      __strncmp_power9)
     169  #endif
     170  	      IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_2_07,
     171  			      __strncmp_power8)
     172  	      IFUNC_IMPL_ADD (array, i, strncmp, 1,
     173  			      __strncmp_ppc))
     174  
     175    /* Support sysdeps/powerpc/powerpc64/multiarch/strchr.c.  */
     176    IFUNC_IMPL (i, name, strchr,
     177  	      IFUNC_IMPL_ADD (array, i, strchr,
     178  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     179  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     180  			      __strchr_power8)
     181  	      IFUNC_IMPL_ADD (array, i, strchr,
     182  			      hwcap & PPC_FEATURE_ARCH_2_06,
     183  			      __strchr_power7)
     184  	      IFUNC_IMPL_ADD (array, i, strchr, 1,
     185  			      __strchr_ppc))
     186  
     187    /* Support sysdeps/powerpc/powerpc64/multiarch/strchrnul.c.  */
     188    IFUNC_IMPL (i, name, strchrnul,
     189  	      IFUNC_IMPL_ADD (array, i, strchrnul,
     190  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     191  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     192  			      __strchrnul_power8)
     193  	      IFUNC_IMPL_ADD (array, i, strchrnul,
     194  			      hwcap & PPC_FEATURE_ARCH_2_06,
     195  			      __strchrnul_power7)
     196  	      IFUNC_IMPL_ADD (array, i, strchrnul, 1,
     197  			      __strchrnul_ppc))
     198  #endif
     199  
     200    /* Support sysdeps/powerpc/powerpc64/multiarch/memcmp.c.  */
     201    IFUNC_IMPL (i, name, memcmp,
     202  #ifdef __LITTLE_ENDIAN__
     203  	      IFUNC_IMPL_ADD (array, i, memcmp,
     204              hwcap2 & PPC_FEATURE2_ARCH_3_1
     205              && hwcap & PPC_FEATURE_HAS_VSX,
     206  			      __memcmp_power10)
     207  #endif
     208  	      IFUNC_IMPL_ADD (array, i, memcmp, hwcap2 & PPC_FEATURE2_ARCH_2_07
     209  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     210  			      __memcmp_power8)
     211  	      IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_ARCH_2_06,
     212  			      __memcmp_power7)
     213  	      IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_POWER4,
     214  			      __memcmp_power4)
     215  	      IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_ppc))
     216  
     217    /* Support sysdeps/powerpc/powerpc64/multiarch/mempcpy.c.  */
     218    IFUNC_IMPL (i, name, mempcpy,
     219  	      IFUNC_IMPL_ADD (array, i, mempcpy,
     220  			      hwcap & PPC_FEATURE_ARCH_2_06
     221  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     222  			      __mempcpy_power7)
     223  	      IFUNC_IMPL_ADD (array, i, mempcpy, 1,
     224  			      __mempcpy_ppc))
     225  
     226    /* Support sysdeps/powerpc/powerpc64/multiarch/memchr.c.  */
     227    IFUNC_IMPL (i, name, memchr,
     228  	      IFUNC_IMPL_ADD (array, i, memchr,
     229  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     230  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     231  			      __memchr_power8)
     232  	      IFUNC_IMPL_ADD (array, i, memchr,
     233  			      hwcap & PPC_FEATURE_ARCH_2_06,
     234  			      __memchr_power7)
     235  	      IFUNC_IMPL_ADD (array, i, memchr, 1,
     236  			      __memchr_ppc))
     237  
     238    /* Support sysdeps/powerpc/powerpc64/multiarch/memrchr.c.  */
     239    IFUNC_IMPL (i, name, memrchr,
     240  	      IFUNC_IMPL_ADD (array, i, memrchr,
     241  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     242  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     243  			      __memrchr_power8)
     244  	      IFUNC_IMPL_ADD (array, i, memrchr,
     245  			      hwcap & PPC_FEATURE_ARCH_2_06,
     246  			      __memrchr_power7)
     247  	      IFUNC_IMPL_ADD (array, i, memrchr, 1,
     248  			      __memrchr_ppc))
     249  
     250    /* Support sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c.  */
     251    IFUNC_IMPL (i, name, rawmemchr,
     252  #ifdef __LITTLE_ENDIAN__
     253  	      IFUNC_IMPL_ADD (array, i, rawmemchr,
     254  			      (hwcap2 & PPC_FEATURE2_ARCH_3_1)
     255                                && (hwcap & PPC_FEATURE_HAS_VSX),
     256                                __rawmemchr_power10)
     257  	      IFUNC_IMPL_ADD (array, i, rawmemchr,
     258  			      hwcap2 & PPC_FEATURE2_ARCH_3_00
     259  			      && hwcap & PPC_FEATURE_HAS_VSX,
     260  			      __rawmemchr_power9)
     261  #endif
     262  	      IFUNC_IMPL_ADD (array, i, rawmemchr,
     263  			      hwcap & PPC_FEATURE_ARCH_2_06,
     264  			      __rawmemchr_power7)
     265  	      IFUNC_IMPL_ADD (array, i, rawmemchr, 1,
     266  			      __rawmemchr_ppc))
     267  
     268    /* Support sysdeps/powerpc/powerpc64/multiarch/strnlen.c.  */
     269    IFUNC_IMPL (i, name, strnlen,
     270  	      IFUNC_IMPL_ADD (array, i, strnlen,
     271  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     272  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     273  			      __strnlen_power8)
     274  	      IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_ARCH_2_06,
     275  			      __strnlen_power7)
     276  	      IFUNC_IMPL_ADD (array, i, strnlen, 1,
     277  			      __strnlen_ppc))
     278  
     279    /* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c.  */
     280    IFUNC_IMPL (i, name, strcasecmp,
     281  	      IFUNC_IMPL_ADD (array, i, strcasecmp,
     282  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     283  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     284  			      __strcasecmp_power8)
     285  	      IFUNC_IMPL_ADD (array, i, strcasecmp,
     286  			      hwcap & PPC_FEATURE_ARCH_2_06,
     287  			      __strcasecmp_power7)
     288  	      IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_ppc))
     289  
     290    /* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c.  */
     291    IFUNC_IMPL (i, name, strcasecmp_l,
     292  	      IFUNC_IMPL_ADD (array, i, strcasecmp_l,
     293  			      hwcap & PPC_FEATURE_ARCH_2_06,
     294  			      __strcasecmp_l_power7)
     295  	      IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1,
     296  			      __strcasecmp_l_ppc))
     297  
     298    /* Support sysdeps/powerpc/powerpc64/multiarch/strncase.c.  */
     299    IFUNC_IMPL (i, name, strncasecmp,
     300  	      IFUNC_IMPL_ADD (array, i, strncasecmp,
     301  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     302  			       && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     303  			      __strncasecmp_power8)
     304  	      IFUNC_IMPL_ADD (array, i, strncasecmp,
     305  			      hwcap & PPC_FEATURE_ARCH_2_06,
     306  			      __strncasecmp_power7)
     307  	      IFUNC_IMPL_ADD (array, i, strncasecmp, 1, __strncasecmp_ppc))
     308  
     309    /* Support sysdeps/powerpc/powerpc64/multiarch/strncase_l.c.  */
     310    IFUNC_IMPL (i, name, strncasecmp_l,
     311  	      IFUNC_IMPL_ADD (array, i, strncasecmp_l,
     312  			      hwcap & PPC_FEATURE_ARCH_2_06,
     313  			      __strncasecmp_l_power7)
     314  	      IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1,
     315  			      __strncasecmp_l_ppc))
     316  
     317    /* Support sysdeps/powerpc/powerpc64/multiarch/strrchr.c.  */
     318    IFUNC_IMPL (i, name, strrchr,
     319  	      IFUNC_IMPL_ADD (array, i, strrchr,
     320  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     321  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     322  			      __strrchr_power8)
     323  	      IFUNC_IMPL_ADD (array, i, strrchr,
     324  			      hwcap & PPC_FEATURE_ARCH_2_06,
     325  			      __strrchr_power7)
     326  	      IFUNC_IMPL_ADD (array, i, strrchr, 1,
     327  			      __strrchr_ppc))
     328  
     329    /* Support sysdeps/powerpc/powerpc64/multiarch/strncat.c.  */
     330    IFUNC_IMPL (i, name, strncat,
     331  	      IFUNC_IMPL_ADD (array, i, strncat,
     332  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     333  			      && hwcap & PPC_FEATURE_HAS_VSX,
     334  			      __strncat_power8)
     335  	      IFUNC_IMPL_ADD (array, i, strncat,
     336  			      hwcap & PPC_FEATURE_ARCH_2_06
     337  			      && hwcap & PPC_FEATURE_HAS_VSX,
     338  			      __strncat_power7)
     339  	      IFUNC_IMPL_ADD (array, i, strncat, 1,
     340  			      __strncat_ppc))
     341  
     342    /* Support sysdeps/powerpc/powerpc64/multiarch/strncpy.c.  */
     343    IFUNC_IMPL (i, name, strncpy,
     344  #ifdef __LITTLE_ENDIAN__
     345  	      IFUNC_IMPL_ADD (array, i, strncpy,
     346  			      (hwcap2 & PPC_FEATURE2_ARCH_3_00)
     347  			      && (hwcap & PPC_FEATURE_HAS_VSX),
     348  			      __strncpy_power9)
     349  #endif
     350  	      IFUNC_IMPL_ADD (array, i, strncpy,
     351  			      hwcap2 & PPC_FEATURE2_ARCH_2_07,
     352  			      __strncpy_power8)
     353  	      IFUNC_IMPL_ADD (array, i, strncpy,
     354  			      hwcap & PPC_FEATURE_ARCH_2_06,
     355  			      __strncpy_power7)
     356  	      IFUNC_IMPL_ADD (array, i, strncpy, 1,
     357  			     __strncpy_ppc))
     358  
     359    /* Support sysdeps/powerpc/powerpc64/multiarch/stpncpy.c.  */
     360    IFUNC_IMPL (i, name, stpncpy,
     361  #ifdef __LITTLE_ENDIAN__
     362  	      IFUNC_IMPL_ADD (array, i, stpncpy,
     363  			      (hwcap2 & PPC_FEATURE2_ARCH_3_00)
     364  			      && (hwcap & PPC_FEATURE_HAS_VSX),
     365  			      __stpncpy_power9)
     366  #endif
     367  	      IFUNC_IMPL_ADD (array, i, stpncpy,
     368  			      hwcap2 & PPC_FEATURE2_ARCH_2_07,
     369  			      __stpncpy_power8)
     370  	      IFUNC_IMPL_ADD (array, i, stpncpy,
     371  			      hwcap & PPC_FEATURE_ARCH_2_06,
     372  			      __stpncpy_power7)
     373  	      IFUNC_IMPL_ADD (array, i, stpncpy, 1,
     374  			     __stpncpy_ppc))
     375  
     376    /* Support sysdeps/powerpc/powerpc64/multiarch/strcmp.c.  */
     377    IFUNC_IMPL (i, name, strcmp,
     378  #ifdef __LITTLE_ENDIAN__
     379  	      IFUNC_IMPL_ADD (array, i, strcmp,
     380  			      hwcap2 & PPC_FEATURE2_ARCH_3_00
     381  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     382  			      __strcmp_power9)
     383  #endif
     384  	      IFUNC_IMPL_ADD (array, i, strcmp,
     385  			      hwcap2 & PPC_FEATURE2_ARCH_2_07,
     386  			      __strcmp_power8)
     387  	      IFUNC_IMPL_ADD (array, i, strcmp,
     388  			      hwcap & PPC_FEATURE_ARCH_2_06,
     389  			      __strcmp_power7)
     390  	      IFUNC_IMPL_ADD (array, i, strcmp, 1,
     391  			     __strcmp_ppc))
     392  
     393    /* Support sysdeps/powerpc/powerpc64/multiarch/strcat.c.  */
     394    IFUNC_IMPL (i, name, strcat,
     395  	      IFUNC_IMPL_ADD (array, i, strcat,
     396  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     397  			      && hwcap & PPC_FEATURE_HAS_VSX,
     398  			      __strcat_power8)
     399  	      IFUNC_IMPL_ADD (array, i, strcat,
     400  			      hwcap & PPC_FEATURE_ARCH_2_06
     401  			      && hwcap & PPC_FEATURE_HAS_VSX,
     402  			      __strcat_power7)
     403  	      IFUNC_IMPL_ADD (array, i, strcat, 1,
     404  			     __strcat_ppc))
     405  
     406    /* Support sysdeps/powerpc/powerpc64/multiarch/strspn.c.  */
     407    IFUNC_IMPL (i, name, strspn,
     408               IFUNC_IMPL_ADD (array, i, strspn,
     409                               hwcap2 & PPC_FEATURE2_ARCH_2_07
     410                               && hwcap & PPC_FEATURE_HAS_VSX,
     411                               __strspn_power8)
     412               IFUNC_IMPL_ADD (array, i, strspn, 1,
     413                               __strspn_ppc))
     414  
     415    /* Support sysdeps/powerpc/powerpc64/multiarch/strcspn.c.  */
     416    IFUNC_IMPL (i, name, strcspn,
     417               IFUNC_IMPL_ADD (array, i, strcspn,
     418                               hwcap2 & PPC_FEATURE2_ARCH_2_07
     419                               && hwcap & PPC_FEATURE_HAS_VSX,
     420                               __strcspn_power8)
     421               IFUNC_IMPL_ADD (array, i, strcspn, 1,
     422                               __strcspn_ppc))
     423  
     424    /* Support sysdeps/powerpc/powerpc64/multiarch/strstr.c.  */
     425    IFUNC_IMPL (i, name, strstr,
     426               IFUNC_IMPL_ADD (array, i, strstr,
     427                               hwcap & PPC_FEATURE_ARCH_2_06,
     428                               __strstr_power7)
     429               IFUNC_IMPL_ADD (array, i, strstr, 1,
     430                               __strstr_ppc))
     431  
     432  
     433    /* Support sysdeps/powerpc/powerpc64/multiarch/strcasestr.c.  */
     434    IFUNC_IMPL (i, name, strcasestr,
     435  	      IFUNC_IMPL_ADD (array, i, strcasestr,
     436  			      hwcap2 & PPC_FEATURE2_ARCH_2_07
     437  			      && hwcap & PPC_FEATURE_HAS_ALTIVEC,
     438  			      __strcasestr_power8)
     439               IFUNC_IMPL_ADD (array, i, strcasestr, 1,
     440                               __strcasestr_ppc))
     441  
     442    return 0;
     443  }