[PATCH 4/4] [Powerpc] tune/optimize memmove/wordcopy. Call memcpy when appropriate.

Will Schmidt will_schmidt@vnet.ibm.com
Tue Apr 3 18:10:00 GMT 2012


On Thu, 2012-03-22 at 16:22 +0100, Segher Boessenkool wrote:
> > @@ -51,6 +51,10 @@ MEMMOVE (a1, a2, len)
> >    unsigned long int dstp = (long int) dest;
> >    unsigned long int srcp = (long int) src;
> >
> > +  /* If there is no overlap between ranges, call the builtin  
> > memcpy.  */
> > +  if ( (dstp > (srcp + len)) || (srcp > (dstp + len)) )
> > +    return __builtin_memcpy (dest, src, len);
> 
> You can use >= instead of > here.

Updated, Thanks,

> > +
> >    /* This test makes the forward copying code be used whenever  
> > possible.
> >       Reduces the working set.  */
> >    if (dstp - srcp >= len)	/* *Unsigned* compare!  */
> 
> This test is then simply "dstp < srcp", might be more readable.

Agreed, but unfortunately that doesn't work.  I tried this, plus a few
variations, and in the end the unsigned delta and compare against length
suggests that the _bwd functions only get called if there is overlap,
rather than for all actual 'backwards' copies as suggested by the
function names.  Changing the if statement causes glibc to throw "double
free or corruption" errors during make check, so thats a no-go.

Thanks, 
-Will

> 
> 
> Segher
> 




More information about the Libc-alpha mailing list