[PATCH 01/10] Add vectorized getenv for glibc use

Andi Kleen andi@firstfloor.org
Fri May 17 15:48:00 GMT 2013


On Fri, May 17, 2013 at 09:37:51AM +0200, Ondřej Bílka wrote:
> On Thu, May 16, 2013 at 07:12:46PM -0700, Andi Kleen wrote:
> > From: Andi Kleen <ak@linux.intel.com>
> > 
> > This adds a general "vectorized getenv" for glibc internal use.
> > The motivation is to allow subsystems to access environment variables
> > cheaply without having to rescan the environment completely.
> > 
> 
> > +      if (__builtin_expect ((*current)[0] == 'G', 0)
> > +	  && (*current)[1] == 'L' && (*current)[2] == 'I'
> > +	  && (*current)[3] == 'B' && (*current)[4] == 'C'
> > +	  && (*current)[5] == '_')
> This pattern repeats few times. A memcmp(current,"GLIBC",5) is shorter.

Just copied this from the dynamic linker.

Don't really care about "short" just that the first character 
comparison is fast. In principle this could be all vectorized
too at least on x86 to compare 32 or 64bits, but I was slightly
worried about overrunning the end.

If you want to fix it I think it should be a indepdendent followup all over
the tree. Most likely it would be a candidate for coccinelle script.

So I'll just leave it as is for now.

-Andi



More information about the Libc-alpha mailing list