[PATCH 2/3] Optimize strchrnul with unrolling, better header and unaligned loads

Joseph Myers joseph@codesourcery.com
Thu May 28 17:45:00 GMT 2015


On Tue, 26 May 2015, Ondøej Bílka wrote:

> +static always_inline
> +int
> +found_in_long_bytes(char *s, unsigned long int cmask, char **result)
> +{
> +  const unsigned long int *lptr = (const unsigned long int *) s;
> +  unsigned long int mask = contains_zero (*lptr) | contains_zero (*lptr ^ cmask);
> +  if (mask)
> +    {
> +      *result = s + ffsl (mask) / 8 - 1;

If this gets used in strchr, note ffsl is in the user's namespace.  Are 
you sure this will always be inlined by all supported GCC versions on all 
supported architectures (or converted to a call to a libgcc __clz* 
function, which is just as good in namespace terms)?

-- 
Joseph S. Myers
joseph@codesourcery.com


More information about the Libc-alpha mailing list