summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWin Treese <treese@acm.org>2006-04-27 00:00:04 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2006-05-01 12:03:44 -0700
commita5ddce5373218e73fbd58c20a96edd730048529d (patch)
treea1a16325dcdf976592bbd75c2f879990897c21d5
parent2d3b5e296167443bf42c1c962a0cb7ebde9b016b (diff)
downloadkernel-common-a5ddce5373218e73fbd58c20a96edd730048529d.tar.gz
kernel-common-a5ddce5373218e73fbd58c20a96edd730048529d.tar.bz2
kernel-common-a5ddce5373218e73fbd58c20a96edd730048529d.zip
[PATCH] MIPS: Fix branch emulation for floating-point exceptions.
In the branch emulation for floating-point exceptions, __compute_return_epc must determine for bc1f et al which condition code bit to test. This is based on bits <4:2> of the rt field. The switch statement to distinguish bc1f et al needs to use only the two low bits of rt, but the old code tests on the whole rt field. This patch masks off the proper bits. Signed-off-by: Win Treese <treese@acm.org> Signed-off-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--arch/mips/kernel/branch.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/mips/kernel/branch.c b/arch/mips/kernel/branch.c
index 374de839558d..b6232d9033cb 100644
--- a/arch/mips/kernel/branch.c
+++ b/arch/mips/kernel/branch.c
@@ -184,7 +184,7 @@ int __compute_return_epc(struct pt_regs *regs)
bit = (insn.i_format.rt >> 2);
bit += (bit != 0);
bit += 23;
- switch (insn.i_format.rt) {
+ switch (insn.i_format.rt & 3) {
case 0: /* bc1f */
case 2: /* bc1fl */
if (~fcr31 & (1 << bit))