On 5/28/19 5:04 AM, Tom Rini wrote: > On Tue, May 28, 2019 at 04:44:52AM +0200, Marek Vasut wrote: >> On 5/28/19 4:42 AM, Tom Rini wrote: >>> On Tue, May 28, 2019 at 04:07:44AM +0200, Marek Vasut wrote: >>>> On 5/28/19 4:06 AM, Tom Rini wrote: >>>>> On Tue, May 28, 2019 at 03:49:13AM +0200, Marek Vasut wrote: >>>>> >>>>>> If the source and destination buffer address is identical, there is >>>>>> no need to memcpy() the content. Skip the memcpy() in such a case. >>>>>> >>>>>> Signed-off-by: Marek Vasut <[email protected]> >>>>>> Cc: Michal Simek <[email protected]> >>>>>> Cc: Tom Rini <[email protected]> >>>>> >>>>> Shouldn't memcpy catch that itself? >>>>> >>>> memcpy(3) says >>>> The memcpy() function copies n bytes from memory area src to >>>> memory area dest. The memory areas must not overlap. Use memmove(3) if >>>> the memory areas do overlap. >>> >>> OK, and shouldn't memcpy optimize that case? Does it usually? >> >> As the manpage says "The memory areas must not overlap." , I would >> expect it does not have to ? > > I guess I'm not being clear enough, sorry. Go look at how this is > implemented in a few places please and report back to us. Someone else, > or many someone else, have probably already figured out if optimizing > this case in general, in memcpy, is a good idea or not. Thanks!
If even [1] says the behavior is undefined, then what does it matter whether some implementation added an optimization for such undefined behavior? We cannot depend on it, can we ? [1] https://pubs.opengroup.org/onlinepubs/009695399/functions/memcpy.html -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

