public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] string: Replace outdated comments in strlen().
@ 2022-04-09 16:45 Noah Goldstein
  0 siblings, 0 replies; only message in thread
From: Noah Goldstein @ 2022-04-09 16:45 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c0efbf8920844b940b85ea340ea2eaee70da2fc0

commit c0efbf8920844b940b85ea340ea2eaee70da2fc0
Author: Ricardo Bittencourt <bluepenguin@gmail.com>
Date:   Sat Mar 19 22:04:42 2022 -0300

    string: Replace outdated comments in strlen().
    
    Copyright The GNU Toolchain Authors.
    
    The comments on strlen() don't match what the actual code does. They
    describe an older algorithm which is no longer in use. This change
    replace the old comments with new ones describing the algorithm used.
    
    I am a first time contributor, and I believe there is no need for
    copyright assignment, since the file changed is not in the shared
    source files list.
    
    This patch only changes comments, but for safety I have run the tests in
    my x64 ubuntu machine, with the following results:
    
    Summary of test results:
       5051 PASS
         80 UNSUPPORTED
         16 XFAIL
          6 XPASS
    
    Signed-off-by: Ricardo Bittencourt <bluepenguin@gmail.com>

Diff:
---
 string/strlen.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/string/strlen.c b/string/strlen.c
index 0b8aefb812..54f3fb8167 100644
--- a/string/strlen.c
+++ b/string/strlen.c
@@ -46,15 +46,10 @@ STRLEN (const char *str)
 
   longword_ptr = (unsigned long int *) char_ptr;
 
-  /* Bits 31, 24, 16, and 8 of this number are zero.  Call these bits
-     the "holes."  Note that there is a hole just to the left of
-     each byte, with an extra at the end:
-
-     bits:  01111110 11111110 11111110 11111111
-     bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
-
-     The 1-bits make sure that carries propagate to the next 0-bit.
-     The 0-bits provide holes for carries to fall into.  */
+  /* Computing (longword - lomagic) sets the high bit of any corresponding
+     byte that is either zero or greater than 0x80.  The latter case can be
+     filtered out by computing (~longword & himagic).  The final result
+     will always be non-zero if one of the bytes of longword is zero.  */
   himagic = 0x80808080L;
   lomagic = 0x01010101L;
   if (sizeof (longword) > 4)
@@ -76,8 +71,7 @@ STRLEN (const char *str)
 
       if (((longword - lomagic) & ~longword & himagic) != 0)
 	{
-	  /* Which of the bytes was the zero?  If none of them were, it was
-	     a misfire; continue the search.  */
+	  /* Which of the bytes was the zero?  */
 
 	  const char *cp = (const char *) (longword_ptr - 1);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-09 16:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-09 16:45 [glibc] string: Replace outdated comments in strlen() Noah Goldstein

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).