diff options
Diffstat (limited to 'sysdeps/sparc/sparc32/strcmp.S')
-rw-r--r-- | sysdeps/sparc/sparc32/strcmp.S | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/sysdeps/sparc/sparc32/strcmp.S b/sysdeps/sparc/sparc32/strcmp.S deleted file mode 100644 index 18e3700dd2..0000000000 --- a/sysdeps/sparc/sparc32/strcmp.S +++ /dev/null @@ -1,259 +0,0 @@ -/* Compare two strings for differences. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jj@ultra.linux.cz>. - - 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 - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x01010101) & (~xword) & 0x80808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 4 - -ENTRY(strcmp) - andcc %o0, 3, %g0 - be 13f - sethi %hi(0x80808080), %g1 - - ldub [%o0], %o4 - add %o0, 1, %o0 - ldub [%o1], %o5 - cmp %o4, 0 - add %o1, 1, %o1 - be 2f - subcc %o4, %o5, %o4 - bne 2f - andcc %o0, 3, %g0 - be 4f - or %g1, %lo(0x80808080), %o3 - ldub [%o0], %o4 - add %o0, 1, %o0 - ldub [%o1], %o5 - cmp %o4, 0 - add %o1, 1, %o1 - be 2f - subcc %o4, %o5, %o4 - bne 2f - andcc %o0, 3, %g0 - be 5f - sethi %hi(0x01010101), %g1 - ldub [%o0], %o4 - add %o0, 1, %o0 - ldub [%o1], %o5 - cmp %o4, 0 - add %o1, 1, %o1 - be 2f - subcc %o4, %o5, %o4 - bne 2f - andcc %o1, 3, %g2 - bne 12f - or %g1, %lo(0x01010101), %o2 - b 1f - ld [%o0], %o4 -2: retl - mov %o4, %o0 - -13: or %g1, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %g1 -5: andcc %o1, 3, %g2 - bne 12f - or %g1, %lo(0x01010101), %o2 - -0: ld [%o0], %o4 -1: ld [%o1], %o5 - sub %o4, %o2, %g1 - add %o0, 4, %o0 - cmp %o4, %o5 -#ifdef EIGHTBIT_NOT_RARE - andn %g1, %o4, %g1 -#endif - bne 11f - andcc %g1, %o3, %g0 - be 0b - add %o1, 4, %o1 - - srl %o4, 24, %g4 - andcc %g4, 0xff, %g0 - be 2f - srl %o4, 16, %g4 - andcc %g4, 0xff, %g0 - be 2f - srl %o4, 8, %g4 - andcc %g4, 0xff, %g0 - be 2f - andcc %o4, 0xff, %g0 - bne,a 1b - ld [%o0], %o4 -2: retl - clr %o0 - -11: srl %o4, 24, %g4 - srl %o5, 24, %g5 - andcc %g4, 0xff, %g0 - be 3f - subcc %g4, %g5, %g4 - bne 3f - srl %o5, 16, %g5 - srl %o4, 16, %g4 - andcc %g4, 0xff, %g0 - be 3f - subcc %g4, %g5, %g4 - bne 3f - srl %o5, 8, %g5 - srl %o4, 8, %g4 - andcc %g4, 0xff, %g0 - be 3f - subcc %g4, %g5, %g4 - bne 3f - subcc %o4, %o5, %o4 - retl - mov %o4, %o0 -3: retl - mov %g4, %o0 - -12: save %sp, -64, %sp - ld [%i0], %i4 - sll %g2, 3, %g3 - andn %i1, 3, %i1 - mov 32, %l1 - ld [%i1], %l2 - mov -1, %g6 - add %i1, 4, %i1 - sub %l1, %g3, %l1 - sll %g6, %g3, %g6 - -1: sll %l2, %g3, %g5 - and %i4, %g6, %l3 - sub %i4, %i2, %g1 -#ifdef EIGHTBIT_NOT_RARE - andn %g1, %i4, %g1 -#endif - andcc %g1, %i3, %g1 - bne 3f - cmp %g5, %l3 - bne 2f - add %i0, 4, %i0 - ld [%i1], %l2 - add %i1, 4, %i1 - srl %l2, %l1, %l4 - or %l4, %g5, %l4 - cmp %l4, %i4 - be,a 1b - ld [%i0], %i4 - restore %l4, %g0, %o3 - retl - sub %o4, %o3, %o0 - -2: sll %l2, %g3, %i2 - srl %i4, %g3, %i3 - srl %i2, %g3, %i2 - restore - retl - sub %o3, %o2, %o0 - -3: srl %i4, 24, %g4 - srl %g5, 24, %l6 - andcc %g4, 0xff, %g0 - be 4f - subcc %g4, %l6, %g4 - bne 4f - cmp %g2, 3 - be 6f - srl %i4, 16, %g4 - srl %g5, 16, %l6 - andcc %g4, 0xff, %g0 - be 4f - subcc %g4, %l6, %g4 - bne 4f - cmp %g2, 2 - be 5f - srl %i4, 8, %g4 - srl %g5, 8, %l6 - andcc %g4, 0xff, %g0 - be 4f - subcc %g4, %l6, %g4 - bne 4f - add %i0, 4, %i0 - ld [%i1], %l2 - add %i1, 4, %i1 - srl %l2, 24, %g5 - andcc %i4, 0xff, %g4 - be 4f - subcc %g4, %g5, %g4 - be,a 1b - ld [%i0], %i4 -4: jmpl %i7 + 8, %g0 - restore %g4, %g0, %o0 - -5: ld [%i1], %l2 - add %i1, 4, %i1 - add %i0, 4, %i0 - srl %l2, 24, %l6 - andcc %g4, 0xff, %g4 - be 4b - subcc %g4, %l6, %g4 - bne 4b - srl %l2, 16, %l6 - andcc %i4, 0xff, %g4 - and %l6, 0xff, %l6 - be 4b - subcc %g4, %l6, %g4 - be,a 1b - ld [%i0], %i4 - jmpl %i7 + 8, %g0 - restore %g4, %g0, %o0 - -6: ld [%i1], %l2 - add %i1, 4, %i1 - add %i0, 4, %i0 - srl %l2, 24, %l6 - andcc %g4, 0xff, %g4 - be 4b - subcc %g4, %l6, %g4 - bne 4b - srl %l2, 16, %l6 - srl %i4, 8, %g4 - and %l6, 0xff, %l6 - andcc %g4, 0xff, %g4 - be 4b - subcc %g4, %l6, %g4 - bne 4b - srl %l2, 8, %l6 - andcc %i4, 0xff, %g4 - and %l6, 0xff, %l6 - be 4b - subcc %g4, %l6, %g4 - be,a 1b - ld [%i0], %i4 - jmpl %i7 + 8, %g0 - restore %g4, %g0, %o0 -END(strcmp) -libc_hidden_builtin_def (strcmp) |