• James Hogan's avatar
    MIPS: Add helpers for assembler macro instructions · fc62f53b
    James Hogan authored
    Implement a parse_r assembler macro in asm/mipsregs.h to parse a
    register in $n form, and a few C macros for defining assembler macro
    instructions. These can be used to more transparently support older
    binutils versions which don't support for example the msa, virt, xpa, or
    crc instructions.
    
    In particular they overcome the difficulty of turning a register name in
    $n form into an instruction encoding suitable for giving to .word /
    .hword, which is particularly problematic when needed from inline
    assembly where the compiler is responsible for register allocation.
    Traditionally this had required the use of $at and an extra MOV
    instruction, but for CRC instructions with multiple GP register operands
    that approach becomes more difficult.
    
    Three assembler macro creation helpers are added:
    
     - _ASM_MACRO_0(OP, ENC)
       This is to define an assembler macro for an instruction which has no
       operands, for example the VZ TLBGR instruction.
    
     - _ASM_MACRO_2R(OP, R1, R2, ENC)
       This is to define an assembler macro for an instruction which has 2
       register operands, for example the CFCMSA instruction.
    
     - _ASM_MACRO_3R(OP, R1, R2, R3, ENC)
       This is to define an assembler macro for an instruction which has 3
       register operands, for example the crc32 instructions.
    
     - _ASM_MACRO_2R_1S(OP, R1, R2, SEL3, ENC)
       This is to define an assembler macro for a Cop0 move instruction,
       with 2 register operands and an optional register select operand
       which defaults to 0, for example the VZ MFGC0 instruction.
    Suggested-by: default avatarRalf Baechle <ralf@linux-mips.org>
    Signed-off-by: default avatarJames Hogan <jhogan@kernel.org>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Marcin Nowakowski <marcin.nowakowski@mips.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17770/
    fc62f53b
mipsregs.h 91.4 KB