• Paul Burton's avatar
    MIPS: Provide unroll() macro, use it for cache ops · 6baaeada
    Paul Burton authored
    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: default avatarPaul Burton <paul.burton@mips.com>
    Cc: linux-mips@vger.kernel.org
    6baaeada
r4kcache.h 12.3 KB