• Nicolas Pitre's avatar
    ARM: 8745/1: get rid of __memzero() · ff5fdafc
    Nicolas Pitre authored
    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: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
    Acked-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    ff5fdafc
string.c 1.95 KB