This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Looking at the i386/strchr.S file I noticed: L(7): testb %cl, %cl /* is first byte C? */ jz L(6) /* yes => return pointer */ cmpb %dl, %cl /* is first byte NUL? */ je L(2) /* yes => return NULL */ incl %eax /* it's not in the first byte */ This looks broken to me, IMO it should be: L(7): testb %cl, %cl /* is first byte NUL? */ jz L(2) /* yes => return NULL */ cmpb %dl, %cl /* is first byte C? */ je L(6) /* yes => return pointer */ incl %eax /* it's not in the first byte */ I'm appending an (untested) patch. Ok to commit for both branches? The i586 version looks fine, Andreas 2002-08-10 Andreas Jaeger <aj@suse.de> * sysdeps/i386/strchr.S: Correct implementation. ============================================================ Index: sysdeps/i386/strchr.S --- sysdeps/i386/strchr.S 6 Jul 2001 04:55:52 -0000 1.11 +++ sysdeps/i386/strchr.S 10 Aug 2002 16:52:38 -0000 @@ -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, 1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2002 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> @@ -256,23 +256,23 @@ L(71): addl $4, %eax But we have to take care of the case that a NUL char is found before this in the dword. */ -L(7): testb %cl, %cl /* is first byte C? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %cl /* is first byte NUL? */ +L(7): testb %cl, %cl /* is first byte NUL? */ je L(2) /* yes => return NULL */ + cmpb %dl, %cl /* is first byte C? */ + jz L(6) /* yes => return pointer */ incl %eax /* it's not in the first byte */ - testb %ch, %ch /* is second byte C? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %ch /* is second byte NUL? */ + testb %ch, %ch /* is second byte NUL? */ je L(2) /* yes => return NULL? */ + cmpb %dl, %ch /* is second byte C? */ + jz L(6) /* yes => return pointer */ incl %eax /* it's not in the second byte */ shrl $16, %ecx /* make upper byte accessible */ - testb %cl, %cl /* is third byte C? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %cl /* is third byte NUL? */ + testb %cl, %cl /* is third byte NUL? */ je L(2) /* yes => return NULL */ + cmpb %dl, %cl /* is third byte C? */ + jz L(6) /* yes => return pointer */ /* It must be in the fourth byte and it cannot be NUL. */ incl %eax -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |