]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
powerpc: Remove strncmp variants
authorAdhemerval Zanella Netto <adhemerval.zanella@linaro.org>
Tue, 28 Feb 2023 17:23:58 +0000 (14:23 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 2 Mar 2023 19:41:43 +0000 (16:41 -0300)
The default, power4, and power7 implementation just adds word aligned
access when inputs have the same aligment.  The unaligned case
is still done by byte operations.

This is already covered by the generic implementation, which also add
the unaligned input optimization.

Checked on powerpc-linux-gnu built without multi-arch for powerpc,
power4, and power7.
Reviewed-by: Rajalakshmi Srinivasaraghavan <rajis@linux.ibm.com>
sysdeps/powerpc/powerpc32/power4/multiarch/Makefile
sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c
sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S [deleted file]
sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S [deleted file]
sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c [deleted file]
sysdeps/powerpc/powerpc32/power4/strncmp.S [deleted file]
sysdeps/powerpc/powerpc32/power7/strncmp.S [deleted file]
sysdeps/powerpc/powerpc32/strncmp.S [deleted file]

index b2f9deefb878acea958290eb7c09dd891a1bd60b..0a4e82843528b7e43ee3df351783aa4f01f67bd0 100644 (file)
@@ -5,7 +5,7 @@ sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \
                   mempcpy-power7 mempcpy-ppc32 memchr-power7 \
                   memchr-ppc32 memrchr-power7 memrchr-ppc32 rawmemchr-power7 \
                   rawmemchr-ppc32 strlen-power7 strlen-ppc32 strnlen-power7 \
-                  strnlen-ppc32 strncmp-power7 strncmp-ppc32 \
+                  strnlen-ppc32 \
                   strcasecmp-power7 strcasecmp_l-power7 strncase-power7 \
                   strncase_l-power7 strchrnul-power7 strchrnul-ppc32 \
                   strchr-power7 strchr-ppc32 \
index 3b95ad2c12d5f041ba8b913f4ae17593dad9fcb9..b4f80539e7e69f59f3ce47342f43f3900ac3e5ed 100644 (file)
@@ -81,13 +81,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
                              __strnlen_power7)
              IFUNC_IMPL_ADD (array, i, strnlen, 1,
                              __strnlen_ppc))
