[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