• Maciej W. Rozycki's avatar
    MIPS: traps.c: Don't emulate RDHWR in the CpU #0 exception handler · 10f6d99f
    Maciej W. Rozycki authored
    In the regular MIPS instruction set RDHWR is encoded with the SPECIAL3
    (011111) major opcode.  Therefore it cannot trigger the CpU (Coprocessor
    Unusable) exception, and certainly not for coprocessor 0, as the opcode
    does not overlap with any of the older ISA reservations, i.e. LWC0
    (110000), SWC0 (111000), LDC0 (110100) or SDC0 (111100).  The closest
    match might be SDC3 (111111), possibly causing a CpU #3 exception,
    however our code does not handle it anyway.  A quick check with a MIPS I
    and a MIPS III processor:
    
    CPU0 revision is: 00000220 (R3000)
    CPU0 revision is: 00000440 (R4400SC)
    
    indeed indicates that the RI (Reserved Instruction) exception is
    triggered.  It's only LL and SC that require emulation in the CpU #0
    exception handler as they reuse the LWC0 and SWC0 opcodes respectively.
    
    In the microMIPS instruction set RDHWR is mandatory and triggering the
    RI exception is required on unimplemented or disabled register accesses.
    Therefore emulating the microMIPS instruction in the CpU #0 exception
    handler is not required either.
    Signed-off-by: default avatarMaciej W. Rozycki <macro@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/12280/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    10f6d99f
traps.c 57.7 KB