Skip to content

Instantly share code, notes, and snippets.

@sunnyone
Created October 31, 2011 16:34
Show Gist options
  • Save sunnyone/1327914 to your computer and use it in GitHub Desktop.
Save sunnyone/1327914 to your computer and use it in GitHub Desktop.
string.h of eglibc
/* Return the length of S. */
#define _HAVE_STRING_ARCH_strlen 1
#define strlen(str) \
(__extension__ (__builtin_constant_p (str) \
? __builtin_strlen (str) \
: __strlen_g (str)))
__STRING_INLINE size_t __strlen_g (__const char *__str);
__STRING_INLINE size_t
__strlen_g (__const char *__str)
{
register char __dummy;
register __const char *__tmp = __str;
__asm__ __volatile__
("1:\n\t"
"movb (%0),%b1\n\t"
"leal 1(%0),%0\n\t"
"testb %b1,%b1\n\t"
"jne 1b"
: "=r" (__tmp), "=&q" (__dummy)
: "0" (__str),
"m" ( *(struct { char __x[0xfffffff]; } *)__str)
: "cc" );
return __tmp - __str - 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment