Fri May 3 03:14:02 1996 Ulrich Drepper <drepper@cygnus.com>
authorroland <roland>
Fri, 3 May 1996 17:43:58 +0000 (17:43 +0000)
committerroland <roland>
Fri, 3 May 1996 17:43:58 +0000 (17:43 +0000)
* sysdeps/i386/i586/strlen.S: Fix bug with highest byte in word
        being zero.

sysdeps/i386/i586/strlen.S

index b807ed4..15d0194 100644 (file)
@@ -1,6 +1,6 @@
 /* strlen -- Compute length og NUL terminated string.
 Highly optimized version for ix86, x>=5.
-Copyright (C) 1995 Free Software Foundation, Inc.
+Copyright (C) 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
 
@@ -102,7 +102,6 @@ L1:
        jnc L3                  /* previous addl caused overflow? */
 
        xorl %ecx, %edx         /* (word+magic)^word */
-       subl $magic, %ecx       /* undo previous addl to restore word */
 
        andl $~magic, %edx      /* any of the carry flags set? */
 
@@ -119,7 +118,6 @@ L1:
        jnc L3                  /* previous addl caused overflow? */
 
        xorl %ecx, %edx         /* (word+magic)^word */
-       subl $magic, %ecx       /* undo previous addl to restore word */
 
        andl $~magic, %edx      /* any of the carry flags set? */
 
@@ -136,7 +134,6 @@ L1:
        jnc L3                  /* previous addl caused overflow? */
 
        xorl %ecx, %edx         /* (word+magic)^word */
-       subl $magic, %ecx       /* undo previous addl to restore word */
 
        andl $~magic, %edx      /* any of the carry flags set? */
 
@@ -149,11 +146,10 @@ L1:
        subl %ecx, %edx         /* first step to negate word */
        addl $magic, %ecx       /* add magic word */
 
-       decl %edx               /* wcomplete negation of ord */
+       decl %edx               /* complete negation of word */
        jnc L3                  /* previous addl caused overflow? */
 
        xorl %ecx, %edx         /* (word+magic)^word */
-       subl $magic, %ecx       /* undo previous addl to restore word */
 
        andl $~magic, %edx      /* any of the carry flags set? */
 
@@ -161,8 +157,9 @@ L1:
 
 
 L3:    subl $4, %eax           /* correct too early pointer increment */
-       testb %cl, %cl          /* lowest byte NUL? */
+       subl $magic, %ecx
 
+       cmpb $0, %cl            /* lowest byte NUL? */
        jz L2                   /* yes => return */
 
        inc %eax                /* increment pointer */