-
-  /* Support sysdeps/powerpc/powerpc32/multiarch/strncmp.c.  */
-  IFUNC_IMPL (i, name, strncmp,
-             IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_HAS_VSX,
-                             __strncmp_power7)
-             IFUNC_IMPL_ADD (array, i, strncmp, 1,
-                             __strncmp_ppc))
 #endif
 
   /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c.  */
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S
deleted file mode 100644 (file)
index 068b1bb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Optimized strcmp implementation for POWER7/PowerPC32.
-   Copyright (C) 2013-2023 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-#undef EALIGN
-#define EALIGN(name, alignt, words)                            \
- .globl C_SYMBOL_NAME(__strncmp_power7);                       \
- .type C_SYMBOL_NAME(__strncmp_power7),@function;              \
- .align ALIGNARG(alignt);                                      \
- EALIGN_W_##words;                                             \
- C_LABEL(__strncmp_power7)                                     \
- cfi_startproc;
-
-#undef END
-#define END(name)                                              \
- cfi_endproc;                                                  \
- ASM_SIZE_DIRECTIVE(__strncmp_power7)
-
-#undef libc_hidden_builtin_def
-#define libc_hidden_builtin_def(name)
-
-#include <sysdeps/powerpc/powerpc32/power7/strncmp.S>
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S
deleted file mode 100644 (file)
index b04afd4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-#if defined SHARED && IS_IN (libc)
-# undef EALIGN
-# define EALIGN(name, alignt, words)                           \
-  .globl C_SYMBOL_NAME(__strncmp_ppc);                 \
-  .type C_SYMBOL_NAME(__strncmp_ppc),@function;                \
-  .align ALIGNARG(alignt);                                     \
-  EALIGN_W_##words;                                            \
-  C_LABEL(__strncmp_ppc)                                       \
-  cfi_startproc;
-
-# undef END
-# define END(name)                                             \
-  cfi_endproc;                                                 \
-  ASM_SIZE_DIRECTIVE(__strncmp_ppc)
-
-# undef libc_hidden_builtin_def
-# define libc_hidden_builtin_def(name)                         \
-    .globl __GI_strncmp; __GI_strncmp = __strncmp_ppc
-#endif
-
-#include <sysdeps/powerpc/powerpc32/power4/strncmp.S>
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c
deleted file mode 100644 (file)
index 7904601..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Multiple versions of strncmp.
-   Copyright (C) 2013-2023 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-/* Define multiple versions only for definition in libc.  */
-#if defined SHARED && IS_IN (libc)
-# define strncmp __redirect_strncmp
-/* Omit the strncmp inline definitions because it would redefine strncmp.  */
-# define __NO_STRING_INLINES
-# include <string.h>
-# include <shlib-compat.h>
-# include "init-arch.h"
-
-extern __typeof (strncmp) __strncmp_ppc attribute_hidden;
-extern __typeof (strncmp) __strncmp_power4 attribute_hidden;
-extern __typeof (strncmp) __strncmp_power7 attribute_hidden;
-# undef strncmp
-
-/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
-   ifunc symbol properly.  */
-libc_ifunc_redirected (__redirect_strncmp, strncmp,
-                      (hwcap & PPC_FEATURE_HAS_VSX)
-                      ? __strncmp_power7
-                      : __strncmp_ppc);
-#endif
diff --git a/sysdeps/powerpc/powerpc32/power4/strncmp.S b/sysdeps/powerpc/powerpc32/power4/strncmp.S
deleted file mode 100644 (file)
index 1f65c94..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/* Optimized strcmp implementation for PowerPC32.
-   Copyright (C) 2003-2023 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-/* See strlen.s for comments on how the end-of-string testing works.  */
-
-/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5])  */
-
-EALIGN (strncmp, 4, 0)
-
-#define rTMP2  r0
-#define rRTN   r3
-#define rSTR1  r3      /* first string arg */
-#define rSTR2  r4      /* second string arg */
-#define rN     r5      /* max string length */
-#define rWORD1 r6      /* current word in s1 */
-#define rWORD2 r7      /* current word in s2 */
-#define rWORD3  r10
-#define rWORD4  r11
-#define rFEFE  r8      /* constant 0xfefefeff (-0x01010101) */
-#define r7F7F  r9      /* constant 0x7f7f7f7f */
-#define rNEG   r10     /* ~(word in s1 | 0x7f7f7f7f) */
-#define rBITDIF        r11     /* bits that differ in s1 & s2 words */
-#define rTMP   r12
-
-       dcbt    0,rSTR1
-       or      rTMP, rSTR2, rSTR1
-       lis     r7F7F, 0x7f7f
-       dcbt    0,rSTR2
-       clrlwi. rTMP, rTMP, 30
-       cmplwi  cr1, rN, 0
-       lis     rFEFE, -0x101
-       bne     L(unaligned)
-/* We are word aligned so set up for two loops.  first a word
-   loop, then fall into the byte loop if any residual.  */
-       srwi.   rTMP, rN, 2
-       clrlwi  rN, rN, 30
-       addi    rFEFE, rFEFE, -0x101
-       addi    r7F7F, r7F7F, 0x7f7f
-       cmplwi  cr1, rN, 0
-       beq     L(unaligned)
-
-       mtctr   rTMP    /* Power4 wants mtctr 1st in dispatch group.  */
-       lwz     rWORD1, 0(rSTR1)
-       lwz     rWORD2, 0(rSTR2)
-       b       L(g1)
-
-L(g0):
-       lwzu    rWORD1, 4(rSTR1)
-       bne-    cr1, L(different)
-       lwzu    rWORD2, 4(rSTR2)
-L(g1): add     rTMP, rFEFE, rWORD1
-       nor     rNEG, r7F7F, rWORD1
-       bdz     L(tail)
-       and.    rTMP, rTMP, rNEG
-       cmpw    cr1, rWORD1, rWORD2
-       beq+    L(g0)
-
-/* OK. We've hit the end of the string. We need to be careful that
-   we don't compare two strings as different because of gunk beyond
-   the end of the strings...  */
-
-#ifdef __LITTLE_ENDIAN__
-L(endstring):
-       slwi    rTMP, rTMP, 1
-       addi    rTMP2, rTMP, -1
-       andc    rTMP2, rTMP2, rTMP
-       and     rWORD2, rWORD2, rTMP2           /* Mask off gunk.  */
-       and     rWORD1, rWORD1, rTMP2
-       rlwinm  rTMP2, rWORD2, 8, 0xffffffff    /* Byte reverse word.  */
-       rlwinm  rTMP, rWORD1, 8, 0xffffffff
-       rldimi  rTMP2, rWORD2, 24, 32
-       rldimi  rTMP, rWORD1, 24, 32
-       rlwimi  rTMP2, rWORD2, 24, 16, 23
-       rlwimi  rTMP, rWORD1, 24, 16, 23
-       xor.    rBITDIF, rTMP, rTMP2
-       sub     rRTN, rTMP, rTMP2
-       bgelr+
-       ori     rRTN, rTMP2, 1
-       blr
-
-L(different):
-       lwz     rWORD1, -4(rSTR1)
-       rlwinm  rTMP2, rWORD2, 8, 0xffffffff    /* Byte reverse word.  */
-       rlwinm  rTMP, rWORD1, 8, 0xffffffff
-       rldimi  rTMP2, rWORD2, 24, 32
-       rldimi  rTMP, rWORD1, 24, 32
-       rlwimi  rTMP2, rWORD2, 24, 16, 23
-       rlwimi  rTMP, rWORD1, 24, 16, 23
-       xor.    rBITDIF, rTMP, rTMP2
-       sub     rRTN, rTMP, rTMP2
-       bgelr+
-       ori     rRTN, rTMP2, 1
-       blr
-
-#else
-L(endstring):
-       and     rTMP, r7F7F, rWORD1
-       beq     cr1, L(equal)
-       add     rTMP, rTMP, r7F7F
-       xor.    rBITDIF, rWORD1, rWORD2
-       andc    rNEG, rNEG, rTMP
-       blt-    L(highbit)
-       cntlzw  rBITDIF, rBITDIF
-       cntlzw  rNEG, rNEG
-       addi    rNEG, rNEG, 7
-       cmpw    cr1, rNEG, rBITDIF
-       sub     rRTN, rWORD1, rWORD2
-       bgelr+  cr1
-L(equal):
-       li      rRTN, 0
-       blr
-
-L(different):
-       lwz     rWORD1, -4(rSTR1)
-       xor.    rBITDIF, rWORD1, rWORD2
-       sub     rRTN, rWORD1, rWORD2
-       bgelr+
-L(highbit):
-       ori     rRTN, rWORD2, 1
-       blr
-#endif
-
-/* Oh well.  In this case, we just do a byte-by-byte comparison.  */
-       .align 4
-L(tail):
-       and.    rTMP, rTMP, rNEG
-       cmpw    cr1, rWORD1, rWORD2
-       bne-    L(endstring)
-       addi    rSTR1, rSTR1, 4
-       bne-    cr1, L(different)
-       addi    rSTR2, rSTR2, 4
-       cmplwi  cr1, rN, 0
-L(unaligned):
-       mtctr   rN      /* Power4 wants mtctr 1st in dispatch group */
-       ble     cr1, L(ux)
-L(uz):
-       lbz     rWORD1, 0(rSTR1)
-       lbz     rWORD2, 0(rSTR2)
-       .align 4
-L(u1):
-       cmpwi   cr1, rWORD1, 0
-       bdz     L(u4)
-       cmpw    rWORD1, rWORD2
-       beq-    cr1, L(u4)
-       bne-    L(u4)
-       lbzu    rWORD3, 1(rSTR1)
-       lbzu    rWORD4, 1(rSTR2)
-       cmpwi   cr1, rWORD3, 0
-       bdz     L(u3)
-       cmpw    rWORD3, rWORD4
-       beq-    cr1, L(u3)
-       bne-    L(u3)
-       lbzu    rWORD1, 1(rSTR1)
-       lbzu    rWORD2, 1(rSTR2)
-       cmpwi   cr1, rWORD1, 0
-       bdz     L(u4)
-       cmpw    rWORD1, rWORD2
-       beq-    cr1, L(u4)
-       bne-    L(u4)
-       lbzu    rWORD3, 1(rSTR1)
-       lbzu    rWORD4, 1(rSTR2)
-       cmpwi   cr1, rWORD3, 0
-       bdz     L(u3)
-       cmpw    rWORD3, rWORD4
-       beq-    cr1, L(u3)
-       bne-    L(u3)
-       lbzu    rWORD1, 1(rSTR1)
-       lbzu    rWORD2, 1(rSTR2)
-       b       L(u1)
-
-L(u3):  sub     rRTN, rWORD3, rWORD4
-       blr
-L(u4): sub     rRTN, rWORD1, rWORD2
-       blr
-L(ux):
-       li      rRTN, 0
-       blr
-END (strncmp)
-libc_hidden_builtin_def (strncmp)
diff --git a/sysdeps/powerpc/powerpc32/power7/strncmp.S b/sysdeps/powerpc/powerpc32/power7/strncmp.S
deleted file mode 100644 (file)
index bbaab6c..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/* Optimized strcmp implementation for POWER7/PowerPC32.
-   Copyright (C) 2010-2023 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-/* See strlen.s for comments on how the end-of-string testing works.  */
-
-/* int [r3] strncmp (const char *s1 [r3],
-                    const char *s2 [r4],
-                    size_t size [r5])  */
-
-EALIGN (strncmp,5,0)
-
-#define rTMP2  r0
-#define rRTN   r3
-#define rSTR1  r3      /* first string arg */
-#define rSTR2  r4      /* second string arg */
-#define rN     r5      /* max string length */
-#define rWORD1 r6      /* current word in s1 */
-#define rWORD2 r7      /* current word in s2 */
-#define rWORD3 r10
-#define rWORD4 r11
-#define rFEFE  r8      /* constant 0xfefefeff (-0x01010101) */
-#define r7F7F  r9      /* constant 0x7f7f7f7f */
-#define rNEG   r10     /* ~(word in s1 | 0x7f7f7f7f) */
-#define rBITDIF        r11     /* bits that differ in s1 & s2 words */
-#define rTMP   r12
-
-       dcbt    0,rSTR1
-       nop
-       or      rTMP,rSTR2,rSTR1
-       lis     r7F7F,0x7f7f
-       dcbt    0,rSTR2
-       nop
-       clrlwi. rTMP,rTMP,30
-       cmplwi  cr1,rN,0
-       lis     rFEFE,-0x101
-       bne     L(unaligned)
-/* We are word aligned so set up for two loops.  first a word
-   loop, then fall into the byte loop if any residual.  */
-       srwi.   rTMP,rN,2
-       clrlwi  rN,rN,30
-       addi    rFEFE,rFEFE,-0x101
-       addi    r7F7F,r7F7F,0x7f7f
-       cmplwi  cr1,rN,0
-       beq     L(unaligned)
-
-       mtctr   rTMP
-       lwz     rWORD1,0(rSTR1)
-       lwz     rWORD2,0(rSTR2)
-       b       L(g1)
-
-L(g0):
-       lwzu    rWORD1,4(rSTR1)
-       bne     cr1,L(different)
-       lwzu    rWORD2,4(rSTR2)
-L(g1): add     rTMP,rFEFE,rWORD1
-       nor     rNEG,r7F7F,rWORD1
-       bdz     L(tail)
-       and.    rTMP,rTMP,rNEG
-       cmpw    cr1,rWORD1,rWORD2
-       beq     L(g0)
-
-/* OK. We've hit the end of the string. We need to be careful that
-   we don't compare two strings as different because of gunk beyond
-   the end of the strings...  */
-#ifdef __LITTLE_ENDIAN__
-L(endstring):
-       slwi    rTMP, rTMP, 1
-       addi    rTMP2, rTMP, -1
-       andc    rTMP2, rTMP2, rTMP
-       and     rWORD2, rWORD2, rTMP2           /* Mask off gunk.  */
-       and     rWORD1, rWORD1, rTMP2
-       rlwinm  rTMP2, rWORD2, 8, 0xffffffff    /* Byte reverse word.  */
-       rlwinm  rTMP, rWORD1, 8, 0xffffffff
-       rldimi  rTMP2, rWORD2, 24, 32
-       rldimi  rTMP, rWORD1, 24, 32
-       rlwimi  rTMP2, rWORD2, 24, 16, 23
-       rlwimi  rTMP, rWORD1, 24, 16, 23
-       xor.    rBITDIF, rTMP, rTMP2
-       sub     rRTN, rTMP, rTMP2
-       bgelr
-       ori     rRTN, rTMP2, 1
-       blr
-
-L(different):
-       lwz     rWORD1, -4(rSTR1)
-       rlwinm  rTMP2, rWORD2, 8, 0xffffffff    /* Byte reverse word.  */
-       rlwinm  rTMP, rWORD1, 8, 0xffffffff
-       rldimi  rTMP2, rWORD2, 24, 32
-       rldimi  rTMP, rWORD1, 24, 32
-       rlwimi  rTMP2, rWORD2, 24, 16, 23
-       rlwimi  rTMP, rWORD1, 24, 16, 23
-       xor.    rBITDIF, rTMP, rTMP2
-       sub     rRTN, rTMP, rTMP2
-       bgelr
-       ori     rRTN, rTMP2, 1
-       blr
-
-#else
-L(endstring):
-       and     rTMP,r7F7F,rWORD1
-       beq     cr1,L(equal)
-       add     rTMP,rTMP,r7F7F
-       xor.    rBITDIF,rWORD1,rWORD2
-       andc    rNEG,rNEG,rTMP
-       blt     L(highbit)
-       cntlzw  rBITDIF,rBITDIF
-       cntlzw  rNEG,rNEG
-       addi    rNEG,rNEG,7
-       cmpw    cr1,rNEG,rBITDIF
-       sub     rRTN,rWORD1,rWORD2
-       bgelr   cr1
-L(equal):
-       li      rRTN,0
-       blr
-
-L(different):
-       lwz     rWORD1,-4(rSTR1)
-       xor.    rBITDIF,rWORD1,rWORD2
-       sub     rRTN,rWORD1,rWORD2
-       bgelr
-L(highbit):
-       ori     rRTN, rWORD2, 1
-       blr
-#endif
-
-/* Oh well. In this case, we just do a byte-by-byte comparison.  */
-       .align  4
-L(tail):
-       and.    rTMP,rTMP,rNEG
-       cmpw    cr1,rWORD1,rWORD2
-       bne     L(endstring)
-       addi    rSTR1,rSTR1,4
-       bne     cr1,L(different)
-       addi    rSTR2,rSTR2,4
-       cmplwi  cr1,rN,0
-L(unaligned):
-       mtctr   rN
-       ble     cr1,L(ux)
-L(uz):
-       lbz     rWORD1,0(rSTR1)
-       lbz     rWORD2,0(rSTR2)
-       .align  4
-L(u1):
-       cmpwi   cr1,rWORD1,0
-       bdz     L(u4)
-       cmpw    rWORD1,rWORD2
-       beq     cr1,L(u4)
-       bne     L(u4)
-       lbzu    rWORD3,1(rSTR1)
-       lbzu    rWORD4,1(rSTR2)
-       cmpwi   cr1,rWORD3,0
-       bdz     L(u3)
-       cmpw    rWORD3,rWORD4
-       beq     cr1,L(u3)
-       bne     L(u3)
-       lbzu    rWORD1,1(rSTR1)
-       lbzu    rWORD2,1(rSTR2)
-       cmpwi   cr1,rWORD1,0
-       bdz     L(u4)
-       cmpw    rWORD1,rWORD2
-       beq     cr1,L(u4)
-       bne     L(u4)
-       lbzu    rWORD3,1(rSTR1)
-       lbzu    rWORD4,1(rSTR2)
-       cmpwi   cr1,rWORD3,0
-       bdz     L(u3)
-       cmpw    rWORD3,rWORD4
-       beq     cr1,L(u3)
-       bne     L(u3)
-       lbzu    rWORD1,1(rSTR1)
-       lbzu    rWORD2,1(rSTR2)
-       b       L(u1)
-
-L(u3):  sub    rRTN,rWORD3,rWORD4
-       blr
-L(u4): sub     rRTN,rWORD1,rWORD2
-       blr
-L(ux):
-       li      rRTN,0
-       blr
-END (strncmp)
-libc_hidden_builtin_def (strncmp)
diff --git a/sysdeps/powerpc/powerpc32/strncmp.S b/sysdeps/powerpc/powerpc32/strncmp.S
deleted file mode 100644 (file)
index 28cae4d..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Optimized strcmp implementation for PowerPC32.
-   Copyright (C) 2003-2023 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-/* See strlen.s for comments on how the end-of-string testing works.  */
-
-/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5])  */
-
-EALIGN (strncmp, 4, 0)
-
-#define rTMP2  r0
-#define rRTN   r3
-#define rSTR1  r3      /* first string arg */
-#define rSTR2  r4      /* second string arg */
-#define rN     r5      /* max string length */
-#define rWORD1 r6      /* current word in s1 */
-#define rWORD2 r7      /* current word in s2 */
-#define rFEFE  r8      /* constant 0xfefefeff (-0x01010101) */
-#define r7F7F  r9      /* constant 0x7f7f7f7f */
-#define rNEG   r10     /* ~(word in s1 | 0x7f7f7f7f) */
-#define rBITDIF        r11     /* bits that differ in s1 & s2 words */
-#define rTMP   r12
-
-       dcbt    0,rSTR1
-       or      rTMP, rSTR2, rSTR1
-       lis     r7F7F, 0x7f7f
-       dcbt    0,rSTR2
-       clrlwi. rTMP, rTMP, 30
-       cmplwi  cr1, rN, 0
-       lis     rFEFE, -0x101
-       bne     L(unaligned)
-/* We are word aligned so set up for two loops.  first a word
-   loop, then fall into the byte loop if any residual.  */
-       srwi.   rTMP, rN, 2
-       clrlwi  rN, rN, 30
-       addi    rFEFE, rFEFE, -0x101
-       addi    r7F7F, r7F7F, 0x7f7f
-       cmplwi  cr1, rN, 0
-       beq     L(unaligned)
-
-       mtctr   rTMP    /* Power4 wants mtctr 1st in dispatch group.  */
-       lwz     rWORD1, 0(rSTR1)
-       lwz     rWORD2, 0(rSTR2)
-       b       L(g1)
-
-L(g0):
-       lwzu    rWORD1, 4(rSTR1)
-       bne-    cr1, L(different)
-       lwzu    rWORD2, 4(rSTR2)
-L(g1): add     rTMP, rFEFE, rWORD1
-       nor     rNEG, r7F7F, rWORD1
-       bdz     L(tail)
-       and.    rTMP, rTMP, rNEG
-       cmpw    cr1, rWORD1, rWORD2
-       beq+    L(g0)
-
-/* OK. We've hit the end of the string. We need to be careful that
-   we don't compare two strings as different because of gunk beyond
-   the end of the strings...  */
-
-#ifdef __LITTLE_ENDIAN__
-L(endstring):
-       slwi    rTMP, rTMP, 1
-       addi    rTMP2, rTMP, -1
-       andc    rTMP2, rTMP2, rTMP
-       and     rWORD2, rWORD2, rTMP2           /* Mask off gunk.  */
-       and     rWORD1, rWORD1, rTMP2
-       rlwinm  rTMP2, rWORD2, 8, 0xffffffff    /* Byte reverse word.  */
-       rlwinm  rTMP, rWORD1, 8, 0xffffffff
-       rlwimi  rTMP2, rWORD2, 24, 0, 7
-       rlwimi  rTMP, rWORD1, 24, 0, 7
-       rlwimi  rTMP2, rWORD2, 24, 16, 23
-       rlwimi  rTMP, rWORD1, 24, 16, 23
-       xor.    rBITDIF, rTMP, rTMP2
-       sub     rRTN, rTMP, rTMP2
-       bgelr+
-       ori     rRTN, rTMP2, 1
-       blr
-
-L(different):
-       lwz     rWORD1, -4(rSTR1)
-       rlwinm  rTMP2, rWORD2, 8, 0xffffffff    /* Byte reverse word.  */
-       rlwinm  rTMP, rWORD1, 8, 0xffffffff
-       rlwimi  rTMP2, rWORD2, 24, 0, 7
-       rlwimi  rTMP, rWORD1, 24, 0, 7
-       rlwimi  rTMP2, rWORD2, 24, 16, 23
-       rlwimi  rTMP, rWORD1, 24, 16, 23
-       xor.    rBITDIF, rTMP, rTMP2
-       sub     rRTN, rTMP, rTMP2
-       bgelr+
-       ori     rRTN, rTMP2, 1
-       blr
-
-#else
-L(endstring):
-       and     rTMP, r7F7F, rWORD1
-       beq     cr1, L(equal)
-       add     rTMP, rTMP, r7F7F
-       xor.    rBITDIF, rWORD1, rWORD2
-       andc    rNEG, rNEG, rTMP
-       blt-    L(highbit)
-       cntlzw  rBITDIF, rBITDIF
-       cntlzw  rNEG, rNEG
-       addi    rNEG, rNEG, 7
-       cmpw    cr1, rNEG, rBITDIF
-       sub     rRTN, rWORD1, rWORD2
-       bgelr+  cr1
-L(equal):
-       li      rRTN, 0
-       blr
-
-L(different):
-       lwz     rWORD1, -4(rSTR1)
-       xor.    rBITDIF, rWORD1, rWORD2
-       sub     rRTN, rWORD1, rWORD2
-       bgelr+
-L(highbit):
-       ori     rRTN, rWORD2, 1
-       blr
-#endif
-
-/* Oh well.  In this case, we just do a byte-by-byte comparison.  */
-       .align 4
-L(tail):
-       and.    rTMP, rTMP, rNEG
-       cmpw    cr1, rWORD1, rWORD2
-       bne-    L(endstring)
-       addi    rSTR1, rSTR1, 4
-       bne-    cr1, L(different)
-       addi    rSTR2, rSTR2, 4
-       cmplwi  cr1, rN, 0
-L(unaligned):
-       mtctr   rN      /* Power4 wants mtctr 1st in dispatch group */
-       bgt     cr1, L(uz)
-L(ux):
-       li      rRTN, 0
-       blr
-       .align 4
-L(uz):
-       lbz     rWORD1, 0(rSTR1)
-       lbz     rWORD2, 0(rSTR2)
-       nop
-       b       L(u1)
-L(u0):
-       lbzu    rWORD2, 1(rSTR2)
-L(u1):
-       bdz     L(u3)
-       cmpwi   cr1, rWORD1, 0
-       cmpw    rWORD1, rWORD2
-       beq-    cr1, L(u3)
-       lbzu    rWORD1, 1(rSTR1)
-       bne-    L(u2)
-       lbzu    rWORD2, 1(rSTR2)
-       bdz     L(u3)
-       cmpwi   cr1, rWORD1, 0
-       cmpw    rWORD1, rWORD2
-       bne-    L(u3)
-       lbzu    rWORD1, 1(rSTR1)
-       bne+    cr1, L(u0)
-
-L(u2): lbzu    rWORD1, -1(rSTR1)
-L(u3): sub     rRTN, rWORD1, rWORD2
-       blr
-END (strncmp)
-libc_hidden_builtin_def (strncmp)