MIPS: Provide unroll() macro, use it for cache ops
authorPaul Burton <paul.burton@mips.com>
Tue, 8 Oct 2019 18:22:00 +0000 (18:22 +0000)
committerPaul Burton <paul.burton@mips.com>
Wed, 9 Oct 2019 19:47:56 +0000 (12:47 -0700)
commit6baaeadae911ba9cedfead881f3bf305a18fd011
treec840078b52ea16af8e3bf7ddb46831cdc49dad33
parenta14bf1dc494aa5126e4f23ebd9fa04991133814e
MIPS: Provide unroll() macro, use it for cache ops

Currently we have a lot of duplication in asm/r4kcache.h to handle
manually unrolling loops of cache ops for various line sizes, and we
have to explicitly handle the difference in cache op immediate width
between MIPSr6 & earlier ISA revisions with further duplication.

Introduce an unroll() macro in asm/unroll.h which expands to a switch
statement which is used to call a function or expand a preprocessor
macro a compile-time constant number of times in a row - effectively
explicitly unrolling a loop. We make use of this here to remove the
cache op duplication & will use it further in later patches.

A nice side effect of this is that calculating the cache op offset
immediate is now the compiler's responsibility, so we're no longer
sensitive to the width change of that immediate in MIPSr6 & will be
similarly agnostic to immediate width in any future supported ISA.

Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: linux-mips@vger.kernel.org
arch/mips/include/asm/r4kcache.h
arch/mips/include/asm/unroll.h [new file with mode: 0644]
arch/mips/mm/c-r4k.c