[PATCH] ARM: get rid of __memzero()

Arnd Bergmann arnd at arndb.de
Fri Jan 19 04:55:10 PST 2018


On Fri, Jan 19, 2018 at 4:53 AM, Nicolas Pitre <nicolas.pitre at linaro.org> wrote:
> The __memzero assembly code is almost identical to memset's except for
> two orr instructions. The runtime performance of __memset(p, n) and
> memset(p, 0, n) is accordingly almost identical.
>
> However, the memset() macro used to guard against a zero length and to
> call __memzero at compile time when the fill value is a constant zero
> interferes with compiler optimizations.
>
> Arnd found tha the test against a zero length brings up some new
> warnings with gcc v8:
>
>   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82103
>
> And successively rremoving the test against a zero length and the call
> to __memzero optimization produces the following kernel sizes for
> defconfig with gcc 6:
>
>     text     data     bss       dec       hex  filename
> 12248142  6278960  413588  18940690   1210312  vmlinux.orig
> 12244474  6278960  413588  18937022   120f4be  vmlinux.no_zero_test
> 12239160  6278960  413588  18931708   120dffc  vmlinux.no_memzero
>
> So it is probably not worth keeping __memzero around given that the
> compiler can do a better job at inlining trivial memset(p,0,n) on its
> own. And the memset code already handles a zero length just fine.
>
> Suggested-by: Arnd Bergmann <arnd at arndb.de>
> Signed-off-by: Nicolas Pitre <nico at linaro.org>

Acked-by: Arnd Bergmann <arnd at arndb.de>



More information about the linux-arm-kernel mailing list