• M
    MIPS: Handle COP3 Unusable exception as COP1X for FP emulation · 051ff44a
    Maciej W. Rozycki 提交于
     Our FP emulator is hardcoded for the MIPS IV FP instruction set and does
    not match the FP ISA with the general ISA.  However for the few MIPS IV FP
    instructions that use the COP1X major opcode it relies on the Coprocessor
    Unusable exception to be delivered as a COP1 rather than COP3 exception.
    This includes indexed transfer (LDXC1, etc.) and FP multiply-accumulate
    (MADD.D, etc.) instructions.
    
     All the MIPS I, II, III and IV processors and some newer chips that do not
    implement the FPU use the COP3 exception however.  Therefore I believe the
    kernel should follow and redirect any COP3 Unusable traps to the emulator
    unless an actual FPU part or core is present.
    
     This is a change that implements it.  Any minor opcode encodings that are
    not recognised as valid FP instructions are rejected by the emulator and
    will result in a SIGILL signal being delivered as they currently do.  We
    do not support vendor-specific coprocessor 3 implementations supported
    with MIPS I and MIPS II ISA processors; we never set CP0.Status.CU3.
    
    [Ralf: On MIPS IV processors the kernel always enables the XX bit which
    replaces the CU3 bit off earlier architecture revisions.]
    
     If matching between the CPU and the FPU ISA is considered required one
    day, this can still be done in the emulator itself.  I think the CpU
    exception dispatcher is not the right place to do this anyway, as there
    are further differences between MIPS I, MIPS II, MIPS III, MIPS IV and
    MIPS32 FP ISAs.
    
     Corresponding explanation of this implementation is included within the
    change itself.
    Signed-off-by: NMaciej W. Rozycki <macro@codesourcery.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/project/linux-mips/list/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
    051ff44a
traps.c 44.7 KB