linux/arch/mips
Shane McDonald 95e8f634d7 MIPS FPU emulator: allow Cause bits of FCSR to be writeable by ctc1
In the FPU emulator code of the MIPS, the Cause bits of the FCSR register
    are not currently writeable by the ctc1 instruction.  In odd corner cases,
    this can cause problems.  For example, a case existed where a divide-by-zero
    exception was generated by the FPU, and the signal handler attempted to
    restore the FPU registers to their state before the exception occurred.  In
    this particular setup, writing the old value to the FCSR register would
    cause another divide-by-zero exception to occur immediately.  The solution
    is to change the ctc1 instruction emulator code to allow the Cause bits of
    the FCSR register to be writeable.  This is the behaviour of the hardware
    that the code is emulating.
    
    This problem was found by Shane McDonald, but the credit for the fix goes
    to Kevin Kissell.  In Kevin's words:
    
    I submit that the bug is indeed in that ctc_op:  case of the emulator.  The
    Cause bits (17:12) are supposed to be writable by that instruction, but the
    CTC1 emulation won't let them be updated by the instruction.  I think that
    actually if you just completely removed lines 387-388 [...] things would
    work a good deal better.  At least, it would be a more accurate emulation of
    the architecturally defined FPU.  If I wanted to be really, really pedantic
    (which I sometimes do), I'd also protect the reserved bits that aren't
    necessarily writable.
    
    Signed-off-by: Shane McDonald <mcdonald.shane@gmail.com>
    To: anemo@mba.ocn.ne.jp
    To: kevink@paralogos.com
    To: sshtylyov@mvista.com
    Patchwork: http://patchwork.linux-mips.org/patch/1205/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

---
2010-05-15 21:59:53 +01:00
..
alchemy MIPS: DB1200: PCMCIA card detection must not be auto-enabled. 2010-04-30 20:52:43 +01:00
ar7 MIPS: AR7: Fix phat finger of cpmac fixed_phy_add 2010-04-12 17:26:13 +01:00
bcm47xx MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
bcm63xx MIPS: BCM63xx: Fix build failure in board_bcm963xx.c 2010-04-12 17:26:20 +01:00
boot MIPS: Make the debugging of compressed kernel configurable 2010-02-27 12:53:24 +01:00
cavium-octeon MIPS: Octeon: Remove redundant declaration of octeon_reserve32_memory 2010-04-12 17:26:10 +01:00
cobalt MIPS: Cobalt: Fix theoretical port aliasing issue 2010-02-27 12:53:43 +01:00
configs MIPS: BCM63xx: Update defconfig 2010-04-30 20:52:55 +01:00
dec MIPS: DEC: Convert KN01 lock to raw spinlock. 2010-02-27 12:53:36 +01:00
emma MIPS: Remove useless zero initializations. 2009-09-17 20:07:51 +02:00
fw MIPS: IP22: Remove an unused function 2009-12-17 01:56:56 +00:00
gt64120/wrppmc Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
include/asm MIPS FPU emulator: allow Cause bits of FCSR to be writeable by ctc1 2010-05-15 21:59:53 +01:00
jazz MIPS: Fixup screen_info struct initializations 2010-04-30 20:52:42 +01:00
kernel MIPS: Use CKSEG1ADDR for uncached handler 2010-04-30 20:52:48 +01:00
lasat MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
lib MIPS: libgcc.h: Checkpatch cleanup 2010-04-12 17:26:15 +01:00
loongson MIPS: Loongson 2F: Fix of problems introduced by -mfix-loongson2f-jump 2010-04-30 20:52:58 +01:00
math-emu MIPS FPU emulator: allow Cause bits of FCSR to be writeable by ctc1 2010-05-15 21:59:53 +01:00
mipssim include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
mm MIPS: Check for accesses beyond the end of the PGD. 2010-04-30 20:52:48 +01:00
mti-malta include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
nxp MIPS: PNX8550: Fix build error, broken by: 2010-04-30 20:52:39 +01:00
oprofile MIPS: Loongson: Remove pointless sample_lock from oprofile code. 2010-02-27 12:53:39 +01:00
pci MIPS: SB1250: Include correct header and fix a warning 2010-04-30 20:52:43 +01:00
pmc-sierra include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
power MIPS: Loongson: Change the Email address of Wu Zhangjin 2010-02-27 12:53:12 +01:00
powertv include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rb532 include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sgi-ip22 MIPS: die() does not call die notifier chain 2010-04-30 20:52:45 +01:00
sgi-ip27 include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sgi-ip32 include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sibyte MIPS: Fixup screen_info struct initializations 2010-04-30 20:52:42 +01:00
sni MIPS: SNI: Convert sni_rm200_i8259A_lock to raw spinlock. 2010-02-27 12:53:39 +01:00
txx9 include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
vr41xx MIPS: VR41xx: Use strlcat() for the command line arguments 2010-01-12 18:19:30 +01:00
Kconfig MIPS: Loongson: Add CPU_LOONGSON2F_WORKAROUNDS 2010-04-30 20:52:56 +01:00
Kconfig.debug MIPS: Crazy spinlock speed test. 2010-02-27 12:53:42 +01:00
Makefile MIPS: Loongson 2F: Enable fixups of the latest binutils 2010-04-30 20:52:56 +01:00