[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