diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-03-31 22:56:24 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-03-31 22:56:24 +0000 |
commit | 5929563ff20245bbaa1b3ca2f4bfcee623ac6fb5 (patch) | |
tree | 15b1ff0a40462018402078788148c0c99d188429 /sysdeps/i386/strchr.S | |
parent | 3075e0e37c0e7cc2e6eb518c409e0769d058ed4b (diff) | |
download | glibc-5929563ff20245bbaa1b3ca2f4bfcee623ac6fb5.tar.gz glibc-5929563ff20245bbaa1b3ca2f4bfcee623ac6fb5.tar.xz glibc-5929563ff20245bbaa1b3ca2f4bfcee623ac6fb5.zip |
Update. cvs/libc-ud-970331
1997-04-01 00:37 Ulrich Drepper <drepper@cygnus.com> * math/Makefile: Prevent inlining for test-{float,double,longdouble}. * math/libm-test.c (initialize): Make strings unique and force values to memory. * posix/regex.c: Debug debugging code. * sysdeps/i386/asm-syntax.h: Define `L' macro to emit correct syntax for local label. * sysdeps/i386/add_n.S: Use correct local label syntax for the binary format. * sysdeps/i386/addmul_1.S: Likewise. * sysdeps/i386/lshift.S: Likewise. * sysdeps/i386/memchr.S: Likewise. * sysdeps/i386/memset.S: Likewise. * sysdeps/i386/mul_1.S: Likewise. * sysdeps/i386/rshift.S: Likewise. * sysdeps/i386/stpcpy.S: Likewise. * sysdeps/i386/stpncpy.S: Likewise. * sysdeps/i386/strchr.S: Likewise. * sysdeps/i386/strcspn.S: Likewise. * sysdeps/i386/strlen.S: Likewise. * sysdeps/i386/strpbrk.S: Likewise. * sysdeps/i386/strrchr.S: Likewise. * sysdeps/i386/strspn.S: Likewise. * sysdeps/i386/strtok.S: Likewise. * sysdeps/i386/sub_n.S: Likewise. * sysdeps/i386/submul_1.S: Likewise. * sysdeps/i386/i486/strcat.S: Likewise. * sysdeps/i386/i486/strlen.S: Likewise. * sysdeps/i386/i586/add_n.S: Likewise. * sysdeps/i386/i586/addmul_1.S: Likewise. * sysdeps/i386/i586/lshift.S: Likewise. * sysdeps/i386/i586/memset.S: Likewise. * sysdeps/i386/i586/mul_1.S: Likewise. * sysdeps/i386/i586/rshift.S: Likewise. * sysdeps/i386/i586/strchr.S: Likewise. * sysdeps/i386/i586/strlen.S: Likewise. * sysdeps/i386/i586/sub_n.S: Likewise. * sysdeps/i386/i586/submul_1.S: Likewise. * sysdeps/stub/s_log2l.c: Correct function name. * time/africa: Updated from ADO tzdata1997e. * time/aantarctica: Likewise. * time/asia: Likewise. * time/australia: Likewise. * time/europe: Likewise. * time/northamerica: Likewise. * time/southamerica: Likewise. * time/private.h: Updated from ADO tzcode1997d. * time/scheck.c: Likewise. 1997-03-31 12:42 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/powerpc/Dist: Add kernel_*.h files. 1997-03-23 01:41 Geoff Keating <geoffk@ozemail.com.au> * sysdeps/powerpc/strlen.s: Rewrote for more speed. * string/tst-strlen.c: Also test various string alignments. 1997-03-19 06:11 Geoff Keating <geoffk@ozemail.com.au> * sysdeps/unix/sysv/linux/powerpc/statbuf.h: Removed. * sysdeps/unix/sysv/linux/powerpc/kernel_stat.h: Added. * sysdeps/powerpc/dl-machine.h (ELF_PREFERRED_ADDRESS): Assume program base address is 0x01800000 if we can't otherwise tell what it is. (elf_machine_rela): Replace `assertion failed' with real error messages. * sysdeps/powerpc/dl-machine.h: More comments, more GNU indenting. Put in extra parentheses to make explicit the relative precedence of + and >>. * sysdeps/powerpc/bsd-setjmp.S: Add `__setjmp' symbol so the tests pass. * sysdeps/powerpc/clone.S: Rewrite. Probably still doesn't work. * sysdeps/unix/sysv/linux/powerpc/sys/sysdep.h: Use .section "text" instead of .text. 1997-03-31 02:28 Ulrich Drepper <drepper@cygnus.com> * misc/tst-tsearch.c: Don't write to stderr, write to stdout instead. * inet/inet_ntoa.c (inet_ntoa): Complete rewrite. Now uses thread-specific memory in multi-threaded programs. * sysdeps/stub/s_exp2.c: New file. Stub version for exp2 function. * sysdeps/stub/s_exp2f.c: New file. * sysdeps/stub/s_exp2l.c: New file. Reported by a sun <asun@zoology.washington.edu>. * sysdeps/unix/sysv/linux/netatalk/atalk.h: Rename to... * sysdeps/unix/sysv/linux/netatalk/at.h: ...this. Suggested by a sun <asun@zoology.washington.edu>. 1997-03-30 14:53 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/netinet/ip_icmp.h: Add former contents of <netinet/icmp.h>. Patch by a sun <asun@zoology.washington.edu>. * sysdeps/powerpc/strlen.S: Added.
Diffstat (limited to 'sysdeps/i386/strchr.S')
-rw-r--r-- | sysdeps/i386/strchr.S | 82 |
1 files changed, 41 insertions, 41 deletions
diff --git a/sysdeps/i386/strchr.S b/sysdeps/i386/strchr.S index e4e5c55572..7bcd73cfe3 100644 --- a/sysdeps/i386/strchr.S +++ b/sysdeps/i386/strchr.S @@ -1,6 +1,6 @@ /* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. For Intel 80x86, x>=3. - Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu> Some optimisations by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au> @@ -57,34 +57,34 @@ ENTRY (strchr) boundaries are multiples of 4. */ testb $3, %eax /* correctly aligned ? */ - jz L11 /* yes => begin loop */ + jz L(11) /* yes => begin loop */ movb (%eax), %cl /* load byte in question (we need it twice) */ cmpb %cl, %dl /* compare byte */ - je L6 /* target found => return */ + je L(6) /* target found => return */ testb %cl, %cl /* is NUL? */ - jz L2 /* yes => return NULL */ + jz L(2) /* yes => return NULL */ incl %eax /* increment pointer */ testb $3, %eax /* correctly aligned ? */ - jz L11 /* yes => begin loop */ + jz L(11) /* yes => begin loop */ movb (%eax), %cl /* load byte in question (we need it twice) */ cmpb %cl, %dl /* compare byte */ - je L6 /* target found => return */ + je L(6) /* target found => return */ testb %cl, %cl /* is NUL? */ - jz L2 /* yes => return NULL */ + jz L(2) /* yes => return NULL */ incl %eax /* increment pointer */ testb $3, %eax /* correctly aligned ? */ - jz L11 /* yes => begin loop */ + jz L(11) /* yes => begin loop */ movb (%eax), %cl /* load byte in question (we need it twice) */ cmpb %cl, %dl /* compare byte */ - je L6 /* target found => return */ + je L(6) /* target found => return */ testb %cl, %cl /* is NUL? */ - jz L2 /* yes => return NULL */ + jz L(2) /* yes => return NULL */ incl %eax /* increment pointer */ /* No we have reached alignment. */ - jmp L11 /* begin loop */ + jmp L(11) /* begin loop */ /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to change any of the hole bits of LONGWORD. @@ -116,9 +116,9 @@ ENTRY (strchr) ALIGN(4) -L1: addl $16, %eax /* adjust pointer for whole round */ +L(1): addl $16, %eax /* adjust pointer for whole round */ -L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ +L(11): movl (%eax), %ecx /* get word (= 4 bytes) in question */ xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c are now 0 */ movl $0xfefefeff, %edi /* magic value */ @@ -132,7 +132,7 @@ L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ representation with more than 32 bits) not alter then last overflow, we can now test this condition. If no carry is signaled no overflow must have occurred in the last byte => it was 0. */ - jnc L7 + jnc L(7) /* We are only interested in carry bits that change due to the previous add, so remove original bits */ @@ -144,7 +144,7 @@ L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ the addition will not result in 0. */ /* If at least one byte of the word is C we don't get 0 in %edi. */ - jnz L7 /* found it => return pointer */ + jnz L(7) /* found it => return pointer */ /* Now we made sure the dword does not contain the character we are looking for. But because we deal with strings we have to check @@ -155,12 +155,12 @@ L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* 0 */ - jnc L2 /* highest byte is NUL => return NULL */ + jnc L(2) /* highest byte is NUL => return NULL */ xorl %ecx, %edi /* (word+magic)^word */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jnz L2 /* found NUL => return NULL */ + jnz L(2) /* found NUL => return NULL */ movl 4(%eax), %ecx /* get word (= 4 bytes) in question */ xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c @@ -169,23 +169,23 @@ L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* C */ - jnc L71 /* highest byte is C => return pointer */ + jnc L(71) /* highest byte is C => return pointer */ xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jnz L71 /* found it => return pointer */ + jnz L(71) /* found it => return pointer */ xorl %edx, %ecx /* restore original dword without reload */ movl $0xfefefeff, %edi /* magic value */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* 0 */ - jnc L2 /* highest byte is NUL => return NULL */ + jnc L(2) /* highest byte is NUL => return NULL */ xorl %ecx, %edi /* (word+magic)^word */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jnz L2 /* found NUL => return NULL */ + jnz L(2) /* found NUL => return NULL */ movl 8(%eax), %ecx /* get word (= 4 bytes) in question */ xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c @@ -194,23 +194,23 @@ L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* C */ - jnc L72 /* highest byte is C => return pointer */ + jnc L(72) /* highest byte is C => return pointer */ xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jnz L72 /* found it => return pointer */ + jnz L(72) /* found it => return pointer */ xorl %edx, %ecx /* restore original dword without reload */ movl $0xfefefeff, %edi /* magic value */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* 0 */ - jnc L2 /* highest byte is NUL => return NULL */ + jnc L(2) /* highest byte is NUL => return NULL */ xorl %ecx, %edi /* (word+magic)^word */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jnz L2 /* found NUL => return NULL */ + jnz L(2) /* found NUL => return NULL */ movl 12(%eax), %ecx /* get word (= 4 bytes) in question */ xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c @@ -219,59 +219,59 @@ L11: movl (%eax), %ecx /* get word (= 4 bytes) in question */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* C */ - jnc L73 /* highest byte is C => return pointer */ + jnc L(73) /* highest byte is C => return pointer */ xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jnz L73 /* found it => return pointer */ + jnz L(73) /* found it => return pointer */ xorl %edx, %ecx /* restore original dword without reload */ movl $0xfefefeff, %edi /* magic value */ addl %ecx, %edi /* add the magic value to the word. We get carry bits reported for each byte which is *not* 0 */ - jnc L2 /* highest byte is NUL => return NULL */ + jnc L(2) /* highest byte is NUL => return NULL */ xorl %ecx, %edi /* (word+magic)^word */ orl $0xfefefeff, %edi /* set all non-carry bits */ incl %edi /* add 1: if one carry bit was *not* set the addition will not result in 0. */ - jz L1 /* no NUL found => restart loop */ + jz L(1) /* no NUL found => restart loop */ -L2: /* Return NULL. */ +L(2): /* Return NULL. */ xorl %eax, %eax /* load NULL in return value register */ popl %edi /* restore saved register content */ ret -L73: addl $4, %eax /* adjust pointer */ -L72: addl $4, %eax -L71: addl $4, %eax +L(73): addl $4, %eax /* adjust pointer */ +L(72): addl $4, %eax +L(71): addl $4, %eax /* We now scan for the byte in which the character was matched. But we have to take care of the case that a NUL char is found before this in the dword. */ -L7: testb %cl, %cl /* is first byte C? */ - jz L6 /* yes => return pointer */ +L(7): testb %cl, %cl /* is first byte C? */ + jz L(6) /* yes => return pointer */ cmpb %dl, %cl /* is first byte NUL? */ - je L2 /* yes => return NULL */ + je L(2) /* yes => return NULL */ incl %eax /* it's not in the first byte */ testb %ch, %ch /* is second byte C? */ - jz L6 /* yes => return pointer */ + jz L(6) /* yes => return pointer */ cmpb %dl, %ch /* is second byte NUL? */ - je L2 /* yes => return NULL? */ + je L(2) /* yes => return NULL? */ incl %eax /* it's not in the second byte */ shrl $16, %ecx /* make upper byte accessible */ testb %cl, %cl /* is third byte C? */ - jz L6 /* yes => return pointer */ + jz L(6) /* yes => return pointer */ cmpb %dl, %cl /* is third byte NUL? */ - je L2 /* yes => return NULL */ + je L(2) /* yes => return NULL */ /* It must be in the fourth byte and it cannot be NUL. */ incl %eax -L6: popl %edi /* restore saved register content */ +L(6): popl %edi /* restore saved register content */ ret END (strchr) |