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>
This commit is contained in:
Ricardo Bittencourt 2022-03-19 22:04:42 -03:00 committed by Noah Goldstein
parent 5325233313
commit c0efbf8920

View File

@ -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);