diff options
author | Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> | 2023-02-28 14:23:58 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2023-03-02 16:41:43 -0300 |
commit | a46bb1523d2f39ba252f95b1fff738f1dff82132 (patch) | |
tree | 4a297a9c55a416ef8cfbcb71b88905781ced097c /sysdeps/powerpc/powerpc32/power7 | |
parent | dee2bea048b688b643a9a3b44b26ca9f7a706fe8 (diff) | |
download | glibc-a46bb1523d2f39ba252f95b1fff738f1dff82132.tar.gz glibc-a46bb1523d2f39ba252f95b1fff738f1dff82132.tar.xz glibc-a46bb1523d2f39ba252f95b1fff738f1dff82132.zip |
powerpc: Remove strncmp variants
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>
Diffstat (limited to 'sysdeps/powerpc/powerpc32/power7')
-rw-r--r-- | sysdeps/powerpc/powerpc32/power7/strncmp.S | 199 |
1 files changed, 0 insertions, 199 deletions
diff --git a/sysdeps/powerpc/powerpc32/power7/strncmp.S b/sysdeps/powerpc/powerpc32/power7/strncmp.S deleted file mode 100644 index bbaab6ca0e..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strncmp.S +++ /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) |