MIPS: Use ARCH_USE_BUILTIN_BSWAP.
authorRalf Baechle <ralf@linux-mips.org>
Tue, 29 Sep 2015 10:19:48 +0000 (12:19 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 26 Oct 2015 08:49:43 +0000 (09:49 +0100)
commit1ee3630a3e57f38f688a6f0a5f9edbd8a0d7201f
tree3326b59ffb2650bff622642700981bf5541a1b04
parentd478b088a2f74fc8f34af7ceed86fa7640ca8610
MIPS: Use ARCH_USE_BUILTIN_BSWAP.

ARCH_USE_BUILTIN_BSWAP will use __builtin_bswap16(), __builtin_bswap32()
and __builtin_bswap64() where available.  This allows better instruction
scheduling.  On pre-R2 processors it will result in 32 bit and 64 bit
swapping being performed in a call to a __bswapsi2() rsp. __bswapdi2()
functions, so we add these, too.

For a 4.2 kernel with GCC 4.9 this yields the following kernel sizes:

   text    data     bss     dec     hex filename
3996071  155804   88992 4240867  40b5e3 vmlinux         ip22 baseline
3985687  159900   88992 4234579  409d53 vmlinux         ip22 + bswap patch
6913157  378552  251024 7542733  7317cd vmlinux         ip27 baseline
6878581  378552  251024 7508157  7290bd vmlinux         ip27 + bswap patch
5773777  268752  187424 6229953  5f0fc1 vmlinux         malta baseline
5773401  268752  187424 6229577  5f0e49 vmlinux         malta + bswap patch

Presumably the code size improvments yield better cache hit rate thus
better performance compensating for the extra function call but this
will still need to be benchmarked.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/Kconfig
arch/mips/lib/Makefile
arch/mips/lib/bswapdi.c [new file with mode: 0644]
arch/mips/lib/bswapsi.c [new file with mode: 0644]