• James Hogan's avatar
    MIPS: Add inline asm encoding helpers · 0dfa1c12
    James Hogan authored
    To allow simplification of macros which use inline assembly to
    explicitly encode instructions, add a few simple abstractions to
    mipsregs.h which expand to specific microMIPS or normal MIPS encodings
    depending on what type of kernel is being built:
    
    _ASM_INSN_IF_MIPS(_enc) : Emit a 32bit MIPS instruction if microMIPS is
                              not enabled.
    _ASM_INSN32_IF_MM(_enc) : Emit a 32bit microMIPS instruction if enabled.
    _ASM_INSN16_IF_MM(_enc) : Emit a 16bit microMIPS instruction if enabled.
    
    The macros can be used one after another since the MIPS / microMIPS
    macros are mutually exclusive, for example:
    
    __asm__ __volatile__(
            ".set push\n\t"
            ".set noat\n\t"
            "# mfgc0 $1, $%1, %2\n\t"
            _ASM_INSN_IF_MIPS(0x40610000 | %1 << 11 | %2)
            _ASM_INSN32_IF_MM(0x002004fc | %1 << 16 | %2 << 11)
            "move %0, $1\n\t"
            ".set pop"
            : "=r" (__res)
            : "i" (source), "i" (sel));
    Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/13310/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    0dfa1c12
mipsregs.h 84.1 KB